镜像API驱动的应用程序的兴起,实时正在成为现代应用程序开发中一种新兴的,无所不在的力量。它为即时消息,实时体育源,地理定位,大数据和社交馈送提供动力。但是,什么是实时,它究竟意味着什么?什么类型的软件和技术为这个行业提供动力?让我们深入研究它。
什么是实时的?
实时可以在更相对的时间意义上定义。这可能意味着A的变化与B的变化同步。或者,它可能意味着A的变化会立即触发B的变化。或者......这可能意味着A告诉B某些事情发生了变化,但B没有做任何事情。或者......这是否意味着A告诉每个人一些变化,但不关心谁在听?
让我们深入挖掘一下。实时并不一定意味着某些东西会立即更新(事实上,“瞬间”没有单一的定义)。所以,我们不要关注效果,而应关注机制。实时是关于尽可能快地推送数据 - 它是端点之间的自动,同步和双向通信,速度在几百毫秒之内。
同步意味着两个端点可以同时访问数据。
双向意味着可以向任一方向发送数据。
端点是数据的发送者或接收者(电话,平板电脑,服务器)。
几百毫秒是一个有点随意的指标,因为数据不能立即传递,但它最接近人类认为的实时(罗伯特米勒在1986年证明了这一点)。
考虑到这个定义及其注意事项,让我们探讨推送数据的概念。
数据推送
我们首先将数据推送与“请求 - 响应”进行对比。请求 - 响应是计算机系统通信的最基本方式。计算机A 从计算机B 发送请求,计算机B 响应答复。换句话说,您可以打开浏览器并输入“reddit.com”。浏览器向Reddit的服务器发送请求,然后他们回复网页。
在数据推送模型中,数据被推送到用户的设备而不是由用户拉出(请求)。例如,现代推送电子邮件允许用户无需手动检查即可接收电子邮件。同样,我们可以更连续地检查数据推送,从而持续广播数据。有权访问特定频道或频率的任何人都可以接收该数据并决定如何处理该数据。
此外,目前有几种方法可以实现数据推送/流式传输:
HTTP流媒体
HTTP流式传输为即时和连续数据推送提供了长期连接。您可以熟悉HTTP与WebSockets的性能。客户端向服务器发送请求,服务器将响应打开无限长度。此连接将保持打开状态,直到客户端关闭它或发生服务器端方事件。如果没有要推送的新数据,应用程序将发送一系列保持活动的滴答,以便连接不会关闭。
WebSockets
WebSockets提供了一个长期连接,用于在客户端和服务器之间交换消息。消息可以在任一方向上流动以进行全双工通信。这种双向连接是通过WebSocket握手建立的。就像在HTTP Streaming和HTTP Long-Polling中一样,客户端首先向服务器发送常规HTTP请求。如果服务器同意连接,则HTTP连接将替换为WebSocket连接。
网络挂接
Webhooks是在服务器之间发送数据的简单方法。不需要长期连接。当有数据要推送时,发送方向接收方发出HTTP请求。WebHook注册或“挂钩”回调URL,并在事件发生时随时通知您。您事先注册此URL,并且当事件发生时,服务器将带有事件对象的HTTP POST请求发送到回调URL。此事件对象包含将推送到回调URL的新数据。如果要接收有关某些主题的通知,可以使用WebHook。它还可用于在用户更改或更新其个人资料时通知您。
HTTP长轮询
HTTP长轮询为即时数据推送提供了长期连接。它是最简单的消费机制,也是最容易使用的机制。该技术为即时数据推送提供了长期连接。服务器保持请求打开,直到出现新数据或超时。大多数在30到120秒后发送超时,这取决于API的设置方式。在客户端收到响应(无论是来自新数据还是超时)后,客户端将发送另一个请求,并且会不断重复此请求。
推动数据难吗?是的,特别是在规模上(例如,同时推动对数百万部手机的更新)。为了满足这种需求,出现了一个完整的实时行业,我们将其定义为实时基础架构即服务(Realtime IaaS)。
实时图书馆
以下是可供开发人员根据特定语言/框架构建实时应用程序的资源汇编:
.NET / C#
使用Javascript
的Ruby / Rails
Node.js的
PHP
走
蟒蛇
Java的
iOS版
Android的
实时基础架构即服务
根据Gartner的说法,“基础架构即服务(IaaS)是一种标准化,高度自动化的产品,其中计算资源由存储和网络功能补充,由服务提供商拥有和托管,并按需提供给客户。客户可以使用基于Web的图形用户界面自行配置此基础架构,该界面可用作整个环境的IT操作管理控制台。对基础设施的API访问也可作为选项提供。“
我们经常在这里使用PaaS(平台即服务)和SaaS(软件即服务),那么它们与IaaS有何不同?
基础架构即服务(IaaS):硬件由外部提供商提供并为您管理。
平台即服务(PaaS):为您管理硬件和操作系统层。
软件即服务(SaaS):为平台和基础架构(为您管理)提供应用程序层。
为了实时提供动力,应用程序需要经过精心设计的服务器,API,负载平衡器等系统。而不是在内部构建这些系统,组织发现购买大部分系统基础设施更具成本效益和资源效率,然后在内部开车。因此,这些系统不仅仅是IaaS,而且通常提供平台和软件层来帮助管理。从根本上讲,它们的核心优势在于它们提供实时基础架构,无论您是在内部托管还是依赖托管实例
这一切都归结为一个简单的事实,实时是很难的原因有很多:
客户正常运行时间需求 - 依赖于实时更新的客户将立即注意到您的网络性能不佳。
水平可扩展性 - 您必须能够处理系统上的易失性和大量负载,否则可能会导致停机。这通常通过巧妙的水平可扩展性和能够管理数百万个同时连接的系统来实现。
架构复杂性 - 维护高性能的实时系统不仅复杂,而且需要丰富的经验和专业知识。购买起来很昂贵,尤其是在当今高需求的工程市场。
意外情况 - 不可避免地,无论是由于预期的负载峰值还是新发布的功能,您的系统都会遇到一些停机时间。因此,如果主要实时机制无法执行,则必须具有多个正常运行时间,以确保系统知道该怎么做。
排队 - 当您发送大量数据时,您可能需要一个中间排队机制,以确保您的后端进程不会因增加的消息负载而负担过重。
实时应用程序IaaS
实时应用基础架构将数据发送到浏览器和客户端。它通常使用发布/订阅消息,webhook和/或websockets - 并且与应用程序或服务的主API分开。这些解决方案最适合那些寻求实时消息传递而无需构建自己的实时API的组织。
这些系统还在其基础架构产品之上提供了更加精心构建的平台/软件管理工具。例如,领先的提供商具有内置配置工具,如访问控制,事件委托,调试工具和通道配置。
Realtime App IaaS的优点
速度 - 通常明确设计用于向最终用户设备(包括智能手机,平板电脑,浏览器和笔记本电脑)提供低延迟的数据。
多个SDK,便于集成。
使用全球分布的实时数据传输平台。
多协议适配器。
在生产环境中经过良好测试。
将内部配置保持在最低限度。
用例
虽然有些平台的功能不同,但以下是一些最典型的用例:
实时聊天 - 在微服务环境中,实时API代理可以轻松地从其他微服务中侦听即时更新,而无需集中式消息代理。每个微服务都有自己的代理实例,微服务通过组织自己的API契约而不是供应商特定的机制相互通信。
物联网设备控制 - 在连接互联网的设备之间安全地监控,控制,配置和传输数据。
地理跟踪/映射实时更新 - 与(谷歌地图)等其他实时API集成,以构建丰富的实时更新。
多人游戏同步 - 在多个同时玩家之间同步通信以保持游戏流畅。
解决方案
以下是一些实时应用程序IaaS提供程序(托管),以便进一步学习:PubNub,Pusher和Ably。
用于API开发的实时API IaaS
实时API基础架构专门允许开发人员将实时数据推送到其现有API中。通常,您不需要修改现有的API合同,因为流服务器将充当代理。代理设计允许这些服务很好地适应API堆栈。这意味着它可以从REST API继承其他工具,例如身份验证,日志记录,限制等,因此,它可以轻松地与API管理系统结合使用。在WebSocket消息被代理为HTTP请求的情况下,消息可以由后端无状态地处理。来自单个连接的消息甚至可以在一组后端实例中进行负载平衡。
总而言之,实时API IaaS用于API开发,专门针对需要构建高性能实时API(如Slack,Instagram,Google等)的组织。所有这些组织都在内部构建和管理其基础架构,因此IaaS产品可以被认为是将这些功能扩展到缺乏从头开始构建实时API的资源和技术专业知识的组织的一种方法。
Realtime API IaaS的优点
自定义构建内部API。
适用于现有的API管理系统。
不会将您锁定在特定的技术堆栈中。
提供整个堆栈的实时功能。
通常基于代理,具有发布/订阅或轮询。
无论后端语言或数据库是什么,都可以将实时添加到任何API。
云或自托管API基础架构。
它可以继承REST API中的工具,例如身份验证,日志记录,限制。
用例
虽然有些平台的功能不同,但以下是一些最典型的用例:
API开发 - 正如我们所讨论的,您可以在现有API基础架构之上构建自定义实时API。
微服务 -在微服务环境,实时API代理可以方便地监听来自其他微服务的即时更新,而不需要一个集中的消息代理。每个微服务都有自己的代理实例,微服务通过组织自己的API契约而不是供应商特定的机制相互通信。
消息队列 - 如果要推送大量数据,则可能需要引入中间消息队列。这样,后端进程可以将数据一次发布到消息队列,并且队列可以通过适配器将数据中继到一个或多个代理实例。实时代理能够将订阅信息转发到这样的适配器,以便消息只能发送到具有给定通道订户的代理实例。
API管理 - 可以将API管理系统与实时代理相结合。大多数API管理系统也用作代理服务器,这意味着您需要做的就是将代理链接在一起。将实时代理放在前面,这样API管理系统就不会受到长期连接的影响。此外,实时代理通常可以将WebSocket协议转换为HTTP,从而允许API管理系统对转换的数据进行操作。
大规模CDN性能 - 由于实时代理实例不会相互通信,并且消息传递可以分层,这意味着实时代理实例可以在地理上分布以创建实时推送CDN。客户端可以连接到最近的区域边缘服务器,事件可以从数据源辐射到边缘。