Goで開発された分散型ユニークID生成システム

Goで開発された分散型ユニークID生成システム

[[433936]]

今日は、分散環境で一意の ID を生成することを主な機能とするオープンソース プロジェクト、id-maker を紹介します。先週は 1 週間更新を停止しましたが、その間もこのプロジェクトに関連するコードの開発とテストを行っていました。

Meituan には、Java を使用して開発された Leaf と呼ばれるオープンソース プロジェクトがあります。このプロジェクトは、このアイデアに基づいて Go を使用して開発および実装されています。

プロジェクト全体のコード量はそれほど多くありません。実際の本番環境で使用したい場合でも、練習するためのプロジェクトを見つけたい場合でも、良い選択だと思います。

プロジェクトの背景

ほとんどのシステムでは、グローバルに一意の ID が必須です。たとえば、速達、テイクアウト、映画などでは、注文番号の一意性を確保するために、すべて一意の ID を生成する必要があります。

ID 番号に対するビジネス システムの要件は何ですか?

  • グローバル一意性: 重複する ID 番号は存在できません。これは一意の識別子であるため、最も基本的な要件です。
  • 増加傾向: MySQL InnoDB エンジンでクラスター化インデックスが使用されています。ほとんどの RDBMS はインデックス データを格納するために B ツリー データ構造を使用するため、主キーを選択するときは、書き込みパフォーマンスを確保するために順序付けられた主キーを使用するようにしてください。
  • 単調増加: トランザクション バージョン番号、IM 増分メッセージ、ソート、その他の特別な要件など、次の ID が前の ID よりも大きいことを確認します。
  • 情報セキュリティ: ID が連続している場合、悪意のあるユーザーは指定された URL を順番にダウンロードするだけで簡単に ID をスクレイピングできます。注文番号の場合は、競合他社が当社の毎日の注文量を直接知ることができるため、さらに危険です。したがって、一部のアプリケーション シナリオでは、ID は不規則で規制されていない必要があります。

この文脈では、可用性の高い一意の ID 生成システムを持つことが重要です。

プロジェクトの使用

ID を生成するには 2 つの方法があります。

  • データベースに基づいて ID を生成します。
  • スノーフレーク アルゴリズムに基づいて ID を生成します。

インターフェースを呼び出す方法は 2 つあります。

  • HTTP メソッド
  • gRPC の方法

HTTP メソッド

1. 健康チェック:

  1. カール http://127.0.0.1:8080/ping

2. IDを取得する:

タグテストのIDを取得します。

  1. カール http://127.0.0.1:8080/v1/id/test

3. Snowflake IDを取得します。

  1. カール http://127.0.0.1:8080/v1/snowid

gRPC の方法

1. IDを取得する:

  1. grpcurl -plaintext -d '{"tag":"test"}' -import-path $HOME/src/id-maker/internal/controller/rpc/proto -proto segment.proto localhost:50051 proto.Gid/GetId

2. Snowflake IDを取得します。

  1. grpcurl -plaintext -import-path $HOME/src/id-maker/internal/controller/rpc/proto -proto segment.proto localhost:50051 proto.Gid/GetSnowId

地域開発

  1. # MySQL を実行する
  2. $ 作成する
  3.  
  4. #移行を使用してアプリを実行する
  5. $ 実行

プロジェクトアーキテクチャ

このプロジェクトは go-clean-template アーキテクチャ テンプレートを使用して開発されており、ディレクトリ構造は次のようになります。

各ディレクトリの簡単な説明は次のとおりです。

  • cmd: プログラムエントリ
  • config: 設定ファイル
  • docs: 生成されたプロジェクトドキュメント
  • 統合テスト: 統合テスト
  • 内部: ビジネスコード
  • pkg: パッケージと呼ばれるもの

公式写真を2枚拝借:

全体的な階層関係は次のようになります。最も内側はテーブル構造を定義するモデルであり、中央はビジネス ロジック レイヤーです。ビジネス ロジック レイヤーは、最も外側の API が呼び出すためのインターフェイスを提供します。最も外側の層は、いくつかのツールと呼び出しエントリです。

これを実行する最大の利点は分離です。最外層がどのように変更されても、対応するインターフェースがビジネス ロジック層に実装されている限り、コア コードをまったく変更する必要がない場合があります。

したがって、それらの間の呼び出し関係は次のようになります。

  1. HTTP > ユースケース
  2. ユースケース > リポジトリ (Postgres)
  3. ユースケース < リポジトリ (Postgres)
  4. HTTP < ユースケース

以上が今回のプロジェクトの内容となります。ご興味がございましたら、ご連絡のためにメッセージを残してください。星を付けて頂けると嬉しいです。

プロジェクトアドレス:

  • https://github.com/yongxinz/id-maker

この記事はWeChatの公開アカウント「AlwaysBeta」から転載したもので、以下のQRコードからフォローできます。この記事を転載する場合はAlwaysBeta公式アカウントまでご連絡ください。

<<:  分散リンク トレーシング: Spring Cloud Sleuth に関する 9 つの致命的な質問

>>:  クラウドネイティブの5つの特徴

推薦する

アリババは、脆弱なネットワークの「ラストマイル」を埋めるために独自の次世代ネットワークプロトコルXLINKを開発しました。

記者は6月2日、DAMOアカデミーのXG実験室とタオバオテクノロジーが共同開発したマルチパスQUIC...

K-edされたウェブサイトを復元する際の苦い経験

10月20日は私にとって最も忘れられない日であり、人生で最も辛い日でもあります。私が担当していたHH...

Parallels Toolbox 2.5 for Mac 使いやすい新ツールで毎日のコンピューティングを簡素化

クロスプラットフォーム ソリューションの世界的リーダーであり、Mac® 上で Windows® アプ...

SEO最適化の経験共有: 内部構造の最適化

私は蘇州でウェブサイト構築に4年近く携わっています。この間、SEO関連の知識も継続的に学んできました...

SEO診断事例2: ウェブサイトの収集とスナップショットがタイムリーではない

みなさんこんにちは。私はMuzi Chengzhouです。 SEO 診断は、私が常にやり続けてきた仕...

なぜ「プラットフォーム+産業エコロジー」が企業の不可逆的な未来なのか?

2020年の風向きは予測できません。誰もが、現在の霧を通して未来を垣間見て、美しいジェダイの反撃を開...

モンドーズはどうですか?マレーシアの無制限データ VPS レビュー、Netflix/ネットワーク バックホールのブロック解除に優れたパフォーマンス

マレーシアのサーバープロバイダーmondozeは10年の歴史があると言われています。主にマレーシアの...

#おすすめ# eleven2-50% 割引コード/ユニバーサル/仮想ホスト/リセラー/VPS

eleven2 は、昨年の父の日に向けて、仮想ホスティング、再販業者配布、VPS などを含むサイト全...

ウェブサイトのコンテンツエクスペリエンスを最適化するための 4 つのヒント!

現在、SEOを行う際、ウェブサイトの外部最適化がどれだけ優れていても、高品質のコンテンツエクスペリエ...

キーワードランキングが下がっている理由の分析

著者は現在、企業の Web サイトを最適化しています。以前はランキングがかなり良かったのですが、先週...

「SEOトレーニング」という用語がBaiduで1位になるかどうかの簡単な分析

最近、seovipというウェブサイトのおかげで、SEOトレーニングという言葉が人気になりました。 H...

NameCheap - .xyz ドメインを 2 セント [0.13 元] で登録

長い間、namecheap ドメイン名プロモーションに関する情報を投稿していないようですね? !新し...

ブランドはどのようにマーケティングを行うのでしょうか?もしAppleがリンゴを売っていたら、あなたはそれを買いますか? ?

まず、2つの興味深いマーケティング仮説を見てみましょう。仮説 1: いつか、Apple は本当にリン...

クラウドコンピューティングのコストを削減する13の方法

クラウド コンピューティングはもともと、企業にとっての経済的な提案でした。当時はサーバーが高価であり...