こんにちは、 オイシックス・ラ・大地エンジニアの大舘です。 入社してから早くも半年が経とうとしており、どうにか会社や開発業務にも慣れてきました。業務では、前回の記事で少しだけ触れたSpring BootとKubernetesを用いたOisixシステムのマイクロサービス化に関わっています。
マイクロサービス(Microservices)とは、いくつもの小さなサービスを連携させて1つのサービスとして提供するシステムを意味します。一方、このマイクロサービスとよく比較されるものにモノリス(Monolith)があります。一枚岩という意味を持ち、各機能を密に結合させて、1つのサービスとして設計されたシステムを意味します。現在、Oisixでは、システムをモノリスの状態から小さなサービスごとに順次切り出すことで、マイクロサービスの状態へと移行しています。
そこで、今回の記事では、Oisixがマイクロサービス化に取り組んでいる理由と、実際に開発をしていて感じるマイクロサービスのメリットについて書いていきます。
Oisixがマイクロサービス化に取り組んでいる3つの理由
1. 品質を維持したまま開発を継続していくため
マイクロサービス化により、システムの粒度が下がり、モノリスの状態では見えにくくなってしまっていたシステム構造の見通しがよくなります。また、変更の影響が全体に及ばなくなるため、リファクタリングがしやすくなり、結果として、各サービス、そして、システムの品質を維持しつつ、開発を継続することが可能となります。
2. ローンチスピードを向上させるため
マイクロサービス化により、一部を変更した際に全体をビルド・リリースする必要がなくなるため、PDCAを早く回していくことが可能となります。結果として、開発・リリースにかかる時間が少なくなり、ローンチスピードを向上させることが可能となります。
3. スケーラビリティを向上させるため
マイクロサービス化により、各サービス毎に検証が行えるため、ボトルネックの特定が容易になります。また、大きなシステム全体でスペックアップを考える必要が無くなり、必要な特定のサービスだけをスペックアップすることが可能となります。
実際に開発をしていて感じるマイクロサービスの2つのメリット
1. 処理の流れを把握しやすい
モノリスなシステムの開発をする際、他からどのようにしてデータを受け取り、その後どこにどのようにして受け渡しているのかなど、開発の対象となる部分以外とのやりとりが複雑で、それを理解するのに一苦労でした。一方で、マイクロサービス化されたシステムでは、他のサービスとの連携箇所以外は、開発対象の小さなサービス内でデータの流れが完結していることがわかっているため、処理の流れが理解しやすいと感じます。
2. 問題を発見しやすい
モノリスなシステムでは、エラーが生じた場合、巨大なシステム全体を考慮し、少しずつ問題の切り分けをしていく必要があります。これを効率よく行うには、そのシステムに関する知識や経験が必要であるため、問題の切り分けが難しい場合があります。一方、マイクロサービス化されたシステムでは、エラーが生じた場合、問題がありそうなサービスを正しく動いていたバージョンと切り替えて検証したり、各サービス毎で問題なく動くかを検証したりすることが容易に行えます。これにより、問題の切り分けが以前よりずっと簡単になったと感じます。 以上が、Oisixがマイクロサービス化に取り組んでいる理由と、実際に開発をしていて感じるマイクロサービスのメリットです。 今回は実際に開発をしている視点からマイクロサービスについて書きました。開発業務をしていてよく思うのが、新しい技術やツールなどは実際に触ってみないとよくわからないということです。そういった点で、新人でもどんどん新しい技術やツールに触らせてくれるので楽しいです。冒頭で触れたようにOisixのマイクロサービスは、Spring BootとDocker、Kubernetes、Microsoft Azureを利用して構築を行なっているのですが、これらも今では毎日触って理解を深められています。また、所属しているチームで定期的に開催される技術やツールの勉強会に参加することでよりスピーディーに成長できていると感じています。。これからも手を動かすことと、知識をつけることを積極的に行ってもっとエンジニアとして力をつけていきたいです。