Na maioria das vezes, as réplicas são implantadas para alta disponibilidade e/ou dimensionamento de leitura. Se o primário falhar, uma das réplicas será promovida a primária. Se houver muitas leituras, e esse é quase sempre o caso, as réplicas são adicionadas para expandir. Idealmente, as gravações são roteadas para o primário e as leituras têm balanceamento de carga nas réplicas. É a maneira mais eficiente de utilizar os recursos disponíveis.
O RDS, o Banco de Dados do Azure e o Cloud SQL fornecem pontos de extremidade individuais para instâncias de banco de dados, um para o primário e outro para cada réplica. Se você quiser balancear a carga de leituras, precisará criar várias conexões (uma para cada réplica) e fazer isso sozinho. Se você deseja executar gravações no primário e leituras nas réplicas (ou seja, divisão de leitura/gravação), você precisa criar uma conexão adicional com o primário e fazer isso sozinho.
Não tem graça. Não é legal.
Com MaxScale, um proxy de banco de dados avançado para MariaDB Enterprise Server, você não precisa se preocupar com isso. O MaxScale executa balanceamento de carga de leitura e divisão de leitura/gravação para você – é o que chamamos de roteamento de consulta transparente. Os desenvolvedores não devem se preocupar com a infraestrutura física (ou seja, topologia de banco de dados). Por que deveriam? Talvez haja uma réplica, talvez haja cinco. Talvez os DBAs tenham adicionado uma réplica ontem à noite, talvez tenham removido duas. Não deveria importar, e os aplicativos não deveriam ter que explicar isso.
Essa é a grande vantagem do MaxScale. Ele abstrai a infraestrutura de banco de dados subjacente e a topologia de implantação. Talvez seja um banco de dados autônomo. Talvez seja um banco de dados replicado. Talvez seja um banco de dados clusterizado. Quem se importa? Principalmente na nuvem.
Então, por que você pode aproveitar o roteamento de consulta transparente no local, mas não na nuvem? Porque RDS, Azure Database e Google Cloud SQL não têm MaxScale. Se ao menos houvesse um DBaaS com MaxScale e roteamento de consulta transparente. Se ao menos pudéssemos voar mais alto com a melhor nuvem MariaDB. Espere, olá SkySQL!
Sim, trouxemos o poder do MaxScale para o SkySQL.
Depois de criar um banco de dados replicado, você recebe um nome de host e duas portas, uma de leitura e outra de leitura/gravação. Você só precisa da porta de leitura/gravação, pois ela também lê o balanceamento de carga. Mas, se você tiver aplicativos somente leitura (por exemplo, BI/relatórios), a porta de leitura pode ser útil. Mole-mole.
Você pode estar se perguntando, Shane acabou de compartilhar o nome do host e a porta de seu banco de dados?
Por que sim, sim eu fiz. Por padrão, os bancos de dados SkySQL não são acessíveis. Você precisa colocar na lista branca os endereços IP (ou intervalos) de quaisquer clientes e servidores de aplicativos que precisem de acesso. E o único endereço IP que coloquei na lista de permissões é o do meu laptop em casa. Boa sorte. 😉
De volta ao tópico em questão, você verá as duas portas:5001 para divisão de leitura/gravação (grava no primário, lê balanceamento de carga entre réplicas) e 5002 para balanceamento de carga somente leitura. Meu banco de dados tem duas réplicas, mas os aplicativos que se conectam a ele não precisam se preocupar com isso. Eu poderia adicionar mais duas réplicas amanhã e nenhuma alteração de aplicativo seria necessária para aproveitá-las. O MaxScale simplesmente e automaticamente começaria a encaminhar as leituras para eles.
E se o primário falhar, não é grande coisa. O MaxScale promoverá automaticamente uma réplica e começará a rotear as gravações nela (e as leituras de balanceamento de carga nas réplicas restantes). Se você já sofreu com o tempo de failover imprevisível do RDS, sabe por quê. O failover do RDS é baseado na propagação de DNS para que você não precise alterar o nome do host do endpoint. É quase transparente, mas leva tempo. Com MaxScale, por outro lado, é imediato – não é necessária propagação de DNS.
Mas, não quero me desviar muito do assunto. Tenho outra coisa em mente planejada para o HA. Fique atento.