Movatterモバイル変換


[0]ホーム

URL:


Uploaded byterurou
40,272 views

MQTTとAMQPと.NET

MQTTとAMQPとおまけ的に.NETを絡めた話です

Embed presentation

Downloaded 280 times
MQTTとAMQPと.NETterurou2015/02/07
自己紹介1
自己紹介/所属等• デンキヤギ株式会社• 代表取締役• 社員, フリーランス, 協業等 募集してます• DSTokai管理人• 東海地方のメタコミュニティ• IT勉強会カレンダーっぽいやつの東海地方版• NGK(名古屋合同懇親会)• エンジニア向けクロスコミュニティ忘年会• ここ数年は100人前後の参加者2
自己紹介/技術領域• フロントエンドアーキテクト(自称)• JavaScript(Haxe), WPFあたりがわりと得意• 周辺にGUIできる人が居なかった結果…• 普通のアーキテクト歴も5年ぐらいはある• 大量データ×フロントエンド• 100万件を操作する高速なExcelみたいなヤツとか…• フロントエンドに限らず、バックエンドも最適化3
はじめに4
今日のネタについて• 最近、お仕事でMQTTとAMQPについて調べる機会があったので、まとめてきました• .NETの勉強会なので、.NETにも少し絡めますが、大半はMQTTとAMQPの話です5
予備知識6
MQTT, AMQPの雑な説明• 通信プロトコルの一種• HTTP, FTP等と同じアプリケーション層のプロトコル• メッセージ転送 (MQ)• IoT/M2Mでの利用も想定されている• デバイス - サーバ間で小さなデータを送受信• 世間的にはMQTTの方がIoT向けっぽいけど、Microsoft的にはAMQP (後述)7
MQ : Message Queue• メッセージ指向• Message Passing + Queue• 複数オブジェクト間でのメッセージ受け渡し• 受け取ったメッセージをQueueに格納• 非同期・疎結合• 送信側はメッセージ送信までを考えればよい• 受信側はQueueの消費だけを考えればよい• 分散システム・非同期処理がシンプルに書ける8
MQの移り変わり• 10-15年ぐらい前• MSMQ• JMS• わりと最近• AMQP• MQTT• STOMP• ZeroMQ• etc...9
Publish/Subscribeモデル• Publisher : メッセージ発信者• Subscriber : メッセージ購読者• Broker : メッセージ仲介者10・・・PublisherBroker / QueueSubscriber
Publish/Subscribeモデルの補足• Brokerは存在する・しないパターンがある• Brokerモデル vs Brokerlessモデル• このスライドではBrokerモデルを前提に解説• ReactiveExtensionsもPublish/Subscribeモデル11
MQ利用例• メッセージ配信基盤• 1:1, 1:N, 配信順序, エラー再送, ...全部MQ任せ• 応用で資産や設定情報の配布とか• Job Queue• 時間のかかる処理をWorkerに処理依頼• 一時的な処理殺到時の負荷分散、キューイング• ログ収集サービス、SlideShareライクサービスなど• メッセージはとりあえず待ち行列に貯める• 待ち行列が増えすぎたら一時的にWorkerを増やす12
MQTT13
MQTT : MQ Telemetry Transport• 軽量・省電力なプロトコル• 1対Nに特化したメッセージ配信• 低速・不安定なネットワークでの利用を想定• 2010年に仕様公開・ロイヤリティフリー• プロトコル自体は1999年から存在し、枯れている• IBMが主導的な立場• 仕様策定、商用製品の提供14
軽量・省電力なプロトコル• 軽量プロトコル• ヘッダサイズが最小で2byte• シンプルなプロトコルシーケンス• HTTPとの比較 (IBMの資料による)• トラフィック10-100分の1 → スループット10-100倍• 消費電力 10分の1以下15
1対Nに特化したメッセージ配信• Publish/Subscribeモデル• TopicベースでPublish/Subscribe• “/”区切りの階層構造(ファイルパスっぽい)• Subscribe時にワイルドカードで指定可• /japan/tokyo/device1/cpu• /japan/tokyo/+/meory ←部分一致• /japan/tokyo/device1/# ←以下全て16
低速・不安定なネットワークでの利用を想定• QoS : Quality of Service• Durable subscribe• LWT : Last Will &Testament, 遺言状• 単にWillと表記するケースも• Retain : Retained Publication17
QoS : メッセージ配信の品質レベル• QoS 0 : 最高1回• メッセージが確実に届く保証はない• 配信失敗しても再送を行わない• QoS 1 : 最低1回• 必ずメッセージは届くが、重複する可能性がある• QoS 2 : 必ず1回• 必ずメッセージが届き、重複もしない• 当然、QoS 0の方が処理は軽い18
Durable subscribe• メッセージ再配信機能• 意図せずにSubscriberの通信が断絶• その後、当該Subscriberが再接続• 切断~再接続までに発生したメッセージを再送• QoS 1, 2のメッセージを再配信• 明示的なdisconnect, unsubscribeを行った場合は再配信されない19
LWT• ClientはBroker接続時にLWTを設定可能• Clientが通信を切断時にメッセージを配信する• 通信死活監視を行っていて、意図しない切断時にもちゃんとメッセージが配信される• LWTにもQoSを設定可能20
Retain• ClientがSubscribeする際に、最後に配信されたメッセージを取得できる• Brokerは最後のメッセージのみは必ず保存する• 逆説的に、エラー再接続ではないケースでは古いメッセージを取得することはできない21
主なMQTT Broker• IBM MessageSight (商用,ハードウェア)• IBM WebSphere MQ Telemetry (商用)• 時雨堂 Akane (商用)• Mosquitto (OSS)• RabbitMQ (OSS, Plugin使用)• etc ...22
MQTT over WebSocket• WebSocket経由でMQTT接続するライブラリも存在する• Paho JavaScript Client• MQTT Brokerの前にWebSocket Gatewayを配置• Lighttpdでブリッジできることは確認した• たぶんNginx等のロードバランサーでもOKなはず23
MQTTの弱いところ• シンプルな仕様のため、できないことは多い• Job Queueは作れない• Subscriberが接続してくる前にPublisherが送信したメッセージは最後の一つしか残らない(Retain)• 1対1 メッセージ配信が考慮されていない• 認証の仕様が明確には定められていない• Brokerごとの実装に依存• 認証機能をサポートしていないBrokerも多い• OSSのBroker実装の層が薄い24
MQTTと.NET• MQTT .NET Client• Paho(M2Mqtt), WinRTにも対応• MQTTDotNet• nmqtt• MQTT .NET Broker• GnatMQ• 完成度がまだ低いので、素直にMosquittoかRabbitMQか商用Brokerを使った方が良い25
M2Mqtt, GnatMQの実装が微妙っぽい話• ソケットが同期通信で実装されている• パフォーマンス上の問題を抱えていそう…• WinRT版で無理やり同期処理…• Task<T>.Result で、非同期処理を同期待ち合わせ…• おそらく後付けで #ifdef したせい26
AMQP27
AMQP : Advanced Message Queuing Protocol• Enterpriseに対応できるプロトコル• 高信頼性• 高度なメッセージ配信• アクセス制御• 相互運用性が高い• 仕様がオープン(OASIS)• ワーキンググループのメンバーが豪華28
高信頼性• メッセージ永続化• Publisherが送信したメッセージをBrokerが永続化• 仮にBrokerが死んでも、再起動で復元できる• トランザクション• Subscriber側のメッセージを受け取る一連の処理をトランザクションを使って記述できる• tx.select, tx.commit, tx.rollback• メッセージは受け取れたが、後続処理でエラー発生というケースでも、メッセージがロストしない29
高度なメッセージ配信• Exchange (Direct, Fanout, Topic, Header)• Priority Queue• 優先度の高いメッセージを他より先に配信• QoS, Prefetching• メッセージを受け取れるSubscriber数を制限• 分散JobQueueを作るときに必須• immediate• Subscriberが存在していないときに配信できない30
Exchange• Direct• 特定のSubscriberのみに配信, 1:1• Fanout• 全てのSubscriberに配信, 1:N (1:All)• Topic• 特定のTopicのSubscriberのみに配信, 1:N• Header• Header(KeyValue)の組み合わせで配信先を特定, 1:N31
アクセス制御• “virtual host” + ACL• ACL : userごとのRead/Write権限• virtual hostごとにACLを設定• いわゆるマルチテナント的な分割もできる32
相互運用性• 実装面の仕様が明確化されている• メッセージフォーマット仕様が厳密• 仕様書にTypeSystemの章とかある• セキュリティ・アクセス制御等も明確に仕様化• 複数プログラミング言語、ベンダー間の相互運用に問題が生じないようになっている• ライブラリAPIについては規定なし• JMSでは逆にAPIを定義するが、実装は未定義33
ワーキンググループのメンバーが豪華• テクノロジ系• Cisco, Red Hat, VMware, Microsoft, ...• 金融(証券)系• Bank of America, JP Morgan, Goldman Sachs, Barclays,CREADIT SUISSE, ....• 金融系が沢山いる=金融系で使われている• トレーディングシステムでのメッセージング基盤• 以前はJMSだったらしい34
主なAMQP Broker• RabbitMQ• AMQPといえばRabbitMQ• Apache ActiveMQ, Apollo• Apache Qpid (, Red Hat Enteprise MSG)• IBM MQ Light• Microsoft Azure Service Bus & Event Hubs• Service Bus for Windows Server35
AMQPの弱いところ• 高機能な反面、仕様が複雑• “高機能・高信頼性”と”性能”がトレードオフ• MQTT等のシンプル系プロトコルとの比較• 要件によっては、NATSやKafka等も視野にいれる• トレードオフとはいえ…• 金融系で実績があることは重要• RabbitMQは完成度が高く、クラスタ構成が前提• MQTT Brokerでは商用とOSSの差が激しい36
AMQPと.NET• AMQP .NET Client• Broker製品ごとにライブラリが存在• RabbitMQ .NET Client (WCFもいける)• Qpid WCF• Azure SDK, ...• AMQP .NET Broker• 少なくともOSSは無いっぽい• 素直にRabbitMQかService Busを使いましょう37
AMQPとAzure Event Hubs• Azure Event HubsはIoT用サービスらしい• AMQPとHTTPプロトコルをサポートしている• IoTデバイスのバッテリーに優しくない気が…• AMQPプロトコルは重い (MQTTとの比較)• なんでMQTTサポートしてないんだろ…38
まとめ39
まとめ• MQTTとAMQPはMQのプロトコル• それぞれの特徴は全然違う• MQTT : シンプル・省電力• AMQP : 高機能・高信頼性• .NETからはどちらのプロトコルも使える• Microsoft的にはAMQP推し• MQTTの.NET Clientの品質は検証が必要• MosquittoのBindingを作るのもありかも…40

Recommended

PPTX
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
PDF
DSIRNLP #3 LZ4 の速さの秘密に迫ってみる
PDF
アーキテクチャから理解するPostgreSQLのレプリケーション
PDF
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
PDF
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
PDF
ドメイン駆動設計 分析しながら設計する
PDF
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
PDF
ストリーム処理を支えるキューイングシステムの選び方
PDF
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
PDF
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PPTX
Slurmのジョブスケジューリングと実装
PDF
目grep入門 +解説
PPTX
フロー技術によるネットワーク管理
PPTX
「おうちクラウド」が今熱い!
PPTX
HTTP2 最速実装 〜入門編〜
PDF
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
PDF
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
PPTX
Dockerからcontainerdへの移行
PPTX
Prometheus入門から運用まで徹底解説
PDF
分散トレーシング技術について(Open tracingやjaeger)
PDF
マイクロサービス 4つの分割アプローチ
PDF
Fluentdのお勧めシステム構成パターン
PDF
そんなトランザクションマネージャで大丈夫か?
PPTX
Redisの特徴と活用方法について
PPTX
本当は恐ろしい分散システムの話
PDF
オンラインゲームの仕組みと工夫
PDF
マイクロにしすぎた結果がこれだよ!
PDF
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
PDF
Ansibleで始めるインフラ構築自動化

More Related Content

PPTX
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
PDF
DSIRNLP #3 LZ4 の速さの秘密に迫ってみる
PDF
アーキテクチャから理解するPostgreSQLのレプリケーション
PDF
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
PDF
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
PDF
ドメイン駆動設計 分析しながら設計する
PDF
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
PDF
ストリーム処理を支えるキューイングシステムの選び方
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
DSIRNLP #3 LZ4 の速さの秘密に迫ってみる
アーキテクチャから理解するPostgreSQLのレプリケーション
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
ドメイン駆動設計 分析しながら設計する
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
ストリーム処理を支えるキューイングシステムの選び方

What's hot

PDF
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
PDF
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PPTX
Slurmのジョブスケジューリングと実装
PDF
目grep入門 +解説
PPTX
フロー技術によるネットワーク管理
PPTX
「おうちクラウド」が今熱い!
PPTX
HTTP2 最速実装 〜入門編〜
PDF
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
PDF
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
PPTX
Dockerからcontainerdへの移行
PPTX
Prometheus入門から運用まで徹底解説
PDF
分散トレーシング技術について(Open tracingやjaeger)
PDF
マイクロサービス 4つの分割アプローチ
PDF
Fluentdのお勧めシステム構成パターン
PDF
そんなトランザクションマネージャで大丈夫か?
PPTX
Redisの特徴と活用方法について
PPTX
本当は恐ろしい分散システムの話
PDF
オンラインゲームの仕組みと工夫
PDF
マイクロにしすぎた結果がこれだよ!
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
Slurmのジョブスケジューリングと実装
目grep入門 +解説
フロー技術によるネットワーク管理
「おうちクラウド」が今熱い!
HTTP2 最速実装 〜入門編〜
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
Dockerからcontainerdへの移行
Prometheus入門から運用まで徹底解説
分散トレーシング技術について(Open tracingやjaeger)
マイクロサービス 4つの分割アプローチ
Fluentdのお勧めシステム構成パターン
そんなトランザクションマネージャで大丈夫か?
Redisの特徴と活用方法について
本当は恐ろしい分散システムの話
オンラインゲームの仕組みと工夫
マイクロにしすぎた結果がこれだよ!

Viewers also liked

PDF
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
PDF
Ansibleで始めるインフラ構築自動化
PDF
Jenkins 2.0 Pipeline & Blue Ocean
PDF
Introduction to AMQP Messaging with RabbitMQ
PDF
メッセージキュー「Pulsar」の紹介 @OSC_20171007
PDF
Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜
PDF
Mozillaの報奨金制度で100万円ほど稼いだ話
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
Ansibleで始めるインフラ構築自動化
Jenkins 2.0 Pipeline & Blue Ocean
Introduction to AMQP Messaging with RabbitMQ
メッセージキュー「Pulsar」の紹介 @OSC_20171007
Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜
Mozillaの報奨金制度で100万円ほど稼いだ話

Similar to MQTTとAMQPと.NET

PDF
20210317 AWS Black Belt Online Seminar Amazon MQ
PDF
[AWSマイスターシリーズ] Amazon SQS / SNS
PPTX
Mqttで始めるIoT
PDF
CEDEC 2015 IoT向け汎用protocol MQTTのリアルタイムゲーム通信利用と実装、そして未来へ…
PDF
YAPC::Asia2014 - O2O/IoT/Wearable時代におけるWeb以外のネットワーク技術入門
PDF
デバイスからクラウドへ ~組み込みエンジニアと IoT
PPT
20060520.tcp
PDF
そろそろビジネスに貢献するSDNを考えませんか?~キーワードは“オープン”~
PPTX
M-6 MQTTの使いどころ (JJUG CCC 2015 Spring)
PPTX
NSQ-Centric Architecture (GoCon Autumn 2014)
 
PDF
Wakame-vnet / Open Source Project for Virtual Network & SDN
PDF
MQTT meetup in Tokyo 機能概要
PPT
第2回 分散システム本読書会
PPTX
Interactive connection2
PDF
Io t縛りの勉強会 #4
PPTX
非同期といえばMQ
PDF
A 1-2 One ASP.NET - ASP.NET Web Stack
PPSX
Fiorano MQTT (IoT, M2M, ワイヤレス センサー ネットワーク)
PDF
20111215 12 aws-meister-sqs_sns_sdb-public
PDF
20120303 jaws summit-meister-06_sns-sqs
20210317 AWS Black Belt Online Seminar Amazon MQ
[AWSマイスターシリーズ] Amazon SQS / SNS
Mqttで始めるIoT
CEDEC 2015 IoT向け汎用protocol MQTTのリアルタイムゲーム通信利用と実装、そして未来へ…
YAPC::Asia2014 - O2O/IoT/Wearable時代におけるWeb以外のネットワーク技術入門
デバイスからクラウドへ ~組み込みエンジニアと IoT
20060520.tcp
そろそろビジネスに貢献するSDNを考えませんか?~キーワードは“オープン”~
M-6 MQTTの使いどころ (JJUG CCC 2015 Spring)
NSQ-Centric Architecture (GoCon Autumn 2014)
 
Wakame-vnet / Open Source Project for Virtual Network & SDN
MQTT meetup in Tokyo 機能概要
第2回 分散システム本読書会
Interactive connection2
Io t縛りの勉強会 #4
非同期といえばMQ
A 1-2 One ASP.NET - ASP.NET Web Stack
Fiorano MQTT (IoT, M2M, ワイヤレス センサー ネットワーク)
20111215 12 aws-meister-sqs_sns_sdb-public
20120303 jaws summit-meister-06_sns-sqs

More from terurou

PDF
DataGridを自前実装する話
PDF
Webブラウザ上で動作する帳票エンジンを作る話
PDF
動的なILの生成と編集
PDF
altJSの選び方
PDF
DLR言語によるSilverlightプログラミング
PDF
大規模なJavaScript開発の話
PDF
大規模なギョームシステムにHaxeを採用してみた話
PDF
オブジェクト指向の皮をかぶった関数型プログラミング言語 Haxe
PDF
デンキヤギの採用の考え方
PDF
FIRST STEP to Haxe/JavaScript
PDF
Computation Expressions for Haxe
PDF
スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例
PDF
Metro Style AppsでMSIL ver.2012/06/09
PDF
Vue.jsをhaxeで
PDF
自社サービスでDurable Functionsを採用した話
PDF
Yet Another DLR for Silverlightの試作
PDF
Iron Python / Iron Ruby で .NET Programming
PDF
Metro Style AppsでMSIL
PDF
Scala×silverlight
PDF
CommonJSの話
DataGridを自前実装する話
Webブラウザ上で動作する帳票エンジンを作る話
動的なILの生成と編集
altJSの選び方
DLR言語によるSilverlightプログラミング
大規模なJavaScript開発の話
大規模なギョームシステムにHaxeを採用してみた話
オブジェクト指向の皮をかぶった関数型プログラミング言語 Haxe
デンキヤギの採用の考え方
FIRST STEP to Haxe/JavaScript
Computation Expressions for Haxe
スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例
Metro Style AppsでMSIL ver.2012/06/09
Vue.jsをhaxeで
自社サービスでDurable Functionsを採用した話
Yet Another DLR for Silverlightの試作
Iron Python / Iron Ruby で .NET Programming
Metro Style AppsでMSIL
Scala×silverlight
CommonJSの話

MQTTとAMQPと.NET


[8]ページ先頭

©2009-2025 Movatter.jp