この記事は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 を使用する方法をご存知ですか?
SEO をプレイすることは、オンライン ゲームをプレイするようなものです。ランキングが上がるたびに、...
abelohost は、openvz と kvm 仮想化に基づく 2 種類の VPS を提供していま...
多くの SEO 担当者は、ウェブサイトのキーワードのランキングを非常に気にしており、これを利用して ...
SmartAsset: 購入可能な住宅の種類を計算するのに役立ちます家と車を買うことは多くの若者の目...
莫言氏が中国人として初めてノーベル文学賞を受賞したことで、インターネットとはあまり関係のないこの作家...
はじめに: 新しい Web サイトが立ち上げられ、すべてのプログラムと機能が準備されると、Web マ...
先日終了したHosthatchのブラックフライデープロモーションは、おそらく多くの人に深い印象を残し...
クラウドに移行するかどうかは、もはや企業にとって選択肢ではありません。コンピューティング、ネットワー...
今朝8時ごろから、Baidu Cloudにアクセス障害が発生し、ファイルリストが表示できず、ファイル...
8月11日のニュースによると、最近、中国電信は2021年上半期の業績データを発表しました。データによ...
2017 年に設立された Tempest は、有名な DDoS 防御のベンダーである path.ne...
ロサンゼルスのデータセンターにある Dedipath の独立サーバーが一掃されつつあり、損益分岐点の...
企業にとって、インターネット マーケティングは馴染みのないものではありません。今日のインターネットの...
当社が最近遭遇した問題は、ウェブサイトの掲載順位が悪く、ランキングも良くなく、自社のウェブサイトのラ...
クラウドネイティブ、AIGC、ビッグモデルなどの新興技術の急速な発展により、インテリジェンスの時代が...