Skip to content

Instantly share code, notes, and snippets.

@kgbu
Last active August 29, 2015 14:06
Show Gist options
  • Select an option

  • Save kgbu/89c7d654f6afa8c0c11a to your computer and use it in GitHub Desktop.

Select an option

Save kgbu/89c7d654f6afa8c0c11a to your computer and use it in GitHub Desktop.
Weaving microservices : DSL

Weaving microservices : DSL

respect to : http://www.w3.org/People/Berners-Lee/Weaving/Overview.html

ある程度以上の規模のサービスは分割の’仕方を工夫すればMQTTのようなプロトコルを介したマイクロサービスに分解できる。 そしてその構造はDSLで書けるんじゃないか

たとえばS3をMQTTを使って分割し直すとする場合、 CRUDとかRESTとかいう方針というか「戦術」は使えるが、全体として運用する「戦略」を記述したい。

で、分割した結果を形式的に’表現して

  • チェック
  • 実装へ落とし込む
  • デザイン言語として共有する

ことができて欲しい

そんなDSLが欲しい

それはServer Engineなのか、いやそれは「切れ目」であろう

言語要素としては(通信プロトコルの細部の差異は無視して)

  • publisher、subscriber, broker
  • Queue
  • worker, supervisor, scenario(Luaコード片とか)
  • 永続化、キャッシュ
  • トランザクション範囲、ロールバック、QoS、エラー、リトライ、タイムアウト
  • HAについては透過性があるとする(記述しない=逃げ)

全体の構造はモノリシックアーキテクチャの言語のデザインパターンでカバーされているはず。 それを疎結合化する、という方向で既存の技術があるはずだ。

自分としてはそれよりも、bottom upで考えてどこまでいけるかやってみたい。

DSL定義

構文

top level

サービス: サービス名 '(' データのリスト ')' '{' roleのリスト '|' シナリオのリスト '}'

verbs

予約済みのverb(PUB, SUB, 永続化, KEY, etc.)がある。 CRUDやRESTを考えれば、PUT, GET, UPDATE, DELETEも含まれるだろう。

※verbは引数としてデータのやり取りの相手とデータを指定することになる。

store SUB topic > broker

と書くべきかも。

データ

  • atom : a
  • list : [a, b]
  • tuple : {a,b}

修飾、制約、契約

  • transaction
  • QoS
    • retry scheme

samples

chat service

chat (topic, message) { viewer, store, broker, publisher |

publisher PUB {topic, message} > broker;
store SUB topic > broker;
store 永続化 {topic, message};
viewer GET topic > store > message;
viewer SUB topic > broker;
}
@kgbu
Copy link
Copy Markdown
Author

kgbu commented Sep 21, 2014

サービス構築でみんなが苦労しているメタ情報(postした時刻、参加者数、view countなどの統計情報)が表現できないと現実には使えなさそう。

@kgbu
Copy link
Copy Markdown
Author

kgbu commented Sep 21, 2014

サンプルとして、ガチな銀行口座、会計業務とか、マーチン・ファウラーのアナリシスパターンとかに載っているものを試してみてはどうだろう。

@kgbu
Copy link
Copy Markdown
Author

kgbu commented Dec 16, 2014

MatsがStreemを打ち出した。bashじゃねーの、という気持ちもすこしあるし、PowerShellの方向を突き詰めても面白いかもしれない。データをLINQするのではなく、AWS Lambdaの流れとフィットしたstreemというのはWebRTCの「どこでもUDP、そしてmultiplexed stream」の流れとどうからむか注目したい。

@kgbu
Copy link
Copy Markdown
Author

kgbu commented Dec 16, 2014

BashやAWS Lambda、そしてStreamのキモは「そのスクリプト、どこで走るの?」なのではないかと思うけど、自分としては走るのはmicro servicesであり、飛び交うのはメッセージであり、そのフローを調整するqueueやpub/subなのである。deployの宣言文というところになるのかもしれないな。そう、頭の中で走るのだ、このコードは

@kgbu
Copy link
Copy Markdown
Author

kgbu commented Dec 16, 2014

Sherlって、しゃあるさんだな。

@kgbu
Copy link
Copy Markdown
Author

kgbu commented Dec 16, 2014

つか、構成要素はFowlerさんがとっくのとおに網羅しちゃってるはずなので、本よんで鼻くそほじりながらpseudo code書けばそれで終わるのでは。とかいうのは甘いってのは知っている。彼の本はそんなに気楽に読めない。

@kgbu
Copy link
Copy Markdown
Author

kgbu commented Dec 22, 2014

https://twitter.com/ocaokgbu/status/547087033177358336 にも書いたけど、AWS Lambdaにinspireされて、microservicesの間をどう繫ぐかのところと、guardとを結びつけたい。問題はqueueというかバッファなのかもしれないし、autoscaleさせるべき、ということなのかもしれない。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment