最近、「Short.Works」を開発している中で、どんなアーキテクチャにすべきかを妄想している中で、
MicroservicesやSOA(Service Oriented Architechure, サービス指向アーキテクチャ)に興味が出てきたので勉強したことを書いていきます!
🎂 SOA(Service Oriented Architechure)
ソフトウェアの機能を独立した「サービス」という単位で部品化してそれを組み合わせてシステムにするアーキテクチャ。
特徴としては次のとおり。
* ソフトウェアの機能を独立した「サービス」という単位で部品化されていること * オープンで標準的なインターフェースがあり、個々に呼び出し可能なこと * 「サービス」を組み合わせることでアプリケーションを実現すること
👽 Microservices
SOAをWebに適用して、現代の先端的なサービスの事例に当てはめた考え方。『マイクロサービス(microservices)とは何か — recompile.net』
に詳細にかかれていますが、大きな特徴は次のとおり。
* アプリケーションを小さなコンポーネントの集合にする * サービス間の連携は、HTTPのAPI経由などを使ったインターフェースにする * コンポーネント(サービス)ごとに適切な言語・フレームワーク・DBなどが選択される * サービスごとにデータを持ち、統合されない * 構成されるサービスごとに障害に対して耐性を持つように設計される
プロダクトのサイズが大きくなっていっても適切にメンテナンスンナンスして、柔軟に拡張をし続けていくための設計の指針として大切だと思っています。
(逆に小さなサービスでこれを忠実に実現するのはかなり厳しいかも)
🚌 SOAやMicroServiceにすることのメリット
メリットは次のとおり。
* コードベースが大きくなりすぎて、全体像が把握できなくなることを防ぐ * 個々のアプリケーションの組み合わせを自由に組み替えることができる * 個々のアプリの言語や動作環境を自由に選ぶことができる * 各サービスは目的とする機能の実装に集中することができる * 各サービスが疎結合になることでシステムの開発が容易になる(巨大なサービスの場合)
逆に難しい点としては、開発するための環境構築や、適切なインタフェースの粒度、各システムが利用されやすくするための設計などと考えられます。
🎃 あとがき
このあたりはすごい経験不足ですので、もしまずい点とかあればぜひフィードバックをお願いします!
🍮 参考リンク
SOAとは 〔 サービス指向アーキテクチャ 〕 【 Service Oriented Architecture 】 - 意味/解説/説明/定義 : IT用語辞典
マイクロサービス(microservices)とは何か — recompile.net
“マイクロサービス化”で変化に耐えられる組織を目指す–クックパッド舘野CTO - ZDNet Japan