Olá Habr!
Ă€ luz dos eventos atuais, devido ao coronavĂrus, vários serviços da Internet começaram a receber uma carga aumentada. Por exemplo, uma das redes de varejo no Reino Unido simplesmente interrompeu o site com pedidos on-line , pois nĂŁo havia capacidade suficiente. E está longe de ser sempre possĂvel acelerar um servidor simplesmente adicionando equipamentos mais poderosos; no entanto, as solicitações dos clientes devem ser processadas (ou elas serĂŁo direcionadas aos concorrentes).
Neste artigo, falarei brevemente sobre práticas populares que permitirĂŁo que vocĂŞ faça um serviço rápido e tolerante a falhas. No entanto, dentre os possĂveis esquemas de desenvolvimento, selecionei apenas aqueles que agora sĂŁo fáceis de usar . Para cada item, vocĂŞ possui bibliotecas prontas ou pode resolver o problema usando a plataforma em nuvem.
Escala horizontal
O item mais simples e mais conhecido. Por convenção, os mais comuns são dois esquemas de balanceamento de carga - dimensionamento horizontal e vertical. No primeiro caso, você permite que os serviços funcionem paralelamente, distribuindo a carga entre eles. No segundo, você solicita servidores mais poderosos ou otimiza o código.
Por exemplo, utilizarei um armazenamento de arquivo em nuvem abstrato, ou seja, alguns análogos do OwnCloud, OneDrive e assim por diante.
A imagem padrão desse esquema está abaixo, no entanto, apenas demonstra a complexidade do sistema. Afinal, precisamos sincronizar os serviços de alguma forma. O que acontece se um usuário salva um arquivo de um tablet e depois deseja assisti-lo de um telefone?

: , — , .
CQRS
Command Query Responsibility Segregation , , . , ( ) . : . , A, .
— ( ) . - :
- .
- .
- .
, 2 ( , , ). , . CQRS, :
- .
- .
- « ».
- «1».

, . , request-response . , . , (, ), , .
, ( 100%) , , , .
, ( RX ). , , . .
, , . , , .
Event Sourcing
, , . ( ), , . , , — .
— , . , . eventual consistency, , - (« ») .
, , ( , ). - , — .
. eventual consistency, .

:
- .
- .
- ( ).
- "append only". .
- FIFO ( ). , .
, . , , :

, . . : , .
(, , ):

:
- . . , .
- , . , «», . , , .
- , . 1% , (. ), , .
:
- . , , , , ( ). , . , , , ( , — ).
- ( ). — compensation event, . : ( ) git , rollback commit, . , rollback.
- , ( ).
, Event Sourcing CQRS. , , , , , . , . , , «», , « ». , , (, ). « ».
:
- : « » : « » « ». , ( , ).
- - , , , . : request-response, , . , , . : .
Sharding
, event sourcing . - . , :

, . , , , . « » , , , , :
- Event Source ( — ). — id .
- , ( — , , — , ). , , .
- ( ).
- (.. ), .
, , . eventual constistency, , (, , ). , , .
, , :
- , . .
- . , Enterprise ( ). sharding . , (, Azure self hosted).
- — . ( ). — , . , .. , .
Static Content Hosting
, - . : , , , . , ( nginx , , Java-). CDN (Content Delivery Network) , .
— . — , CDN , .
- . ( ), . — , ( ), . — ( , , ) , -. , :
- URL . file_id + key, key — - , .
- nginx :
- : . , , . : IO , . Java , - Rust/C++ . ( ), IO .

( -), . , , , ( ).
( ): Jenkins/TeamCity, , Java. Java-, , . , " / ". : , ( , ), . IO. , , -, . , nginx' ( ).
, :

, . -, . , API .. , , , . ( ), . , , ( ). (- ).
, - . . , . , « », « ». , : , .
. VK Static Content Hosting . - Sharding ( ). Event Sourcing . , , CQRS , . .
, , ( , ). Sharding , , . CQRS - , RX. 10 web . Event Sourcing Apache Kafka. 10 , . Static Content Hosting: - ( , ), .
, , . , , , , , ( ), (, ).
: , , , . , , 100 ( , ..).