1. 分散IDとは何ですか?分散システムでは、データ、メッセージ、HTTPリクエストなどを一意に識別するために、グローバルに一意なIDが必要になることがよくあります。このグローバルに一意なIDは分散IDと呼ばれます。 2. 分散 ID が必要な理由は何ですか?1. ID にデータベースの自己増分型を使用すると、分散システムでシャーディングが必要な場合に、同一のテーブルが 2 つ存在し、主キーの競合が発生する可能性があります。 2. 電子商取引の注文番号は、最も単純な生成ルールである自己増分方式を使用します。しかし!この注文番号はシリアル番号と同じなので、競合他社が貴社の実際の運営情報を簡単に見ることができるようになります。 3. 分散 ID はどのような条件を満たす必要がありますか?グローバルに一意: IDはグローバルに一意である必要があります 高パフォーマンス: 高可用性と低レイテンシ。 ID 生成の応答は高速である必要があります。そうでないと、ビジネスのボトルネックになります。 高可用性: 100% の可用性は誤解を招く恐れがありますが、可能な限り 100% の可用性に近づける必要があります。 容易なアクセス: すぐに使用できる設計の原則に従い、システムの設計と実装を可能な限りシンプルに保つ 増加傾向: 増加傾向にあるのが最適です。この要件は特定のビジネス シナリオによって異なり、通常は厳密に必須ではありません。 セキュリティ: ID が継続的に生成されると、業務情報が漏洩し、推測される可能性もあるため、ランダムで不規則な ID が必要です。 読みやすさ: 長くなりすぎないようにしましょう。アフターサービス中にユーザーがすでに不安な気分になっていると想像してください。非常に長い注文番号を報告/入力するように依頼すると、エラー率が高くなりやすく、顧客のイライラが増すだけです。注文番号が長すぎる場合は、別の方法として、文章に分割します。 スケーラビリティ: Taobao の注文番号は元々 12 桁または 14 桁でしたが、現在は 16 桁になっています。ウェブサイトの取引量は年々増加しており、必然的に注文番号も長くなっていきます。 4. 分散ID生成方式
注: 主流のID生成方式は、データベースセグメントモードとスノーフレークアルゴリズムに基づいています。 5. 利点と欠点1. UUIDに基づくアドバンテージ:
欠点:
2. データベースに基づいてIDを自動増加ID が必要な場合は、テーブルにレコードを挿入して主キー ID を返します。しかし、この方法には致命的な欠点があります。アクセス数が急増すると、MySQL 自体がシステムのボトルネックになります。分散サービスを実装するためにこれを使用することはリスクがあり、推奨されません。 アドバンテージ: シンプルな実装、単調に増加するID、数値型の高速クエリ速度 欠点: DBの単一ポイントではダウンタイムのリスクがあり、高同時実行シナリオを処理できません。 3. データベースクラスタモードに基づく前述のように、シングルポイントデータベース方式は推奨されないため、上記の方式に高可用性の最適化をいくつか加え、マスタースレーブモードのクラスターに変更しましょう。マスターノードに障害が発生して使用できなくなることが心配な場合は、デュアルマスターモードのクラスターを作成できます。つまり、2 つの MySQL インスタンスが独立して自動増分 ID を生成できます。すると別の問題が起こります。 2 つの MySQL インスタンスの自動増分 ID はどちらも 1 から始まります。重複した ID が生成された場合はどうすればよいですか? 解決策: 開始値と増分ステップサイズを設定する MySQL_1 の設定:
MySQL_2 の設定:
2 つの MySQL インスタンスの自動インクリメント ID は次のとおりです。
クラスターのパフォーマンスが依然として高い同時実行性に耐えられない場合はどうなるでしょうか? MySQL を拡張してノードを追加する必要がありますが、これはかなり面倒な作業です。 3 番目の MySQL インスタンスを追加するには、最初の MySQL インスタンスと 2 番目の MySQL インスタンスの開始値とステップ サイズを手動で変更し、3 番目のマシンの開始 ID 生成位置を既存の最大自動増分 ID の位置から離れた位置に設定する必要があります。ただし、これは、最初の MySQL インスタンスと 2 番目の MySQL インスタンスの ID が 3 番目の MySQL インスタンスの開始 ID 値に達する前に実行する必要があります。そうしないと、自動増分 ID が重複し、必要に応じて変更するためにマシンをシャットダウンする必要がある場合があります。 アドバンテージ:
欠点:
4. データベースベースの数値セグメントモード番号セグメントモードは、現在の分散 ID ジェネレータの主流の実装方法の 1 つです。番号セグメント モードは、データベースから自動増分 ID をバッチで取得することとして理解できます。数値セグメントの範囲がデータベースから取り出されるたびに、たとえば [1,1000] は 1000 個の ID を表します。特定のビジネス サービスは、この数値セグメントを使用して 1 から 1000 までの自動増分 ID を生成し、メモリにロードします。 複数の業務端末が同時に稼働する可能性があるため、バージョン番号は楽観的ロックを使用して更新されます。この分散 ID 生成方法は、データベースに強く依存せず、データベースに頻繁にアクセスせず、データベースにかかる負荷が大幅に軽減されます。 5. RedisベースモードID のアトミックな自己増分を実現するには、redis incr コマンドを使用します。
Redis を使用する際に注意すべき点の 1 つは、Redis の永続性の問題を考慮する必要があることです。 RedisにはRDBとAOFの2つの永続モードがあります。
6. スノーフレークベースのモデルSnowflake は、Twitter の内部分散プロジェクトで使用される ID 生成アルゴリズムです。 Snowflake は Long 型の ID を生成します。 Long 型は 8 バイトを占め、各バイトは 8 ビットを占めるため、Long 型は 64 ビットを占めることになります。 Snowflake ID 構造は、正の数字 (1 ビット) + タイムスタンプ (41 ビット) + マシン ID (5 ビット) + データ センター (5 ビット) + 自動増分値 (12 ビット) の合計 64 ビットの Long 型で構成されます。
このアルゴリズムのロジックによれば、このアルゴリズムを Java 言語で実装し、ツール メソッドにカプセル化するだけで済みます。その後、各ビジネス アプリケーションはこのツール メソッドを直接使用して分散 ID を取得できます。分散 ID を取得するために別のアプリケーションを構築することなく、各ビジネス アプリケーションが独自の作業マシン ID を持つことを確認するだけで済みます。 現在、スノーフレーク アルゴリズムには時間ロールバックの問題があり、異なるマシンで時間が完全に同じであることを保証できないため、重複の問題が発生する可能性があります。 7. 美団(葉)Leaf は Meituan によって開発され、切り替え可能な数値セグメント モードとスノーフレーク アルゴリズム モードをサポートしています。 |
<<: Redisson 分散ロック ソースコード 11: セマフォと CountDownLatch
>>: 分散トランザクションを解決するにはどうすればいいでしょうか?きっぱりと明らかにしましょう!
インターネット情報の継続的な成長に伴い、ユーザーがインターネットの海で必要な情報を見つける最も速い方...
ウェブサイトのユーザー エクスペリエンスの構築は、私たち一人ひとりの性格と同じように、ウェブサイトの...
今日、私は A5 Webmaster Network の編集者である Cancan とチャットをしま...
みなさんこんにちは。私は徐子宇です。前回の記事を書いたのは、「事実に基づき、厳密に構造化され、仮説指...
クラウド デスクトップの使用体験の違いは、構成の違い、より直接的には、グラフィック カードが仮想化さ...
私たちが気候の移行期にあり、是正措置が取られなければその影響が地球に直接影響を及ぼすであろうことは、...
クラウド コンピューティングは、人間とテクノロジーの境界をなくすことで世界をどのように変えるのでしょ...
ウェブサイトを構築するウェブマスターは皆、フレンドリーリンクがウェブサイトの重みを高めることができる...
従来のインターネットでは、ウェブサイトとネットユーザーは2つの利益グループに属していました。2.0の...
中東で最も重要な国ともいえるUAE。グローバルクラウドサーバープロバイダーとして、当然ながらarke...
多くのウェブデザインの専門家は、以前にインターネット企業で働いた経験があり、インターネット企業の給料...
最近、Google は従来の Cookie 追跡技術を新しい匿名広告識別子システムである AdID ...
8月27日、天津市国有資産監督管理委員会は「国有企業のクラウド移行の加速と国有資産クラウドシステムの...
私は沿岸の三級都市に住む小さなウェブマスターです。ウェブサイトの構築を始めたのは 2009 年です。...
私の故郷は湖北省の小さな郡都です。人口:60万人。過去2年間に多くの不動産開発業者が参入してきた。こ...