この記事はWeChatの公開アカウント「Java Geek Technology」から転載したもので、著者はYaxue Fansです。この記事を転載する場合は、Java Geek Technology の公開アカウントにお問い合わせください。 以前、Afen は、社内にすでに存在する分散システム内の固有 ID を最適化する方法について考えていました。固有 ID について言えば、従来の業界に従事していない人であれば、分散アーキテクチャでは、固有 ID 生成ソリューションは、特にデータベースがシャーディングを使用する場合に、システムを設計するときによく遭遇する問題であるということをご存知だと思います。特に、データベースをシャードした後は、この一意の ID に対する要件がますます高くなります。では、固有 ID ソリューションとは何でしょうか? 分散型グローバルユニークID配給について話すとき、人々はいつも怖がります。なぜなら、多くの面接で「配給できますか?」と聞かれるからです。プロジェクトのアーキテクチャはどのように行われ、どの程度うまく行われていますか?分散を使用する場合、分散トランザクションをどのように処理しますか?分散されたグローバルに一意の ID を実装するためにどのようなアルゴリズムを使用していますか? 多くの場合、このことについて話すと、面接を受けている多くの友人は恥ずかしさを感じます。私はそれを直接使用するだけであり、それにまったく注意を払ったことはないと思います。これに気づくと、次の質問に答えるときにつまずき始め、面接に失敗してしまうことがよくあります。 システムの同時実行性が高くなるほど、データが大きくなります。データが大きくなればなるほど、分散化が必要になります。大量の分散データを識別するには、一意の識別子が必要です。これらのグローバルに分散された一意の識別子を一意の ID と呼びます。 Redisはグローバルに一意のIDを実装する正直に言うと、Afen のプロジェクトは特に悪いわけではありません。そこで、Ah Fan は、分散グローバル一意 ID を生成するときに、なぜ UUID または自動増分主キーを使用するのか疑問に思い始めました。 そこで、Ah Fen は Redis を使用して分散型グローバル一意 ID を生成することを計画しています。 Redisはグローバルに一意なIDの原則を実装している すべての Redis コマンドはシングルスレッドであるため、Redis のアトミック操作 INCR および INCRBY を使用して、グローバルに一意の ID を生成できます。方法 1: StringRedisTemplate
上記は私たちのアクティビティのエンティティ クラスです。 618がもうすぐ登場します。電子商取引を行っている皆さんは、何かする準備はできていますか?学んで試してみることができます。アクティビティには、ID、アクティビティの名前、対応するアクティビティに設定された価格などが含まれます。他にも多くのフィールドがある可能性がありますが、ここではこれらのフィールドのみをリストします。
でもいつも少し低く見えますよね?もう少し高級感を出す準備をした方が良いでしょうか?結局のところ、コードはプログラマーの下着のようなものです。穴があいていても問題ありませんが、他人に見られると非常に不快なことになります。だから、もう少し高級感を出す必要があります。 方法2: なぜ2番目の解決策があるのでしょうか?これは、Redis には 1 つの Redis だけではなく、クラスターが存在することが多いためです。クラスターなので、無理なく使い始めなければなりません。 次に、クラスターの知識を考慮し始める必要があります。そうすれば、アイデアが得られます。つまり、クラスター内の各ノードは生成された ID を事前に生成します。次に、それを Redis 内の既存の ID と比較します。大きい場合は、ノードによって生成された ID が使用されます。小さい場合は、Redis の最大 ID を使用して増分されます。 このとき、実装する ID が一意であることを確認するための lua スクリプトも必要です。これが本当の本質です。そうしないと、実装する ID はハイエンドであり、一意ではありません。 コアスクリプト:
上記の Lua スクリプトはブロガーの Ydoing によるものです。グローバルに一意な ID を生成するためにこれを使用するので、分散型グローバルに一意な ID を実装するために Redis を選択する理由を理解する必要があります。 すべてのRedisコマンドはシングルスレッドです前の段落の冒頭で、Ah Fen は Redis コマンドはすべてシングルスレッドであると述べました。これを面接官の前で言うと、面接官は間違いなく「なぜ Redis はマルチスレッドではなくシングルスレッドなのですか?」と尋ねると思います。 Redis は、Reactor モードに基づいて、ファイル イベント プロセッサと呼ばれるネットワーク イベント プロセッサを開発しました。その構造は、複数のソケット、IO マルチプレクサ、ファイル イベント ディスパッチャ、およびイベント ハンドラの 4 つの部分で構成されます。ファイル イベント ディスパッチャ キューの消費はシングル スレッドであるため、Redis はシングル スレッド モデルと呼ばれます。 Reactor モードについて話すとき、Netty モデルを詳細に研究したことがあるなら、このモードが Netty でも使用されていることがわかります。確認するには公式サイトに行く必要がありますか?なぜそう言うのでしょうか? リアクターモデルとは何ですか? ご存知のとおり、Reactor モデルは多重化された I/O モデルであり、主に高同時性、高スループット環境での I/O 処理に使用されます。 この多重化モデルは、常にイベント ディストリビュータ、イベント ハンドラ、および呼び出しクライアントという同じいくつかの要素に依存します。 Reactor モデルは同期 I/O 多重化モデルです。他のモデルを見る前に、まずこの同期 I/O 多重化モデルを理解しましょう。 あなたはこれについてあまりよく知らないと思います。 Afen は以前、Netty の Channel についても話していました。記事のアドレスをお送りします。ソケットでプログラミングしますか?私はやはりNettyを選びました。この記事では、チャンネルについて説明しました。このシングルスレッドモデルはどのようなものですか? この絵はあなたのために描かれました。ちょっと醜いですが、意味は伝わります。 このモデルでは、Redis がシングルスレッドであるということは、ネットワーク要求モジュールが 1 つのスレッドを使用する (したがって、同時実行の安全性を考慮する必要がない) ことを意味します。つまり、1 つのスレッドがすべてのネットワーク要求を処理し、他のモジュールは引き続き複数のスレッドを使用します。 面接官は、Redis を使用するとなぜ高速になるのかについても質問します。 この質問には誰でも答えられると思います。Redis はメモリベースのデータストレージなのに、なぜメモリが高速なのでしょうか? この速度はディスクに保存されたデータに対するものです。停電後、メモリ内のデータは消失します。次回来るときには、やはりディスクから読み込んで保存する必要があります。これがRedisが高速な理由です。話がそれてしまいましたが、Redis のシングル スレッドについての話に戻りましょう。 公式サイトの説明を見てみましょう。
実際、この翻訳は、Redis を使用する場合、Redis は通常メモリまたはネットワークが制限されているため、CPU がボトルネックになることは一般的ではないことを意味します。 実際、率直に言えば、公式ウェブサイトでは、Redis は非常に高速であり、シングルスレッド モードでもすでに非常に高速であるため、マルチスレッドを使用する必要がないと述べています。これはちょっと気持ち悪いですね。アーフェン氏も自身の見解を述べた。結局のところ、公式サイトの言葉は少し誤解を招くものです。 実際、Redis はメモリをバインドするために単一の CPU を使用し、メモリの処理はシングルスレッドで行われます。複数のスレッドをシミュレートするために複数の CPU を使用します。複数の CPU を切り替えて Redis を操作するのは、実際にはメモリから直接取り出すよりも効果的ではありません。結局、時間がかかります。 Redis がシングルスレッドである理由は何だと思いますか? |
<<: Kubernetes で Jenkins を使用する方法をご存知ですか?
エッジコンピューティングとクラウドコンピューティングの主な違いは何ですか?コンピューティングでは、「...
新しい同僚が会社に入社するたびに、その同僚は自分のコンピューター上でさまざまな環境を構成する必要があ...
2か月間インターネットに熱心に取り組んで、成果が出始めました!Webサイト構築の最初の1か月で何をし...
Simcentric (香港の会社) は、Host Cat に香港の独立したサーバーを正式に提供しま...
2009 年に設立された 2host は、現在 3,700 を超える顧客にホスティング サービスを提...
検索エンジンのアルゴリズムの変更は、ウェブサイトのキーワードのランキングに影響を与えます。SEOはウ...
[51CTO.com クイック翻訳] ご存知のとおり、DevOps によってもたらされた大きな変化に...
1. 概要Docker Compose を使用して Elasticsearch と Kibana を...
コンピレーション|影企画 |趙雲クラウドネイティブ時代において、信頼性の高いクラウド製品を選択する...
alphaRacks の毎年恒例の夏の VPS プロモーションが始まりました。サーバー構成: マルチ...
Kamatera は、現時点では香港で最も安価なクラウド サーバー (香港で最も安価な VPS) か...
クラスターとは何かクラスタリングとは、複数のサーバーをまとめて、各サーバーが同じビジネスを実装し、同...
ハイブリッドクラウドの使用がますます増えています。過去 10 年間でハイブリッド クラウド、市場構造...
あなたのウェブサイトの製品についてもっと多くの人に知ってもらいたい、そして本当に製品マネージャーを人...
先週の金曜日、リード氏の招待を受けて、検索マーケティングセミナーで講演をしてきました。参加者はウェブ...