Apache Software Foundationは先日、Apache Dubboをトップレベルプロジェクトとすることを発表した。Apache DubboはJavaをベースにした、オープンソースのリモートプロシージャコールフレームワークである。元々はAlibabaで開発されたもので、2011年にオープンソースとして公開され、2018年2月にApache Incubatorに入った。Dubboは、インターフェイスベースのリモートコール、フォールトトレランスとロードバランシング、自動サービス登録および検出などを、主要な機能として提供する。
Dubboのアーキテクチャを見てみよう。
(https://dubbo.apache.org/より引用)
Container
は、サービスProvider
のローンチ、ローディング、および実行を担当するProvider
は、初期化中に、自身のサービスをRegister
に登録するConsumer
は、起動時に、Register
から必要なサービスをサブスクライブするRegister
は、Provider
のリストをConsumer
に返すと同時に、変更が発生した場合には、変更されたデータをConsumer
にプッシュするConsumer
は、ソフトロードバランシングアルゴリズムに基づいてProvider
を選択して実行し、障害が発生した場合には自動的に別のProvider
を選択するConsumer
とProvider
は、いずれもサービスの呼び出し回数とメモリ内での時間消費をカウントし、統計情報をMonitor
に毎分送信する
Apache Dubboの機能は次のとおりだ。
- 透過的なインターフェイスをベースとするRPCである
- 複数のロードバランス戦略をサポートする、インテリジェントなロードバランシングが、設定なしで使用可能である
- 自動サービス登録および検出
- 高度な拡張性、マイクロカーネルおよびプラグイン設計により、プロトコル、トランスポート、シリアル化などのコア機能が、サードパーティの実装によって容易に拡張可能であることを保証する
- 実行時トラフィックルーティングにより、実行時の設定が可能で、さまざまなルールに従ってトラフィックをルーティングすることができることにより、ブルーグリーン・デプロイメントやデータセンタ対応のルーティングといった機能が簡単に実現可能である
- 視覚化されたサービスガバナンスにより、サービスメタデータ、ヘルスステータス、統計情報のクエリなど、サービスガバナンスとメンテナンスのための豊富なツールを提供する
Dubboの利用を開始するには、最初にMavenmの依存関係を追加する。
<dependencies>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>2.7.2<</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper</artifactId>
<version>2.7.2<</version>
<type>pom</type>
</dependency>
</dependencies>
次に、サービスインターフェイスを定義して、プロバイダに実装する。
package org.apache.dubbo.samples.api;
//service interface
public interface GreetingService {
String sayHello(String name);
}
//provider, implementation of service interface
public class GreetingServiceImpl implements GreetingService {
@Override
public String sayHello(String name) {
return "Hello " + name;
}
}
それが完了したら、プロバイダを設定する。
パッケージorg.apache.dubbo.demo.provider; org.apache.dubbo.configをインポートします。ApplicationConfig; org.apache.dubbo.configをインポートします。RegistryConfig; org.apache.dubbo.configをインポートします。ServiceConfig; org.apache.dubbo.samples.apiをインポートします。GreetingService; java.ioをインポートします。IOException;パブリッククラスApplication {public static void main(String [] args)throws IOException {ServiceConfig serviceConfig = new ServiceConfig (); serviceConfig.setApplication(new ApplicationConfig( "first-dubbo-provider")); serviceConfig.setRegistry(new RegistryConfig( "multicast://224.5.6.7:1234")); serviceConfig.setInterface(GreetingService.class); serviceConfig.setRef(new GreetingServiceImpl()); serviceConfig.export(); System.in.read(); }}
次に、ビルドして実行します:
# mvn clean package
# mvn -Djava.net.preferIPv4Stack=true -Dexec.mainClass=org.apache.dubbo.demo.provider.Application exec:java
次のコードスニペットでは、コンシューマの記述方法を示す。
package org.apache.dubbo.demo.consumer;
import org.apache.dubbo.config.ApplicationConfig;
import org.apache.dubbo.config.ReferenceConfig;
import org.apache.dubbo.config.RegistryConfig;
import org.apache.dubbo.samples.api.GreetingService;
public class Application {
public static void main(String[] args) {
ReferenceConfig referenceConfig = new ReferenceConfig();
referenceConfig.setApplication(new ApplicationConfig("first-dubbo-consumer"));
referenceConfig.setRegistry(new RegistryConfig("multicast://224.5.6.7:1234"));
referenceConfig.setInterface(GreetingService.class);
GreetingService greetingService = referenceConfig.get();
System.out.println(greetingService.sayHello("world"));
}
}
Dubboを使用して新たにプロジェクトを開始するのは、非常に簡単だ。上で我々が行ったようにするか、あるいは基本的にSpring initializrのフォークである、DubboのSpring initializrを使用すればよい。さらにDubboは、Java以外にもNode.js、Python、PHPをサポートする。
Apache Dubboは、Alibaba Group、China Life、China Telecom、Dangdang、Didi Chuxing、Haier、中国産業銀行、NetEase、Qunar、Youzanなどの企業で使用されている。
Dubboの詳細については、https://dubbo.apache.orgを参照して頂きたい。また、コントリビューションを希望する場合は、 コントリビュータ・ガイドを確認する必要がある。ドキュメントも用意されている。