公司 Wink 地点 纽约州纽约市 行业 物联网平台

挑战

构建一个低延迟、高可靠性的基础架构,以服务于数百万台互联智能家居设备与公司消费者中心和移动应用程序之间的通信,重点是水平可扩展性、快速加密所有内容的能力以及在出现任何问题时可以轻松恢复的连接。

解决方案

全面使用 Kubernetes-Docker-CoreOS Container Linux 技术栈。

影响

“美国两家最大的零售商 [家得宝和沃尔玛] 正在销售和推广该品牌和硬件,”Wink 工程主管 Kit Klein 自豪地说——尽管他补充说,“这确实带来了很大压力。这不是一个有很多科技爱好者的零售环境。这些都是想要好用产品、不能容忍技术借口的普通人。”这进一步证明了 Klein 对 Wink 团队构建的基础架构的信心。Wink 80% 的工作负载运行在 Kubernetes-Docker-CoreOS 的统一堆栈上,这使得公司能够不断创新和改进其产品和服务。Klein 表示,致力于这项技术“使得在基础架构之上进行构建变得相对容易”。

打开一个灯泡需要多少人?

Kit Klein 拿出手机来演示。Wink 的工程主管轻扫了几下,调出了这家纽约公司开发的智能家居应用程序,并点击了灯泡按钮。“说实话,当你拿着手机,按下灯泡按钮时,”他说,“在你感觉到手指按压屏幕的同时,灯就亮了。它就像信号传输到你的大脑一样快。”

当然,只需一根手指和不到 200 毫秒的时间就可以打开灯——或者锁上门,或者改变恒温器的温度。但是,Wink 之所以能够帮助消费者如此快速、轻松地管理他们的互联智能家居产品,是因为 Klein 和他的团队构建并继续使用 CoreOS(一种专为集群部署设计的开源操作系统)和 Kubernetes(一个用于跨主机集群自动部署、扩展和操作应用程序容器的开源平台)的统一堆栈开发了一个复杂的云原生基础架构,它提供了以容器为中心的基础架构。“当你有一个庞大、复杂的相互依赖的微服务网络,它们需要能够相互发现,并且需要水平可扩展和容错时,这才是它真正优化的目标,”Klein 说。“很多人最终依赖于 [一些大型云提供商提供的] 专有服务来完成其中的一些工作,但是通过采用 CoreOS/Kubernetes,你获得的是可移植性,不会被锁定在任何一家公司。你真的可以掌握自己的命运。”

事实上,Wink 做到了。该公司的使命宣言是让互联家居触手可及——也就是说,对非技术人员来说,它要方便易用、价格合理,也许最重要的是,可靠。“如果你不能相信当你按下开关时,灯就会亮,或者如果你在远程查看你的房子时,信息不准确,那么系统的便利性就会丧失,”Klein 说。“所以这就是基础架构的用武之地。”

Wink 是在 Quirky 公司内部孵化的,Quirky 是一家开发众包发明的公司。Wink 应用程序于 2013 年首次推出,当时它只能控制少数几种消费产品,比如 Quirky 与通用电气合作生产的 PivotPower 电源板。随着智能家居产品的激增,Wink 于 2014 年在全国家得宝商店推出。它的第一个项目:一个可以与霍尼韦尔和张伯伦等十几个品牌的智能产品集成的集线器。最大的挑战是构建基础架构,以服务于集线器和产品之间的所有通信,重点是最大限度地提高可靠性和最小化延迟。

“当我们最初开始的时候,我们行动非常迅速,试图将第一个产品推向市场,即最小可行产品,”Klein 说。“很多时候,你走了一条路,最终不得不回头,尝试不同的东西。但在这种特殊情况下,我们预先做了很多工作,这让我们做出了一个非常合理的决定,将其部署在 CoreOS Container Linux 上。那是在它生命周期的很早阶段。”

第一个问题:Wink 的产品需要连接到人们家中防火墙后面的消费类设备。“你没有像 URL 这样的端点,你甚至不知道防火墙后面打开了哪些端口,”Klein 解释说。“所以你基本上需要让这个东西唤醒并与你的系统对话,然后在云和设备之间打开实时的双向通信。而且,保持持久性真的非常非常重要,因为你想尽可能地减少发送消息的开销——你永远不知道什么时候会有人开灯。”

在最早版本的 Wink Hub 中,当你决定打开或关闭灯光时,请求将被发送到云端,然后执行。Wink 软件的后续更新实现了本地控制,将许多设备的延迟时间缩短到大约 10 毫秒。但是,随着对不断增长的智能家居产品生态系统进行云集成的需求,低延迟互联网连接仍然是一个关键的考虑因素。

“你基本上需要让这个东西唤醒并与你的系统对话,然后在云和设备之间打开实时的双向通信。而且,保持持久性真的非常非常重要……你永远不知道什么时候会有人开灯。”

此外,Wink 还有其他要求:水平可扩展性、快速加密所有内容的能力,以及在出现问题时可以轻松恢复的连接。“看看我们开始的整个结构,我们决定创建一个基于安全套接字的服务,”Klein 说。“我一直说,我们一直在使用某种集群技术来部署我们的服务,所以我们做出的决定是,这个东西将被容器化,运行在 Docker 上。”

2015 年,Docker 还没有被广泛使用,但正如 Klein 指出的那样,“那些站在技术前沿的人肯定已经理解了它。我们开始研究现有的潜在技术。其中一个限制因素是我们需要部署多端口非 http/https 服务。对于一些早期的集群技术来说,它并不是很合适。我们很喜欢这个项目,并在一段时间内将它用于其他方面,但最初它过于针对 http 工作负载。”

一旦 Wink 的后端工程团队决定使用容器化的工作负载,他们就必须决定使用哪个操作系统和容器编排平台。“很明显,你不能只是启动容器,然后希望一切顺利,”Klein 笑着说。“你需要有一个系统来帮助 [以便] 管理工作负载的分配位置。当容器不可避免地崩溃或出现类似情况时,为了重新启动它,你需要一个负载均衡器。为了拥有一个强大的基础架构,你需要做各种各样的维护工作。”

Wink 考虑过直接在像 Ubuntu 这样的通用 Linux 发行版(这需要安装工具来运行容器化的工作负载)和像 Mesos 这样的集群管理系统(它针对的是拥有更大团队/工作负载的企业)上构建,但最终他们将目光投向了 CoreOS Container Linux。“一个容器优化的 Linux 发行版系统正是我们所需要的,”他说。“我们不需要费尽心思地去尝试使用像 Linux 发行版这样的东西,然后安装所有东西。它有一个内置的容器编排系统 Fleet,以及一个易于使用的 API。它不像一些更重的解决方案那样功能丰富,但我们意识到,在那一刻,它正是我们所需要的。”

Wink 的集线器(以及一个经过改进的应用程序)于 2014 年 7 月推出,并进行了短期部署,在第一个月内,他们就将服务迁移到了容器化的 CoreOS 部署上。从那时起,他们几乎将所有其他基础架构——从第三方云到云集成到他们的客户服务和支付门户——都迁移到了 CoreOS Container Linux 集群上。

使用这种设置确实需要一些定制。“Fleet 作为一个基本的容器编排系统真的很不错,但它不负责路由、共享配置、密钥等,”Klein 说。“当然,所有这些功能层都可以实现,但如果你不想花很多时间手动编写单元文件——当然没有人会这样做——你需要创建一个工具来自动完成其中的一些工作,而我们做到了。”

Wink 在 2015 年 Kubernetes 容器集群管理器推出时便迅速采用了它,并将其与 CoreOS 核心技术集成。正如承诺的那样,它最终提供了 Wink 想要并计划构建的功能。Klein 说:“如果没有 Kubernetes,我们很可能会采用为我们创建的自动化工具实现的逻辑和库,并将其用于更高级别的抽象和工具中,这些抽象和工具可以由非 DevOps 工程师从命令行使用,以创建和管理集群。但 Kubernetes 使这一切变得完全没有必要——而且它是由在集群管理方面比我们更有经验的人编写和维护的,所以那就更好了。” 现在,估计 Wink 80% 的工作负载都在 CoreOS Container Linux 之上的 Kubernetes 上运行。

Wink 全力以赴的原因很明显:Klein 说:“它不是专有的,它是完全开放的,它真的具有可移植性。你可以在不同的云提供商之间运行所有工作负载。你可以轻松运行混合 AWS,甚至引入你自己的数据中心。这就是在一个 Kubernetes-Docker-CoreOS Container Linux 堆栈上统一所有内容的好处。如果你只有一个 Linux 发行版需要验证,那么安全优势是巨大的。好处是巨大的,因为你节省了资金,节省了时间。”

Klein 承认,每个技术决策都需要权衡取舍。他说:“对于某些人来说,尖端技术将是可怕的。为了利用这一点,你真的必须跟上技术的步伐。你不能把它当作一个黑盒子来对待。密切关注开发。了解做出决定的原因。如果你了解项目背后的意图,从技术意图到某种哲学意图,那么它将帮助你了解如何构建与这些系统协调的系统,而不是试图与其对抗。”

Wink 于 2015 年被 Flex 收购,现在控制着全国各地家庭中 230 万台连接设备。这家公司的下一步计划是什么?新版本的集线器——Wink Hub 2——于去年 11 月上架,并且除了 Home Depot 之外,还首次在沃尔玛商店销售。Klein 自豪地说:“美国最大的两家零售商正在销售和推广该品牌和硬件”——尽管他补充说,“这确实带来了很大的压力。这不是一个有很多技术爱好者的零售环境。这些都是想要一些有效的东西并且不能容忍技术借口的普通人。” 这进一步证明了 Klein 对 Wink 团队构建的基础设施的信心。

Wink 的工程团队自成立之初就呈指数级增长,在幕后,Klein 对 Wink 正在使用的机器学习感到最为兴奋。他说:“我们构建了[一个由]数据管道的容器化小部分组成的[系统],这些部分相互馈送,并且可以有多个输出。这就像微服务一样的数据管道。” Klein 再次指出,在 CoreOS Container Linux 和 Kubernetes 上运行统一堆栈是未来创新的主要驱动力。他说:“你不会每次都重新发明轮子。你可以直接开始工作。”