「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 初心者からロード バランサーまで: 学習アドベンチャーに挑戦

初心者からロード バランサーまで: 学習アドベンチャーに挑戦

2024 年 8 月 15 日に公開
ブラウズ:368

From Novice to Load Balancer: Go Learning Adventure

私はしばらくの間、主に Python と JavaScript でコーディングしてきました。私は Web アプリやスクリプトを構築し、機械学習にも手を出しました。しかし、私はもう少し低レベルなもの、つまりシステムやネットワークに手を染めるものを渇望していました。 Go はこの仕事に最適な言語のように思えました。

そこで、ロードバランサーを構築することにしました。これは、トラフィックを管理し、複数の接続を処理し、Go の同時実行機能を深く掘り下げる方法を学ぶ機会でした。私がどのようにやったかを詳しく見てみましょう。

宿題

コードの作成に取り掛かる前に、少し勉強する必要がありました。コンピューターがインターネット上でどのように通信するのか、使用する言語や相互検索の方法などを理解する必要がありました。また、誰がどの仕事をするかなど、コンピュータ間で作業を共有するさまざまな方法も検討しました。

次に、ワークスペースをセットアップします。適切なツールを入手し、コンピューターの準備が整っていることを確認しました。何かクールなものを作る前に、ワークショップの準備をするようなものでした。

なぜロードバランサーなのか?

さて、本題に進みましょう。なぜわざわざロードバランサーを使うのでしょうか?あなたのウェブサイトが超人気のピザ店であると想像してください。殺してるんじゃないの?しかし突然、町中の誰もがあなたのピザを欲しがるようになりました。基本的にオンラインオーブンである Web サイトが過熱し始めます。注文は山積みになり、顧客は怒り、最終的には生地の山ができてしまいます (比喩的に言えば)。

そこで、ロード バランサーが登場します。これは、非常に賢いピザの配達員を雇うようなものです。この男は、どのオーブン(またはサーバー)が空いているかを常に探しています。注文(またはリクエスト)が入ると、すぐに最も容量の多いオーブンに送ります。こうすることで、オーブン (またはサーバー) が過負荷になることはなく、全員が時間通りにピザ (または Web サイトのコンテンツ) を手に入れることができます。

つまり、ロード バランサーは Web サイトの交通警察のようなものです。たとえ事態がおかしくなったとしても、すべてがスムーズに進むようにします。

しかし、なぜそれを構築するのでしょうか? ロードバランサーはたくさんありますよね?内部でそれらがどのように機能するかを理解することは、状況を大きく変える可能性があります。さらに、独自のものを構築することは、ネットワーク、同時実行性、システム設計について学ぶのに最適な方法です。それは単に車を運転するのではなく、自分自身の車を組み立てるようなものです。関与したエンジニアリングに対するより深い評価が得られます。

嵐の前の沈黙: REST API の構築

ロード バランサーを使用する前に、トラフィックを分散するためのサービスがいくつか必要でした。ヘルスチェックとダミーワークロード用の基本的なエンドポイントを備えたシンプルな REST API を作成しました。これはロード バランサのテストベッドとして機能しました。

API の構築自体は Go の net/http パッケージを使用することで非常に簡単でした。ヘルスチェックと基本的な操作のためのエンドポイントを定義しました。ヘルス チェック エンドポイントはサーバーの健全性を示す単純なステータスを返しましたが、他のエンドポイントはワークロードをシミュレートするためにいくつかのダミー計算を実行しました。

ただし、これらのバックエンド サービスの信頼性を確保することが重要でした。ステータスを監視するために基本的なヘルスチェックを実装しました。これには、ヘルス チェック エンドポイントに定期的にリクエストを送信し、特定の時間枠内に応答がなかった場合にサーバーを異常としてマークすることが含まれていました。

念のため: ロード バランサの構築

次のステップは、実際のロード バランサーを構築することでした。これには、いくつかの重要なコンポーネントが関係していました。まず、利用可能なすべてのサーバーを追跡する方法が必要でした。アドレスや正常性状態など、各サーバーに関する情報を保存するレジストリを作成しました。このプロジェクトでは、単純なインメモリ構造を使用しましたが、運用環境では、etcd のような分散システムの方が適しています。

ロード バランサーの中核は、トラフィックを分散するために使用されるアルゴリズムです。基本的なラウンドロビン アプローチから始めましたが、特定の要件に基づいて、最小接続や加重ラウンド ロビンなどのより複雑な戦略を実装できます。

受信接続を処理するために、Go の net パッケージを使用してリスナー ソケットを作成しました。各受信接続は個別の goroutine によって処理され、同時処理が可能になりました。これは、大量のトラフィックを効率的に処理するために非常に重要でした。

バックエンド サーバーの可用性を確保することが最優先事項でした。サーバーのステータスを監視するために基本的なヘルスチェックを実装しました。サーバーに異常があることが判明した場合、そのサーバーはロード バランサーのローテーションから削除されました。ただし、実稼働環境では、アクティブ プローブや負荷ベースのチェックなど、より高度なヘルス チェックが必要になることがよくあります。

堅牢なロード バランサーの構築は、パフォーマンス、スケーラビリティ、フォールト トレランスなどの要素を慎重に考慮する必要がある複雑なタスクです。このプロジェクトは強固な基盤を提供しましたが、実稼働グレードのロード バランサには通常、追加機能と最適化が必要です。

それで、次は何ですか?

このロード バランサーの構築は、パズルを組み立てるようなものでした。タオルを投げたいと思ったことも確かにありましたが、すべてが一つにまとまったのを見る満足感にはそれだけの価値がありました。

Go の同時実行機能についてたくさん学びました。これは、複数の接続やバックグラウンド タスクを処理するために不可欠でした。リソースを効率的に管理する方法を理解することも重要なポイントでした。さらに、ネットワークの概念と回復力のあるシステムを構築する方法をしっかりと理解しました。

このロード バランサは出発点としては適していますが、道のりはまだ長いです。より高度なロード バランシング アルゴリズムを検討し、スティッキー セッションなどの機能を実装し、サービス ディスカバリ システムと統合したいと考えています。

負荷分散や Go についてさらに詳しく知りたい場合は、ぜひ試してみることをお勧めします。それは挑戦的ですが、やりがいのある旅です。以下のコメント欄でお気軽にあなたの経験を共有したり、質問したりしてください。

リリースステートメント この記事は次の場所に転載されています: https://dev.to/thelamedev/from-novice-to-load-balancer-go-learning-adventure-4e2b?1 侵害がある場合は、[email protected] に連絡して削除してください。それ
最新のチュートリアル もっと>
  • バッファ: Node.js
    バッファ: Node.js
    Node.js のバッファーの簡単なガイド Node.js の A Buffer は、生のバイナリ データを処理するために使用されます。これは、ストリーム、ファイル、またはネットワーク データを操作するときに役立ちます。 バッファの作成方法 文字列から: co...
    プログラミング 2024 年 11 月 5 日に公開
  • Node.js でのバージョン管理をマスターする
    Node.js でのバージョン管理をマスターする
    開発者として、私たちは異なる Node.js バージョンを必要とするプロジェクトに頻繁に遭遇します。このシナリオは、Node.js プロジェクトに定期的に関与していない新人開発者と経験豊富な開発者の両方にとって落とし穴です。各プロジェクトに正しい Node.js バージョンが使用されていることを確認...
    プログラミング 2024 年 11 月 5 日に公開
  • トラブルシューティングのために Go バイナリに Git リビジョン情報を埋め込む方法
    トラブルシューティングのために Go バイナリに Git リビジョン情報を埋め込む方法
    Go バイナリでの Git リビジョンの決定コードをデプロイするとき、バイナリをビルド元の Git リビジョンに関連付けると便利です。トラブルシューティングの目的。ただし、リビジョン番号を使用してソース コードを直接更新することは、ソースが変更されるため現実的ではありません。解決策: ビルド フラグ...
    プログラミング 2024 年 11 月 5 日に公開
  • 一般的な HTML タグ: 視点
    一般的な HTML タグ: 視点
    HTML (HyperText Markup Language) は Web 開発の基礎を形成し、インターネット上のすべての Web ページの構造として機能します。 2024 年には、最も一般的な HTML タグとその高度な使用法を理解することで、開発者はより効率的でアクセスしやすく、視覚的に魅力的...
    プログラミング 2024 年 11 月 5 日に公開
  • CSSメディアクエリ
    CSSメディアクエリ
    Web サイトがさまざまなデバイス間でシームレスに機能することを保証することが、これまで以上に重要になっています。ユーザーがデスクトップ、ラップトップ、タブレット、スマートフォンから Web サイトにアクセスするようになったため、レスポンシブ デザインが必須となっています。レスポンシブ デザインの中...
    プログラミング 2024 年 11 月 5 日に公開
  • JavaScript でのホイスティングを理解する: 包括的なガイド
    JavaScript でのホイスティングを理解する: 包括的なガイド
    JavaScript でのホイスティング ホイストは、変数と関数の宣言が、含まれるスコープ (グローバル スコープまたは関数スコープ) の先頭に移動 (または「ホイスト」) される動作です。コードが実行されます。これは、コード内で実際に宣言される前に変数や関数を使用できることを意味...
    プログラミング 2024 年 11 月 5 日に公開
  • Stripe を単一製品の Django Python ショップに統合する
    Stripe を単一製品の Django Python ショップに統合する
    In the first part of this series, we created a Django online shop with htmx. In this second part, we'll handle orders using Stripe. What We'll...
    プログラミング 2024 年 11 月 5 日に公開
  • Laravel でキューに入れられたジョブをテストするためのヒント
    Laravel でキューに入れられたジョブをテストするためのヒント
    Laravel アプリケーションを使用する場合、コマンドが負荷の高いタスクを実行する必要があるシナリオに遭遇するのが一般的です。メインプロセスのブロックを避けるために、キューで処理できるジョブにタスクをオフロードすることを決定することもできます。 例を見てみましょう。コマンド app:import-...
    プログラミング 2024 年 11 月 5 日に公開
  • 人間レベルの自然言語理解 (NLU) システムを作成する方法
    人間レベルの自然言語理解 (NLU) システムを作成する方法
    Scope: Creating an NLU system that fully understands and processes human languages in a wide range of contexts, from conversations to literature. ...
    プログラミング 2024 年 11 月 5 日に公開
  • JSTL を使用して HashMap 内で ArrayList を反復するにはどうすればよいですか?
    JSTL を使用して HashMap 内で ArrayList を反復するにはどうすればよいですか?
    JSTL を使用した HashMap 内の ArrayList の反復Web 開発では、JSTL (JavaServer Pages Standard Tag Library) は、JSP での一般的なタスクを簡素化するためのタグのセットを提供します ( Javaサーバーページ)。そのようなタスクの...
    プログラミング 2024 年 11 月 5 日に公開
  • Encore.ts — ElysiaJS や Hono よりも高速
    Encore.ts — ElysiaJS や Hono よりも高速
    数か月前、私たちは TypeScript 用のオープンソース バックエンド フレームワークである Encore.ts をリリースしました。 すでに多くのフレームワークが存在するため、私たちが行った珍しい設計上の決定のいくつかと、それがどのようにして驚くべきパフォーマンス数値につながるのかを共有したい...
    プログラミング 2024 年 11 月 5 日に公開
  • + を使用した文字列連結が文字列リテラルで失敗するのはなぜですか?
    + を使用した文字列連結が文字列リテラルで失敗するのはなぜですか?
    文字列リテラルと文字列の連結C では、演算子を使用して文字列と文字列リテラルを連結できます。ただし、この機能には混乱を招く可能性のある制限があります。質問の中で、作成者は文字列リテラル「Hello」、「,world」、および「!」を連結しようとしています。 2つの異なる方法で。最初の例:const ...
    プログラミング 2024 年 11 月 5 日に公開
  • React の再レンダリング: 最適なパフォーマンスのためのベスト プラクティス
    React の再レンダリング: 最適なパフォーマンスのためのベスト プラクティス
    React の効率的なレンダリング メカニズムは、その人気の主な理由の 1 つです。ただし、アプリケーションが複雑になるにつれて、コンポーネントの再レンダリングの管理がパフォーマンスを最適化するために重要になります。 React のレンダリング動作を最適化し、不必要な再レンダリングを回避するためのベ...
    プログラミング 2024 年 11 月 5 日に公開
  • 条件付き列の作成を実現する方法: Pandas DataFrame で If-Elif-Else を探索する?
    条件付き列の作成を実現する方法: Pandas DataFrame で If-Elif-Else を探索する?
    条件付き列の作成: Pandas の If-Elif-Else指定された問題では、新しい列を DataFrame に追加することが求められます一連の条件付き基準に基づいて決定されます。課題は、コードの効率性と可読性を維持しながらこれらの条件を実装することにあります。関数アプリケーションを使用したソリ...
    プログラミング 2024 年 11 月 5 日に公開
  • 秋さんのご紹介です!
    秋さんのご紹介です!
    Qiu のリリースを発表できることを嬉しく思います。これは、生の SQL を再び楽しくするために設計された、実用的な SQL クエリ ランナーです。正直に言うと、ORM にはその役割がありますが、単純な SQL を書きたいだけの場合は、少し圧倒されてしまう可能性があります。私は生の SQL クエリ...
    プログラミング 2024 年 11 月 5 日に公開

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3