IT用語

マイクロサービス設計の核心:サービスを“ゆるくつなぐ”という思想

毎日のようにコードを書きかえているのに、少し変えただけで別の場所がエラーになる。思ったより面倒。自分のせいじゃないのに、なぜか責任を感じてしまう。あなたの作業がスムーズに進まない理由、それは「システムがつながりすぎている」からかもしれない。

マイクロサービスってなに?

マイクロサービスは、システムの中身を小さなパーツに分ける考え方

たとえばネットショッピングのアプリを考える。ログイン、商品を見る、カートに入れる、注文する、支払いする。こういう機能をそれぞれ別のサービスに分けるのがマイクロサービス。

全部を1つにまとめて作る方法を「モノリシック」と呼ぶ。それに対して、小さな部品をバラバラに作って動かす方法がマイクロサービス。

ただ分けるだけじゃなくて、“どうつなぐか”がとても大事になる。

「ゆるくつなぐ」ってどういうこと?

マイクロサービスを支える考え方が「疎結合(そけつごう)」。

これは、サービス同士のつながりをできるだけ少なくしておくという意味。たとえば「ユーザー管理」と「支払い」のサービスがあったら、なるべくおたがいの中身を知らずにやりとりする。

学校でいうと、別のクラス同士が必要なことだけメッセージカードで伝え合うような感じ。直接行って手伝ったりはしないけど、ちゃんとつながってはいる。

この「ゆるいつながり」が、マイクロサービスのいちばん大事な部分になる。

疎結合でなにが良くなるの?

● 別々に作って、別々に動かせる

「ログイン」を作るチームと、「注文」を作るチームが、同時に作業できる。ほかのチームを待たなくていい。完成したらそれぞれ別に動かせる

● ひとつ止まっても、ほかは止まらない

「支払い」のサービスが一時的に止まっても、「商品を見る」はそのまま使える。全部が一気に止まることがないから安心。

● よく使うサービスだけパワーアップできる

たとえばセールで「注文」のサービスだけすごく使われるなら、その部分だけ数を増やして対応できる。他のサービスはそのままでOK。

● 道具が違っても一緒に使える

「ユーザー管理」はJava、「データ分析」はPython、とちがう作り方でも同じチームで動かせる。サービス同士は中身を知らなくても、決められたルールでやりとりする。

これら全部が「疎結合」でつながっているからできること。

逆に「つながりすぎる」とどうなるか?

「強結合(きょうけつごう)」という考え方になる。サービス同士がベッタリくっついている状態。

  • ひとつ変えたら全部に影響が出る
  • 1つが止まると全部が止まる
  • 作る順番を考えないと開発できない
  • デバッグ(原因さがし)がむずかしい

まるでたこ足配線で電気を使っていて、1本がショートしたら全部止まるような状態。

疎結合を作る方法

● APIという「共通のことば」を使う

RESTやgRPCなどのルールを使えば、どのサービスも同じルールで会話できる。中身がどうなっているかを知らなくてもOK。

● メッセージを送って「あとでやってもらう」

すぐに返事がいらないときは、メッセージキューという箱にリクエストを入れておく。サービスが落ちていても、あとで取り出してやってくれる。

学校で言えば、「後で見てね」ってメモを机に置いておくような感じ。

● おたがいの約束を決めておく

OpenAPIなどで「どういうやりとりをするか」を先に書いておけば、そのルールを守れば、中身は自由に変えてOK

レストランの注文票みたいなもので、「この紙通りに作ってね」とだけ伝えれば、あとは厨房がどう作っても自由。

サービスって何なの?

マイクロサービスでは、「サービス」はただの部品じゃない。

サービスには3つのものがある:

  1. データ(たとえばusersテーブル)
  2. やること(たとえばユーザーを作る、在庫をへらす)
  3. つなぐ口(API)

これらがセットになって、はじめて「サービス」と言える。

サービスはただのデータ置き場じゃない

たとえば「在庫管理」は、ただデータを記録するだけじゃない。

「在庫が少なくなったら自動で発注する」「ゼロになったら通知を出す」といった判断ルールも中に入っている

サービスは、小さな頭脳が入った部品とも言える。

例:ネットショッピングのマイクロサービス

サービス名やること
ユーザー管理登録、ログイン、認証など
注文管理注文の作成、ステータスの管理
在庫管理在庫数を減らす、ゼロなら自動で発注する

たとえばユーザーが注文すると、注文サービスが在庫サービスに「この商品へらして」とお願いする。それぞれが自分のことだけやっているけど、連携はしている

もし在庫サービスが一時的に止まっても、注文の情報はいったんメッセージキューに保存されてあとで処理できる。こうすると全体が止まらない。

困ることもある

疎結合にもむずかしさはある。

  • 原因を見つけるのがたいへんになる
  • サービスの数が増えると管理が大変
  • 通信が多くなるとスピードが落ちることもある

だけど工夫すればカバーできる。ツールやルールをちゃんと使えば大丈夫。

まとめ

マイクロサービスでは、「小さく分ける」だけじゃなく「どうつなげるか」がとても大事。

疎結合という考え方で、つながりすぎないようにしておくと、こわれにくくて動かしやすいシステムになる。

ゲームで言えば、ひとつのキャラが倒れてもパーティー全体が戦えるようなもの。

しっかり設計すれば、変化に強くて、チームで作りやすいアプリができあがる。やることは多いけど、いい未来を作る仕組みとして、とても使える考え方。