取り出し口を1台から2台にしただけで、37.1%の順が入れ替わりました。1台なら0.0%です。
ただし、ずれ幅は4件ぶんにとどまります。割合とずれ幅は別々に動きます。
順を保とうとはします。ただし取り出し口を増やせば、その努力とは別に崩れます。
Amazon SQSの標準の並びは、順を保とうとします。公式はそれでも標準の並びは、送られた順を保とうと最善を尽くすと述べています。
保証ではありません。取り出し口を増やすとどこまで崩れるのか、実際に処理させて数えました。
送った順に番号を振った 100,000 件を、取り出し口の数を変えて処理する
処理にかかる時間は 1〜5 の範囲でばらつく。終わった順を並べて、番号が前後した組を数える
取り出し口 入れ替わった件数 割合 いちばん大きなずれ
1台 0件 0.0% 0件ぶん
2台 37,087件 37.1% 4件ぶん
4台 70,372件 70.4% 7件ぶん
8台 88,318件 88.3% 12件ぶん
32台 97,598件 97.6% 39件ぶん
1台なら0.0%です。処理時間がばらついても、順に取り出して順に終わります。
2台にした時点で37.1%になります。台数を増やす判断が、そのまま順を崩す判断になっています。
右端の列を見ると、2台でのずれ幅は4件ぶんしかありません。37.1%が入れ替わっても、数個先までです。
32台でも39件ぶんです。ずれ幅はおおむね台数と同じくらいに収まっています。
つまり「順が崩れる」と言っても、遠くまで飛ぶわけではありません。近くの数件が前後します。
割合は一気に上がるが、ずれ幅は台数なりにしか広がらない。
Despite this, standard queues make a best-effort attempt to maintain the order in which messages are sent.原文AWS ドキュメント「Amazon SQS standard queues」 この内容の有効期限2027-02-18
二重に届く割合は小さくても、件数が増えれば絶対数として現れます。試験では出ません。
Amazon SQSの標準の並びは、1件以上届くことを保証します。公式は標準の並びは少なくとも1回の配送を保証するが、広く分かれた作りのため、同じものが複数回届くことがあり、時折順が入れ替わって届くと述べています。
「複数回届くことがある」がどれくらいの件数になるのか。割合と件数を並べて数えました。
同じものが2回届く割合を変えて、処理した件数ごとに二重処理が何件になるかを数える 二重で届く割合 10,000件 100,000件 1,000,000件 10,000,000件 0.01% 2件 15件 100件 1,200件 0.10% 10件 103件 990件 9,750件 1.00% 96件 1,008件 9,830件 99,900件 5.00% 486件 5,035件 50,050件 515,600件
0.01%は、1万件なら2件です。試験で気づける数ではありません。
同じ割合でも、1000万件になれば1,200件です。割合は変わらないのに、扱いは変わります。
二重配送は、作りの都合で時々起きるものです。試験の件数では、そもそも一度も起きないことがあります。
だから「試したら大丈夫だった」は根拠になりません。件数を増やしたときに初めて出てきます。
この確かめ方の難しさは冪等性の記事でも扱っていて、起きる前提で作るほうが早いという結論は共通しています。
Standard queues ensure at-least-once message delivery, but due to the highly distributed architecture, more than one copy of a message might be delivered, and messages may occasionally arrive out of order.原文AWS ドキュメント「Amazon SQS standard queues」 この内容の有効期限2027-02-18
並びの側では順も回数も直せません。受け取る側に、捨てる仕組みと並べ直す仕組みを置きます。
Amazon SQSは、受け付けた時点で複数の場所に置きます。公式はこの重ね置きにより、1台の計算機・網・区画の故障で取り出せなくなることはないと述べています。
その重ね置きが、順の入れ替わりと二重配送の裏返しでもあります。受け取る側で受け止めます。
1番目は必須です。二重配送は割合の問題で、件数が増えれば必ず出ます。
2番目は前の節のずれ幅が効きます。32台でも39件ぶんなので、その程度の窓で並べ直せます。
3番目が使えるなら、いちばん軽くなります。並べ直しも待ちも要りません。
使えるのは、更新が置き換えの形になっている場合です。足し引きの形だと、Amazon S3の記事で見たように順や回数がそのまま結果に効きます。
2つの計測はいずれも手元で書いた模型で、実際のAmazon SQSを叩いたものではありません。順の入れ替わりは、処理時間が1〜5の範囲でばらつくと置いた上での結果で、この幅を変えれば数値も変わります。二重配送の割合も置いたもので、実際の割合を測ったものではありません。ここで見せているのは、取り出し口を1台から2台にしただけで割合が跳ねる一方でずれ幅は台数なりにしか広がらないという点と、小さな割合でも件数が増えれば絶対数になるという点の2つです。
This redundancy ensures that no single computer, network, or AZ failure can render the messages inaccessible.原文AWS ドキュメント「Amazon SQS standard queues」 この内容の有効期限2027-02-18
同じ課題を持つ会社にとって、動いている設定は「作る時間」を買えるということです。ServiceDockは自作のワークフローやテンプレートを出品できるマーケットプレイスです。手数料や出品の流れは出品者向けページにまとまっています。
出品の仕組みを見る