ホームページ >バックエンド開発 >Python チュートリアル >Dubbo が Go で書き直されるのはなぜですか?

Dubbo が Go で書き直されるのはなぜですか?

WBOY
WBOY転載
2023-04-10 12:51:031345ブラウズ

[[443126]]

最初に一言言わせてください

私は技術的な「なぜ」の質問をよく考えます。 「歩いているとき、時々、ある問題について長い間考えますが、その問題のすべての点について自分自身を納得させるまで、それは終わりません。そこで、その思いを記録し、新たなシリーズとして記事にしたいと思います。これらの記事ではコードを見ることはできないかもしれませんが、見落とされがちないくつかの問題と、問題のより深い「理由」を垣間見ることができます。

今日は最初の記事です。なぜ 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 を使用するのかということです。

プログラミング言語の選択

ビジネスにおけるプログラミング言語の選択について会社内, 最も重要なことは効率であり、その他の点は二の次だと思います。営利企業の主な目的は利益を上げることなので、どのような言語であっても、最小限のコストで同等の利益が得られるのであれば、それは良い言語です。

効率にはいくつかの側面が含まれます:

    開発効率。開発効率が高く、プロジェクトをできるだけ早く立ち上げ、市場を占有し、人件費も節約できます。
  • 業務効率も向上します。運用効率が高く、サーバーコストを節約できます。
Alibaba など、多くの国内営利企業の選択肢を見てみます。

アリババの初期には開発効率を重視してPHPを採用していましたが、事業の発展に伴いPHPのパフォーマンスが追いつかなくなり、PHPへの変更が必要となりました。作業効率の高い言語です。

動作効率が高いというと当然C/Cが思い浮かびますが、この2言語は開発効率が低く、開発効率と動作効率のバランスをとる必要があるため、アリババはJavaを選択しました。 。

Alibaba が Java を選択した理由を Zhihu で正式に回答したとき、彼らは主に次のことを考慮しました: パフォーマンス、シンプルさと学習のしやすさ、豊かなエコロジー、活発なコミュニティ

パフォーマンスを第一に考え、シンプルにする「学びやすい」「豊かな生態系」「活発なコミュニティ」を実は開発効率といい、これらの利点があるからこそ開発効率が高いのです。

アリババが Java を選択したとき、同社は数多くの Java ミドルウェアを開発し、多くの Java 人材を育成したため、他の企業もテクノロジーを選択する際にアリババを参考にし、結果的に Java を選択する企業が増えました。

Go を選択する場合も同様です。若い企業の中には、初期段階では PHP や Python などのスクリプト言語を使用する場合がありますが、成長して成長した後は、アリババと同じ問題に直面することになります。 : パフォーマンスの問題。

Go は 2012 年にリリースされ、誰もが他の選択肢を持っていました。Go はパフォーマンスが高く、非常にシンプルで使いやすいです。ByteDance などの新しい企業が主に Go を使用しています。

したがって、全体的には、Java または Go を選択するのが合理的であり、存在するのが合理的です。

なぜ一部の企業は Java を選択するのに、Go を使いたがるのですか?

    Java と比較して、Go 言語は起動が速く、コンパイル速度が速く、メモリ使用量が小さく、高機能に優れています。同時実行性(協調性)(処理性)が高いため、すでにJavaを導入している企業でもGoを検討することになりますが、現状ではそのような企業はごく一部です。
  • 一部の企業には必須のテクノロジー スタックがないため、新しい部門や新しいビジネスは制約を取り除き、開発に新しい言語 Go を選択できます。
まとめ

まとめると、Java か Go を選択するのが合理的であり、企業内で両方を選択することも合理的であり、割合は大きくないものの、それでも合理的です。 . Java と Go の通信が必要です。

RPC フレームワークにおける Dubbo の勝利

同社は初期の頃は単一のサービスを使用するのが一般的でしたが、ある程度の規模に達し、単一のアプリケーションではビジネスの展開をサポートできなくなると、マイクロサービス アーキテクチャ現時点では、便利な RPC フレームワークが必要です。

Java 言語に適応できる RPC フレームワークの中で、Dubbo は中国で最も古いオープンソースであり、2011 年にオープンソース化されました。

Spring Cloud などの類似した競合製品は 2014 年にオープンソース化され、Weibo の Motan は 2017 年にオープンソース化され、クロスランゲージ gRPC は 2015 年にオープンソース化され、Thrift2 は 2007 年にオープンソース化されました。

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 サイトの他の関連記事を参照してください。

声明:
この記事は51cto.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。