Meu nome é Nikita, sou desenvolvedor de back-end da equipe antifraude do Citimobil. Hoje vou compartilhar com vocês uma história sobre como transferimos nosso serviço de um monólito para um serviço separado, como chegamos a essa decisão e quais problemas encontramos.
Para começar, vou falar um pouco sobre nosso serviço.
Antifraud 101
Nosso antifraude é um conjunto de regras para identificar pedidos contendo sinais de fraude, padrões de fraude.
Exemplo de condução de fraude , , .
:
- / - (, ).
- 1..n .
- : , .
web- — «». web- .
: , , , . .
- .
PHP . , . , .
«» , : , , .
. , , , JOIN- , .
, . « » ( ).
:
. Golang, .
.
:
(, , ). , . .
, .
: 6 , 25 .
:
OLTP- , OLAP- . , «».
:
- SQL ( ) , ClickHouse’ .
- Elastic’.
Elastic. , « » , . , JOIN’ Elastic’.
, , , , MySQL. RabbitMQ, .
RabbitMQ, , . .
, MySQL, , Elastic, . lock Redise, , , . .

REST API.
.
:
- Elastic , , refresh , . , ?
- MySQL ?
.
RabbitMQ ( ), — (retry).
producer, consumer’. dead-letter: TTL , .
, , , retry-, . , .
.
— refresh . Elasticsearch , .
: , . , , . , , .
, , ? , - , . , retry-?
TTL retry- Elastic, .
dead-letter .
: . 100% . testify, mock’ . , .
, . -, .
, , , NDA. .
, , , .