猿でもわかる!マイクロサービス入門(初心者・非エンジニア向け)
世の中、多くの変化がありますが、特にIT業界というのは非常に大きな変化があります。 パソコンが一般家庭に普及されてから、スマホがメインになるまでに、10年~20年程度の期間しか経っていません。 そんな変化は、一般人だけではなく、システム開発の分野でも起こっています。 今回は、今注目されている「マイクロサービス」というものについて、非エンジニアでもわかるように簡単に説明していこうと思います。
マイクロサービスとは
マイクロサービスとは マイクロサービスとは、その名前の通り 「小さな単位のサービス」 になります。
マイクロサービスは小さなシステムを多数組み合わせる手法
マイクロサービスは、小さなシステムを多数組み合わせることによって大きなシステムを作り上げる様な手法になります。 例えば、これまで一般的に作られてきたシステムでは、 ・在庫管理 ・商品管理 ・原価管理 ・工程管理 ・スケジュール管理 ・販売管理 など、多くの機能が1つにまとまっているシステムが主流でした。 これを、マイクロサービスとは反対の「モノリシック」という言葉が使われます。 マイクロサービスは、これらの仕組みを1つのソフトで行うのではなく、別々のものとして開発するような仕組みになります。
マイクロサービスを知る上で必須のAPIとは
基本的にマイクロサービスは、APIという仕組みを利用します。 APIとは、「Application Programming Interface」という仕組みになります。 APIは、多くのサービスで利用されており、HTTPアクセスというWEBサイトを見る仕組みを使い、データのやり取りを行うのが一般的です。 このAPIは、例えば自社で開発するシステムで、他社が作っているシステムの情報を活用したい場合などに使用されており、APIを開発している会社の仕様に従ってデータのやり取りをします。 適切に設計されていれば、APIを活用することで、その会社の重要な情報は漏洩せず、必要な情報だけを活用することが出来るのです。
特徴は「依存しあわない」仕組み
マイクロサービスの最も重要な構造が 「お互いに依存しあわない」 というものです。 それぞれが小さな単位のシステムでありながら、互いに依存しあわないというのが大きな特徴になります。 後述しますが、モノリシックなシステムの場合には、一部分のエラーによってシステム全体が止まってしまう可能性があります。 一方でマイクロサービスは、1つのシステムがエラーになっても、他の部分には影響が出ないという作りにすることも可能なのです。
中身はわからなくても良い
マイクロサービスは、例えその中身のロジックがわからなかったとしても、事前に定義されているルールさえ守れば誰もが使用することが出来ます。 例えば、グーグルやヤフーなどの検索エンジンを使う場合。 どのようにサイトを評価し、どの様な順番で表示するのかといったロジックを私達ユーザーは知りません。 しかし、検索したいワードを入力し、検索ボタンを押すだけで、その内容に合った結果が表示されます。 この様に、APIの中身自体はわからなかったとしても、そのルールに従って必要な情報を渡すと、適切な結果が返ってくるのです。
どこからがマイクロサービス?
どこからがマイクロサービス? ここで一つ疑問になってくるのが、マイクロサービスの明確な定義です。 実は、マイクロサービスには明確な定義がな有りません。 例えば、私達は日常的にネットショップで買い物を行いますが、 それを ・商品管理 ・販売管理 ・在庫管理 に分けてマイクロサービスとするのか。 それとも更に詳細な ・商品情報管理 ・商品画像管理 ・関連商品管理 ・販売履歴管理 ・決済管理 ・顧客情報管理 ・入庫管理 ・出庫管理 ・不良在庫管理 といった形で各々をマイクロサービス化するのか。 「どこまで細分化すればマイクロサービスなのか」 というのが明確には決まっていないのです。 しかし、後述するようにマイクロサービスには、その特性によってメリットとデメリットの両方があります。 マイクロサービスによって、詳細な設計にすればするほど、これらのメリット・デメリット共に大きくなります。
マイクロサービスで開発するメリットは?
マイクロサービスで開発するメリットは? では、マイクロサービスにはどのようなメリットが有るのでしょうか。
時代の変化に強い
今の時代は、変化が非常に早いです。 他社が〇〇という機能を付ければ、ウチも・・・ この様に、折角作ったシステムも、すぐに修正が必要になることがあります。 そういった変化に対して、非常に柔軟に対応できるのがマイクロサービスの特徴です。 それぞれが依存しあわない関係性であることは前述しましたが、それはつまり 「一つのマイクロサービスが修正されても他に影響が出ない」 ということになります。 そのため、時代の変化に非常に強いのがマイクロサービスなのです。
様々な新技術に対応可能
システムの変更などと同様に、新技術に関しても導入しやすいという特徴があります。 新しい技術を使おうと思った場合、今までのモノリシックなシステムであれば、一部分にしか影響しない新しい技術も、他の部分へ影響が出ないかを検証していく必要があります。 場合によっては、何ヶ月もテストを行って導入する・・・ということもあります。 しかし、依存しあわないマイクロサービスでは、こういった新技術の導入が比較的容易に行えるのです。
色々な言語での開発が可能
通常モノリシックなシステムにおいて、開発する言語が混在することは有りません。 1つの言語で最初から最後まで作られるのが基本です。 しかし、マイクロサービスでは様々な言語が混在していても、APIとしての要件を満たしていれば、正常に動きます。 そのため、古いシステムを 「〇〇の言語で書き換える」 などのメンテナンスが必要なくなります。 IT技術者が不足していると言われていますが、こういったマイクロサービスを導入することで、各々のエンジニアが新しい言語を学ばなくても、自分の既に持っているスキルを活かして開発が出来るというメリットがあります。
依存しあわないのでメンテナンスが簡単
何度も出てきている様に、依存しあわないため、メンテナンスも非常に簡単になります。 関連する一部分のマイクロサービスだけを止めてメンテナンスをすることも出来るので、影響を最小限に抑えることが出来ます。
必要最小限のリソース割当が可能
各マイクロサービス毎に、適切なリソースを割り当てることが出来れば、費用を最小限にすることが可能です。 サーバーの契約などによっては、ある一定の容量を超えると一気にプランの金額が上がる事もあります。 しかし、必要な機能に適切なリソースを割り当てることで、その問題は解決するでしょう。
色々なシステムで使いまわしが出来る
機能を分解していくと、他のシステムでも利用する 「共通パーツ」 が出てきます。 例えば、 「楽天市場」 「ヤフーショッピング」 「アマゾン」 といった日本で利用者の多いネットショップ。 これらのネットショップは、作りは全くの別物ですよね。 しかし、その機能を分解していくと、 ・決済機能 ・在庫のカウント機能 ・商品の検索機能 ・カテゴリから探す機能 など、一見表示方法は違うものの、機能として共通する部分が出てきます。 この様に、共通する機能を使い回すことで、よりスピーディで、よりバグの少ないシステムを開発することが可能になります。
もしものトラブルでの復旧が容易
もしもトラブルが起こった場合、どのマイクロサービスでエラーになっているのかを突き止めることは簡単です。 そのため、その部分だけ復旧すれば良いので、メンテナンスが非常に簡単なのです。 データの復旧に関しても、モノリシックなシステムでは複数のデータ処理を連続で行っているケースが多いので、その一番最初に戻って復旧する必要があります。 一方でマイクロサービスの場合は、機能単体データ復旧で良いため、簡単なのです。
マイクロサービスで開発するデメリット
マイクロサービスで開発するデメリット ここまで読んでいただいた方は、 「マイクロサービスの方が良いじゃん!全部のシステムをそれで作れば良いのに」 と思ったかもしれません。 しかし、マイクロサービスにもデメリットがあります。
開発者は他のマイクロサービスを熟知する必要がある
マイクロサービスは、様々な会社がAPIを開発し、それらを繋ぎ合わせてシステムを作ります。 そうなると、どの様な会社がどのようなAPIを作っているのかといった知識が必要になります。 例えば、あなたが普段楽天市場を使って買い物をしていた場合。 普通の買い物はできるかもしれません。 しかし、楽天市場には ・スーパーセール ・楽天DEAL ・お買い物マラソン などの様々なイベントで安く買うタイミングがあります。 これらを熟知していないと、効率的な買い物が出来ません。 この様に、マイクロサービスも同様で、 「知っているか否か」 が最終的に完成したシステムの質を大きく左右してしまうのです。
関係性が複雑になるので管理が重要
個々が独立したマイクロサービスは、それらの関係性が非常に複雑になります。 「Aという業務にはE,F,Gのマイクロサービスを利用する」 「Bという業務にはE,H,I,Jのマイクロサービスを利用する」 この様に、仕組みが複雑になればなるほど、多くのマイクロサービスを複合的に使う必要が出てくるため、非常に管理が大変になります。 それと同様に、 ・APIの仕様が変わった ・APIのサービスが一部提供終了になる ・セキュリティポリシーが変わった など、各々のAPIの情報を常に管理していく必要があるのです。
データの整合性を保つ工夫が必要
APIは、それぞれ別のサーバーで稼働する事も多いです。 特に他社が作ったAPIを活用する場合などは、サーバーが違いますので、データの保管場所も違うことになります。 そのため、サーバー同士でデータの整合性を保つための工夫が必要になります。 例えば、商品を販売した後に返品が起こった場合。 「商品在庫は戻したのに、売上は上がったまま」 といった商品管理システムと販売管理システム間のデータの不整合が起こる可能性があります。 利用するマイクロサービスの数が多ければ多いほど、これらのデータの整合性を保つのが困難になるため、管理が重要なのです。
データ通信量が多いのでパフォーマンスが問題になるケースも
APIは一般的にネット経由で行われます。 そのため、 ・ネットが繋がっていない状態ではデータのやり取りが出来ない ・大容量のデータを送受信する時は時間がかかる などの問題があります。 先程のデータの整合性の観点から、定期的に全てのデータを自社にダウンロードしてきてチェックする・・・といった仕組みを作った場合には、相当量のデータ送受信があるでしょう。 そうなると、同時に別のところでシステムを起動しても中々動かない・・・などのパフォーマンスの問題が出てくるのです。
設計の難易度が上がる
マイクロサービスは、前述したように多くのマイクロサービスを熟知している必要があると同時に、設計自体の難易度も上がります。 マイクロサービスの仕様を確認し、必要な機能だけを集めて組み立てる。 各々が独立しているため、複数の処理を非同期(同時に動かす)で行う事も多いですが、それらの順番によっては、エラーになる危険性もあります。 そのため、かなり設計の難易度が上がってしまうのです。
テストの難易度が上がる
テストに関しても、同様に難易度が上がります。 一般的にシステム開発において、一つの機能をテストした後に、その前後の流れも含めた結合テストというテストを行います。 モノリシックなシステムでは、最初の段階である程度のテスト項目がわかりますが、マイクロサービスの場合は、 「実際に中でどの様なロジックでシステムが動いているのか分からない」 という事がありますので、予想しきれないエラーが起こる可能性があります。
適切なマイクロサービス化により開発スピードも保守性も上がる
適切なマイクロサービス化により開発スピードも保守性も上がる メリットもデメリットもあるマイクロサービスではありますが、これからの時代は基本的にこのマイクロサービスが多くの場面で利用されるようになると考えられます。 というのも、マイクロサービスによって、自社にたくさんのリソース(サーバーやエンジニアなど)を抱える必要性がなくなりますし、開発スピードも上がります。 加えて、デメリットでお話したパフォーマンスの問題に関しては、現在徐々に5G が導入されている様に、通信環境は良くなっています。 サーバーに関しても、大容量のサーバーが格安で契約できるなど、徐々にマイクロサービスを使いやすい環境になっているのです。 そのため、現在モノリシックなシステムしか検討していない会社であれば、是非今後はマイクロサービスも視野に入れたシステム開発・運用をしていく方が良いのではないかと考えています。
今を改善しながら10年後を見据えたシステム開発はAMELAに
今を改善しながら10年後を見据えたシステム開発はAMELAに 今回は、マイクロサービスについて色々とお話してきました。 非エンジニア向けに書きましたので、噛み砕いた形でのお話でしたが 「結局自社に合っている形はどうなんだろう」 などの疑問もあると思います。 マイクロサービス自体は、2014年頃から話題になっているものになりますが、実際にまだまだ導入できていない会社も多いです。 しかし、将来的な事を考えると、 「少ないリソースで最大限の利益を得る」 ということが重要になります。 今この瞬間の業務改善も当然必要ですが、10年後20年後により良い環境で仕事をするために、マイクロサービスは検討するべき内容でしょう。 あなたの会社に合っている方法に関しては、様々な業界での経験を持つAMELAに相談頂ければ、しっかりとしたご提案をさせていただきますので、是非お気軽にご連絡頂ければと思っています。