Slide 1

Slide 1 text

Cloud IoT Core as Log Aggregation Gateway @sakajunquality 2019.01.19 GDG/GCPUG Shinshu

Slide 2

Slide 2 text

Cloud IoT Core as Log Aggregation Gateway + α @sakajunquality 2019.01.19 GDG/GCPUG Shinshu

Slide 3

Slide 3 text

Agenda - About me - Cloud IoT & Log Aggregation - (おまけ)Kubernetes at Edge

Slide 4

Slide 4 text

About me

Slide 5

Slide 5 text

About me Jun Sakata - ID: @sakajunquality - Google Developers Expert, GCP - SWE, Reliability @Ubie, Inc.

Slide 6

Slide 6 text

@sakajunquality - 最近やってること - #docker #kubernetes - よく使うGCPプロダクト - #GKE #Cloud Build #BigQuery - 好きなこと - #Photograph #Beer #Coffee

Slide 7

Slide 7 text

@sakajunquality - 最近やってること - #docker #kubernetes - よく使うGCPプロダクト - #GKE #Cloud Build #BigQuery - 好きなこと - #Photograph #Beer #Coffee => IoT 詳しくない!!

Slide 8

Slide 8 text

@sakajunquality - 最近やってること - #docker #kubernetes - よく使うGCPプロダクト - #GKE #Cloud Build #BigQuery - 好きなこと - #Photograph #Beer #Coffee => IoT 詳しくない!! => ちなみに長野はn回目! ( 3

Slide 9

Slide 9 text

Cloud IoT Core & Log Aggregation

Slide 10

Slide 10 text

(前職の事例のため具体的なプロダクト名は伏せま す。ざっくりDAU数十万人のtoCサービスです。)

Slide 11

Slide 11 text

Sending Logs

Slide 12

Slide 12 text

Logs from Smartphone App ユーザーの行動データ e.g. クリックやスクロールなど

Slide 13

Slide 13 text

How to send log? - From Server-Side - From Client-Side

Slide 14

Slide 14 text

How to send log? - From Server-Side - バックエンドのAPIサーバーなどへのリクエストをベースにロギング - 通信は少ないが、行動が詳細にわからない

Slide 15

Slide 15 text

How to send log? - From Server-Side - From Client-Side

Slide 16

Slide 16 text

How to send log? - From Client-Side - バックエンドのAPIサーバーなどとは別にクライアントサイドからログを送る - 通信が増えるかもしれないが、詳細なログが取得可能

Slide 17

Slide 17 text

How to send log? - From Client-Side Several things to consider... - Storage - Endpoint - Protocol

Slide 18

Slide 18 text

How to send log? - From Client-Side Several things to consider... - Storage - Endpoint - Protocol

Slide 19

Slide 19 text

Storage

Slide 20

Slide 20 text

BigQuery - みんな大好きBigQuery - データの種類にもよると思うが汎用的に使える - スケールを考えるとBigQueryにデータを貯めるのが楽

Slide 21

Slide 21 text

How to send log? - From Client-Side Several things to consider... - Storage - Endpoint - Protocol

Slide 22

Slide 22 text

Endpoint

Slide 23

Slide 23 text

Endpoint Serverless VM/Container

Slide 24

Slide 24 text

Endpoint Serverless VM/Container Cloud Pub/Sub Cloud Functions GAE GCE GKE

Slide 25

Slide 25 text

Cloud IoT Core as Endpoint

Slide 26

Slide 26 text

Cloud IoT Core ログの受け口とすることで・・・ - ログを受けるアプリケーションの実装が不要 - スケーラブルなマネージドのインフラが利用可能

Slide 27

Slide 27 text

How to send log? - From Client-Side Several things to consider... - Storage - Endpoint API - Protocol

Slide 28

Slide 28 text

Protocols Several protocols... - HTTP - MQTT - AMQP - Websocket? - Protobuf?

Slide 29

Slide 29 text

Protocols Cloud IoT Core supports... - HTTP - MQTT - AMQP - Websocket? - Protobuf?

Slide 30

Slide 30 text

MQTT - 軽量なプロトコル - Pub/Sub型 MQ - Use Case: FB Messenger

Slide 31

Slide 31 text

MQTT over Websocket - Webのフロントから直接通信する場合は、 httpで通信する必要があるので - websocket(over http)で使うことが必要 - 現時点ではCloud IoT Coreでは対応して内が、httpとして送ることができる

Slide 32

Slide 32 text

Processing Logs

Slide 33

Slide 33 text

Processing Logs - Cloud IoT Core に飛ばしたログをDWH (今回はBigQuery) に飛ばす

Slide 34

Slide 34 text

Processing Logs 具体的には、 - Cloud IoT Core to Cloud Pub/Sub - Cloud Pub/Sub to BigQuery via Cloud Dataflow

Slide 35

Slide 35 text

Cloud IoT Core to Cloud Pub/Sub - Cloud IoT Coreのログは Cloud Pub/Sub に送られる - セットアップする際にdevice(デバイス管理用)/telemetry(ログ受取用) のトピックを求められる

Slide 36

Slide 36 text

Why not sending directly to Cloud Pub/Sub? - Cloud IoT Coreだと ProtocolとしてMQTTが使える - Cloud Pub/Sub だとクライアントでの認証認可がめんどくさい

Slide 37

Slide 37 text

Cloud Pub/Sub to BigQuery - Cloud Dataflow を使用して、BigQueryにデータを挿入する - Telemetryのトピックに対してSubscriptionを追加

Slide 38

Slide 38 text

Cloud Dataflow - Apache Beamをベースとしたログパイプラインのプラットフォーム - SDKはJava / Python - Batch + Stream => Beam - 便利なライブラリもある - https://github.com/spotify/scio

Slide 39

Slide 39 text

Cloud Pub/Sub to Cloud Storage - スキーマ変更時にDataflowを壊してログが欠損しないように Cloud Storageに生ログの保存 - Cloud Pub/Sub は複数のSubscriptionを作れる - GCSに上げるだけだと Cloud Dataflowも公式テンプレートを使える

Slide 40

Slide 40 text

Final Architecture

Slide 41

Slide 41 text

Architecture: Before ホントはfluentdが あったりごちゃご ちゃ

Slide 42

Slide 42 text

Architecture: After 一部サーバーサイド から送ってるログも Dataflow経由に変 更

Slide 43

Slide 43 text

Troubles? - Cloud IoT Coreのデバイス数の上限に達した - ユーザーのデバイス (iOS/Android)ごとにIoTデバイスを登録していた - 上限緩和申請 - 適切に使われてないデバイスは削除する - まとめて消すAPIがなかった(当時) - Webからは MQTT で送れない - 安定したライブラリがない? - フロントでJWTを扱うのがめんどくさい - Over Websocketが使えない (GAEでブローカーを作る? ) - 一旦httpで送る

Slide 44

Slide 44 text

Troubles? - Pub/Subのトピックは消えないけど、使用していないとサブスクリプションは自動で消えるので注意

Slide 45

Slide 45 text

Takeaways - 本来は双方向で通信しデバイスを管理するためだが単方向のみにも使える - IoT というよりも MQTT という軽量プロトコルを簡単に使える - ログの収集としては少し too muchかも知れないが技術的には面白かった - Cloud IoT Core, Cloud Pub/Sub, Cloud Dataflow, BigQuery すべてスケーラブル

Slide 46

Slide 46 text

Kubernetes at Edge ~from KubeCon 2018 NA~

Slide 47

Slide 47 text

Kubernetes - GoogleのBorgをベースとしたコンテナオーケストレーションの OSS - KubernetesのマネージドサービスがGKE

Slide 48

Slide 48 text

https://twitter.com/superbrothers/status/1060468439091822592

Slide 49

Slide 49 text

Kubernetes at Edge - Kubernetes IoT Edge Working Group - Recap from KubeCon 2018 NA - KubeCon - IoT Edge Working Group Intro & Deep Dive - Use Case: Chick-fil-A

Slide 50

Slide 50 text

Kubernetes at Edge - Kubernetes IoT Edge Working Group - Recap from KubeCon 2018 NA - KubeCon - IoT Edge Working Group Intro & Deep Dive - Use Case: Chick-fil-A

Slide 51

Slide 51 text

Kubernetes IoT Edge Working Group - IoT と EdgeでのKubernetesの活用を話し合うグループ - 2週1でオンラインミーティング

Slide 52

Slide 52 text

https://github.com/kubernetes/community/tree/master/wg-iot-edge

Slide 53

Slide 53 text

Kubernetes IoT Edge Working Group 実際のIoT環境での構築や、検証(PoC)、改善などを話し合っている

Slide 54

Slide 54 text

White Paper: IoT and Edge computing with Kubernetes http://bit.ly/iot-edge-whitepaper - クラウドネイティブなパラダイムでエッジでも Kubernetesを使えるようにしたい

Slide 55

Slide 55 text

Kubernetes at Edge - Kubernetes IoT Edge Working Group - Recap from KubeCon 2018 NA - KubeCon - IoT Edge Working Group Intro & Deep Dive - Use Case: Chick-fil-A

Slide 56

Slide 56 text

KubeCon - Officially, “KubeCon + CloudNativeCon” - 年3回: EU/China/NA - Kubernetes / Cloud Native app & developmentなどについて - IoTに関するセッションが2つ

Slide 57

Slide 57 text

KubeCon - YouTubeに全セッションが上がってるので映像で確認できます - (自分のセッションも・・・)

Slide 58

Slide 58 text

IoT Edge Working Group Intro & Deep Dive IoT Edge WG Session - Intro: Kubernetes IoT Edge WG - https://sched.co/HSBb - Deep Dive: Kubernetes IoT Edge WG - https://sched.co/HSCE

Slide 59

Slide 59 text

Intro: Kubernetes IoT Edge WG

Slide 60

Slide 60 text

Intro - https://sched.co/HSBb - パネルディスカッション形式でワーキンググループの説明など

Slide 61

Slide 61 text

Deep Dive: Kubernetes IoT Edge WG

Slide 62

Slide 62 text

Deep Dive - https://sched.co/HSCE - Introと同じメンバーでのセッション - もう少し技術的詳細について

Slide 63

Slide 63 text

Why Edge? Data Pre-Processing - Network Cost - Latency / Bandwidth - Data Policy - e.g. GDPR

Slide 64

Slide 64 text

KubeEdge - https://github.com/kubeedge/kubeedge

Slide 65

Slide 65 text

KubeEdge - Kubernetesのクラスター自体はクラウド上 - Edgeのノードをクラウドのクラスターの CRDで管理? - EdgeのデバイスとEdgeのノードが通信

Slide 66

Slide 66 text

Use Case: Chick-fil-A - https://sched.co/GrXv - セッション自体はKubernetesのGitOpsについ て - アメリカのチキンサンド店の店舗に Kubernetes のクラスターを置いてる話 - 結構美味しそう (https://www.chick-fil-a.com/)

Slide 67

Slide 67 text

Use Case: Chick-fil-A - とにかくトランザクションが多い

Slide 68

Slide 68 text

Use Case: Chick-fil-A - このような Kubernetes のクラスターを各店舗 に設置

Slide 69

Slide 69 text

Use Case: Chick-fil-A - 結果として相当量のMQTTのメッセージを扱っ ている

Slide 70

Slide 70 text

Takeaways - KubernetesもEdgeでの利用も広がりそう! - TPU Edgeと組み合わせられると面白そう! - GKE + Cloud IoT Core + KubeEdge + TPU Edge みたいなのを試すと楽しそう