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つの特徴

推薦する

2014 年のブログ トラフィック統計分析

以下は、Google Analytics を使用した Moonlight Blog の 2014 年...

推奨: tmzvps、高品質の VPS 販売業者、明らかなネットワーク最適化、優れたアフターサービス

海外で非常に評判の良いtmzvpsを紹介します。価格が比較的高いため、多くの中国人はそれに触れたこと...

WeChatマーケティングの5つの強力な機能

2012年の新メディア、WeChat!インターネット、特にモバイルインターネットを利用する人にとって...

#11.11# kuroit: 年間 11.11 ポンド、2G メモリ/1 コア/22G SSD/22T データ転送、英国/米国

kuroitはインド人によって設立され、9月に英国で登録されました(ここをクリック)。主な事業はホス...

テクノロジーが金融の想像力を駆り立てる:アント・ファイナンシャルの秘密

[51CTO.comより引用] 情報化時代において、金融業界は情報化の最前線に立ち、デジタル変革のプ...

軽量ログシステム Loki を 10 分で K8s に導入

ロキとは何ですか? Loki は、Grafana Labs によってオープンソース化された、水平スケ...

2021年最大のエンタープライズテクノロジーM&A取引

今年、世界的にハードウェア、ソフトウェア、サービス ベンダーの買収取引額は数十億ドルに達し、エンター...

Bステーションブランドのマーケティング戦略!

Bilibiliは今でもZ世代と伝統的な言語でコミュニケーションを取っているのでしょうか? Z世代が...

Baiduの新しいアルゴリズムがリリースされました。外部リンクをどのように運用すればよいでしょうか?

Baidu は外部リンクのアルゴリズムを何度も更新していますが、最新の Green Radish ア...

クラウドコンピューティングとクラウドサービスの未来

[[383393]]クラウド コンピューティングとは、迅速なイノベーション、柔軟なリソース、規模の経...

globalfrag - VPS 50% オフ/サーバー 10% オフ/アジア最適化/CN2/PCCW/無料 DDOS 保護/G ポート/ロサンゼルス

globalfrag (2008)、最新のプロモーション メールには、サーバー、VPS (solus...

#ブラックウィーク5#: netfirms-ドメイン名/仮想ホスト/VPSなど最低消費制限なし

netfirms も 10 年以上の歴史を持つ古いブランドです。ドメイン名登録、仮想ホスティング、V...

ウェブサイトのトラフィックの減少を緩和するにはどうすればよいでしょうか?

前述のように、検索エンジンは依然としてウェブサイトにとって最も重要かつ価値のあるトラフィックソースで...

Nutanixのレポートによると、ハイブリッドクラウドはパンデミック中のビジネスニーズを満たす上で強みを発揮している

Nutanix は本日、企業のプライベート、ハイブリッド、パブリック クラウド導入の進捗状況を評価す...

Adobe がコーディング不要のウェブデザインソフトウェア「Muse」をリリース

Adobe は本日、Web デザイン ソフトウェア Muse のリリースを発表しました。 Adobe...