深入了解 Windows Azure

Windows Azure 服务总线和互联网的东西

Bruno Terkaly
Ricardo Villalobos

机器到机器 (M2M) 计算正迅速成为一种技术,所有开发人员和架构师需要拥抱。许多研究表明一个未来世界的数百亿美元的设备 (在地球上的每一个人的出现),到 2020 年 (bit.ly/M2qBII)。这种情况发生的原因之一是因为它一直都不容易为车库修补匠和爱好者到原型消费者或商业化的设备,为以后的制造和销售。硬件和软件入门是非常低廉的。少于 100 元,您可以订购 Arduino 或覆盆子 PI。

但你做得到什么您支付和这些设备 — 尤其是 Arduino — 代表低端的设备功能频谱。32 KB 的闪存存储和 4 KB 的 RAM,他们缺乏运行除了 Web 堆栈的最简单方面的权力。Arduino 是开源微控制器装有一个小小的芯片、 内存和存储。该软件包括一个标准的编程语言编译器和微控制器执行的引导加载程序。您可以添加扩展板插头到该设备,勾搭电机控制、 GPS、 以太网、 液晶显示、 传感器、 执行器和更多。有点多付钱,你可以得到更强大的树莓 PI,附带了一个版本的 GNU/Linux 操作系统和 256 KB 的 RAM。

这些设备很少具有价值,除非它们连接到别的东西,或许云后端接收数据并发送命令。但连接到、 沟通和管理这些设备从运行在云计算中的应用程序带来了一些特殊的挑战。数量的设备,以及其有限的电池寿命和带宽,部队云开发人员要仔细考虑所有的选项。

在本文中,我们会看看如何开发商正在努力克服寻址能力、 带宽和安全的关键挑战。我们将揭穿神话 IPv6 和虚拟专用网络 (Vpn) 是简单、 高效和安全的并会建议 Windows Azure 服务总线是完美的产品,优雅地克服这些挑战。开车回家的一些概念,我们会提出四种模式时,可以使用您的客户端设备与云后端进行通信。最后,我们会提出服务总线支持为先进的消息队列协议 (AMQP) 1.0 简介 — 一种互操作性和高效率的设备到云通信协议。

许多年来,安全意味着使用 IPv4,Vpn 结合使用 TCP/IP 的连接。这相当不错,但现在出现了年龄的迹象。对于初学者,很难把唯一的 IP 地址出来了公共互联网上使用的一种设备 — 我们有很多 IP 地址枯竭。IPv6 将来到抢救这办法应许的死硬风扇。传统的看法是如果你给设备唯一的 IP 地址,解决你所有的困难问题。不幸的是,这解决了整个问题的只有一小部分。给它自己唯一的 IP 地址的每个设备绝对不是许多人的期望的银色子弹。

要明确的是,IPv6 和 Vpn 是充满拥挤、 连接设备的世界中存在的问题。带宽,尤其是一个挑战。健谈的设备和网络之间的连接会导致过多的流量。此外,使用典型的 HTTP 请求/响应方法为所有消息传递的排水渠电池寿命在许多设备上。也许最重要的是不能保证安全。Vpn 是在某些情况下绝对不安全。之前提出一个解决方案,让我们更加深入,探讨这些问题。

创建网络通信量过大与云回通信结束有问题的设备。如果有许多健谈设备带宽费用的钱,可能很多钱。此外,更多的数据意味着更多的 CPU 使用,这意味着更多的能量,在移动设备上宝贵的资源。大多数电池供电设备配备一个无线发射器和一张 SIM 卡需要输入期间,当他们不是发射或接收数据的低功耗的"睡眠"模式。IEEE 802.11 标准定义了此电源保存轮询功能。数据获取缓冲设备睡觉的时候。一旦它唤醒,缓冲的数据被传递。健谈网络填充缓冲区和过早地唤醒沉睡的设备。

HTTP 请求/回复的办法可以是可笑地浪费资源,给予相对于整体的 HTTP 请求-有效载荷的大小­应对基础设施。假设一个设备只需要向云报告数量如温度、 压力或 GPS 协调。二进制数据可能是只有几个字节的大小,但是 HTTP POST 一般是至少 500 至 1,000 的字节数,仅从 200 到 2000 字节的请求标头。当然,有些开发人员用的特技,馅的一切入的 HTTP 标头,以避免在 HTTP 请求的正文部分的开销。但这并不是充足的和 HTTP 请求的大小仅获取更大的时候你要传输的安全凭据。

这里是一些简单的数学,要说服你。想象一下您的设备已发送温度数据每隔 5 秒和温度的数据负载是慷慨的 20 个字节。在 24 小时内,从设备到云大约 350,000 字节传输将本身的温度数据。如果您添加的 HTTP 请求/响应信封,您每个传输通过提升 800 个字节,一个因素 41,而不是只是在 350 KB 的温度数据云向发送超过 14 MB。这可以得到费用昂贵,如果你支持数以千计的设备。

也许最大的误解是 Vpn 是本质安全。现实是 VPN 网络可以是有风险的尤其是当设备连接到 VPN 是制造商的或运营商的直接物理控制范围之外。一旦违反了单个设备,连接到同一 VPN 的所有设备都都易受伤害。一旦一个不受信任的用户获取对已连接的设备的访问,他或她可以使用该设备来探索和攻击您的内部资源。尽管有这些缺点,Vpn 往往是由许多运营商提供的唯一选项。

Windows Azure 服务总线方法

Windows Azure 服务总线提供一些优秀的解决方案,对这些挑战。利用服务总线是更安全,因为该设备是仅上互联网的终结点,它可以将消息放入队列。该设备不能达到内部云服务的其他受保护的网络资源。此外,使用服务总线设备连接成本较少的电源,因为该设备可以更经常睡,定期醒来拉任何等待队列中的消息。

服务总线提供更多价值,因为它可以:

  • 解耦设备沟通和互动从您的云服务
  • 启用负载调配和负载平衡您的后端服务的几个实例间
  • 找出重复的消息
  • 收集邮件到逻辑组 (称为会话)
  • 执行事务行为和原子性
  • 支持有序的传递的邮件,并为每个消息提供时间生活
  • 延长以发布-订阅方案很容易使用的主题和订阅

若要获得更具体的概念设备如何连接到并与云后端进行通信,看看图 1,其中描述了如何专用设备可能适合到更大的体系结构。我们将使用 OpenSprinkler,开放源代码的是能够在决定打开水龙头前检查天气的基于互联网的喷灌阀门控制器的典型示例。它是使用 Arduino 零件生成的。注意在图 1 Arduino 控制作为互联网连接使用家庭网络的自动喷水灭火系统,并与云后端进行通信。


图 1 Arduino 自动喷水灭火系统参考体系结构

解决连接问题

Windows Azure 服务总线能够很好地解决的寻址能力和网络连接性挑战。Arduino 设备可能会坐在一些 NAT 层,因此很难从一个云服务达到后面。幸运的是,服务总线大大简化连接了由作为中继服务,作为云后端的代理。此外,它可以提供队列、 主题和订阅,从而使其能够作为事件中心的云计算和设备之间发送的消息。作为中继代理队列的解耦的性质允许设备以异步方式发送和接收邮件,从云,即使只是偶尔连接。为了安全,该设备可以与 SharedAccessSignature、 SharedSecret、 SAML 或 SimpleWebToken 身份验证。

注意在图 1可从服务总线消息队列中读取一个或多个辅助角色。辅助角色可以作出的决定和回设备发出命令。其他工作者角色可能从其他系统如国家气象服务获取天气信息。辅助角色也可能到 NoSQL 数据库中,如 MongoDB 保存所有未处理传入的事件。

图 1 还显示交互 Web 角色的移动用户,可以安排浇水。移动用户可以接收推送通知从 Windows Azure 移动服务 (WAMS),它支持所有的主要通知网络,如 Windows 通知服务 (WNS)、 Microsoft 推送通知服务 (MPNS)、 苹果推送通知服务 (资深护师) 和谷歌云消息为 Android (GCM)。广域测量系统容易地支持 Windows、 iOS 和 android 系统。

你甚至可以想象机器学习体系结构的一部分。Windows Azure 可以支持 Linux Vm 和很简单配置 PyMongo (MongoDB 驱动 Python 程序) 读取事件流产生的各种设备和使用在 PyML 中的机器学习技术来查找模式或对事件流数据作出的预测。基于某些预测或图案,云服务可以选择将命令发送到该设备,如开启或关闭水。

消息传递系统,是用于发送和接收数据的主端点是可扩展的因为设备可以继续发送单个消息流,虽然新的订阅可以添加到每个新的系统,将消耗该消息流服务巴士主题。这些系统可以实时分析和机器学习,以及前面所述的其他方案。

云计算与通信

有四个模式,可以在客户端上用来与云服务进行通信。在介绍了这些图 2

图 2 四个型态的设备云服务通信

图案 汇总 示例
遥测 客户端设备向云服务发送数据 (单程)。 设备将有关温度的消息发布到主题。云服务订阅一些或所有这些温度的邮件。
调查 客户端设备查询向云服务发送和接收的响应。 设备通过张贴到某个主题的天气查询询问了即将到来的天气条件。云服务订阅查询和职位到它自己的主题的消息响应该设备所订阅。
Command 向客户端设备发出命令,云服务和客户端设备返回一个成功或失败的响应。 云服务将温度消息命令发布到一个设备所订阅的主题。该设备然后打开或关闭的水,通过过帐到某个主题的响应发送回云服务的答复。
通知 云服务发出一个单向的带外通知到客户端设备是重要的设备的操作。 云服务将时间重置消息发送到设备,通过向该设备所订阅一个主题发布消息。

所有四个模式利用服务巴士主题和订阅。根据通信 (设备云服务或云服务到设备) 的方向,该设备可以订阅的主题或发布到主题。主题是只是一种机制,发送的邮件,而使用订阅,则要使用的消息。您可以创建筛选器规则,以允许更多的细粒度控制检索消息时的订阅。可以用于辅助角色在云服务中的,将消息发布到主题或消耗从订阅消息。

由于空间的限制,我们不能说明所有的模式在这里在这篇文章,所以我们会深入研究只是其中一个。图 3 显示命令模式的参考实现。它演示设备从建筑物 1 和 2 可以订阅消息 (命令) 和后返回到主题响应。请注意在云服务工作者角色可以对温度和树荫下命令主题发布消息和特定的设备可以单独订阅的温度或树荫下控制消息。服务巴士主题和订阅可用于多种组合中适当地进行分区的消息流。


图 3 为命令模式的的体系结构

AMQP 和相互联系

Windows Azure 服务总线团队最近宣布为先进的消息队列协议 (AMQP) 1.0,一个开放的标准与面向消息的中间件的二进制应用程序层的支持。它的主要价值是它是高度互操作性和它使用的二进制格式在电线上,尽量减少有效载荷大小。

AMQP 支持可靠的消息传输、 队列、 路由、 pub/sub 和更多。因为它是针对整个网络流媒体的数据线级协议,任何兼容的工具可以与执行语言无关的数据进行交互。这使得跨平台的混合应用程序使用的开放的、 标准的协议。图书馆可以混合和匹配语言、 框架和支持.NET,Java,Python 和 PHP 的操作系统。你会发现在 Windows Azure 样本页的详细信息 aka.ms/G3izk8。设计为光和除­可操作,AMQP 是一个很适合今天的设备需要连接到云后端的很多。

然而,AMQP 是太多软件,今天的 Arduino,缺乏必要的内存、 存储和处理能力。运行 AMQP 需要支持传输层安全 (TLS),一种加密协议,提供了 com­通过 TCP 服务的安全。TLS 使用 X.509 证书 (非对称加密技术) 来验证的跨线通信各方身份。此外,Apache Qpid 质子基于客户端消息库通常用于 AMQP 来简化跨路由器、 桥梁和代理服务器的通信与整合。这一切引起了问题:你如何支持低端设备连接到后端云同时享受服务总线消息处理基础结构的好处?

一个选项是要付出更多的钱和获取树莓 PI。如果你不想要这样做,你就会需要更具创造性。您可以通过利用在克莱门斯 Vasters 代码启动 bit.ly/1acvLdS,其中允许接收命令眨眼微控制器上的 LED 灯 Arduino。代码实现设备的网关,提供 Arduino 连接到 TCP 端点。要维持通过 Nat 和 Windows Azure 负载平衡器的连接,云服务需要 ping Arduino 每 235 秒 (只是不到 4 分钟)。请参阅 Vasters C# 项目,LedBlinkerServer。

在我们下一列中,我们将进行更深入解释代码如何工作以及如何你可以 Arduino 来发送和接收到来自服务总线的消息。

总结

在本月的专栏中我们提出了四种模式,可用于生成管理处­能消息交换设备和云服务之间。我们引进了 AMQP 的开源消息队列的协议,有助于提高互操作性和最小化带宽,完全支持 Windows Azure 服务总线。最后,我们开始讨论如何支持低端设备连接到后端云同时使用的服务总线消息传递基础设施,我们会继续在我们的下一条。

我们想感谢克莱门斯 Vasters 和阿彼锡 Lal 帮助我们理解连接设备的勇敢新世界。显然,连接到云服务的专用设备的世界正在迅速增长。采用传统的方法与云服务通信时需要进行重新求值。安全、 带宽、 网络可靠性和互操作性,只是一些与专用设备在 M2M 世界设计师和开发人员面临的挑战。使用 Windows Azure 服务总线使得这些远同样艰巨的挑战。

Bruno Terkaly 是微软开发者福音传教士。他深入的知识来自于多年的经验在字段中,编写代码使用多种平台、 语言、 框架、 Sdk、 库和 Api。他花时间编写代码,写博客,给现场演示上构建基于云计算的应用程序,具体地使用 Windows Azure 平台。您可以阅读他的博客在 blogs.msdn.com/b/brunoterkaly

Ricardo Villalobos 是具有超过 15 年的经验设计和创建应用程序的公司在多个行业的经验丰富的软件设计师。他从达拉斯大学工商管理持有不同的技术认证,以及硕士学位,为微软,帮助世界各地的公司要在 Windows Azure 实施解决方案作为一个云建筑师在 DPE 全球范围内参与合作伙伴团队工作。您可以阅读他的博客在 blog.ricardovillalobos.com

Terkaly 和比利亚洛沃斯共同提出大行业会议。他们鼓励读者的 Windows Azure 内幕交易与他们联系的可用性。也可以拨打 Terkaly bterkaly@microsoft.com 和比利亚洛沃斯也可以拨打 Ricardo.Villalobos@microsoft.com

衷心感谢以下 Microsoft 技术专家对本文的审阅:阿彼锡拉尔和克莱门斯 Vasters