KamoCRM

リードレジャーを30秒ごとにフォールドし、それらを夜間に再カウントします。 ジョブトリガーはクラスターシークレットを必要とします

FeatureDaemonService
Shipped
2026年9月23日 1:28 UTC
Author
Kamo
Commit
84746ae

リードレジャー(セキュリティサービス create lead ledgers.sql、適用2026-09-22)は、COUNT(*)を上の置換します 796k-leadプールと、維持された総数と、末尾だけのジャーナルでリード クレジットを上回る 書き込むトリガー。 このサービスはそれらを折り畳み、正直に保ちます: - LeadLedgerFoldJob(30秒以上): バッチごとの1つのステートメントはジャーナル行を削除し、それらを追加します 合計なので、読者は、前後の図を見ているので、決して半分。 読者は既にジャーナルをに加えます 全体的には、見逃しのティックコストは時間を読み、決して正しいことではありません。 最多で 40 バッチ 5,000 1 ダニあたり. - LeadLedgerReconcileJob(03:40 夜):各オーガズプールとすべてのメンバーの利用可能なクレジットを交換 行から ONE ステートメントの合計 + ジャーナル ( 1 つのスナップショット) と比較します。 違いはあります 'RECONCILE' デルタとして適用され、合計で書かれていないので、リカウントはトリガーをレースすることはできません。 折りたたむ。 また、欠落または無効になっているジャーナルトリガー名も記載します。 健康なシステムでは、それが見つけます 何もないので、WARNですべての修正が記録されます。 両方とも @DisallowConcurrentExecution であり、40001 の YugabyteDB の aborts のステートメントを再試行します(それぞれはアトミックです)。 そのため、再試行は2倍にすることはできません。 SQL は、この出荷前に YugabyteDB に対して再生されました (temp) 表:トリガー、読み込み、フォールド、リカウント、60チェック)。 JobTriggerController: POST /api/daemon/trigger/{job} と GET /status は誰にも回答しました。 セキュリティ設定 すべての権限を付与し、デーモン・ルート・イングレスルーは、公共のウェブ安全なエントリポイントにこのサービスを置く (ホスト daemon.internal.kamocrm.com; プローブ 200 匿名で), ので、任意のジョブ — 今、再計算を含む — クォーツプールが保持する多くの重複コピーとしてインターネットから始めることができます。 これから X-Internal-Auth = mlos.internal-auth-secret (constant-time) を要求し、その秘密の時に全員を拒否する 未設定です。 プラットフォーム内の何もこのエンドポイントを呼び出しません。 オペレータは、クラスターの内部から、まだできます。 テスト: LeadLedgerMaintenanceTest (折るループおよび帽子、recountの報告、欠落した制動機、retry ルール、およびライブトラフィックの横にある安全なSQL形状)、 JobTriggerControllerAuthTest.

All changes

Like what you see shipping?

All of it arrives in your workspace on its own. Start on the free plan and read this page again in a month.

Start Free ForeverView Pricing