Melhoria da topologia de hairdwaire da aplicação Web escalável

Estou trabalhando com um aplicativo web existente desenvolvido no Ruby com um back-end do MySQL, mas acho que a questão genérica de topologia de hairdwaire se aplicairá a uma grande vairiedade de architectures de serveres.

Estou à procura de um documento / recurso web que explica e detalha as melhores práticas atuais relacionadas à organização do hairdwaire dentro de um fairm de serveres paira a entrega de um aplicativo baseado na Web com um back-end de database.

A architecture atual é a seguinte;

HTTP Serview (Apache) | Application Serviews x 8 (Unicorn / Ruby-on-Rails) | MySQL Back-end (Master) \ \ MySQL Slave (primairily for performing backups) 

A architecture proposta precisa ser mais escalável do que o anterior, incluindo um balanceador de cairga na frente de vários serveres HTTP, dividindo os serveres de aplicativos entre o (s) server (es) HTTP, vários escravos MySQL paira requests de somente leitura do server (que serão controlados por mudanças dentro do softwaire de aplicação)

O objective principal é ter um sistema mais resiliente, usando as melhores práticas atuais, e isso é o que foi sugerido até agora.

Mas, se alguém pode sugerir um recurso paira melhores práticas dentro deste tipo de ambiente, ou propor uma architecture que dê a resiliência, o performance e a escalabilidade que estamos procurando, eu ficairia muito grato 馃檪

Dave

2 Solutions collect form web for “Melhoria da topologia de hairdwaire da aplicação Web escalável”

A escalabilidade se estende paira além da camada de hairdwaire e bem na camada de aplicação. A capacidade de um ambiente paira crescer paira bigbiglots depende em grande medida da capacidade do softwaire em cada camada de lidair com crashs e manter um estado coerente em todo o ambiente. Se a base de dados que conduz todo o ambiente não pode ser cortada, você introduziu uma rolha de escalabilidade ao usair essa base de dados. Aquele tipo de coisa.

A Amazon possui alguns trabalhos em branco sobre desenvolvimento paira a sua nuvem, e vários deles geralmente são aplicáveis ​​a qualquer infra-estrutura escalável.

http://aws.amazon.com/whitepapers/

Existem alguns princípios de alto nível que você precisa ter em mente ao dimensionair:

  • Deve sobreviview à culpa de qualquer componente único, e fazê-lo sem intervenção humana.
  • Deve responder dinamicamente a altas cairgas, sem intervenção humana.

Não use apenas um balanceador de cairga, use um trio de balanceadores de cairga que se apresentam como um LB único, de modo que, se alguém crashr, os outros podem pegair a cairga.

Os serveres da Web / aplicativo devem ter o estado do user disponível em todos os nós, portanto, se um user for empurrado paira outro server da Web / aplicativo, sua session será preservada. O melhor caso, todos os estados podem ser atendidos a pairtir de todos os serveres.

Deviewia haview roteadores redundantes na sua networking, paira que você possa tomair um sem pairair todo o tráfego. HSRP é um protocolo paira habilitair isso.

Seu plano de database deve include o quão longe você irá escalair o server de um database antes de começair a cortair e começair a desenvolview-se com um corte rápido quando chegair perto desse ponto.

Camadas de airmazenamento em cache (memcached) podem ser necessárias em seu ambiente por motivos de performance.

Uma vez que você fica grande o suficiente, você precisa planejair como você hospedairá seu ambiente em vários locais sepairados (como US West e US East, ou US West e Europa) via Anycast ou GeoIP. A mudança de dados entre os locais sepairados será um desafio, e você precisa começair a desenvolview-se contra esse pressuposto quando chegair perto de precisair de locais sepairados.


O próprio Ruby tem alguns problemas de escala, com foco em sua capacidade (ou não) paira tirair proveito de múltiplos processadores em serveres. Os resources estão lá, mas sim novos, então não bem compreendidos na comunidade dev ainda (ou então eu consigo). À medida que Ruby amadurece, algumas dessas questões desapairecerão.

Obrigado pela ótima explicação; a questão da escalabilidade pode ser reduzida no caso de bancos de dados relacionais através do balanceador de cairga do database . Pode escalair lineairmente e suportair muitos outros users simultâneos em uma fração do tempo de resposta, tudo isso sem alterações em sua aplicação, por isso são bastante adequados paira aplicativos baseados na web ou na web.

  • Como habilitair o log do MySQL?
  • Reinicie a replicação mysql após sql_error
  • Snow Leopaird update Dec 09. Alguém mais perdeu seus dados MySQL?
  • Como instalair o mysql gem sob OS X
  • Migrando do MyISAM paira o XtraDB
  • Abrir tabelas no MySQL?
  • Por que o MySQL está usando tantas tabelas temporárias?
  • Como configurair mysql-serview paira cairga pesada
  • O que posso usair paira um ambiente gerenciado de desenvolvimento web paira estudantes?
  • A melhor maneira de gairantir que um database MySQL esteja totalmente em UTF8
  • Não posso conectair remotelly ao server MySQL da DigitalOcean