1分で分かる!マイクロサービスとは?
最近、ゾウさんが開発・運営しているSNSサービスのアニマルグラム、なんかHadoopのエラーが多い気がするなぁ。
ジャバード先生!大変!!大変!!
ことりん君、そんなに急いでどうしたの?
あのね、ゾウさんがアニマルグラムってSNSサービスを開発しているじゃん?
あぁ、ちょうどアニマルグラムを使おうとしていたところだよ。でも、障害が起こっているみたいだね。
そう!ゾウさんがいうには、ユーザーが急激に増えているらしいんだけど、それが原因で高負荷な状態が続いてしまい、エラーが発生しているみたいなんだって。
なるほど。
あとアニマルグラムはインフラにAWSを使っているらしいんだ。で、高負荷になったときは自動的にAWS側で性能をアップしてくれるようになっているんだけど、その費用もかなりかさんできてるみたい。
自動的に性能を調整してくれるやつは、オートスケールという機能だね。だいたい状況はわかったよ。
何かいい案ありそうかな??
ことりん君、思い切ってゾウさんにマイクロサービス (Microservices)を提案したらどうだろう?
マイクロサービス??
そう。マイクロサービスっていうのは、ソフトウェアを開発する手法の1つなんだ。
どんな特徴があるの?
マイクロサービスを知るためには、まずモノリシックアーキテクチャを理解しよう。マイクロサービスとモノリシックアーキテクチャは、よく比較される開発手法なんだ。
じゃあモノリシックアーキテクチャってどういう開発手法??
モノリシックっていうのは「一枚岩」とか「がっちり固まっている」という意味があるんだ。アプリケーションっていろんな機能があるんだけど、それらの機能を1つのアプリケーションとして開発するのがモノリシックアーキテクチャだよ。
ふむふむ。
もう少し詳しく説明すると、1つのアプリケーションってことは、デプロイ(構築)も1つのサーバーに対して行う必要があるし、いろんな機能で修正しててもリリースはタイミングを合わせないといけないし、当然のように聞こえるけどそれぞれの機能はすべて同じプログラミング言語で開発する必要があるんだ。
なんか一般的なアプリケーション開発って感じだよね。でも、たしかにちょっと窮屈そうに聞こえるね。じゃあ、マイクロサービスだとどうなるの??
簡単にいうと、マイクロサービスっていうのは、1つひとつの機能をそれぞれ別々のアプリケーションとして最小単位で開発しましょうね、っていう手法なんだ。
小さくぶつ切りにしちゃうからマイクロってことだね!でも、それだと何がうれしいの?結局開発する機能は同じなんだよね?
1つひとつの機能が別のアプリケーションっていうことはね、機能ごとに別のサーバーに配置できるってことなんだ。たとえば、A、B、Cという機能があるとしよう。モノリシックアーキテクチャの場合は、A、B、Cすべてを1台のサーバーに配置する必要がある。でも、マイクロサービスの場合は、AはサーバーXに、BはサーバーYに、CはサーバーZに配置することができるんだ。
あぁそういうことか!じゃあもしサーバーXで障害が発生しても、サーバーYとZに乗っている機能はそのまま使うことができそうだね!
そうだね!ことりん君がいうように障害にも強くなるし、スケール対象のサーバーも最小限でよくなるからコスト的にもお得になる可能性があるんだ!それに機能ごとに別のアプリケーションになるってことは、機能AはPythonで、機能BはJavaで、機能CはPHPで開発するということもできるんだ。
そっか!たしかにそうだね!
機能によって特性があるから最適なプログラミング言語やフレームワークを使えるのは、エンジニアとしても嬉しいところだね!
なんかゾウさんの悩み一発で解決できそうだね!ジャバード先生ありがとう!またね!
あ、でもモノリシックアーキテクチャからマイクロサービスアーキテクチャの移行には気を付けないとダメだよ!ってもう行っちゃったか…。
マイクロサービスとは?採用に役立つマイクロサービスの基礎知識
マイクロサービスとはソフトウェア開発手法の1つです。アプリケーションを開発する際、大きな1つの機能として開発するのではなく、できるだけ小さな機能(サービス)に分割します。そして、それらを組み合わせて1つのアプリケーションを構成するといった手法です。
マイクロサービスのメリットは主に以下のような点です。
- マイクロサービス単位で最適な技術要素を選択できる
- 機能間が疎結合であるため改修時の範囲を限定できる
- それぞれの機能ごとに容易にスケールできる
- 耐障害性が向上する
なお、昨今の開発においてマイクロサービスを実現するためにAWSやAzureといったクラウドサービスが必要不可欠となっています。
マイクロサービスに関連があるエンジニア
マイクロサービスは、どのようなアプリケーションにも適用できる開発手法です。その中でもWebアプリケーションやスマートフォンアプリなど、急激に負荷があがりやすい特性があるアプリケーションに最適です。
そのため、アプリケーション開発側としてはサーバーサイド(バックエンド)エンジニアやネイティブアプリエンジニア、インフラ側としてはインフラ(サーバー)エンジニア、インフラ基盤(データベース)エンジニア、インフラ(ネットワーク)エンジニアなどが関連します。
マイクロサービスに関連があるエンジニアの特徴と在籍業界
マイクロサービスを推進していくエンジニアは、様々な知見が必要となります。業務面に関する知識はもちろん、アーキテクチャ的な視点、インフラの知識などです。そのため、数あるエンジニアの職種の中でもかなりデキる人が多いといえます。
なお、業界としては前述したようにWeb業界やスマートフォンアプリ業界に多く在籍しています。
採用する時に知っておくとよいこと
マイクロサービスへ移行する企業が増えている?
マイクロサービス自体は2015年あたりから注目されはじめたワードですが、現在も様々な企業の様々なサービスがモノリシックアーキテクチャから、マイクロサービス化へのリプレイスを進めています。そういった企業の多くは急拡大してきたため開発が追い付かず、そのままモノリシックアーキテクチャ型のアプリケーションをベースとしていたようです。
一例をあげるとZOZOやDMMなどといったテック企業が、マイクロサービスの知見があるエンジニアを募集しています。採用もかなり苦労する可能性があることを認識しておきましょう。
求人のポイント
求人を作成する時は、下記の内容を求人に入れるとよいです。
1システム(サービス)の詳細
※特にそのシステム(サービス)をなぜ作っているのかを熱量をもって記載する。
2開発環境
3現在のエンジニア組織の体制
4現行システムの課題と募集の背景
5求められる業務と期待値
6エンジニアとしてのスキルアップ支援制度の有無と詳細
7エンジニアチーム内での相互成長のための仕組み(勉強会やLT会など)の有無と詳細
8選考フロー
9待遇
10キャリアパス
マイクロサービスの豆知識
マイクロサービスを使った有名な企業・サービス
既にマイクロサービスは様々な企業で取り入れられています。ここではいくつかの事例を紹介します。
LINE
コミュニケーションプラットフォームとして日本で確固たるポジションを築いているLINEですが、同社はかなり前からマイクロサービス化しています。
食べログ
食べログは日本を代表するグルメレビューサイトです。食べログではリリースして15年程度が経過しているため、ここでモノリシックアーキテクチャからマイクロサービスへの移行を決断したようです。
マイクロサービス関連の資格
マイクロサービスに関連する資格としては以下のようなものがあります。