オーケストレーション(Orchestration)とコレオグラフィー(Choreography)って...芸術?いえ、マイクロサービスアーキテクチャです。

f:id:ts0818:20190929225437j:plain

All great truths begin as blasphemies.

すべての偉大な真理は、最初は冒涜の言葉として出発する。

George Bernard Shaw (バーナード・ショー 

はい、どうもボクです。

Googleさんが、HTTP/3 のサポート開始したらしい。

www.itmedia.co.jp

HTTP/3は、以前は「HTTP-over-QUIC」と呼ばれていた、QUICプロトコル上でHTTPを稼働させるための仕様。QUICはGoogleが2013年に発表したUDP(User Datagram Protocol)をベースにしたトランスポート層プロトコル。HTTP/3は、TCPの代わりにQUICを使うことで、遅延が大幅に減る。

CloudflareとGoogleのChrome(Canary)がHTTP/3のサポート開始 Firefox(Nightly)も間もなく - ITmedia NEWS

http通信のパフォーマンスが改善されるってことですかね。

 

ということで、マイクロサービスについて、調査してみました。

 

オーケストレーションとコレオグラフィーって?

元々は、芸術の言葉であったらしいけど、コンピュータの世界に取り入れられたみたいですね。

オーケストレーション(orchestration)

オーケストレーション - Wikipedia

 ⇧ 最終更新 2019年5月14日 (火) 15:34

コレオグラフィーChoreography

コレオグラフィー - Wikipedia

 ⇧ 最終更新 2018年7月17日 (火) 04:48

ってなってるんで、コレオグラフィーのほうは、コンピュータに関しての記載はまだないですけど。 

 

コンピュータにおけるオーケストレーションとコレオグラフィーって?マイクロサービスアーキテクチャの1種らしい

マイクロサービスアーキテクチャということになるらしい。

そんじゃ、マイクロサービスアーキテクチャって?

マイクロサービス英語microservices)とは、ソフトウェア開発の技法の1つであり、1つのアプリケーションを、ビジネス機能に沿った複数の小さいサービスの疎に結合された集合体として構成するサービス指向アーキテクチャ(service-oriented architecture; SOA)の1種である。

マイクロサービス - Wikipedia

ってなっていて、サービス指向アーキテクチャ(service-oriented architecture; SOA)はというと、

ソフトウェア工学において、サービス指向アーキテクチャ(サービスしこうアーキテクチャ、Service-Oriented Architecture、SOA, 「エスオーエイ」あるいは「ソーア」と発音)とは、大規模なコンピュータ・システムを構築する際の概念あるいは手法の一つ。

業務上の一処理に相当するソフトウェアの機能をサービスと見立て、そのサービスをネットワーク上で連携させてシステムの全体を構築していくことを指す言葉である。

業務処理の変化をシステムの変更に素早く反映させたいという需要に応えうるものとして、2004年頃からIT業界において注目を集めている。

2009年頃からクラウドコンピューティングの台頭とともに、その必要性が再認識されるようになってきている。

サービス指向アーキテクチャ - Wikipedia

ってなっていると。

現在提唱されているSOAが前提とするシステム連携用の技術的基盤は、ほとんどの場合Webサービスである。Webサービスは、XMLHTTPなどのインターネット標準技術を元にしており、SOAの実現に必要な事柄を技術的に支えている。

サービス指向アーキテクチャ - Wikipedia

⇧ って言っていて、

純粋な概念的議論をするならば、SOAを実現する技術をWebサービスに限定する必要はない。しかし、ESBのような技術を利用せずに、SOAの実現に必要なインタフェースの標準化や製品実装の進んでいない業界動向からかんがみて、Webサービスの使用が事実上必須の状況となっている。

サービス指向アーキテクチャ - Wikipedia

SOAの実現には、Webサービスの使用が必須と言っていますが、

ただし、Webサービスは単にSOAの技術的な一要素にすぎない。Webサービスを利用しただけで、SOAであると言うことはない。

サービス指向アーキテクチャ - Wikipedia

Webサービスを使用しただけじゃ、SOAとは言えないと...。じゃあ、具体的に、SOAと言えるには、どんな条件を満たす必要があるのかは、Wikipedia さんには載っていまっせん(涙)。

Webサービスの基本としては、以下の3つが代表的らしい。

Webサービスにおいては、以下の三つが基本的な技術要素とされている。これらはいずれも、メッセージや定義の記述にXMLを使用している。

  • SOAP : サービス間の呼び出し、応答のプロトコル(下位プロトコルとしてHTTPなどを使用する。HTTP以外のプロトコルも使用可能ではあるものの、ファイアウォールをまたぐシステム連携においては困難が伴う。ほとんどの製品実装はHTTPを基本としている)。
  • WSDL (Web Services Description Language) : SOAPによるサービスの呼び出し、応答のインタフェースなどを定義する言語。
  • UDDI (Universal Description, Discovery, and Integration) : WSDLで記述されたサービスの情報を登録、検索可能とする技術(UDDI自体もWebサービスとして提供されており、SOAPによって呼び出し、応答を行う)。

サービス指向アーキテクチャ - Wikipedia

⇧  Webサービスにおいては、実質、HTTPプロトコルを使用したSOAPの一択が現状らしい。HTTP/3 も出てきましたしね。

上記のものに、

これらに加え、多数のサービス間の複雑な連携を設計するための技術仕様として、BPEL (Business Process Execution Language) やBPMN (Business Process Modeling Notation) が登場している。また、その設計したサービス連携を実行するための技術として、ESB (Enterprise Service Bus) が登場している。

サービス指向アーキテクチャ - Wikipedia

BPEL、BPMN、ESB の3つが利用されることもあると。それぞれの詳細は、Wikipedia さんをチェケラ~。

マイクロサービスについては、論文があるみたいです。

マイクロサービスの論文を完全日本語翻訳してみた。(1万5667字) | KOBIT

 

んで、オーケストレーションとコレオグラフィーって?

マイクロサービスアーキテクチャってのが、サービス指向アーキテクチャSOA: Service-Oriented Architecture)の1種であると。

ということで、マイクロサービスとは、

2014年、ThoughtWorks社のマーチン・ファウラーとジェームス・ルイスが提唱したソフトウェアアーキテクチャである

何がマイクロサービスであるか、という公式な定義は存在しないが、業界では徐々にコンセンサスが形成されつつある。マイクロサービスを特徴づける定義としてよく引き合いに出されるものとしては、以下のような点が挙げられる。

  • マーティン・ファウラーや他の専門家たちによれば、マイクロサービス・アーキテクチャ(microservice architecture; MSA)は、特定の技術にとらわれないHTTPなどのプロトコルを使用して、目的を達成するためにネットワーク越しのコミュニケーションのプロセスを実行する。ただし、サービスは共有メモリなどの他の種類のプロセス間通信のメカニズムを使用することもある。また、たとえばOSGIバンドルなどのように、同一のプロセス内で実行される場合もある。
  • マイクロサービス・アーキテクチャにおけるサービスは、独立にデプロイが可能である
  • サービスは、きめ細かい粒度のビジネス機能を中心に組織される。マイクロサービスにおいて粒度は重要である。なぜなら、粒度こそ、このアプローチをSOAと異なるものにしているからである。
  • 各サービスに最も適した異なるプログラミング言語データベース、ハードウェアおよびソフトウェア環境で開発することができる。これは、1つのマイクロサービスがさまざまなプログラミング言語のパッチワークのように書かれるという意味ではない。
  • サービスはサイズが小さく、メッセージングを行い、コンテキストによって境界づけられ、自律的に開発される。また、中央集権的ではなく、独立してデプロイが可能である。そして、自動化されたプロセスにより、自動ビルド自動リリースが実行される

サービス指向アーキテクチャ - Wikipedia

SOA の1種ではあるけど、SOAとは異なると。SOAとは異なると...。

いや、いや、いや、SOAとサービスの粒度が違うってのは、そうなのかもしれんけど、具体的に、どういう違いかをハッキリさせてくれないと、何を曖昧にしてくれてんですかって話ですよ。

というか、「何がマイクロサービスであるか、という公式な定義は存在しないが」ってサラッと書いてるところが衝撃なんですけど...

 

まぁ、そんな、残念なマイクロサービスアーキテクチャなんだけども、マイクロサービスアーキテクチャである、オーケストレーションとコレオグラフィーって何なん?

残念ながら、Wikipedia さんには載ってないのよね。

んで、2008年ごろの議論だと、

www.infoq.com

要するに、コレオグラフィー、オーケストレーション、コーディネーション、プロセス管理など、あらゆる用語の定義があまりにもお粗末、というのが私の基本的な考えです。ベンダーがBPELエンジンをコレオグラフィー・プロダクトとして売り込んでも、私は驚かないでしょう。コレオグラフィーの人気がそれほど上がらない理由の1つとして(私見ですが)、現実世界のコレオグラフィー(舞踊)がITにとってはまったくの専門外となっていることが挙げられます。

オーケストレーション対コレオグラフィー:定義に関する論争

今回の論争は、SOAやITでますます一般化している状況の一例にすぎない。人々は、実は異なる事を意味するのに同一の単語を使用しているし、また、実際は完全に意見が一致しているのに異なる単語を使用しているばかりに、言い争いを続けているのである。

オーケストレーション対コレオグラフィー:定義に関する論争

⇧  我々が思っていることを代弁してくれていますね。

ドキュメントとかでも、言葉の説明が曖昧な状態にしてるから、現場は混乱するってことを繰り返しているのに、一向に改善されない業界ですね。

 

まぁ、それじゃあ、困るんで、もうちょっとどうにかならんのかと。2016年2月にO'Reillyから発行された「マイクロサービスアーキテクチャ」って本に載ってるらしい、自分は読んだこと無いけど。

qiita.com

blogs.itmedia.co.jp

www.fiorano.com

⇧  上記サイト様を参考にさせていただくと、仕様的には、

  • オーケストレーション(Orchestration)
    「リクエスト・リプライ方式(request-reply pattern)」
  • コレオグラフィー(Choreography)
    「イベント・ドリブン方式(EDA:Event Driven Architecture)」
    • パブリッシュ・サブスクライブ モデル
    • イベント ストリーミング モデル

っていう区分けになるらしいです。

 

microservices.io

まぁ、でも、

pt.slideshare.net

⇧  上記サイト様によると、「イベントドリブン」と「マイクロサービス」は別物って言ってますけど...統一されてねぇ~な

 

パブリッシュ・サブスクライブ モデルは、

出版-購読型モデル(しゅっぱん-こうどくがたモデル、Publish/subscribe)は、非同期メッセージングパラダイムの一種であり、メッセージの送信者(出版側)が特定の受信者(購読側)を想定せずにメッセージを送るようプログラムされたものである。

出版-購読型モデル - Wikipedia

⇧  ってことらしい。

www.ibm.com

itdoc.hitachi.co.jp

 

というわけで、 「オーケストレーション」と「コレオグラフィー」は、

  • オーケストレーション:「リクエスト・リプライ方式(request-reply pattern)」
  • コレオグラフィー:「イベント・ドリブン方式(EDA:Event Driven Architecture)」

かという違いになるらしい。(「オーケストレーション」と「コレオグラフィー」ともに「マイクロサービスアーキテクチャ」ってことで考えていきます。)

ちなみに、イベント・ドリブン方式は仕様だと思うんで、実装ってことになると、

イベント駆動型プログラミング(イベントくどうがたプログラミング、event-driven programming)は、コンピュータプログラムが起動すると共にイベントを待機し、発生したイベントに従って受動的に処理を行うプログラミングパラダイムのこと。

イベント駆動型プログラミング - Wikipedia

⇧  event-driven-programing で実現ってことになるんだろうけど、

規則型(宣言型)のイベント駆動型プログラミングにおいては、規則の条件部が満たされ指定されたイベントが発生すると、その規則が実行される。このような規則を ECA規則 (event-condition-action rule) という。

イベント駆動型プログラミング - Wikipedia

手続き型のイベント駆動型プログラミングにおいては、まず各イベントに対応する処理を記述した手続き(サブルーチン、関数、あるいはメソッド)を、システムあるいはアプリケーションフレームワークに登録する。この手続きはイベントハンドラー (event handler) と呼ばれ、イベントが発生したときにシステムあるいはアプリケーションフレームワークによって呼び出される(コールバックされる)。イベントの待機中(アイドリング時)の処理はシステムに任せる。

イベント駆動型プログラミング - Wikipedia

⇧  の2つが一般的らしい。CUIじゃない場合は、「手続き型」ってことになると思うんで、「コレオグラフィー」を実現する場合も、「手続き型」ってことになるんですかね?

ちなみに、普段、我々が使ってるパソコンの操作のほとんどが、

一般的に、グラフィカルユーザインタフェース (GUI) を使用するオペレーティングシステムアプリケーションソフトウェアでは、イベント駆動型プログラミングを利用している。マウス操作やキーボード操作といったユーザーからの入力や、システム状態の変化・変更といった各イベントに対する処理を統一的に記述することができる。

イベント駆動型プログラミング - Wikipedia

⇧ イベント駆動型プログラミングで成り立っているらしい、おそらく「規則型(宣言型)」なのかな?

まぁ、脱線してしまったんですが、

microservices.io

⇧  上記サイト様の、 example applications developed by Chris Richardson. ってリンクで、

eventuate.io

⇧  「Eventuate Tram Spring Boot/JPA examples」に例があって、

オーケストレーション:「リクエスト・リプライ方式(request-reply pattern)」

github.com

■コレオグラフィー:「イベント・ドリブン方式(EDA:Event Driven Architecture)」

github.com

⇧  って紹介されてます。

 

「モノリシック(一枚岩)」なシステム から「マイクロサービス」なシステム への移行には、課題も多いみたいです。

ascii.jp

tech.askul.co.jp

qiita.com

⇧  上記サイト様によりますと、「ドメイン駆動設計(DDD:Domain-driven design)」 が重要になってくるようです。

 

 

う~ん、技術書を読まねばですかね。

今回はこのへんで。