良いコード例: Redis に基づく軽量分散バランス消費キュー

良いコード例: Redis に基づく軽量分散バランス消費キュー

[[393103]]

1. 良いコードについての私の意見

1. 良いコードとは何か?

『デザインパターンの美しさ』を読んだことがある人は、さまざまなデザインパターンを駆使し、デザインパターンの 6 つの基本原則に準拠したコードが良いコードだと考えるかもしれません。 「Clean Code」を読んだことがあるなら、良いコードの基準の 1 つは簡潔さであると考えるかもしれません。 Spring のソースコードをよく勉強している人は、精巧な設計、高度な抽象化、柔軟な構成が良いコードだと思っているかもしれません。ちょうど本のように、千人の読者の目には千のハムレットがあり、誰もが自分の認識に基づいて独自の判断を下すでしょう。

2. 良いコードとは

上で述べたように、良いコードに対する認知基準は人によって異なります。私が良いコードだと思うものも、私の認知レベルによって制限されます。たぶん、今日は良いコードだと思うかもしれませんが、認知力が向上するにつれて、別の日には別のアイデアが浮かぶでしょう。私の現在の認識では、良いコードの特徴は次のようになると思います。

可用性

はい、正しく読みました。優れたコードは使用可能で機能する必要があります。コードが見た目だけ良く、あらゆる種類の派手なコーディング技術やスキルを使用していても、動作しない場合は、存在する意味を失ってしまいます。したがって、優れたコードの最も重要な特徴は使いやすさです。

読みやすさ

優れたコードの2番目の特徴は読みやすさだと思います。コードを書くときに対象とするユーザーには 2 つの種類があります。最初のタイプはコンパイラ用です。 2 番目のタイプは、それを保守するプログラマー向けです。最初のタイプのユーザーの場合、文法仕様に準拠している限り、認識されて実行されます。 2 番目のタイプのユーザーは、後期段階でもメンテナンスとアップグレードを継続するプログラマーです。それを維持する人々がこのコードを理解できない場合、その長期的な存在にはほとんど意味がありません。

その他の優れた機能

保守性、スケーラビリティ、再利用性、強力な堅牢性、テスト可能性など。

優れたコードには、ここで挙げきれないほど多くの優れた機能があります。

3. コンピューター上でコードを踊らせる

原点に戻って、コードを書く目的は何でしょうか?それは、コンピュータが理解できる命令を通じて、私たちが考えていることや望んでいることをコンピュータに伝え、コンピュータが私たちに代わってやりたいことを実行できるようにすることです。優れたコードは、私たちが望むことを簡単に達成できるだけでなく、それを迅速かつ効率的かつ完全に実行することもできます。コンピューター上で一緒にコードを踊らせてみましょう。

2. なぜそれを行うのですか?

2020 年のメーデー休暇中、皆がメーデー休暇の楽しい時間を楽しんでいたとき、突然 hbase からアラームが届きました。 hbase 全体の IO 圧力がボトルネックに近づき、データの読み取りと書き込みに直接影響を及ぼしました。 hbase の一時的な拡張では、ほとんどサポートできませんでした。この開発傾向によれば、ビジネスピークが発生すると、HBase の読み取りと書き込みがビジネスチェーン全体のボトルネック問題を直接引き起こすことになります。大量のバーガンデータをリアルタイムでhbase+solrに書き込むことで発生する高いIO圧力を解決するために、Redisをベースにした軽量の分散バランス消費キューを設計しました。このキューは、一定のルールに従ってバーガンデータを異なるキューに分割し、バッチデータ重複排除を実現してから、バッチでhbase+solrに書き込み、hbase+solrのIO圧力を軽減します。

3. やり方

コンポーネントの全体的な設計アイデア:

コンポーネント全体は、主にマスター (マスター ノード)、ライター (データ書き込みノード)、ワーカー (作業ノード) の 3 つのコア モジュールに分かれています。

設計メカニズム: 弱い中心メカニズム。構成されたノードは、マスター (メイン ノード)、ライター (データ書き込みノード)、またはワーカー (作業ノード) になることができます。可用性が高く、単一のマシンまたは単一のポイントによるボトルネックの問題がありません。

マスター(マスターノード)の責任:

  • ワーカー(作業ノード)の変更と切断をリアルタイムで検出する役割を担います。
  • 生き残ったワーカー(作業ノード)にタスク キューを割り当てる役割を担います。
  • Redis キュー全体の負荷をリアルタイムで検出します。

ライター(データ書き込みノード)の責任:

  • リアルタイム書き込みタスクのシャーディングを異なるキューに割り当てる役割を担います。
  • 現在の書き込みキューの負荷を検出する役割を担います。

ワーカー(作業ノード)の責任:

  • 現在のワーカー (作業ノード) のステータスをリアルタイムで報告し、ハートビートを維持する役割を担います。
  • ワーカー (作業ノード) が担当するデータの定期的な消費を担当します。

偉大な Linux の達人はかつてこう言いました。「言葉は安いものだ、コードを見せてくれ。」

IV.私たちがやったこと

1. コンポーネント全体のパッケージ構造図

2. 簡潔なコード構造

  • クラスの役割と責任を説明する明確なコメント
  • スタートアップ項目の構成、柔軟な構成、モジュールを起動するかどうかを制御します。
  • lambda-logger/lambda 式は、簡潔な構文構造を通じてコードの冗長性を削減し、コードのシンプルさを向上させます。
  • アサーション判定は、従来の if-else 判定に代わるもので、コードの読みやすさを向上させます。

プロジェクト全体には合計 60 個のクラスと 1,623 行のコア コードがあります。クラスあたりの平均コード行数は 27.05 で、最大クラスでもコード行数は 200 行以下です。

3. 強力なスケーラビリティ

フック コールバック メソッドの設計により、システムにアクセスするユーザーは独自のコールバック実装メソッドをすばやく挿入して、ビジネス機能を迅速に拡張できます。

4. オンラインログ表示のスクリーンショット

ログファイル

マスターキュー割り当てログ

ワーカーデータ消費ログ

ライターキュー負荷検出ログ

Redis コンシューマー キュー モニタリング ダッシュボード

5. 当社のメリット

コンポーネントがオンラインで展開されると、hbase サーバーはインジケーターの変化を監視し、全体的な hbase 使用レベルを約 50% 最適化します。

HBase IOPS 使用状況の監視

HBase CPU 使用率の監視

VI.私たちの展望

  • 独立した抽象コンポーネントである、Redis に基づく軽量分散バランス型コンシューマー キューは、完全に独立したイノベーションを通じて開発された、可用性が高くスケーラブルな基本コンポーネントです。再利用性とスケーラビリティに優れた独立した spring-boot-starter にパッケージ化されています。
  • 幅広い使用シナリオがあり、柔軟なコンポーネント構成に基づいて、あらゆる分散タスク キュー シナリオで使用できます。たとえば、タスク センター分散により自然な負荷分散を実現できます。
  • オープンソースを採用し、将来的にはコンポーネントをオープンソース化したいと考えています。

7. 私の理解

優れたコードは、読みやすい優れた記事と同じように、人々に第一印象を与えます。記事によってスタイルやジャンルが異なり、コードによってプログラミング スタイルの要件も異なります。 Python は厳密なインデントを持ち、詩のように整然として対照的です。 C 言語は、散文のように手続き型であり、深い芸術的概念を持っています。 Java 言語はオブジェクト指向であり、各登場人物のアウトラインを作成できる小説を書くようなものです。しかし、記事のジャンルが何であれ、読みやすさやわかりやすさは非常に重要です。記事が読みやすく理解しやすい場合にのみ、より多くの読者を引き付け、記事を広めることができます。コードについても同様です。保守性と可読性も非常に重要です。コードの可用性を確保し、コードのシンプルさと保守性を向上させることによってのみ、コードをコンピューター上でより長く実行できるようになります。

<<:  テンセントクラウドがTecho Hub全国技術ツアーイベントを開始、コンピューティング技術のネタバレを事前に最初にチェック

>>:  クラウドネイティブが SaaS の世界を席巻する理由

推薦する

海外の安くて使いやすいVPS業者をいくつか紹介

3 色の図は、安価、安定性、高速性は共存できないことを示しています。高い要件がない場合は、安価で使い...

racknerd: 米国製ハイエンドサーバー割引、高クロック速度 (4.4G)、マルチスレッド (96T)、大容量ハードディスク (7.6T NVMe\240T HDD)

racknerdは現在、AMD高周波シリーズ、AMD超マルチスレッドシリーズ、Intel超大型ハード...

政府や公共の建物のセキュリティを強化するにはどうすればよいでしょうか?

今日、ビデオとアクセス制御の統合、クラウドの使用、スマート分析の力により、物理的なセキュリティが変革...

IT の回復力と事業継続性を向上させる 3 つの方法

世界的危機における事業中断による損失を最小限に抑えることを目指す公衆衛生上の緊急事態に直面し、多くの...

「Trusted Certified」のウェブサイトは本当に信頼できるのでしょうか?

「インターネット信用認証」、「信用組合」、「電子商取引信用認証」…2010年以来、国内の何十万ものウ...

信頼できる Windows VPS の推奨

Host Cat は、ここで海外の Windows システム VPS を紹介する記事を書いています。...

実践はSEOが時間に勝てないことを証明している

ウェブサイトの検索エンジン最適化(略してSEO)は、ウェブサイトのランキングとトラフィックを向上させ...

侵入することなく Kubernetes に OpenTelemetry プローブをインストールする方法を学びましたか?

背景OpenTelemetry プローブOpenTelemetry (略して Otel、最新バージョ...

myRSK-$6.99/KVM/1.5g メモリ/10g SSD/4T トラフィック/Phoenix

myRSK は 2009 年から現在まで力強く存続してきましたが、この Web サイトは今にも暴走し...

ウェブサイトを最適化するための4つの主要なナビゲーションの状況を分析する

SEO に最適化されたウェブサイトについて言えば、まず頭に浮かぶのは「1 つの中心、2 つの基本ポイ...

WeChat公式モーメントの広告とマーケティングのヒント!

WeChatは、月間アクティブユーザー数が10億人に達し、15歳から40歳までのユーザーをカバーし、...

新しいウェブサイトを公開後 1 日以内にインデックス登録する方法

ほとんどのウェブマスターは、新しいウェブサイトがオンラインになったらすぐに Baidu に登録される...

おすすめ: vagex-VPS アイドルマネー稼ぎ オープン登録

Vagex の登録受付が開始されました。公式 Web サイト (http://vagex.com/)...

SEOで一生懸命働いて感じたこと、考えたこと、得たもの

私は自分のウェブサイトを宣伝した経験と、よく使ういくつかの方法を皆さんと共有したいと思います。最初は...

#おすすめ# 247ホスト仮想ホスト/月額1.49ドル/ハードディスク100g/トラフィック無制限

247-host.com は 2004 年から運営されており、仮想ホスティング、再販業者、VPS (...