マイクロサービス・アーキテクチャと共存する Ruby on Rails のアーキテクチャ的拡張 - その事例と可能性

近年、コンテナ技術やクラウドサービスの発展によって、必ずしも単一のプログラミング言語のみでシステムを構成しないケースも増えてきました。私たちのサービスにおいても、機械学習技術などの導入の必要から、5年前から Ruby 以外の言語と共存していく形で、マイクロサービス・アーキテクチャを段階的に導入してきました。

この取り組みの中で、Ruby on Rails 自体のアーキテクチャも見直しが必要になりました。例えば、通信に gRPC を採用する場合、HTTP を前提とした Rack の仕組みには乗ることができず、したがってコントローラー層も再定義する必要があります。ほかにも API スキーマの導入、API レスポンスの型付きの組み立て、ActiveRecord に依存しないデータのバッチローディング機構の導入などを行っています。

今回の発表では、これらの経験を踏まえて単一の統合システムとして設計された Ruby on Rails を Polyglot なマイクロサービス・アーキテクチャに適合させていくにあたって、どういった課題が一般的にあり、それを私たちのサービスにおいてはどのように解決したのかをお話しします。同じ課題を持っている方はもちろんのこと、アーキテクチャ拡張に対して開かれているという Rails の利点を見直す機会となり、今後の発展可能性の議論につながれば幸いです。

アバター画像
Sohei Takeno

ウォンテッドリー株式会社でプロダクト開発を行いながら、開発チームのアーキテクトとして活動しています。好きな WAF は Ruby on Rails と Google Spreadsheet です。