Dubbo が Go で書き直されるのはなぜですか?
最初に一言言わせてください
私は技術的な「なぜ」の質問をよく考えます。 「歩いているとき、時々、ある問題について長い間考えますが、その問題のすべての点について自分自身を納得させるまで、それは終わりません。そこで、その思いを記録し、新たなシリーズとして記事にしたいと思います。これらの記事ではコードを見ることはできないかもしれませんが、見落とされがちないくつかの問題と、問題のより深い「理由」を垣間見ることができます。
今日は最初の記事です。なぜ Dubbo を Go で書き直す必要があるのですか?
Dubbo は Alibaba で生まれ、2011 年にオープンソース化されましたが、10 年が経ちました。 2019 年に Go で書き直されてオープンソース化され、2 年後の現在ではオリジナルの V1.0.0 バージョンから V3.0.0 に開発され、スター数は現在 3.8K となっています。
ある同僚が、なぜ Dubbo のような「古い」プロジェクトを Go で書き直す必要があるのかと尋ねました。それには実用的な意味がありますか?
今日は私の意見をいくつか話させてください。
過去と未来をつなぐ
この質問にうまく答えるには、Dubbo-go の本来の目的から始める必要があると思います。GitHub ホームページでは次のように紹介されています。
##正式な中国語訳は Apache Dubbo Go 言語実装、Java と Golang 間のブリッジの構築、gRPC との相互接続です。 /Dubbo エコシステムの相互運用性により、Java エコシステムはクラウド ネイティブ時代の技術的恩恵を享受できるようになります。 わかりやすく言い換えると、会社や部門で Java バージョンの Dubbo を使用する人もいれば、Go を使用する人もいます。この 2 つはコミュニケーションする必要があるため、Dubbo-Go はコミュニケーションを解決するために作成されました。問題。 最初の質問は、なぜ企業が Java を使用し、次に Go を使用するのかということです。プログラミング言語の選択ビジネスにおけるプログラミング言語の選択について会社内, 最も重要なことは効率であり、その他の点は二の次だと思います。営利企業の主な目的は利益を上げることなので、どのような言語であっても、最小限のコストで同等の利益が得られるのであれば、それは良い言語です。 効率にはいくつかの側面が含まれます:- 開発効率。開発効率が高く、プロジェクトをできるだけ早く立ち上げ、市場を占有し、人件費も節約できます。
- 業務効率も向上します。運用効率が高く、サーバーコストを節約できます。
- Java と比較して、Go 言語は起動が速く、コンパイル速度が速く、メモリ使用量が小さく、高機能に優れています。同時実行性(協調性)(処理性)が高いため、すでにJavaを導入している企業でもGoを検討することになりますが、現状ではそのような企業はごく一部です。
- 一部の企業には必須のテクノロジー スタックがないため、新しい部門や新しいビジネスは制約を取り除き、開発に新しい言語 Go を選択できます。
Thrift のみがこれより古いですが、Thrift は単なる RPC フレームワークであるのに対し、Dubbo には、サービスの登録と検出、ロード バランシング、フォールト トレランス、動的構成などのすぐに使用できるサービス管理機能が含まれています。
初期の Java RPC フレームワークには選択肢がなかったと言えます。
RPC フレームワークが隆盛を極め、多くの企業が RPC フレームワークを使用し、アリババの支持を得ている時代でも、Dubbo は依然としてその地位を保っています。
概要
企業が Java プログラミング言語と Dubbo フレームワーク (まだ多くの選択肢があります) を選択し、その後 Go を試してみたい場合、または一部の新しいビジネスや新しい部門で Go を試してみたい場合その際、Go で Java の Dubbo とどのように通信するかという問題に直面しました。
Dubbo プロトコルはプライベート プロトコルであるため、Go で再実装するコストは依然としてかなり高くなります。この観点から見ると、Dubbo-Go は Java と Go の間の通信において依然として大きな価値を持っています。
スレッド プールとの闘いに終止符を打つ
Dubbo フレームワークを使用する場合、多くの場合、Dubbo ゲートウェイが必要になります。Dubbo ゲートウェイの詳細については、私の記事「The Evolution」を参照してください。マイクロサービス ゲートウェイの」。
この記事では、Dubbo ゲートウェイの背景、困難、選択、設計、進化、落とし穴の経験を詳しく紹介し、「スレッド プールで何をしたか」を紹介することに多くの時間を費やしました。 ", Java ではスレッドは非常に貴重ですが、Dubbo ゲートウェイが同期的に呼び出される場合、1 つのリクエストが 1 つのスレッドを占有する必要があり、その結果同時実行エラーが発生し、スレッド プールがいっぱいになると他のリクエストに影響を及ぼします。
したがって、解決策は、スレッド プールを分離するか、スレッド プールを非同期呼び出しに変更することです。分離スレッドプールはリクエストが相互に影響を及ぼさないという問題を解決するだけで、同時実行性はまだ向上していません。非同期呼び出しに変更すると問題は完全に解決されますが、コーディングが複雑すぎます。
Go のコルーチンはこの問題を解決できます。Go のコルーチンは非常に軽量で、スケジューリング効率が高いため、単純なコードで非常に効率的なゲートウェイを作成できます。
たとえば、Nginx のパフォーマンスは誰にとっても明らかであると直感的に感じることができますが、Java を使用して実装する場合、Nginx のパフォーマンスを達成するために何台のマシンをスタックする必要があるかわかりません。ただし、Baidu はリバース プロキシの作成に Go を使用しており、Nginx の代わりに BFE を使用すると、そのパフォーマンスがいかに誇張されているかがわかります。
コルーチンの概要と原則については、私の記事「1 年間 Golang を書いて、プロセス、スレッド、コルーチンについて話しましょう」を参照してください。
概要
Dubbo ゲートウェイでは、Dubbo-Go も新しいソリューションを提供します。Tuya Smart はオンラインで使用するための Dubbo-Go ゲートウェイをすでに備えており、Dubbo-go としてオープンソース化されています。貔貅。
Dubbo Mesh への道を拓く
ServiceMesh は徐々に次世代のマイクロサービス アーキテクチャになりつつあり、K8S、Docker、その他のクラウドネイティブ基盤であっても、Go は間違いなく Mesh 上で輝くスター言語ですこれらの機能はすべて Go で書かれており、Go の開発速度とコルーチンの高い同時実行機能により、Go は Mesh に推奨される言語となっています。
これに基づいて、Dubbo のメッシュ化と Dubbo-Go もその道を切り開きました。ただし、DubboMesh はまだ小規模な段階にあり、完全な実装ソリューションはオープンソースではありません。同社は DubboMesh の道を歩みたいと考えており、Dubbo-Go も考慮すべき点の 1 つである可能性があります。
概要
ここまで述べたので、Dubbo を Go で書き直す必要がある理由に直接答える時が来ました。この質問に対する答えは依然として公式の文です: Java と Golang の間のギャップを埋める。 橋。なぜ「この橋を架ける」必要があるのかについては、下の図を参照してください。
以上がDubbo が Go で書き直されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック

Java の乱数ジェネレーターのガイド。ここでは、Java の関数について例を挙げて説明し、2 つの異なるジェネレーターについて例を挙げて説明します。

Java のアームストロング番号に関するガイド。ここでは、Java でのアームストロング数の概要とコードの一部について説明します。

Java の Weka へのガイド。ここでは、weka java の概要、使い方、プラットフォームの種類、利点について例を交えて説明します。

この記事では、Java Spring の面接で最もよく聞かれる質問とその詳細な回答をまとめました。面接を突破できるように。

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです
