今日は第15回 Cloud Application Platformアーキテクチャの日です
第15回 Cloud Application Platformアーキテクチャ にお邪魔しています。
Cloud Application Platformアーキテクチャ / asami224 さん
- ディスカッション用のスライドです
- Cloud Application Platformのコンセプト
- Web DSL
- 関数型プログラミングが大事になってくる
- reactive streams
- process monadを使ってpure functionalなstate machine
- 試しに使ってみたらうまく動いた
- 銀行でさえもクラウドを使おうとする時代
- AI, IoT : お客さんが欲しいと言ったら提供は必要
- Distributed, Concurrent/Parallel, Asyncronous, Realtime : 非同期が大切
- 例: IoT : 大量のイベントを受け取る。ファイルではなくストリームで来る
- AIの詳細は専門家だが、大規模データを扱う必要がある。データの準備が7割。普通のエンジニアに一番大事
- Object-Functional Programming
- Procedural Programming, Object-Oriented Programming, Functional Programming
- クラウドアプリケーションではFPを使っていくのが重要
- 10年前から言っててあまり変わっていないとは言え・・・
- FPにおける重要な概念
- Type class : 代数的な数理モデルをプログラムから扱える
- F# にはない
- semigroup - monoid - group - ring - field
- Scala では case class を使う
- 例: 在庫はMonoid
- EIP (Essense of Iterator Pattern) https://www.cs.ox.ac.uk/jeremy.gibbons/publications/iterator.pdf
- Type class : 代数的な数理モデルをプログラムから扱える
- Scalaは増えてる?
- Object-Functional Analysis and Design
- ビジネスから実装までどうつなげるのか
- アプリケーションのモデルからプログラムを自動生成したい
- プログラムの自動生成を受け止められる強力なプラットフォームが必要
- 2つの伸ばし方 : 「ビジネスの方向」「上流のモデリングからプログラムの生成」
- 数理モデルと認知モデル(ヒューリスティックモデル)
- 構造データと半構造データ
- もともと存在する不定形のデータが先にあり、それを処理するアプリが後
- Cloud Application のメタモデル
- UP : Static Structure Model(クラス図など)、Dynamic Model(state machine)、Collabolation Model(interaction model。ユースケースから帰納的にモデル化)
- 数理モデルができる == 演繹的 == 自動生成ができる
- OMT(object-modeling technique) : Dataflow Model (FP)
- UPで一度過去に消えたもの
- big dataには有効そう
- FPの台頭
- Business Rule Model
- AIの応用。AIはFunctionをプログラミングではなくデータから作る
- データをどう用意するのか
- FunctionのInterfaceは大事。ビジネスルール(例: 運賃表)
- UP : Static Structure Model(クラス図など)、Dynamic Model(state machine)、Collabolation Model(interaction model。ユースケースから帰納的にモデル化)
- Cloud Application Frameworkの狙い
- フレームワークは重要
- 運用コスト、セキュリティ : ここまでは既存のASPと同じ狙い
- ビジネスの振る舞いを集める
- ログデータなどを、アプリ間で揃える
- 最近のBigDataは、データの正規化に時間を取られている
- 複数企業間の連携を簡単にする
- DBを共通化する
- 複数の企業が提携するショッピングモールなど
- はじめから連携する気ではなかった企業間を、簡単に連携できる
- ビジネスとエンジニアリングの共通言語
- 別のプロジェクトから来たエンジニアがすぐ開発に入れる
- 完全リモート。週に3時間程度しか事務所にいない
- フルタイムじゃないエンジニアでも、会社に参加できる枠組み
- アプリケーション開発は設定とDSLの記述だけでやりたい
- 設定だけでもいろいろなことが表現可能
- Coreの構成
- Subsystemの構成
- 今後の展望
- Q). MDMは統一データでは不要なのでは??
- 小売店で同じ商品を扱ってる場合などに必要
- スター型のデータ構造。プラットフォームのマスタ+自社データ、という組み合わせで使っていく
- Q). JOINするなら同じノードに載せる必要があるのでは?
- 原則はそう。お客さんが嫌がるなら、アプリサイドでJOIN
- WEB DSL
- 経緯: アプリバブルが終わってしまった。WEBへ
- WEBのレイヤでDSLにした
- モデリングと実装の仕方
- 今まで: domainモデルに対してMVCのモデルが必要 (RoRなら自動生成)
- View Modelの導入 : TableやGridといったUIの単位で
- .jade 形式に、埋め込める
- ControllerもJSONで書ける。Platformで提供するもので十分なことが多い
- カスタマイズはCard単位で可能
- CardとGrid(12分割)でのUIの記述。HTMLより抽象度の高い部品
- (例: Bootstrap4)
- markup Engineer がアプリを作れるようにする
- 簡単なのが売りだったはずが難しくなっている
- 営業とMarkup Engineerがアプリを作れるのが理想 → PCPで可能になる!(設定だけでバックエンドが動く)
- Vue.jsとかAngularとか使うとなると本末転倒
- バックエンドもフロントもコードを書かなくても良い
- Q). system-infoはどの部分?
- これはsinkと呼んでおり、変数名。View Modelを入れる
- 画面の見た目によった設計にしている。裏のドメインは複雑でも、出せば表・リスト・グリッド
- 製品で使おうとしたらがWEBエンジニアに拒否された
- 「PHPのほうが簡単ですよ」
- 一般に展開するのは難しいのかもしれない
- Bootstrap4 ベースの creative-tim 社のものを使っている
- 他のテンプレートの extend も可能 → テーマは切替可能
- サーバサイドエンジニアのほうが刺さるかも
- Q). componentでheader明細の表現するのは難しいのでは
- レイアウトファイルを定義できる。表示しようとするコンテンツを突っ込める
- Q). WEB DSLとはJSONのこと?
- FPで大事な技術はモナド
- Unit of Work : transactionのざっくり版
- unitをfree monadで作ってある
- commit historyをfree monadで作り、 interpret 時に実行する
- メリット: DBがなくても、 interpreter テストができる
- 難しいのでおすすめではないが、実装してみるとわかる
- sales_order が複雑な状態を持っている
- confirm(悪質ユーザの除外), shipment, charge
- charge: クレジットカードと、代引き、コンビニで状態の遷移が違う
- 内部的に複数のステートラインを持っている
- DBに状態を持たなければならない
- 状態変更時に Free Monad を返す
- transaction 境界を知る必要があると、部品化が難しい
- transaction 境界を知る必要がなくなる
- 状態はDBには持ってない。発生したイベントをすべて登録してあるので、状態がわかる
- Q). 失敗したときにはイベントを残す?
- この例ではイベントを残さなくていい場合
- Q). transactionはどう切る?
- Q). メモリリソースは?
- フリーモナドはメモリを使うのでもともと気をつける
- reactive streamsを使うと、大きなデータをウィンドウとして扱えるので、解決できる
- エンジンがキャッシュをしている
- free monad は 非同期や many core がもっと普及してから。5年後に使うかもしれない技術への投資
- Unit of Work ではトランザクションがあるので、実行方法を変えるのはちょっとむずかしいかも
- monoidを使うと、計算の順は気にしなくて良い。最適化できるようになる。モナドもモノイドなので
- 代数的データ型に落とし込めば、数理モデルのいろいろが使えて、良い