servidores MySQL para um sistema de atendimento

1

Estou construindo um sistema de atendimento. Existem cerca de 20 locais onde as pessoas fazem o check-in e o check-out usando um MIFARE 1K cartão. Ele usará o MySQL como o banco de dados. O sistema exibirá algo como "#ID IN: 800AM" na primeira vez que o usuário fizer check-in e "#ID OUT: 400PM" quando o usuário fizer check-out. Para que isso funcione, todos os bancos de dados precisam estar sincronizados entre si todas as vezes .

Por exemplo, se o usuário A foi para o local nº 1 para fazer o check-in, mas no momento em que o usuário deseja retornar para casa, o servidor no local nº 1 caiu, o usuário precisa ir para o local nº 2 ou o mais próximo servidor para check-out. O servidor na posição 2 deve exibir '#ID OUT: 400PM "e não" #ID IN: 400PM ", já que o usuário já está registrado.

Então, o que devo usar para garantir que essa idéia funcione? Minha principal preocupação é com a rede (outro departamento gerencia), que é muito imprevisível. Apenas adoro descer quando quiser.

Atualizar

LOL, não percebi que minha pergunta não estava clara. Eu só notei quando foi apontado, desculpe por isso.

A minha verdadeira questão é, como posso configurar o meu MySQL para ser sincronizado uns com os outros (20 servidores)? cluster MySQL? (Eu tentei ler sobre isso, mas não tenho certeza se é a coisa certa a fazer.)

Minha configuração atual (primeira fase):

  • Banco de dados local para cada servidor
  • SO: Slackware
  • Um servidor principal que controla qual equipe está em qual servidor
  • Um front-end baseado na web para o usuário ver seu histórico (que se conecta ao servidor com base em seus registros)

Principais Pros

  • Não se preocupe com problemas de rede, pois é um banco de dados local

Principais Contras

  • Um usuário só pode fazer check-in e check-out no mesmo servidor. Bancos de dados e servidores não estão conectados uns aos outros.
  • É preciso adicionar o usuário a cada servidor se os usuários quiserem fazer check-in em locais diferentes. O que significa que, se o usuário quiser ir para o local A, o usuário deve fazer o check out do local A primeiro e depois fazer o check-in no local B. O servidor no local B não sabia que o usuário havia feito check-in no A.

A propósito, já centralizei meu NTP em um servidor local. Sobre a rede, digamos apenas que não tenho autoridade para fazer alterações para que a rede seja melhor . A rede não afetará todos os 20 servidores de uma vez, geralmente, apenas alguns deles por várias vezes por semana.

Se houver mais alguma coisa que você gostaria que eu respondesse, por favor, pergunte.

    
por amree 04.10.2010 / 09:41

2 respostas

1

Acho que você está perguntando: como posso ter bancos de dados multi-mestre com failover automático. Se esta não é a sua pergunta, então, por favor, esclareça. Se esta é a sua pergunta, então continue a ler.

Na verdade, eu escrevi um aplicativo da web para a mesma coisa, exceto que ele não usa cartões Mifare 1K, ele usa cartões simples de código de barras (é chamado LATRIX e está disponível no sourceforge, espero que isso não seja muito conectando aqui).

A questão principal aqui é que, se sua conexão de rede com o computador real executando o frontend ficar inativa, você estará um pouco empacado. É claro que você poderia executar um banco de dados local e implementar algum mecanismo de sincronização de volta a um banco de dados mestre, mas desde que a sincronização não esteja funcionando (devido à ausência de rede), você não tem chance de acertar isso.

Portanto, a primeira coisa a fazer é garantir que você tenha conectividade de rede confiável. Sem isso, você sempre vai lutar. O LATRIX não usa bancos de dados locais ou bancos de dados multi-mestres, ele simplesmente verifica se a conexão de rede com o servidor de banco de dados está funcionando. Caso contrário, o terminal front-end ficará passivo (ou seja, os usuários não poderão fazer check-in), pois não consegui descobrir uma solução adequada para conexões de rede indisponíveis.

    
por 04.10.2010 / 11:55
0

It just love to go down anytime it wants to

Quando algumas pessoas inteligentes projetaram a internet, foi para fornecer um meio de comunicação robusto que continuaria a operar mesmo no caso de uma guerra nuclear total. Embora isso possa representar alguns problemas para os lances de snipe no ebay, muitos dos protocolos de aplicativos históricos ainda são muito eficazes.

Você forneceu muitas informações sobre o que seu sistema deve fazer, mas não fez perguntas específicas. Supondo que você esteja perguntando como manter os relógios sincronizados, a melhor maneira de fazer isso é usar o protocolo de horário de rede (NTP). Observe que quase todo aplicativo lê o relógio do SO para obter a hora (mas isso não é necessariamente a mesma coisa que o relógio HARDWARE). Embora possamos viver em fusos horários diferentes, o tempo está passando na mesma proporção para todo o uso. O link acima fornece uma introdução sobre como funciona. Existem listas de servidores gratuitos disponíveis na internet - ou você pode executar o seu próprio (a maioria dos dispositivos GPS fornece dados de relógio muito precisos).

Você não mencionou o sistema operacional em que está executando tudo isso.

BTW, se você ainda estiver usando sistemas operacionais baseados na Microsoft, poderá definir a hora em outra máquina SMB usando 'net time \ server / set' - mas isso não é tão sofisticado / preciso quanto o NTP.

    
por 04.10.2010 / 10:18

Tags