Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Multi-Tenant Erlang Distributionを目指して - ElixirConf US 2021参加報告 / Toward The Multi-Tenant Erlang Distribution

Multi-Tenant Erlang Distributionを目指して - ElixirConf US 2021参加報告 / Toward The Multi-Tenant Erlang Distribution

EDI#8+kokura.ex#47:ElixirConfUS凱旋会
https://fukuokaex.connpass.com/event/225991/

Kentaro Kuribayashi

October 21, 2021
Tweet

More Decks by Kentaro Kuribayashi

Other Decks in Technology

Transcript

  1. Elixir is eating the IoT world! 私のElixirとIoTに関する活動は、高瀬先 生(@takasehideki)の描いたビジョン への、愚直な解釈に基づく。 出所:

    高瀬英希「ElixirでIoT!?ナウでヤングでcoolなNervesフレームワーク」 p.21 https://www.slideshare.net/takasehideki/elixiriotcoolnerves-236780506/21 1. デバイス・エッジ・クラウドの各 レイヤをElixirで実装すること 2. それに加えて、各レイヤがそれぞ れ分散Erlangネットワーク上のノー ドとして動作すること
  2. 複雑なIoTシステムの課題 昨今のIoTシステムは、エッジコンピューティングを取り入れ、 1. デバイス層 2. エッジ層 3. クラウド層 の3層構造をとる(右図)。一方で、3層構造により以下の課題が発生する。 1.

    プログラミング言語や通信プロトコルの選択肢が多様である 2. データの取得方式が多様かつデータフローが双方向性を持つ 3. IoTシステムの全体を通じたデータフローの見通しが悪くなる 出所: Kentaro Kuribayashi "Pratipad: A Declarative Framework for Describing Bidirectional Dataflow in IoT Systems with Elixir" https://speakerdeck.com/kentaro/pratipad-a-declarative-framework-for-describing-bidirectional-dataflow-in-iot-systems-with-elixir
  3. そこでPratipadですよ Pratipadとは、 • 前述の3つの課題に対して解決を与 えるためのもの • IoTシステムの双方向データフロー を、宣言的に記述できるフレーム ワーク 注釈:

    pratipadという単語は、サンスクリット語 で「道」という意味。 CIte: kentaro/pratipad: “A Declarative Framework for Describing Bidirectional Dataflow” https://github.com/kentaro/pratipad 出所: Kentaro Kuribayashi "Pratipad" https://github.com/kentaro/pratipad
  4. Pratipadを用いて構築したIoTシステムの例 Room 1 Room 2 Local Area Network Edge Layer

    Device Layer Device Layer My House Wide Area Network Sensing: - CO2 concentration - air pressure - humidity Cloud Layer - visualize - analyze - send back actuation order External API - provide additional metadata (e.g. precipitation) Users - monitor situation - do some actions (e.g. open the window) mTLS connection - aggregate - transform - add more info ・・・ Running on Elixir LED blinks when the cloud system sends a notification to prompt uses to open the window. 出所: Kentaro Kuribayashi "Pratipad: A Declarative Framework for Describing Bidirectional Dataflow in IoT Systems with Elixir" https://speakerdeck.com/kentaro/pratipad-a-declarative-framework-for-describing-bidirectional-dataflow-in-iot-systems-with-elixir
  5. Elixirと分散ErlangネットワークでIoTシステムを構築 Pratipadと他のElixir製フレームワークの組み合わせにより、IoTシステムの3層を 同一の言語とプロトコルを用いて統合的かつ安全に構築できる。 1. 3層のいずれもElixirで構築 ◦ デバイス層: Nerves + Pratipad.Client

    ◦ エッジ層: Pratipad ◦ クラウド層: Phoenix + Pratipad.Client 2. 各層はセキュアな分散Erlangネットワークで接続 ◦ 全ての通信はTLSを利用 ◦ 全てのノードがTLSサーバでありクライアント ◦ クライアント証明書による認証 出所: Kentaro Kuribayashi "Pratipad: A Declarative Framework for Describing Bidirectional Dataflow in IoT Systems with Elixir" https://speakerdeck.com/kentaro/pratipad-a-declarative-framework-for-describing-bidirectional-dataflow-in-iot-systems-with-elixir
  6. Pratipadは双方向かつ多様なデータ取得方式に対応 Push、Pull、Demandの3つのデータ取得方式と双方向データフローを実現する。 Push Pull Demand 出所: Kentaro Kuribayashi "Pratipad: A

    Declarative Framework for Describing Bidirectional Dataflow in IoT Systems with Elixir" https://speakerdeck.com/kentaro/pratipad-a-declarative-framework-for-describing-bidirectional-dataflow-in-iot-systems-with-elixir
  7. 宣言的なデータフロー記述 Pratipadは右図のようなデータフローと 処理の記述方法を提供する。 • データフロー自体を、一つのファ イル内に宣言的に記述できる • データへの処理を、さまざまな形 で記述できる(逐次適用、並行適 用等)

    • データに対する処理内容の記述は 、データフローとは別個に、Elixir モジュールとして記述する Push <~> P1 <~> P2 <~> P3 <~> Output defmodule P1 do alias Pratipad.Processor use Processor @impl GenServer def init(initial_state) do %{:ok, initial_state) end @impl Processor def process(message, state) do # do something with the message end end Dataflow Processor 出所: Kentaro Kuribayashi "Pratipad: A Declarative Framework for Describing Bidirectional Dataflow in IoT Systems with Elixir" https://speakerdeck.com/kentaro/pratipad-a-declarative-framework-for-describing-bidirectional-dataflow-in-iot-systems-with-elixir
  8. ElixirConf US 2021で発表に至った経緯 1. 2020年4月、北陸先端科学技術大学院大学・博士前期課程に入学 2. 2020年11月、第7回WebSystemArchitecture研究会でElixir/Nervesに関する発 表があったのがきっかけで、Elixir/Nervesに興味を抱く 3. 2020年12月の#NervesJP

    Advent Calendar 2020で記事を3本投稿 4. 20201年11月-2021年1月にかけて、K-Ruby #25、NervesJP #14, 15で Elixir/Nervesについて発表 5. 2021年3月、情報処理学会第207回SE研究発表会で、IoTアプリケーションの 開発効率向上に関する手法の提案と実装について発表 6. 2021年7月、ElixirConf US 2021へ応募、採択決定 7. 2021年9月、IOTS2021へ投稿したPratipadに関する論文が採録決定 8. 2021年10月、ElixirConf US 2021で発表 出所: 栗林健太郎「ElixirConf US 2021登壇報告: IoTシステムの開発における課題の解決を目論むElixir製のフレームワークPratipadについて発表しました - ペパボテ ックブログ」 https://tech.pepabo.com/2021/10/18/elixir-conf-us-2021-antipop/
  9. 参加してみての感想 • CFPへの応募について検討会をされていたkokura.exのみなさまにきっかけを いただき、参加することができました。感謝! • 今回は、オフラインとオンラインのハイブリッド開催だったこともあって、 スピーカー数は去年の2倍(60名以上) • そのため、採択率は相対的にだいぶ高かったように思われる •

    チャレンジすれば十分つかめるチャンスなので、ぜひElixirConf USに限らず 、現在CFPが出ているElixirConf EUなどに出してみましょう! • 個人的な感想としては、まあ英語が……(略) 出所: Call for Proposals for ElixirConf EU 2022 open till Dec 9, · Eventil https://eventil.com/events/elixirconf-eu-2022/cfp
  10. Multi-Tenant Erlang Distributionの課題 マルチテナント=集約によるリソース効率性を活かしつつ、既存の分散Erlangネ ットワークをそのまま用いるだけでは実現できない、以下の課題を解決する必要 がある。 • テナントごとのネットワークの権限分離 • 既存の分散Erlangプロトコルの拡張

    • TLSクライアント証明書の効率的な配布と管理 また、それらが実現された上で、マルチテナント環境下でのIoTデバイスのOTA など、プラットフォームとして必要な機能の提供も課題となる。 (直接は関係しないが、Neos VRのようなVRプラットフォームを分散Erlangネットワークでつなぎたいという夢も)