こんにちは、ソリューション開発部の中川01です。

2017年4月に、ソリューション開発部の分科会のリニューアルが行われ、新たにマイクロサービスアーキテクチャ研究の分科会を発足させました。精鋭6名のチームです。

マイクロサービスアーキテクチャって何?

マイクロサービスアーキテクチャとは、James Lewis氏とMartin Fowler氏が「Microservices」で提唱したソフトウエアのアーキテクチャです。

マイクロサービスアーキテクチャについて詳細に書かれている書籍は、O’Reilly Japan の 『マイクロサービスアーキテクチャ』が有名です。モノリシック(一枚岩)なアーキテクチャをサービスの単位に沿って小さく分割して開発することにより、デプロイやスケーリングをその単位でできるようにするアプローチと理解してます。

マイクロサービスアーキテクチャという言葉を頻繁に耳にするようになりまして、少しずつ勉強を始めていました。

そんな昨年の末に、ずっと携わっているシステムで障害が発生し、サービスが一時停止してしまうという事態に遭遇しました。その時にマイクロサービスアーキテクチャを意識する必要があるなと感じました。

開発の立場としては「小さな単位に分けて疎結合にする」ということが利点となるという考えは以前からあるものです。ですが、本番稼働させるということを考えると、かつては、小さな粒に分けて本番稼働させることのメリットよりデメリットが大きかったのです。

ところが、近年はそれを実現しやすい技術環境が整ってきたました。クラウドの出現によりインフラの調達やスケーリングが容易になりました。IaaSだけでなく、PaaSの発展により開発者は開発に専念しやすくなりました。

また、システムに対するニーズも変化しました。社内の業務システムでは、完全な整合性を持った一枚岩のものを、厳格な手続きでリリースすることが要求されていました。しかし、インターネットを使ったBtoCのシステムでは、多数のユーザの多様な要求に対応したり、障害発生時には、一部だけでも稼働させることを、素早く行うことが重視されます。このような状況では、一枚岩であるよりも、小さな単位に分かれているほうがよいのです。

これらの背景がマイクロサービスアーキテクチャという考えを後押ししてきたのだと思います。

検討テーマ

どちらかという気持ち的なところから分科会を立ち上げたのですが、具体的な検討テーマは以下のように考えています。

まずは、マイクロサービスアーキテクチャを実現するためにそれを支えるいろいろな技術や製品を検証して理解すること始めます。私たちはJavaのインテグレーションをずっと続けて行ってきたので、Javaで利用できるもの中心に調査をしていきたいと思います。また、マイクロサービスの分割の仕方とか連携方法など思想的なところの理解も進めます。

サービスディスカバリ、サーキットブレーカ

  • 多数の小さなサービスが存在するマイクロサービスアーキテクチャでは、それらのサービスがどこに配置されているのかわかりやすくする必要がある。また、あるサービスに障害が発生している場合、その部分を切り離してシステム全体は稼働させるといったサーキットブレーカという仕組があるのが望ましい。
  • Eureka,ribbon,HystrixといったNetflix OSS
  • Spring Boot 使って試してみる。
  • 今までのロードバランサと比べた利点を検証。

 コンテナ

  • マイクロサービスと「より小さく (smaller)、より迅速に (faster)」というパラダイムで相性がいいのがLinuxコンテナ。
  • Docker を使ってみて、利便性を検証。

Consumer  Driven Contract Testツール 

  • 多数のサービスに分割して開発する時に結合先のシステムの部分の動きをどうするかという悩みを解決する Consumer-Driven Contract testing (CDC testing) という考え方あり、それをサポートするツールがある。
  • Pact または Spring Cloud Contract
  • IFテストでの便利さを検証する。

非同期メッセージ

  • マイクロサービスアーキテクチャのサービス間の連携をメッセージドリブンで実現するのが望ましい。リクエストDrivenの非同期処理をサポートするツールを調査する。
  • Apache Kafka
  • メッセージドリブンのシステム連携、バッチ処理などを実装してみる。

デプロイ

  • マイクロサービスアーキテクチャにおける構成管理・リリース管理のありかた、CI/CDツールを研究する。

 設計思想的なもの

  • 上記の製品の検証と合わせて、それらの背景にある、設計思想を理解する。
    • コンポーネント指向、分割データベース、組織のありかたなど。
  • 関連する考えとして、”リアクティブ”を理解する。

今後の活動予定

上記テーマについて、メンバーで分担して検討を進めます。それぞれの単位で検証ができたら、実案件での導入を試みたいと考えております。また、各製品を組み合わせて、何か動くものも作りたいです。

まだテーマの粒度もそろっていなくて、検討の余地が多い感じがしますし、純粋な意味ではマイクロサービスアーキテクチャというものから外れているものもあるかもしれません。とにかくやってみて、その結果をこちらのブログにもどんどん書いていきたいと思います。

よろしくお願いします。

 

この記事が気に入ったら
いいね!しよう

最新情報をお届けします

Twitter で「株式会社アークシステム」をフォローしよう!

新しい分科会 マイクロサービスアーキテクチャ研究会を発足https://devlog.arksystems.co.jp/wp-content/uploads/2017/06/68ec090b6f8b911d74d7d3db6728298b-1200x675.pnghttps://devlog.arksystems.co.jp/wp-content/uploads/2017/06/68ec090b6f8b911d74d7d3db6728298b-150x150.pngnakagawaマイクロサービスアーキテクチャ分科会その他Java,Spring Boot,Microservices,Netflix OSS,Eureka,ribbon,Hystrix,Docker,Spring Cloud Contract,Apache Kafkaこんにちは、ソリューション開発部の中川01です。 2017年4月に、ソリューション開発部の分科会のリニューアルが行われ、新たにマイクロサービスアーキテクチャ研究の分科会を発足させました。精鋭6名のチームです。 マイクロサービスアーキテクチャって何? マイクロサービスアーキテクチャとは、James Lewis氏とMartin Fowler氏が「Microservices」で提唱したソフトウエアのアーキテクチャです。 マイクロサービスアーキテクチャについて詳細に書かれている書籍は、O'Reilly Japan の 『マイクロサービスアーキテクチャ』が有名です。モノリシック(一枚岩)なアーキテクチャをサービスの単位に沿って小さく分割して開発することにより、デプロイやスケーリングをその単位でできるようにするアプローチと理解してます。 マイクロサービスアーキテクチャという言葉を頻繁に耳にするようになりまして、少しずつ勉強を始めていました。 そんな昨年の末に、ずっと携わっているシステムで障害が発生し、サービスが一時停止してしまうという事態に遭遇しました。その時にマイクロサービスアーキテクチャを意識する必要があるなと感じました。 開発の立場としては「小さな単位に分けて疎結合にする」ということが利点となるという考えは以前からあるものです。ですが、本番稼働させるということを考えると、かつては、小さな粒に分けて本番稼働させることのメリットよりデメリットが大きかったのです。 ところが、近年はそれを実現しやすい技術環境が整ってきたました。クラウドの出現によりインフラの調達やスケーリングが容易になりました。IaaSだけでなく、PaaSの発展により開発者は開発に専念しやすくなりました。 また、システムに対するニーズも変化しました。社内の業務システムでは、完全な整合性を持った一枚岩のものを、厳格な手続きでリリースすることが要求されていました。しかし、インターネットを使ったBtoCのシステムでは、多数のユーザの多様な要求に対応したり、障害発生時には、一部だけでも稼働させることを、素早く行うことが重視されます。このような状況では、一枚岩であるよりも、小さな単位に分かれているほうがよいのです。 これらの背景がマイクロサービスアーキテクチャという考えを後押ししてきたのだと思います。 検討テーマ どちらかという気持ち的なところから分科会を立ち上げたのですが、具体的な検討テーマは以下のように考えています。 まずは、マイクロサービスアーキテクチャを実現するためにそれを支えるいろいろな技術や製品を検証して理解すること始めます。私たちはJavaのインテグレーションをずっと続けて行ってきたので、Javaで利用できるもの中心に調査をしていきたいと思います。また、マイクロサービスの分割の仕方とか連携方法など思想的なところの理解も進めます。 サービスディスカバリ、サーキットブレーカ多数の小さなサービスが存在するマイクロサービスアーキテクチャでは、それらのサービスがどこに配置されているのかわかりやすくする必要がある。また、あるサービスに障害が発生している場合、その部分を切り離してシステム全体は稼働させるといったサーキットブレーカという仕組があるのが望ましい。 Eureka,ribbon,HystrixといったNetflix OSS Spring Boot 使って試してみる。 今までのロードバランサと比べた利点を検証。 コンテナマイクロサービスと「より小さく (smaller)、より迅速に (faster)」というパラダイムで相性がいいのがLinuxコンテナ。 Docker を使ってみて、利便性を検証。Consumer  Driven Contract Testツール 多数のサービスに分割して開発する時に結合先のシステムの部分の動きをどうするかという悩みを解決する Consumer-Driven Contract testing (CDC testing) という考え方あり、それをサポートするツールがある。 Pact または Spring Cloud Contract IFテストでの便利さを検証する。非同期メッセージマイクロサービスアーキテクチャのサービス間の連携をメッセージドリブンで実現するのが望ましい。リクエストDrivenの非同期処理をサポートするツールを調査する。 Apache Kafka メッセージドリブンのシステム連携、バッチ処理などを実装してみる。デプロイマイクロサービスアーキテクチャにおける構成管理・リリース管理のありかた、CI/CDツールを研究する。 設計思想的なもの上記の製品の検証と合わせて、それらの背景にある、設計思想を理解する。コンポーネント指向、分割データベース、組織のありかたなど。関連する考えとして、”リアクティブ”を理解する。今後の活動予定 上記テーマについて、メンバーで分担して検討を進めます。それぞれの単位で検証ができたら、実案件での導入を試みたいと考えております。また、各製品を組み合わせて、何か動くものも作りたいです。 まだテーマの粒度もそろっていなくて、検討の余地が多い感じがしますし、純粋な意味ではマイクロサービスアーキテクチャというものから外れているものもあるかもしれません。とにかくやってみて、その結果をこちらのブログにもどんどん書いていきたいと思います。 よろしくお願いします。ARK Solution Development Division Developers Blog.