フレームワークとは
フレームワークは、開発の足場や標準的なひな型と考えられます。
必要な部品が用意され、繰り返しの作業を減らせます。プロジェクトの書き方やディレクトリ構成もそろうので、読みやすくなります。
社内で共通のフレームワークを使えば、引き継ぎや保守がしやすくなります。脆弱性への対応も共通化できますが、各サービスの依存関係の更新は必要です。ログや監視などの共通処理を部品として用意すれば、開発者は業務の処理に集中でき、配線のためのコードを減らせます。
Java には Spring を中心とする広いエコシステムがあります。多くの問題は先人が経験しており、文書や技術記事も充実しています。この成熟した環境は強みです。
Go 開発で使うフレームワーク
Go は 2009 年に正式公開されました。Spring を中心とする Java と比べてフレームワークの選択肢が分散しており、大企業の独自実装やオープンソースの開発チームによるものがあります。
基盤チームは、自社の業務に合うフレームワークを開発することがあります。他のシステムとの接続、独自プロトコル、使いやすさ、安定性、セキュリティなどを考慮する必要があり、簡単な仕事ではありません。
学ぶときは、API の使い方だけでなく、実装の考え方を理解したいです。車輪を作るところから、車を作れるところへ進みたいと思います。
マイクロサービスの基本的な部品
-
ログ:異なる設定に対応する
-
設定管理:各サービスを個別に設定せず、集約して管理する
-
データベースへのアクセス
-
メッセージキュー:Kafka、RabbitMQ など
-
メトリクスと監視
-
トレーシング:リクエストの流れ全体を追い、ボトルネックを調べる
-
サービス登録と発見
-
依存性の注入
-
RPC:リモート呼び出しによるサービス間のデータ交換
-
サーキットブレーカーとレート制限:障害の連鎖を抑える
-
……
主なオープンソースの選択肢
-
- 小さな部品を組み合わせてマイクロサービスを実装する Go のツールキットです。
-
Go-micro
- 初期からある Go のフレームワークです。新しい Go との互換性は、使用するバージョンで確認します。
-
Go-kratos
- Bilibili が公開したフレームワークで、部品を選んだり独自実装を利用したりできます。
-
Kitex
- ByteDance が公開したフレームワークです。独自の netpoll を用い、性能を重視していますが、利用には一定の理解が必要です。
-
Go-zero
- TAL が公開した包括的なマイクロサービスフレームワークです。以前、夕食の時間に同社の前を通ったときは、退勤がわりと早そうに見えました。