AppleがServiceTalkをオープンソース化した。これはNetty上に共通の拡張可能なネットワーク抽象化を提供するJVMネットワークアプリケーションフレームワークだ。ServiceTalkが作られたのは、スレッド化やユーザビリティなどNettyが提供する低レベルの抽象化を改善するためだ。HTTP/1.x、HTTP/2.0、gRPCなどよく使われるプロトコルに対して高レベルでターゲットを絞ったAPIを提供し、クライアントサイドのロードバランシングやサービスディスカバリ統合を含む一貫したネットワーキングスタックおよび機能セットを備えている。
ServiceTalkは、各種ブロッキングパターンを含むReactive Streamsに基づく様々なプログラミングパラダイムをサポートするよう設計されており、特に、同期および非同期のAPI境界をまたぐ強力なユーティリティを備えている。これにより開発者は、アプリケーション内で今のところ必要ない非同期制御フローの複雑さを先送りすることができる。Reactive Streamsオペレーターのネイティブ実装は、メモリ消費の制限、AsyncContext
やデフォルトでのブロッキングセーフなど同期・非同期横断の機能、Reactive Streams仕様における同時実行ルールを活用したサーバーサイドユースケースの最適化に重点を置いている。
ServiceTalkをオープンソース化した目的は、Javaコミュニティからのコントリビューションが可能なビルディングブロックを提供することだ。これまでJavaコミュニティで築いてきた関係により、AppleはServiceTalkで同様のコミュニティを育成することを望んでいる。AppleはInfoQに対して、ServiceTalkは短期間でオープンソース化され、Project Reactor、Micronaut、RxJava、gRPC、Vert.xなどからの関心が高まっている、と語った。
Appleはまた、JavaコミュニティがServiceTalkに貢献する機会は、次のような領域でたくさんあると語っている。Spring Boot、Micronaut、Project Reactorとの統合、既存および新規プロトコルに対する機能強化、プラグイン可能なServiceDiscoverer
APIを介したサービスディスカバリとの統合、新しいReactive Streams オペレーターの実装、クライアントサイドのロードバランシング領域で現在進行中の作業などだ。
ServiceTalkを使ってみるには、非同期およびブロッキング環境のためのHTTPとgRPCのサンプルを学ぶとよいだろう。