WeChat紅包の実施原理に関する推測

阿神
リリース: 2017-02-10 14:31:16
オリジナル
2040 人が閲覧しました

以下の内容は、QCon の高可用性アーキテクチャ グループのチャット記録の背景から取得したものです。友人が WeChat 赤い封筒のアーキテクチャについて相談し、以下のディスカッション内容は公式または非公式のクラスメートの説明とディスカッションから得られたものです。この期間中、複数のクラスメートがライブネットワークアルゴリズムテストのために赤い封筒を送りました。

赤い封筒を掴むプロセス

誰かがグループ内のN人に総額M元の赤い封筒を送ると、バックグラウンドで以下のことが起こります:

1.赤い封筒の送信:

データベースに項目を追加します。 赤い封筒のレコードは CKV に保存され、有効期限が設定されます。

キャッシュにレコードを追加します (おそらくメモリに基づいて、カーネルで実装された Tencent の内部 kv データベースです)。状態ネットワーク処理モジュール、カーネル モジュールの形式でサービスを提供))、およびストア 赤い封筒を掴んだ人の数 N

2. 赤い封筒を掴むバックエンド操作:

赤い封筒を強奪することは、掴むことと破ることに分けられます取得操作はキャッシュ層で完了し、赤いエンベロープの数はアトミック減算操作によって 0 になるまで減分されます。 これは、最終的には、バックグラウンドでの破棄操作の実際の量は多くないことを意味します。操作の分離により、無効なリクエストはキャッシュ層の外側で直接ブロックされます。ここでのアトミックサブトラクション演算は、本当の意味でのアトミックサブトラクション演算ではありませんが、 キャッシュ層によって提供される CAS は、バージョン番号を比較することによって試行を続けます。ある程度の競合がある場合、競合するユーザーは解放され、逆アセンブルの次のステップに進むことができます。これは、一部のユーザーが解体操作を実行した理由も説明します。 開発が完了した様子。

赤い封筒の開封はデータベースのトランザクション操作を通じて完了し、受け取った数と金額が蓄積され、請求が挿入されます。 ​ 水道の流水と記録は非同期操作であるため、春節に赤い封筒を受け取った後、天秤に赤い封筒が表示されない理由もこのためです。分割時に金額は1ポイントから残りの平均金額の2倍までのランダムな数値で計算されます。 M元の赤い封筒、最大の赤い封筒はM * 2です /N (M を超えない)、赤い封筒を開けると、残量と数が更新されます。 Tenpay は 1 秒あたり 200,000 件のトランザクションを準備していますが、実際の量は 1 秒あたり 80,000 件に過ぎません。

FAQ

グラブする際に原子が減るので、グラブ後に原子がバラバラにならない状況があってもいいのではないでしょうか?
ここでのアトミックな減算は、本当の意味でのアトミックな操作ではなく、キャッシュ層によって提供される CAS であり、バージョン番号を比較することで試行を続けます。

キャッシュとデータベースがダウンした場合はどうすればよいですか?
メインバックアップ + 調整

赤い封筒の数はなくなりましたが、残高はまだ残っていますか?
いいえ、プログラムにはすべて取得操作と最後に非同期調整が保証されます。

なぜ奪取と解体を分ける必要があるのでしょうか?

一般的なアイデアは、多層フィルターを設定し、層ごとに濾過し、層ごとに流量と圧力を減らすことです。もともとこの設計は、取得操作がビジネス層であり、分割操作が会計操作であるため、1 つの操作が重すぎて中断率が高いためです。 ​ インターフェイス レベルから見ると、最初のインターフェイスは純粋なキャッシュ操作であり、強力な圧縮機能を備えています。単純なクエリ キャッシュはほとんどのユーザーをブロックし、最初のフィルタリングを実行するため、ほとんどの人にはコンテンツが売り切れであるというプロンプトが表示されます。

ここで赤い封筒を配布したり、現金を掴んだ後に引き出す戦略はありますか?
大口優先入金戦略

各赤い封筒の確率が等しいかどうかを証明するデータはありますか?
それは完全に等しいわけではなく、単純な頭を撫でるアルゴリズムにすぎません。

脳パッティングアルゴリズムに基づいて、最良のものは 2 つありますか?
同じ量がありますが、幸運なのは 1 つだけです。最初にそれを掴んだ人が最高です。

赤い封筒を送った人のお金は凍結されますか?
凍結ではなく、リアルタイムで直接引き落とされます。

リアルタイムの金額計算を使用する理由は何ですか?
リアルタイムの効率は高くなりますが、予算の効率は低くなります。予算には追加のストレージも考慮されます。赤い封筒は 1 つのレコードのみを占め、有効期間が数日間だけであるため、多くのスペースを必要としません。高圧でも横型拡張機です。

テスト 2: Zhihu ユーザー「Ma Jingchen」の実験:

ここに 100 個のサンプルの調査サンプル データがあり、独自の推測を提示します。

1. ウォレットのお金は検閲された正規乱数分布を満たします。大まかに言うと、打ち切り正規分布から乱数を取得し、合計した数値を合計値で割って補正係数を取得し、その補正係数にすべての乱数を乗算してレッド エンベロープ値を取得します。

この分布は、平均を下回る赤いエンベロープがより多くありますが、平均からそれほど離れていないこと、平均を上回る赤いエンベロープはほとんどありませんが、平均よりもはるかに大きい赤いエンベロープがより多く存在することを意味します。

WeChat紅包の実施原理に関する推測

図 1. ウォレット値とその度数分布ヒストグラムとその正規近似

ただし、分布ヒストグラムを見ても、それが正規分布に準拠しているとは推測できませんが、プログラムの単純さと合理性を考慮すると、乱数、これが最も合理的な推測です。

2. 一般に、新しいウォレットほど価値が高くなります

WeChat紅包の実施原理に関する推測

図 2. ウォレットのシリアル番号とその価値の関係曲線

図2の赤い直線フィッティングから、ウォレット価値の全体的な変化傾向がゆっくりと増加しており、その変化範囲は緑色の点線の上限と下限で区切られたほぼ「チャネル」であることがわかります。 (曲線は、このような規則的な「チャネル」で囲むことができます。これは、側面からのルール 1 の合理性も反映しており、乱数が一様に分布していないことを示しています)

別の平均値を見ることもできます。このパターンを参照してください。

WeChat紅包の実施原理に関する推測


図 3. シーケンス番号による平均数値の変化曲線

サンプルでは、​​1000 相当のウォレットが 100 の部分に分割され、平均値は 10 です。ただし、図 3 では、最後のウォレットの前では平均が 10 未満になっていることがわかります。これは、最初のウォレットの価値が低く、後のウォレットの価値によって引き上げられていることを示しています。より良い価値。

3. もちろん、平均グラフからは別の法則も明らかになります。つまり、最後の人は幸運にもさらに多くの絵を描くことができるということです。最後の人は財布に残っているものをすべて受け取り、前の全員の平均は 10 未満であるため、最後の人が平均よりも高いことが少なくとも保証されます。このサンプルでは、​​ウォレット番号 98 は 35 を引き出し、最後のウォレットは 46 を引き出しました。

WeChat紅包の実施原理に関する推測

サンプルの推測に基づいて要約すると、次のとおりです。

1. ほとんどの場合、引き出されるお金は他の人たちと同じくらい小さいですが、一度高額になると、より多くのお金を獲得するのがはるかに簡単になります。

2. 後ろの財布を引き出すほど、お金が増えやすくなります。

3. 最後の人は不運に見舞われやすいです。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!