ねえ!
「ApacheKafkavs RabbitMQ vs NATS」のようなヘッダーをよく見かけますが、既製のソリューションに適さないものがある場合はどうなりますか?調整することも、独自の何かを発明することもできます。私は2番目の方法で行きました。この記事では、メッセージブローカーの実装について説明します。興味のある方は、猫へようこそ。
1.1注文の保存
少し前、私は非常に大きなオンラインストアで働いていました。共通のタスクがありました:注文を「逃さない」こと。つまり、注文を複数の場所に保存できるようにし、そのうちの少なくとも1つが使用可能な場合は、注文を保存します。
1: .
2: , , .
3: ( ).
:( .
, . , .
.
1.2
, " ". , , , , , . , , , .
, .
2.
, , - .
- .
0: - ().
1: (). " " , .
2: , , ().
3: , ().
4: , , ().
*` ` - . , .
.
Kafka - . Kafka - , - .
RabbitMQ - - , . - .
NATS Streaming - . NATS Streaming . NATS Streaming . , PostgreSQL NATS Streaming . , , , . , , NATS Streaming .
.
, .
3. ( )
3.1
Cluster - , .
Queue - . . , . ID .
Handler - . , , , .
ExternalCluster - . . .
3.2
. . . . , .
4 :
,
, ,
. , - .
. , .
3.3
. ( ) (s3) ( ).
. . .
: () , .
. :
" ". " + ID". . , ID . . ( 1000) .
FIFO
. ( , )
3.4
( )
:
N Capella Queue
, , ,
( )
:
Capella Queue M (M < K)
:
+ ID.
M
- , .
, . .
( )
:
,
,
( )
:
イベントはローカルクラスターのキューに保存されます。メッセージのグローバルに一意のリンクソース+外部IDを定義する必要があります。コピーハンドラーのおかげで、メッセージはデバイスとDCの両方で利用できるようになります
4.当面の計画
主なケースを説明するチュートリアルを作成します。
セキュリティをねじ込みます。
サービスによるSSL証明書の使用を強化します。
セグメンテーションの追加-セグメントごとにデータを読み取って転送する機能。
キュー、クラスター、およびハンドラーのパラメーターを更新しています。
メッセージが他のクラスターに複製されることを制御する機能。
メトリック。
コード
オンgithubの