Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

1. ElixirConf US 2021で話したこと

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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/

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

3. 今後の展望

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

終わり