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

推薦する

あなたのサイトを百科事典のエントリに掲載する方法について話す

Baidu 百科事典は、標準化されたエントリを基本単位とする、オープンで無料のオンライン百科事典です...

98Cloud: プレミアムラインVPS、21元から、香港CN2/米国トリプルネットワークAS9929(アウトバウンド200G高防御)

九巴クラウドは2009年に設立され、主に香港CN2 GIA VPS(発信:中国電信+中国聯通経由CN...

クラウド コンピューティングの進化: 「分散型クラウド」が最終形態となるか?

クラウドコンピューティングの発展に伴い、技術レベルでは、AWS EKS、Microsoft AKS、...

過激な知乎は次のビリビリになりたいのか?

「今ニューヨークにいます、飛行機から降りたところです」や「輪は狭いですが、知り合いはたくさんいます」...

地方局は地域のホットなニュースを掘り起こし、宣伝してニュースのポイントや価値ポイントを見つけるべきだ

1. 地方局とメディアの接触のタイミングを把握する必要がある。メディアと関わるときにはタイミングをう...

独立起業家のためのキーワード競争ルールの簡単な分析

SEO ビジネスは長年にわたって急成長しており、もはや新しい業界ではありません。ご存知のとおり、キー...

クラウド分析とリモート監視が自動化の次の大きなトレンドとなる理由

企業は俊敏性を高め、ビジネス継続性のためにクラウドとリモート監視に重点を置く必要があります。テクノロ...

オンサイトの微調整を通じてキーワードランキングを安定させ、向上させる

1. 微調整の概念。微調整とは、長期間にわたって運営してきたWebサイトに対して、一定の範囲内で調整...

IDC: アリババクラウドは中国のビッグデータプラットフォームパブリッククラウド市場で引き続きトップ

国際的に権威のある調査機関IDCは8月4日、「中国ビッグデータプラットフォームパブリッククラウドサー...

中国のトップ5ドメイン名は1月第1週に32,000増加したが、米国は19,000減少した。

中国IDCレビューネットワークは1月10日に次のように報じた。「WebHosting.infoが発表...

分類情報ウェブサイトを利用してウェブサイトの重量を改善することについての簡単な説明

ウェブサイト最適化業界には、「内部リンクは王、外部リンクは皇帝」という格言があります。これは、ウェブ...

2016 年の最新の 34 の主要モバイル ゲーム チャネル パートナーの概要と連絡先情報です。

過去10年間で人事異動が数多くありました。年末の退職や新入社員の波を経験した後、多くの学生の手元にあ...

budgetvm マイアミの新しいデータセンター VPS/1G メモリ/2G バースト/3IP/5USD/月

今年初めの朗報です。BudgetVM がマイアミに新しいデータ センターを開設しました。現在までに、...

推奨: weservit-512M メモリ KVM/SSD および SSDCACHE/オランダ高速 G ポート VPS

weservit は 2008 年にオランダで設立されました。自社設備をすべて備えた正式に登録された...