$30 off During Our Annual Pro Sale. View Details »

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. Multi-Tenant Erlang Distributionを目指して
    ElixirConf US 2021参加報告
    栗林 健太郎
    EDI#8+kokura.ex#47:ElixirConfUS凱旋会(2021年10月21日)

    View Slide

  2. 栗林 健太郎(あんちぽ)
    ● ソフトウェアエンジニア
    ● GMOペパボ株式会社取締役
    CTO
    ● JAIST博士前期課程の学生
    @kentaro
    @kentaro
    自己紹介

    View Slide

  3. 目次
    1. ElixirConf US 2021で話したこと
    2. 参加に至った経緯と感想
    3. 今後の展望

    View Slide

  4. 1. ElixirConf US 2021で話したこと

    View Slide

  5. 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ネットワーク上のノー
    ドとして動作すること

    View Slide

  6. 複雑な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

    View Slide

  7. そこで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

    View Slide

  8. 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

    View Slide

  9. 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

    View Slide

  10. 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

    View Slide

  11. 宣言的なデータフロー記述
    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

    View Slide

  12. 2. 参加に至った経緯と感想

    View Slide

  13. 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/

    View Slide

  14. 第7回WebSystemArchitecture研究会でのNervesに関する発表
    出所: 第7回WebSystemArchitecture研究会(オンライン) - connpass https://wsa.connpass.com/event/187128/

    View Slide

  15. #NervesJP Advent Calendar 2020で書いた記事
    出所: #NervesJP Advent Calendar 2020 - Qiita https://qiita.com/advent-calendar/2020/nervesjp

    View Slide

  16. Elixir/Nerves関連で実施したライトニングトーク
    出所: 栗林健太郎 https://speakerdeck.com/kentaro

    View Slide

  17. 情報処理学会第207回SE研究発表会へ投稿した研究報告
    出所: 栗林健太郎「情報処理学会の第207回SE研究発表会で、IoTアプリケーションの開発効率向上に関する手法の提案と実装について発表しました - ペパボ研究所
    ブログ」 https://rand.pepabo.com/article/2021/03/04/ipsj-sigse-207/

    View Slide

  18. Pratipadに関する発表・論文
    ● 修論の研究テーマとしての取り組んでいる内容
    ● IOTS2021という、情報処理学会のインターネットと運用技術研究会主催の
    シンポジウムに論文が採録されることとなった
    ○ 2021年11月25、26日に発表
    ○ その後、論文・発表資料を公開予定
    ● 論文では技術的詳細については書いていないので、今回のElixirConf US 2021
    ではそちらを中心に話した
    ● もろもろブラッシュアップして修論へしていく予定

    View Slide

  19. 参加してみての感想
    ● 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

    View Slide

  20. 3. 今後の展望

    View Slide

  21. Multi-Tenant Erlang Distributionとは
    今回のトークの方針にそってIoTシステムプラットフォームを作るとしたら、必要
    になってくること。
    IoTシステム
    プラットフォーム
    Pratipad
    Pratipad
    Pratipad
    IoTデバイス群
    テナントごとの分散Erlangネットワーク

    View Slide

  22. Multi-Tenant Erlang Distributionの課題
    マルチテナント=集約によるリソース効率性を活かしつつ、既存の分散Erlangネ
    ットワークをそのまま用いるだけでは実現できない、以下の課題を解決する必要
    がある。
    ● テナントごとのネットワークの権限分離
    ● 既存の分散Erlangプロトコルの拡張
    ● TLSクライアント証明書の効率的な配布と管理
    また、それらが実現された上で、マルチテナント環境下でのIoTデバイスのOTA
    など、プラットフォームとして必要な機能の提供も課題となる。
    (直接は関係しないが、Neos VRのようなVRプラットフォームを分散Erlangネットワークでつなぎたいという夢も)

    View Slide

  23. 終わり

    View Slide