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
>>: 分散トランザクションを解決するにはどうすればいいでしょうか?きっぱりと明らかにしましょう!
いわゆる次世代のクラウド コンピューティングは、クラウド ネイティブへの移行から始まったと言えます。...
10月18日のニュース:公安部は本日、サイバー犯罪対策の国家特別キャンペーンの強化に関する第2回ビデ...
近年、企業が俊敏性、コスト削減、イノベーション、デジタル変革を求めるなか、クラウド コンピューティン...
6月28日の事件は再びエスカレートし、7月18日に事件が勃発した。ウェブマスターの忍耐は限界に達して...
gfrack は、KVM 仮想化、NVMe ハードディスク、無制限のトラフィックをベースとし、Win...
新規加盟店であるdedicatedsolutionNETは、香港NTT(100M〜1Gbpsの大帯域...
ウェブサイト最適化の主な目的は、皆さんもよくご存知ですよね? これは、オンライン マーケティングにお...
コアヒント: 検索エンジンにウェブサイトをもっと気に入ってもらうにはどうすればよいでしょうか? 初心...
消費者の主力の変化と消費者需要の変化により、ブランドのマーケティング手法は微妙に変化しました。ユーザ...
KVMのKSMテクノロジーの紹介共有メモリの概念は、現代のオペレーティング システムでは非常に一般的...
これらのシンプルでありながらあまり知られていない電子メール マーケティング戦略は、開封率とコンバージ...
ソフトウェア インテリジェンス企業の Dynatrace (NYSE: DT) は最近、ガートナー社...
私は長年SEOをやっていますが、ウェブサイトの順位を保証することは決してありません。検索エンジンのト...
パソコンやインターネットに続き、クラウドコンピューティングが IT 業界に新たな改革の波を起こしまし...
ソフトウェア開発者がソフトウェアアーキテクチャの進化を理解していない場合、技術の選択と開発者の生存お...