Sub-banco de dados e tabela ShardingSphere (1): modelo de arquitetura de alto desempenho

Após a ascensão dos negócios na Internet, com as características de usuários massivos e dados massivos, um único servidor de banco de dados não foi capaz de atender às necessidades de negócios, e clusters de bancos de dados devem ser considerados para melhorar o desempenho. Cluster de banco de dados de alto desempenho 第一种方式是“读写分离”.第二种方式是“数据库分片”

1. Arquitetura de separação leitura-gravação

**Princípio da separação leitura-gravação:** O princípio básico da separação leitura-gravação é dispersar as operações de leitura e gravação do banco de dados em diferentes nós. A seguir está seu diagrama de arquitetura básica:

Insira a descrição da imagem aqui

Implementação básica da separação leitura-gravação:

  • 主库负责处理事务性的增删改操作,从库负责处理查询操作, pode efetivamente evitar bloqueios de linha causados ​​por atualizações de dados, melhorando significativamente o desempenho da consulta de todo o sistema.
  • A separação entre leitura e escrita é 根据 SQL 语义的分析,.将读操作和写操作分别路由至主库与从库
  • Através 一主多从do método de configuração, as solicitações de consulta podem ser distribuídas uniformemente para múltiplas cópias de dados, o que pode melhorar ainda mais a capacidade de processamento do sistema.
  • O método utilizado 多主多从pode não só melhorar o rendimento do sistema, mas também melhorar a disponibilidade do sistema, de forma que mesmo que algum banco de dados fique inativo ou mesmo o disco esteja fisicamente danificado, o funcionamento normal do sistema não será afetado.

A figura a seguir mostra uma solução para rotear operações de gravação e leitura de tabelas de usuários para diferentes bancos de dados com base nas necessidades de negócios:
Insira a descrição da imagem aqui

Teoria PAC:

O teorema CAP, também conhecido como teorema de Brewer, é uma conjectura proposta por Eric Brewer, cientista da computação da Universidade da Califórnia, Berkeley, no ACM PODC em 2000.对于设计分布式系统的架构师来说,CAP 是必须掌握的理论。

Em um deles 分布式系统中, quando se trata de operações de leitura e gravação, apenas dois dos três (Consistência), Disponibilidade (Disponibilidade) e Tolerância de Partição (Tolerância de Partição) podem ser garantidos, e o outro deve ser sacrificado.

  • Consistência C: Para um cliente especificado, é garantido que as operações de leitura retornem os resultados mais recentes da operação de gravação.
  • A Disponibilidade: nós sem falhas retornam respostas razoáveis ​​dentro de um tempo razoável(不是错误和超时的响应)
  • P Tolerância de Partição: Quando ocorre uma partição de rede (可能是丢包,也可能是连接中断,还可能是拥塞), o sistema pode continuar a "executar suas funções"

Recursos do PAC:

  • No processo de design real, cada sistema não pode processar apenas um tipo de dados, mas contém vários tipos de dados.有的数据必须选择 CP,有的数据必须选择 AP,分布式系统理论上不可能选择 CA 架构。

    • CP: Conforme mostrado na figura abaixo, 为了保证一致性quando ocorre uma partição, os dados no nó N1 foram atualizados para y, mas devido à interrupção do canal de replicação entre N1 e N2, os dados y não podem ser sincronizados com N2, e os dados no nó N2 ainda são x . 这时客户端 C 访问 N2 时,N2 需要返回 Error,提示客户端 C“系统现在发生了错误”,Este método de processamento 违背了可用性(Disponibilidade) exige que o CAP possa satisfazer apenas o CP.

    Insira a descrição da imagem aqui

    • AP: Conforme mostrado na figura abaixo, 为了保证可用性quando ocorre uma partição, os dados no nó N1 foram atualizados para y, mas devido à interrupção do canal de replicação entre N1 e N2, os dados y não podem ser sincronizados com N2, e os dados no nó N2 ainda são x . 这时客户端 C 访问 N2 时,N2 将当前自己拥有的数据 x 返回给客户端 C 了, e na verdade os dados mais recentes já são y, que é 不满足一致性o requisito de (Consistência), então os três do CAP só podem satisfazer AP. Nota: O nó N2 aqui retorna x, o que não é um resultado "correto", mas um resultado "razoável", porque x são dados antigos, não um valor desordenado, mas não os dados mais recentes.

Insira a descrição da imagem aqui

  • Na teoria CAP C 在实践中是不可能完美实现的, durante o processo de replicação de dados, os dados do nó N1 e do nó N2 não são consistentes (consistência forte). Mesmo que isto não seja possível 强一致性, a aplicação pode consegui-lo de forma adequada 最终一致性. Possui as seguintes características:

    • Basicamente Disponível: Quando ocorre uma falha em um sistema distribuído, permite-se que a disponibilidade parcial seja perdida, ou seja, a disponibilidade do núcleo é garantida.
    • Soft State: Permite que o sistema exista em um estado intermediário sem afetar a disponibilidade geral do sistema. O estado intermediário aqui é a inconsistência de dados na teoria CAP.
    • 最终一致性(Eventual Consistency):系统中的所有数据副本经过一定时间后,最终能够达到一致的状态。

2. Arquitetura de fragmentação de banco de dados

O problema da separação entre leitura e escrita:

A separação entre leitura e gravação dispersa a pressão das operações de leitura e gravação do banco de dados, mas não dispersa a pressão de armazenamento.Para atender às necessidades de armazenamento de dados de negócios, é necessário 将存储分散到多台数据库服务器上.

Fragmentação de dados:

Distribua os dados armazenados em um único banco de dados em vários bancos de dados ou tabelas para melhorar os gargalos de desempenho e a disponibilidade. Um meio eficaz de fragmentação de dados é realizar bancos de dados relacionais 分库和分表. Os métodos de divisão de fragmentação de dados são divididos em 垂直分片和水平分片.

2.1. Fragmentação vertical

Subbiblioteca vertical:

按照业务拆分的方式称为垂直分片,又称为纵向拆分, seu conceito central é dedicado a bancos de dados especiais. Antes da divisão, um banco de dados consistia em múltiplas tabelas de dados, cada tabela correspondendo a um negócio diferente. Após a divisão, as tabelas são classificadas de acordo com o negócio e distribuídas para diferentes bancos de dados, distribuindo assim a pressão para diferentes bancos de dados.

Insira a descrição da imagem aqui

A figura a seguir mostra a solução de fragmentação vertical da tabela de usuários e da tabela de pedidos em diferentes bancos de dados de acordo com as necessidades do negócio:

Insira a descrição da imagem aqui

A divisão vertical pode aliviar os problemas causados ​​pelo volume e acesso de dados, mas não pode resolvê-los.如果垂直拆分之后,表中的数据量依然超过单节点所能承载的阈值,则需要水平分片来进一步处理。

Mesa vertical:

垂直分表适合将表中某些不常用的列,或者是占了大量空间的列拆分出去。

Suponha que sejamos um site de namoro. Quando os usuários filtram outros usuários, eles usam principalmente os campos de idade e sexo para consultar, enquanto os campos de apelido e descrição são usados ​​principalmente para exibição e geralmente não são usados ​​em consultas comerciais. a descrição em si é relativamente longa, então podemos separar esses dois campos em outra tabela, o que pode trazer certas melhorias de desempenho na consulta de idade e sexo.

A complexidade introduzida pela fragmentação vertical da tabela reflete-se principalmente no aumento do número de operações de tabela. Por exemplo, antes era possível obter nome, idade, sexo, apelido e descrição com apenas uma consulta. Agora são necessárias duas consultas, uma consulta para obter nome, idade e sexo e outra consulta para obter apelido e descrição .
Insira a descrição da imagem aqui

水平分表适合表行数特别大的表,水平分表属于水平分片

2.2. Fragmentação horizontal

水平分片又称为横向拆分。Em comparação com o sharding vertical, ele não classifica mais os dados de acordo com a lógica de negócios, mas os dispersa em várias bibliotecas ou tabelas por meio de um determinado campo (ou alguns campos) e de acordo com certas regras. Cada fragmento contém apenas parte dos dados. Por exemplo: com base na fragmentação de chave primária, os registros com chaves primárias pares são colocados no banco de dados 0 (ou tabela), e os registros com chaves primárias ímpares são colocados no banco de dados 1 (ou tabela), conforme mostrado na figura abaixo.

Insira a descrição da imagem aqui

单表进行切分后,是否将多个表分散在不同的数据库服务器中,可以根据实际的切分效果来确定。

  • **Divisão horizontal de tabelas:** Depois que uma única tabela é dividida em várias tabelas, as novas tabelas podem trazer melhorias consideráveis ​​de desempenho, mesmo se estiverem no mesmo servidor de banco de dados. Se o desempenho puder atender aos requisitos de negócios, não será necessário dividido em várias tabelas.Afinal, um servidor de banco de dados, sub-bancos de dados de negócios também apresentarão muita complexidade;

  • **Subbanco de dados horizontal:** Se uma única tabela for dividida em várias tabelas e um único servidor ainda não conseguir atender aos requisitos de desempenho, várias tabelas precisarão ser dispersas em diferentes servidores de banco de dados.

Manual de desenvolvimento Java do Alibaba:

[Recomendação] Recomenda-se realizar a fragmentação de banco de dados e tabelas somente se o número de linhas em uma única tabela exceder 5 milhões ou a capacidade de uma única tabela exceder 2 GB.

Nota: Se a quantidade de dados esperada em três anos não atingir este nível, 请不要在创建表时就分库分表.

3. Separação de leitura e gravação e arquitetura de fragmentação de dados

A figura a seguir mostra o relacionamento topológico complexo entre o aplicativo e o cluster de banco de dados quando a fragmentação de dados é usada junto com a separação de leitura e gravação.
Insira a descrição da imagem aqui

4. Método de implementação

Geralmente, há duas maneiras específicas de implementar a separação leitura-gravação e a fragmentação de dados: 程序代码封装e 中间件封装.

4.1. Encapsulamento de código de programa

O encapsulamento do código do programa refere-se à abstração de um no código 数据访问层(或中间层封装)para obter a separação das operações de leitura e gravação e o gerenciamento das conexões do servidor de banco de dados.

**A arquitetura básica é: **Tome a separação de leitura e escrita como exemplo
Insira a descrição da imagem aqui

4.2. Encapsulamento de middleware

O encapsulamento de middleware refere-se à 独立一套系统出来separação das operações de leitura e gravação e ao gerenciamento das conexões do servidor de banco de dados. Para o servidor de negócios, não há diferença entre acessar o middleware e acessar o banco de dados. Do ponto de vista do servidor de negócios, o middleware é um servidor de banco de dados.

**A arquitetura básica é: **Tome a separação de leitura e escrita como exemplo

Insira a descrição da imagem aqui

4.3. Soluções comuns

Apache ShardingSphere (nível de programa e nível de middleware)

MyCat (middleware de banco de dados)

Acho que você gosta

Origin blog.csdn.net/weixin_44816664/article/details/132791278
Recomendado
Clasificación