質問: マイクロサービスとモノシリックなサービスの違いがよくわかりません。 http://kimitok.hateblo.jp/entry/2014/11/09/211820#f-e2a596b6 こちらのwebサイトを参考にしました。 「マイクロサービスに関する説明をするにあたり、モノリシック(一枚岩)スタイルとの比較することは効果的です: モノリシックアプリケーションは単一のユニットとして構築されます。エンタープライズアプリケーションはしばしば3つの主要な部分から構成されます: クライアントサイドのUI(HTMLページとユーザ端末上のブラウザで実行されるjavascript)、データベース(共通に用いられ、通常リレーショナルであるデータベース管理システムに挿入された多数のテーブルから構成される)、及びサーバサイドのアプリケーションです。サーバサイドアプリケーションはHTTPリクエストを取り扱い、ドメインロジックを実行し、データベースから更新されたデータを抽出し、ブラウザに向けてHTMLによるビューを作成、送出します。このサーバサイドアプリケーションはモノリス - 単一の論理的な実行可能ファイル*2です。システムに対するどんな変更もサーバサイドアプリケーションの新しいバージョンの構築・デプロイに関連します。」 従来のwebシステムはモノシリックなものだと思うのですが、モノシリックという言葉がしっくりきません。 モノシリックとは言いつつも、上記のようにフロントサイド、DB、バックエンドに分かれているではないかと思ってしまいます。 もちろん、マイクロサービスではバックエンド、フロントサイト、DBはより細分化されているわけなんですが、「モノシリック」という言葉は相対的に見て、マイクロサービスに比べると一枚岩である、という意味で使われているのでしょうか? 回答お願いします。
回答: 最初にお断りしておきますと以下の説明は、上記エントリにあるような マーチン・ファウラー氏らがどう考えているかを忠実に伝えるのではなく、 たんにこう解釈すれば分かりやすい、と思っている私の個人的な考えです。 > > モノシリックという言葉がしっくりきません。 > > > お気持ちは分かるような気がしますが、 その違和感は、最近のWebアプリだけを想定しているからです。 インターネット以前の時代からの 大きな流れを考えると分かりやすいと思います。 > > 従来のwebシステムはモノシリックなもの > > > むしろそもそも、従来のWebサービスが、Web以前と比較して、 すでにマイクロサービスだったのではないでしょうか。 「マイクロサービス」という言葉自体については、 ASPをクラウドと言い直すようなたんなる言葉の問題だから、 別にそうありがたがる必要もないですが、その背景は重要です。 そこで「**分散システム**」とでも言い換えておきましょう。 大型汎用機の時代からパーソナルコンピュータの時代になったとき、 もうすでに分散システムの時代になりました。 オブジェクト指向はパソコンの内側を、 インターネットはパソコンの外側を、 分散システム化する技術だと見るとスッキリします。 フロントエンドとバックエンド、あるいはDBもHTMLもXMLもMVCも、 Webの技術はみんな、広義の分散システムの技術の一部です。 (そう捉えている人は多くないでしょうが、分かりやすいとは思います) ほかにもたとえば、アジャイルなどは分散開発とでも言えますし、 並列処理なども分散システムで、関数型言語は参照透過性によって それを実現しやすくする仕組みと見ることもできるでしょう。 このように、分散システムを中心に置くと、さまざまな技術の潮流を理解できます。 ただ、何でもかんでも、分散、分散、と私が言っていると、 「なんでそうなるのか」と別の違和感が生じるかもしれません。 それは、人間社会自体が分散システムだからです。 人間はひとりひとり分散して存在しているので、 パソコンだろうとインターネットだろうと、 機械を人間側に歩み寄らせた結果が分散化なのです。 分散システム化はここ何十年かのコンピューティングの歴史の本流なので、 それ自体はまったく正統的な考え方だと思います。 ただ、クラウドとかの流れに乗って、マイクロサービスと 最近言い出したことについては、好みが分かれると思います。