Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Coder101

Distribuição de tarefas usando PHP + MYSQL com algoritmo Round-Robin

Recommended Posts

Boa tarde galera;

 

Gostaria de uma ajuda da galera na soluçao de um problema:

 

1-Possuo determinadas tarefas classificadas por tipo e possuindo uma unica id, populados por informaçoes garimpadas do banco ex:

Tarefa 1 - - tipo A

Tarefa 2 - - tipo B

Tarefa 3 - - tipo A

Tarefa 4 - - tipo A

2-Possuo uma quantidade determinada dinamicamente de usuarios ativos, populados por informaçoes do BD:

usuario 1

usuario 2

3- Disitribuiçõ deve ser feita uniformemente, levando em consideração o tipo da task

4- Deve ser executado de 5 em 5 minutos dentro de um servidor windows rodando php

 

 

Problema:

Quando rodar o algoritmo o mesmo deve pegar a quantidade de novas tarefas no banco e distribuir uniformemente entre os usuarios ativos naquele momento. Vamos supor que na primeira rodada de distribuicao os 2 usuarios que eu citei como exemplo recebam cada um uma tarefa do tipo A, a proxima tarefa do tipo A deve voltar para um dos usuarios, a não ser que se ative um novo usuario. Caso nossas tarefas sejam 2 de mesmo tipo e nossos usuarios sejam um total de 3, um dos usuarios ficara pendente da tarefa do mesmo tipo que a dos outros 2. Considerando o mesmo cenario anterior, quando recebemos uma nova tarefa distinta da que ja foi distribuida anteriormente, a mesma levara em consideraçao qual usuario nao possui determinada tarefa e nao quantas tarefas cada usuario tem. Portanto, como temos 3 usuarios com a tarefa B zerada, podemos escolher qualquer um deles para colocar a tarefa. A questao é, como implementar isto no codigo PHP para fazer este balanceamento de carga

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpe, não entendi sua dúvida.

E isso aí é sobre banco de dados?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpe, não entendi sua dúvida.

E isso aí é sobre banco de dados?

É o seguinte, tenho um sistema que envia forms

Cada form deve ser atribuido a um usuario ativo no sistema para tratamento das informacoes

Como um chamado de help desk

Determinadas tarefas sao mais frequentes que outras, e outras sao mais complexas.

Tenho que balancea-las a fim de tornar eficiente o trabalho de meus usuarios.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na tabela de tarefas, crie um campo, que indica que:

Contendo NULL => tarefa não está atribuída, participará da atribuição a usuários.

Contendo id_usuario => tarefa já atribuída a um usuário.

Acho que não é isso né? Calma, aos poucos chegaremos ao X da questão :blink:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na tabela de tarefas, crie um campo, que indica que:

Contendo NULL => tarefa não está atribuída, participará da atribuição a usuários.

Contendo id_usuario => tarefa já atribuída a um usuário.

Acho que não é isso né? Calma, aos poucos chegaremos ao X da questão :blink:

Faz sentido, discuti com amigos a respeito:

Verificações:

- Devemos estocar as novas tarefas que estao entrando em uma tabela a parte

- Devemos estocar os usuarios ativos em uma tabela para verificarmos quem esta ativo

- Precisamos saber quantas tarefas cada usuario tem

- Precisamos saber quem foi o ultimo a receber a tarefa de determinado tipo

 

Algo mais?

 

Podiamos colocar isso como um desafio pra galera, http://forum.imasters.com.br/public/style_emoticons/default/grin.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim:

Precisamos saber quantas tarefas cada um tem.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim:

Precisamos saber quantas tarefas cada um tem.

Poderiamos usar uma tabela de modo a armazenar um valor dinamico nos dizendo o montante de tarefas atribuidas aquele usuario até o determinado momento da consulta.

 

Problema

-quais os criterios para atualizar esse montante

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.