dubbo RPC は、dubbo システムの中核となる高性能、高スループットのリモート呼び出しメソッドです。
dubbo RPC は主に 2 つの dubbo システム間のリモート呼び出しに使用され、特に同時実行性が高くデータ量が少ないインターネット シナリオに適しています。
シリアル化は、リモート呼び出しの応答速度、スループット、ネットワーク帯域幅の消費にも重要な役割を果たします。
- 特に Java 言語の場合: Kryo、FST など。
-
これらのシリアル化メソッドのほとんどのパフォーマンスは、hessian2 よりも大幅に優れています (未熟な dubbo シリアル化も含めて)。
これを考慮して、dubbo が hessian2 を徐々に置き換えるために、2 つの効率的な Java シリアル化実装、Kryo と FST を導入します。
-
本番指向のアプリケーションでは、現時点では Kryo を推奨します。
-
Kryo と FST を有効にする
Kryo と FST の使用は非常に簡単で、dubbo RPC の XML 設定に属性を追加するだけです。
<dubbo:プロトコル名="dubbo" シリアライゼーション="kryo"/>
<dubbo:プロトコル名="dubbo" シリアライゼーション="fst"/>
シリアル化されたクラスを登録する
Kryo と FST を高いパフォーマンスで完全に実行するには、dubbo システムでシリアル化する必要があるクラスを登録するのが最善です。たとえば、次のコールバック インターフェイスを実装できます。
public class SerializationOptimizerImplimplements SerializationOptimizer { public Collection<Class> getSerializableClasses() { List<Class> クラス = new LinkedList<Class>(); クラス.add(BidRequest.class); クラス.add(BidResponse.class); クラス.add(デバイス.クラス); クラス.add(Geo.class); class.add(Impression.class); クラス.add(SeatBid.class); クラスを返します。 } }
次に、XML 構成を追加します。
<dubbo:protocol name="dubbo" Serialization="kryo" optimizer="com.alibaba.dubbo.demo.SerializationOptimizerImpl"/>
これらのクラスを登録すると、特に少数のネストされたオブジェクトの場合、シリアル化のパフォーマンスが大幅に向上する可能性があります。
-
もちろん、クラスをシリアル化する場合、Java コレクション クラスなどの多くのクラスへのカスケード参照が存在する可能性があります。この状況に対応して、以下のような共通クラスを繰り返し登録する必要がないように JDK に自動登録しました (もちろん繰り返し登録しても効果はありません)。
-
GregorianCalendar InvocationHandler BigDecimal BigInteger Pattern BitSet URI UUID HashMap ArrayList LinkedList HashSet TreeSet Hashtable Date Calendar ConcurrentHashMap SimpleDateFormat Vector BitSet StringBuffer StringBuilder Object Object[] String[] byte[] char[] int[] float[] double[]
Dubbo RPC のさまざまなシリアル化によって生成されるバイト サイズの比較
シリアル化によって生成されるバイトコードのサイズは、比較的決定的な指標であり、リモート呼び出しのネットワーク送信時間と帯域幅の使用量を決定します。
複雑なオブジェクトの結果は次のとおりです (数値が小さいほど良好です)。
シリアル化の実装 | 要求されたバイト数 | 応答バイト |
---|---|---|
クリオ | 272 | 90 |
FST | 288 | 96 |
ダボ連載 | 430 | 186 |
ヘッセ行列 | 546 | 329 |
ファストJson | 461 | 218 |
ジソン | 657 | 409 |
Java シリアル化 | 963 | 630 |
Dubbo RPC でのさまざまなシリアル化応答時間とスループットの比較
リモート呼び出し方法 | 平均応答時間 | 平均 TPS (1 秒あたりのトランザクション数) |
---|---|---|
REST: Jetty + JSON | 7.806 | 1280 |
REST: Jetty + JSON + GZIP | 全て | 全て |
REST: Jetty + XML | 全て | 全て |
REST: Jetty + XML + GZIP | 全て | 全て |
REST: Tomcat + JSON | 2.082 | 4796 |
REST: Netty + JSON | 2.182 | 4576 |
ダボ: FST | 1.211 | 8244 |
ダボ:カイロ | 1.182 | 8444 |
ダボ: ダボの連載 | 1.43 | 6982 |
ダボ: hessian2 | 1.49 | 6701 |
ダボ: fastjson | 1.572 | 6352 |