マイクロサービスとオーケストレーションの必然性

うちのお客の話

「これからはマイクロサービスや!モノリスをマイクロサービスにリファクタリングしろ!」の掛け声の元、それらしきことを5年近く続けている。そんなのはもうとっくに無理だと気づいているし、では代わりにということで1から作りたいのだが、なかなかお客にはわかってもらえない。そんなこんなで気づいたことを後進のためにも記録しておく。

モノリスがマイクロサービス化できない主な理由

モノリスのことをとある本は巨大な泥団子と評していた。いや、泥団子なら叩けば割れるからまだマシとすら考えている。実際のモノリスは叩けば割れるような代物ではないことが多いと思う。かつて職務上の上司はストラングラーパターンだ!と言うことも言っていたが、これは高度にオブジェクト指向で設計されたものにのみ当てはまるもので、巨大なスパゲティコード群にはまるで役に立たないのだ。

なぜオブジェクト指向で作れないのか?

オブジェクト思考といっても色々なコンセプトの塊であるが、僕が特に重要視しているのは次の2つである。

  1. カプセル化

  2. 責務

まずは要件から管理対象となるオブジェクトを抽出してモデリングする。このオブジェクトはどのような責務を果たせばいいのか?そのモデルは何をプロパティとしてもち、責務を果たすための最低限のインターフェースは何か設計する。ところがこのオブジェクト、オブジェクト指向を学んでない人には難しい。わかりづらい。これはエセITエンジニアも同じである。
そして管理対象として伝票のようなものを丸々オブジェクトのプロパティとして設計し、たいていリレーショナルデータベースには丸々それが入るようにデータベース設計もする。
なぜこんなことが起きるかといえば、そもそも要望を出す人が自分たちのビジネスフローや業務フローの責務をきちんと分けれておらず、また分けることができないからである。また何が王道で、それ以外の例外はどのようにリカバリするか考えられていないからである。それをいかに自動でリカバリできるようにするか、人間が介入するのであればそれをいかに最小限に留めるかといった運用を決めておくことで、人手のかからないシステムとなるのである。

今までより業務が楽になるシステム、そもそも人がいらなくなるシステム

きちんとオブジェクト思考で設計されていること、そして人手がかからないことを設計していることというのは重要なことである。これが考えてられていなければ業務を遂行している人がちょっと便利に、楽になるけどコスパが見合わないものになるだけである。一方きちんと考えられていれば、経産省が2025年の崖と呼んでいる人材不足にも対応でき、人手をかけずに業務を遂行でいるシステムになるのだ。

人手のかからないシステムとは

先ほどは業務を遂行するにあたって、たとえ業務を遂行できない状況が発生した場合でもなるべく人手がかからないという話をしたが、これはシステムの運用でも同様である。マイクロサービス化を進めると、いいこともたくさんあるが、悪こともたくさんる。その一つがディプロイ作業だ。非常に面倒になる。これが自動化できていないと、変更作業があるたびに大量の手作業が発生し、(だいたい高価な)人が張り付かないと運用が立ち行かなくなる。

最近の身近な事例

僕が関わっているプロジェクトでは、SCMにGitHub、CI/CDにCircleCIを使っている。ディプロイする環境はAWSだ。2023/1/5にCircleCIでセキュリティインシデントが発生し、CircleCIに書き込まれている機微情報を一斉にローテートさせないといけない作業が発生した。あまり詳しいことはいえないのだが、僕が関わっているプロダクトでは一斉にAWS ECSのタスク定義の中身を修正し、ECSのサービスコンテナの再起動、スケジュール化されたタスクの後進に追われたのである。
このプロダクトはおよそ4年ほど前に、作ったものでまだそれほどマイクロサービスに関しての知見がなかった頃に右往左往しながら作ったもので、そもそも短命に終わる予定のものであった。だからそれほどの完全性を求めていたものでもなく、かなり突貫で作ったものでもあったから半ば仕方ないと思いながら、その更新作業を進めたのである。

本気でマイクロサービスをやるのであれば、

環境構築からディプロイまで全ての作業が自動化されなければならない。

最後に

こんなCircleCIがやらかしたことによる対応など、お客が喜んでお金を払ってくれるわけがない。じゃ、CircleCIが金を払ってくれるかといえばそんなことがあるわけもない。確かにCircleCIのインシデントという観点ではこんな大規模なものは初めてだ。それでもそんな時のためにも人間が立ち入る領域を最低限にする設計・運用がないと泣をみるという出来事であった。

この記事が気に入ったらサポートをしてみませんか?