Tinyid は、REST API と Java クライアントの 2 つの取得方法を提供する ID ジェネレーター サービスです。 Java クライアント取得方法を使用する場合、公式は単一インスタンスで 1kw QPS (Java クライアントを使用する場合、単一インスタンスあたり1000 万 QPS以上) に到達できると主張しています。すごいですね!
ギットハブTinyid オープンソース Github アドレス: https://github.com/didi/tinyid 。 Tinyidを実行するTinyid ソースコードをローカルにダウンロードし、idea にインポートしたら、実行する準備が整います。 1. SQLのインポートTinyid が依存する SQL スクリプト パスは tinyid/tinyid-server/db.sql です。これは MySQL データベースのスクリプトです。 MySQL クライアントにログインして tinyid データベースを作成した後、コマンド source /data/tinyid/tinyid-server/db.sql を実行します。 show tables コマンドを実行した後、 tiny_id_infoとtiny_id_tokenの 2 つのテーブルが表示されれば、テーブルは正常に作成されています。そして、スクリプトは次の 2 つのデータを初期化しました。
ここで注目すべき点は、tinyid プロジェクトはデフォルトで MySQL ドライバー パッケージの 5.x バージョンに依存しており、Maven 座標は次のようになることです。
MySQL サーバーのバージョンが 8.x の場合 (著者のローカル MySQL は 8.x)、起動プロセス中にデータベース接続エラーが発生する可能性があります。
この場合、MySQL ドライバーをバージョン 8.x にアップグレードする必要があります (注: 他の MySQL バージョンを使用しており、tinyid の起動時に同様の例外が発生する場合は、状況に応じて MySQL ドライバーのバージョンをアップグレードしてください)。
3. 設定を変更する次に、構成 application.properties ファイルを更新する必要があります。主にデータベース関連の設定を更新します。具体的な値は MySQL 環境によって異なります。
4. tinyidを起動するtinyid プロジェクトは Springboot をベースに開発されているため、開始するのは非常に簡単です。メインクラス TinyIdServerApplication.java を実行するだけです。実行後に次のログが表示された場合、起動は成功したことを意味します。
5. 固有のIDを取得する次に、REST API を通じて配布された一意の ID を取得してみます。リクエスト例は以下のとおりです。 bizTypeとトークンの値については、tiny_id_tokenテーブルを参照してください。
クライアント統合tinyid はクライアント統合モードもサポートしており、次の Maven 座標を導入するだけです。
次に、クラスパスに次の内容を含む構成ファイル tinyid_client.properties を作成します。これら 2 つのパラメーターは、IdGeneratorFactoryClient.java の tinyid サーバー要求アドレス "http://{0}/tinyid/id/nextSegmentIdSimple?token={1}&bizType=" の最初のパラメーターと 2 番目のパラメーターです。
次に、tinyid によってカプセル化された API を呼び出すだけで、分散 ID を取得できます。サンプルコードは次のとおりです。ここで、test は bizType の値です。
構成から、tinyid-client は基本的に tinyid-server に依存していることがわかりますが、tinyid-server への HTTP リクエストをカプセル化し、ユーザーに最もシンプルな API を公開します。 tinyid-server への HTTP リクエストは TinyIdHttpUtils.java にカプセル化されており、JDK のネイティブ HttpURLConnection に依存しており、okhttp などの他のサードパーティの優れた HTTP クライアント パッケージは使用しません。 TinyIDの原則tinyid の原理は非常にシンプルです。基本的には、データベース テーブルのデータに基づいて推測できます。これは古典的なセグメントモードであり、Meituan のリーフ原理とほぼ同じです。概略図は以下のとおりです。同じ bizType を例にとると、各 tinyid-server は異なるセグメントに割り当てられます。たとえば、最初の tinyid-server は (1000, 2000] に割り当てられ、2 番目の tinyid-server は (2000, 3000] に割り当てられ、3 番目の tinyid-server は (3000, 4000] に割り当てられます。 最初の tinyid-server を例にとると、そのセグメントが 20% 使用している場合 (コア ソース コード: segmentId.setLoadingId(segmentId.getCurrentId().get() + idInfo.getStep() * Constants.LOADING_PERCENT / 100);、LOADING_PERCENT の値は 20)、つまり、loadingId を 20% のしきい値に設定します。たとえば、現在の ID が 10000 で、ステップ サイズが 10000 の場合、loadingId=12000 になります。その後、リクエストに割り当てられた分散 ID が 12001 に達すると (または再起動後)、つまり loadingId を超えると、特別なコードが返されます: new Result(ResultCode.LOADING, id); tinyid-server は、応答コード ResultCode.LOADING などに応じて、次のセグメント (4000、5000]) を非同期的に割り当てます。 |
<<: リアンタイクラスタークリスタルシリーズ製品が発売されました、衝撃的!
業界関係者は、美団がパブリッククラウド戦略とビジネスを放棄し、社内サービス(つまり社内使用)に切り替...
私たちがNFVを愛してから6年が経ちました。この物語は、AT&T、ブリティッシュ・テレコム、...
まず、オンプレミスと同じアーキテクチャを使用して、レンタルベースでクラウドで実行することで、同じ機能...
SEO は非常に戦略的な仕事です。ユーザー エクスペリエンス、コンテンツの構築、外部リンクの公開など...
オラクルブロックチェーンローカルソリューションがリリース、中国と世界の優れたデータ技術このデータベー...
Fan Yunは海外サーバー事業などに注力しており、主に香港、アメリカなどの地域でクラウドサーバーや...
1. アリババとJD.comが上場をめぐって競争:劉強東氏が香港でファンドマネージャーらと会談社内演...
SAP は、一般開発者とプロの開発者がデジタル変革を加速できるように支援する新しい製品とサービスを発...
最近、Baiduと360の間で検索エンジン戦争が起こり、インターネット上で騒動が起こっている。 36...
テンセントは5月16日、最近新たな偽造品対策作戦を開始し、特にWeChatパブリックアカウントとモー...
ウェブサイトの構築は、お金を稼ぐためでも、趣味のためでも構いません。前者はいわゆる「ウェブサイトを作...
Shopify の不正防止機械学習から Salesforce の Einstein まで、過去数年間...
ニュース:11月25日午後、WeChatのジャンプチャンネルを閉鎖した後、Taobao Mobile...
トラフィック配当は過ぎ去りましたが、今後トラフィック運用はどのように行われるのでしょうか。この記事で...
昨今、ウェブサイトを構築するのは実に困難です。多くの時間を費やしても、ウェブサイトのランキングやトラ...