良いコード例: 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 の世界を席巻する理由

推薦する

Baidu Union と Baidu Search Bidding: 誰が勝つでしょうか?

簡単に言えば、入札とは、検索エンジンで広告スペースを購入して、自分の製品やサービスを販売することを意...

ウェブサイト編集者がSEOをどのように活用しているかについて簡単に説明します

最近、エマーはLexun Mobile Expert Forumの編集部の同僚に簡単なSEOスキルの...

10大チャンネルが、APP海外プロモーションを成功させる方法を伝授します!

チャネル 1: 検索エンジンプロモーション海外にはGoogle、Bing、Yahoo、Yandex、...

新浪の数億ドルの投資はまだ利益を生んでおらず、微博の商業化は苦戦している

中国新聞社ITチャンネルによる地図中国新聞社、7月17日(ITチャンネル左盛丹) 課金するべきか、し...

ドメイン名投資ポジショニング分析: 鶏の頭よりも不死鳥の尾の方が良い

先日、A5チャットイベントにゲストが招かれ、ウェブマスター向けのドメイン名投資について講演しました。...

SEO 精神: 諦めずに粘り強く続ける

それは戦争に向かう行軍のようなものです。戦場に到着したり敵に遭遇する前に最後まで粘り強く戦わずに、途...

zgovps: 米国 VPS (トリプル ネットワーク AS4837)、月額 3.58 ドル、2G メモリ/1 コア/20g NVMe/700g トラフィック、Netflix\Spotify\Steam\Chatgpt などのブロック解除。

zgovpsは本日、ロサンゼルスデータセンターでVPSの販売を正式に開始しました。デフォルトでは、3...

Douyinの食品専門家の「オルタナティブ起業」:パーソナルマーケティングを活用して人気商品を管理

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています「人がいる...

3大クラウドストレージの詳細な比較: Google Drive、SkyDrive、Dropbox

昨日マイクロソフトはSkyDriveをリリースし、今日グーグルはGoogle Driveをリリースし...

検索エンジンのランキングに影響を与える要因は何ですか?

検索エンジンにおけるウェブサイトのランキングは、多くの要因によって決まります。すべてをまとめることは...

Longhorn、エンタープライズレベルのクラウドネイティブコンテナ分散ストレージのバックアップとリカバリ

[[419258]]目次スナップショットを作成する定期的なスナップショットとバックアップLongho...

SEOサービスに関するよくある質問:評判の構築と競争力の向上

インターネット時代においては、口コミによるマーケティングが重要です。 Qiying インターネット ...

KOL一掃の裏で、小紅書の「収益化クローズドループ」はどんどん遠ざかっているのか?

「今、私たちは金鉱のような存在で、多くの人が来て掘りたがっています。」 5月15日、小紅書の創業者Q...

業界ポータルSEOのボトルネック期間を解決する方法

みなさんこんにちは。私は徐子宇です。私はこれまで、企業サイトのSEO最適化業務に携わってきました。正...