目次
[[443126]]" >[[443126]]
最初に一言言わせてください
過去と未来をつなぐ
概要
スレッド プールとの闘いに終止符を打つ
Dubbo Mesh への道を拓く
ホームページ バックエンド開発 Python チュートリアル Dubbo が Go で書き直されるのはなぜですか?

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

Apr 10, 2023 pm 12:51 PM
java go dubbo

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

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

今日は最初の記事です。なぜ 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 サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

Javaの平方根 Javaの平方根 Aug 30, 2024 pm 04:26 PM

Java の平方根のガイド。ここでは、Java で平方根がどのように機能するかを、例とそのコード実装をそれぞれ示して説明します。

Javaの完全数 Javaの完全数 Aug 30, 2024 pm 04:28 PM

Java における完全数のガイド。ここでは、定義、Java で完全数を確認する方法、コード実装の例について説明します。

Java の乱数ジェネレーター Java の乱数ジェネレーター Aug 30, 2024 pm 04:27 PM

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

Javaのアームストロング数 Javaのアームストロング数 Aug 30, 2024 pm 04:26 PM

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

ジャワのウェカ ジャワのウェカ Aug 30, 2024 pm 04:28 PM

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

Javaのスミス番号 Javaのスミス番号 Aug 30, 2024 pm 04:28 PM

Java のスミス番号のガイド。ここでは定義、Java でスミス番号を確認する方法について説明します。コード実装の例。

Java Springのインタビューの質問 Java Springのインタビューの質問 Aug 30, 2024 pm 04:29 PM

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

Java 8 Stream Foreachから休憩または戻ってきますか? Java 8 Stream Foreachから休憩または戻ってきますか? Feb 07, 2025 pm 12:09 PM

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

See all articles