ホームページ バックエンド開発 Golang Golang のマイクロサービスとは何ですか

Golang のマイクロサービスとは何ですか

Jan 03, 2023 am 10:11 AM
golang 言語を移動 マイクロサービス

golang では、マイクロサービス (ま​​たはマイクロサービス アーキテクチャ) は、単一のアプリケーションを一連の小さなサービスに分割し、サービスが相互に調整および連携することを提唱するソフトウェア アーキテクチャ スタイル (テクノロジ) です。ユーザー。各サービスは独自の独立したプロセスで実行され、サービスは軽量の通信メカニズム (通常は HTTP ベースの RESTful API) を使用して相互に通信します。各サービスは特定のビジネスを中心に構築されており、実稼働環境と同様に実稼働環境に独立してデプロイできます。環境など

Golang のマイクロサービスとは何ですか

このチュートリアルの動作環境: Windows 7 システム、GO バージョン 1.18、Dell G3 コンピューター。

マイクロサービスとは

マイクロサービス (マイクロサービス アーキテクチャ) は、ソフトウェア アーキテクチャ スタイル、サービス指向アーキテクチャ (SOA) アーキテクチャのバリエーションです。単一のアプリケーションを一連の小さなサービスに分割し、相互に調整および連携してユーザーに最終的な価値を提供することを推奨するスタイル。各サービスは独自の独立したプロセスで実行され、サービスは軽量の通信メカニズム (通常は HTTP ベースの RESTful API) を使用して相互に通信します。各サービスは特定のビジネスを中心に構築されており、実稼働環境や実稼働に類似した環境などに個別にデプロイできます。また、統一的かつ集中的なサービス管理メカニズムは可能な限り避けるべきであり、特定のサービスについては、コンテキストに基づいて適切な言語とツールを選択して構築する必要があります。

マイクロサービス (ま​​たはマイクロサービス アーキテクチャ) は、クラウド ネイティブのアーキテクチャ アプローチであり、単一のアプリケーションが、疎結合で独立して展開可能な多数の小さなコンポーネントまたはサービスで構成されます。通常、これらのサービスは、データベースやデータ モデルを含む独自のスタックを持ち、

  • は REST API を介して相互に通信します。イベント ストリームとメッセージ ブローカー 通信;##​​

  • #これらはビジネス機能ごとに編成されており、サービスを区切る線は、多くの場合、境界付きコンテキストと呼ばれます。

  • #マイクロサービスに関する議論の多くはアーキテクチャの定義と特性を中心に展開していますが、その価値は非常に単純なビジネスおよび組織の利点を通じてより一般的に理解できます。
  • コードの更新が簡単になります。

    チームは、コンポーネントごとに異なるスタックを使用できます。
  • コンポーネントは相互に独立してスケーリングできるため、単一の機能が過剰な負荷に直面する可能性があるため、アプリケーション全体をスケーリングする必要に伴う無駄とコストが削減されます。
  • マイクロサービスを使用する理由

このアーキテクチャは、アプリケーション全体を部分、小さなモジュールに分けて記述するのに役立ち、理解、開発、テストが容易になります。また、各サービスを、それぞれのサービスを明確に示す独立したサービスとして扱うのに役立ちます。目的。さらに、プロジェクトのアーキテクチャの一貫性を維持するのにも役立ちます (最初に設計されたアーキテクチャと実際に開発されたアーキテクチャの間にはほとんど違いがありません)。また、異なる独立したチームを設立してサービスを展開および拡張し、各チームが並行して開発できるようにすることもできます。このアーキテクチャではコードのリファクタリングが簡単になります。また、継続的デリバリーおよび展開プロセス (CI/CD) もサポートします。 マイクロサービスの構築に go を使用する理由

この問題について詳しく説明する前に。まず、Golang の利点についてお話します。 Golang は新しい言語ですが、他の言語と比べて多くの利点があります。 Golang で書かれたプログラムはより堅牢です。これらは、実行中のサービスを使用してプログラムが構築する高負荷に耐えることができます。 Golang は、マルチプロセッサ システムや Web アプリケーションに適しています。さらに、GitHub と簡単に統合して、分散コード パッケージを管理します。マイクロサービス アーキテクチャの有用性は、プログラムがスケーラブルである必要がある場合に主に反映されます。標準に完全に準拠した言語があるとすれば、それは Golang です。その理由は、C ファミリーのプログラミング言語を継承しており、Golang で書かれたコンポーネントは、同じファミリーの他の言語で書かれたコンポーネントと組み合わせるのが簡単だからです。 Go は C ファミリに由来していますが、C/C よりも効率的です。構文は単純で、Python に似ています。その構文は安定しており、最初の公開リリース以来ほとんど変更されていません。つまり、下位互換性があります。これにより、他の言語と比較して golang が優位になります。さらに、Golang のパフォーマンスは Python や Java よりもはるかに優れています。何よりも、C/C++ と同じくらいシンプルでありながら、読みやすく理解しやすいため、マイクロサービス アプリケーションの開発に最適です。

Golang のマイクロサービス アーキテクチャ フレームワーク

次に、マイクロサービス アーキテクチャに使用できるフレームワークについて説明します。次のフレームワークがあります。 Go Micro

Go Micro は、私がこれまでに出会った中で最も人気のある RPC フレームワークです。プラグイン可能な RPC フレームワークです。 Go Micro は次の機能を提供します。

サービス ディスカバリ: プログラムはサービス ディスカバリ システムに自動的に登録します。

    負荷分散: 提供します。エンドツーエンドの負荷分散。サービス インスタンス間でリクエストのバランスを取るのに役立ちます。
  • 同期通信: リクエスト/レスポンス トランスポート層を提供します

  • 非同期通信: パブリッシュおよびサブスクリプション機能が組み込まれています

  • メッセージ エンコーディング: ヘッダーの Content-Type を使用してエンコードおよびデコードできます

  • #RPC クライアント/サーバー: 上記の機能を利用し、マイクロサービスの構築に必要なインターフェイスを提供します

Go Micro アーキテクチャは 3 つのレイヤーで構成されます。抽象化の最初のレベルはサービス層です。 2 番目の層はクライアントサーバーモデル層です。サーバーはサービスを記述するためのブロックで構成されていますが、クライアントはサーバー モデルで記述されたサービスにリクエストを行うことを唯一の目的とするインターフェイスを提供します。

3 番目の層には、次の種類のプラグインがあります。

  • Broker: 非同期通信におけるメッセージ ブローカー (メッセージ ブローカー) のインターフェイスを提供します

  • コーデック: メッセージの暗号化または復号化に使用されます

  • レジストリ: サービス検索機能を提供します

  • セレクター: ペイロードの構築on register Balance

  • Transport: Transport はサービス間で同期リクエスト/レスポンスを行うための通信インターフェイスです

Sidecar と呼ばれるサービスも提供します。 。 Sidecar を使用すると、Go 以外の言語で書かれたサービスを統合できます。また、gRPC エンコード/デコード、サービス登録、HTTP リクエスト処理も提供します。

GO Kit

Go Kit は、マイクロサービスを構築するためのプログラミング ツールキットです。 Go Microとは異なり、バイナリパッケージとしてインポートできるライブラリです。 Go Kitのルールはシンプルです。次のように:

  • グローバル変数なし

  • 宣言的な構成

  • 明示的な依存関係

  • コントラクトとしてのインターフェース (インターフェース コントラクト)

  • ドメイン駆動設計 (DDD)

Go Kit は以下を提供します。コード パッケージ:

  • 認証 認証: BasicAuth および JWT

  • トランスポート プロトコル: HTTP、gRPC など

  • ロギング ログ: サービスの構造化ロギング インターフェイス

  • メトリクス メトリクス: CloudWatch、Statsd、Graphite など

  • トレース分散トレース : Zipkin および Opentracing

  • サービス ディスカバリーサービス ディスカバリー: Consul、Etcd、Eureka など

  • サーキットブレーカー 電流制限サーキット ブレーカー: Hystrix 実装Go 言語での

Go Kit サービス アーキテクチャは次のとおりです

Gizmo

Gizmo は、The New York のマイクロサービス ツールキットです回。これは、サーバー デーモンと pubsub デーモンを統合するパッケージを提供します。次のパッケージを公開します。

  • Server: SimpleServer (HTTP) および RPCServer (gRPC)

  • Server/kit の 2 つのサーバー実装を提供します。 Go Kit に基づく実験コード パッケージ

  • ##Config 構成: JSON ファイル、Consul k/v の JSON BLOB、または環境変数からの構成関数が含まれています
  • #Pubsub: キューからデータをパブリッシュおよび消費するための共通インターフェイスを提供します
  • ##Pubsub/pubsubtest: パブリッシャー インターフェイスとサブスクライバー インターフェイスのテスト実装が含まれます

  • #Web: リクエスト クエリとペイロードから型を解析するための外部関数

  • Pubsub パッケージは、次のキューを処理するためのインターフェイスを提供します。

pubsub /aws: Amazon SNS/SQS

  • pubsub/gcp: Google Pubsub

  • #pubsub/kafka: Kafka トピックの場合
  • pubsub/http: user HTTP Push
  • つまり、私の意見では、Gizmo は Go Micro と Go Kit の間のどこかにあります。 Go Micro のような完全なブラックボックスではありません。同時に、Go Kit ほど原始的ではありません。構成や pubsub パッケージなどの高レベルの構築コンポーネントを提供します。
  • Kite

Kite は、Go でマイクロサービスを開発するためのフレームワークです。 RPC クライアントおよびサーバー側のコード パッケージを公開します。作成されたサービスは、サービス検出システム Kontrol に自動的に登録されます。 Kontrol は Kite で書かれており、それ自体が Kite サービスです。これは、Kite マイクロサービスが独自の環境で適切に動作することを意味します。 Kite マイクロサービスを別のサービス検出システムに接続する必要がある場合は、カスタマイズが必要です。これが、私がリストから Kite を選択し、このフレームワークを導入しないことに決めた重要な理由の 1 つです。

[関連する推奨事項: Go ビデオ チュートリアル

プログラミング教育

]

以上がGolang のマイクロサービスとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

GOの浮動小数点番号操作に使用されるライブラリは何ですか? GOの浮動小数点番号操作に使用されるライブラリは何ですか? Apr 02, 2025 pm 02:06 PM

GO言語の浮動小数点数操作に使用されるライブラリは、精度を確保する方法を紹介します...

Go's Crawler Collyのキュースレッドの問題は何ですか? Go's Crawler Collyのキュースレッドの問題は何ですか? Apr 02, 2025 pm 02:09 PM

Go Crawler Collyのキュースレッドの問題は、Go言語でColly Crawler Libraryを使用する問題を調査します。 �...

GO言語の「VAR」と「タイプ」キーワード定義構造の違いは何ですか? GO言語の「VAR」と「タイプ」キーワード定義構造の違いは何ですか? Apr 02, 2025 pm 12:57 PM

GO言語で構造を定義する2つの方法:VARとタイプのキーワードの違い。構造を定義するとき、GO言語はしばしば2つの異なる執筆方法を見ます:最初...

GOのどのライブラリが大企業によって開発されていますか、それとも有名なオープンソースプロジェクトによって提供されていますか? GOのどのライブラリが大企業によって開発されていますか、それとも有名なオープンソースプロジェクトによって提供されていますか? Apr 02, 2025 pm 04:12 PM

大企業または有名なオープンソースプロジェクトによって開発されたGOのどのライブラリが開発されていますか? GOでプログラミングするとき、開発者はしばしばいくつかの一般的なニーズに遭遇します...

Goでは、Printlnとstring()関数を備えた文字列を印刷すると、なぜ異なる効果があるのですか? Goでは、Printlnとstring()関数を備えた文字列を印刷すると、なぜ異なる効果があるのですか? Apr 02, 2025 pm 02:03 PM

Go言語での文字列印刷の違い:printlnとstring()関数を使用する効果の違いはGOにあります...

Redisストリームを使用してGO言語でメッセージキューを実装する場合、user_idタイプの変換の問題を解決する方法は? Redisストリームを使用してGO言語でメッセージキューを実装する場合、user_idタイプの変換の問題を解決する方法は? Apr 02, 2025 pm 04:54 PM

redisstreamを使用してGo言語でメッセージキューを実装する問題は、GO言語とRedisを使用することです...

Golandのカスタム構造ラベルが表示されない場合はどうすればよいですか? Golandのカスタム構造ラベルが表示されない場合はどうすればよいですか? Apr 02, 2025 pm 05:09 PM

Golandのカスタム構造ラベルが表示されない場合はどうすればよいですか?ゴーランドを使用するためにGolandを使用する場合、多くの開発者はカスタム構造タグに遭遇します...

Golang Generic Function Typeの制約がVSCodeで自動的に削除されるという問題を解決する方法は? Golang Generic Function Typeの制約がVSCodeで自動的に削除されるという問題を解決する方法は? Apr 02, 2025 pm 02:15 PM

VSCODEユーザーのGolang Generic Function Typeの制約の自動削除は、VSCODEを使用してGolangコードを書くときに奇妙な問題に遭遇する可能性があります。いつ...

See all articles