

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 开启了高可用性和可扩展性 AWS
<a name="high-availability-and-scalability-on-aws"></a>

 大多数实时通信提供商都符合可用性从 99.9% 到 99.999% 的服务级别。根据所需的高可用性 (HA) 程度，您必须在应用程序的整个生命周期中采取越来越复杂的措施。AWS 建议遵循以下指南，以实现稳健的高可用性：
+  将系统设计为没有单点故障。对无状态组件和有状态组件使用自动监控、故障检测和故障转移机制 
  +  *通常使用 N\$11 或 2N 冗余配置可以消除单点故障 (SPOF)，其中 N\$11 是通过*主用-主动节点之间的负载平衡来实现的，而 2N 则由一对处于主用-备*用配置的节点来实现。*
  +  AWS 有几种方法可以通过这两种方法实现 HA，例如通过可扩展、负载平衡的集群或假设*主*备对。
+  正确测试仪器和测试系统的可用性。
+  为手动机制准备操作程序，以响应、缓解故障并从故障中恢复。

 本节重点介绍如何使用上提供的功能实现无单点故障 AWS。具体而言，本节介绍了一部分核心 AWS 功能和设计模式，这些功能和设计模式允许您构建高度可用的实时通信应用程序。

# 活动-备用状态服务器之间的 HA 浮动 IP 模式
<a name="floating-ip-pattern-for-ha-between-activestandby-stateful-servers"></a>

 浮动 IP 设计模式是一种众所周知的机制，用于在主用和备用硬件节点（媒体服务器）之间实现自动故障转移。为主动节点分配了静态辅助虚拟 IP 地址。在活动和备用节点之间进行持续监控可检测故障。如果主动节点出现故障，则监控脚本会将虚拟 IP 分配给就绪备用节点，备用节点接管主活动功能。这样，虚拟 IP 就会漂浮在主节点和备用节点之间。

## RTC 解决方案中的适用性
<a name="applicability-in-rtc-solutions"></a>

 并非总是可以让同一组件的多个活动实例投入使用，例如由 N 个节点组成的活动集群。主备配置为 HA 提供了最佳机制。例如，RTC 解决方案中的有状态组件，例如媒体服务器或会议服务器，甚至 SBC 或数据库服务器，都非常适合主备设置。SBC 或媒体服务器在给定时间有多个长时间运行的会话或通道处于活动状态，在 SBC 活动实例出现故障的情况下，由于浮动 IP，端点无需任何客户端配置即可重新连接到备用节点。

### 实施于 AWS
<a name="implementation-on-aws"></a>

 您可以使用亚马逊弹性计算云 (Amazon EC2) 中的核心功能、亚马逊 EC2 API、弹性 IP 地址以及亚马逊 EC2 对辅助私有 IP 地址的支持，在 AWS 上实现这种模式。

要在上实现浮动 IP 模式，请执行 AWS以下操作：

1.  启动两个 EC2 实例以扮演主节点和辅助节点的角色，其中假设主节点默认*处于活动*状态。

1.  为主 EC2 实例分配额外的辅助私有 IP 地址。

1.  弹性 IP 地址与虚拟 IP (VIP) 类似，与辅助私有地址相关联。此辅助私有地址是外部端点用来访问应用程序的地址。

1.  要将辅助 IP 地址作为别名添加到主网络接口，需要进行一些操作系统 (OS) 配置。

1.  应用程序必须绑定到此弹性 IP 地址。对于 Asterisk 软件，您可以通过高级 Asterisk SIP 设置来配置绑定。

1.  在每个节点 KeepAlive 上运行监控脚本（在 Linux、Corosync 等）上自定义，以监控对等节点的状态。如果当前的主动节点出现故障，则对等节点会检测到此故障，并调用 Amazon EC2 API 将辅助私有 IP 地址重新分配给自己。

   因此，正在监听与辅助私有 IP 地址关联的 VIP 的应用程序可通过备用节点提供给端点。

![\[描述使用弹性 IP 地址在有状态 EC2 实例之间进行故障转移的示意图。\]](http://docs.aws.amazon.com/zh_cn/whitepapers/latest/real-time-communication-on-aws/images/failover-stateful.jpg)


#### 优势
<a name="benefits"></a>

 这种方法是一种可靠的低预算解决方案，可以防止 EC2 实例、基础设施或应用程序级别的故障。

##### 局限性和可扩展性
<a name="limitations-and-extensibility"></a>

 这种设计模式通常仅限于单个可用区内。它可以跨两个可用区实施，但有所不同。在这种情况下，将通过可用的重新关联弹性 IP 地址 API 在不同可用区域的主用和备用节点之间重新关联浮动弹性 IP 地址。在上图所示的故障转移实现中，正在进行的呼叫将被丢弃，端点必须重新连接。可以通过复制底层会话数据来扩展这种实现，从而提供会话的无缝故障转移或媒体连续性。

#### 使用 WebRTC 和 SIP 进行负载平衡以实现可扩展性和高可用性
<a name="load-balancing-for-scalability-and-ha-with-webrtc-and-sip"></a>

 基于预定义规则（例如轮询规则、亲和性或延迟等）对活动实例集群进行负载平衡是一种由 HTTP 请求的无状态性质而广泛推广的设计模式。实际上，对于许多 RTC 应用程序组件，负载平衡是一个可行的选择。

 负载均衡器充当向所需应用程序发出的请求的反向代理或入口点，该应用程序本身配置为同时在多个活动节点中运行。在任何给定时间点，负载均衡器都会将用户请求定向到已定义集群中的一个活动节点。负载均衡器会对其目标集群中的节点执行运行状况检查，并且不会向未通过运行状况检查的节点发送传入请求。因此，通过负载平衡可以实现基本程度的高可用性。此外，由于负载均衡器以亚秒为间隔对所有群集节点执行主动和被动运行状况检查，因此故障转移的时间几乎是即时的。

 定向哪个节点的决定取决于负载均衡器中定义的系统规则，包括：
+  轮询 
+  会话或 IP 关联，可确保将一个会话中的多个请求或来自同一 IP 的多个请求发送到集群中的同一个节点 
+  基于延迟 
+  基于负载 

## 在 RTC 架构中的适用性
<a name="applicability-in-rtc-architectures"></a>

 [WebRTC协议使WebRTC网关可以通过基于HTTP的负载均衡器轻松进行负载平衡，例如弹性负载平[衡 (ELB)、应用程序负载均衡器 (](https://aws.amazon.com/elasticloadbalancing/)ALB) 或网络[负载均衡器 (](https://aws.amazon.com/elasticloadbalancing/application-load-balancer/)NLB)。](https://aws.amazon.com/elasticloadbalancing/network-load-balancer/)由于大多数 SIP 实现都依赖传输控制协议 (TCP) 和用户数据报协议 (UDP) 的传输，因此需要网络或连接级负载平衡，同时支持基于 TCP 和 UDP 的流量。

## AWS 使用 Application Load Balancer 和 Auto Scaling 为 WebRTC 开启负载平衡
<a name="load-balancing-on-aws-for-webrtc-using-application-load-balancer-and-auto-scaling"></a>

 对于基于 WebRTC 的通信，Elastic Load Balancing 提供了一个完全托管、高度可用且可扩展的负载均衡器作为请求的入口点，然后将请求定向到与 Elastic Load Balancing 关联 EC2 的目标实例集群。由于 WebRTC 请求是无状态的，因此您可以使用 Amazon A EC2 uto Scaling 来提供全自动且可控的可扩展性、弹性和高可用性。

 Application Load Balancer 提供完全托管的负载平衡服务，该服务在使用多个可用区时具有高可用性，并且可扩展。这支持处理WebRTC应用程序信令的 WebSocket 请求的负载平衡，以及使用长时间运行的TCP连接在客户端和服务器之间进行双向通信。Application Load Balancer 还支持基于内容的路由和[粘性会话](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/sticky-sessions.html)，使用负载均衡器生成的 Cookie 将来自同一客户端的请求路由到同一个目标。如果您启用粘性会话，则同一目标会收到请求并可以使用 Cookie 恢复会话上下文。

下图显示了目标拓扑。

![\[描绘WebRTC可扩展性和高可用性架构的示意图。\]](http://docs.aws.amazon.com/zh_cn/whitepapers/latest/real-time-communication-on-aws/images/webrtc-scalability.png)


## 使用 Network Load Balancer 或 AWS Marketplace 产品实现 SIP
<a name="implementation-for-sip-using-network-load-balancer-or-aws-marketplace-product"></a>

 对于基于 SIP 的通信，连接通过 TCP 或 UDP 建立，大多数 RTC 应用程序都使用 UDP。如果 SIP/TCP 是首选的信号协议，那么使用 Network Load Balancer 进行完全托管、高度可用、可扩展和性能的负载平衡是可行的。

 Network Load Balancer 在连接级别（第四层）运行，根据 IP 协议数据将连接路由到 Amazon EC2 实例、容器和 IP 地址等目标。网络负载平衡非常适合 TCP 或 UDP 流量负载平衡，能够每秒处理数百万个请求，同时保持超低的延迟。它与其他流行的 AWS 服务集成，例如亚马逊 A EC2 uto Scaling、亚马逊[弹性容器服务（亚马逊](https://aws.amazon.com/ecs/) ECS）、[亚马逊 Elastic Kubernetes 服务（亚马逊 EK](https://aws.amazon.com/eks/) S）和。[AWS CloudFormation](https://aws.amazon.com/cloudformation/)

 如果启动了 SIP 连接，则另一种选择是使用[AWS Marketplace](https://aws.amazon.com/marketplace)商业 off-the-shelf软件 (COTS)。 AWS Marketplace 提供了许多可以处理 UDP 和其他类型的第四层连接负载平衡的产品。COTS 通常包括对高可用性的支持，并且通常与 Amazon A EC2 uto Scaling 等功能集成，以进一步增强可用性和可扩展性。下图显示了目标拓扑：

![\[该图描述了使用 AWS Marketplace 产品实现基于 SIP 的 RTC 可扩展性。\]](http://docs.aws.amazon.com/zh_cn/whitepapers/latest/real-time-communication-on-aws/images/sip-based-rtc-scalability.jpg)


# 基于跨区域 DNS 的负载平衡和故障转移
<a name="cross-region-dns-based-load-balancing-and-failover"></a>

 [Amazon Route 53](https://aws.amazon.com/route53/) 提供全球 DNS 服务，可用作 RTC 客户端注册和连接媒体应用程序的公共或私有终端节点。借助 Amazon Route 53，可以将 DNS 运行状况检查配置为将流量路由到运行状况良好的终端节点或独立监控应用程序的运行状况。

Amazon Route 53 Traffic Flow 功能使您可以轻松地通过各种路由类型管理全球流量，包括基于延迟的路由、地域 DNS、地理位置和加权回合，所有这些都可以与 DNS 故障转移结合使用，以实现各种低延迟、容错架构。Amazon Route 53 Traffic Flow 简易可视化编辑器允许您管理将最终用户路由到应用程序终端节点的方式，无论是在单个 AWS 区域还是分布在全球各地。

 就全球部署而言，Route 53 中基于延迟的路由策略特别有用，可以将客户引导到最近的媒体服务器接入点，从而提高与实时媒体交换相关的服务质量。

 请注意，要强制故障转移到新的 DNS 地址，必须刷新客户端缓存。此外，DNS 更改在全球 DNS 服务器上传播时可能会有延迟。您可以使用 “存活时间” 属性管理 DNS 查询的刷新间隔。此属性可在设置 DNS 策略时进行配置。

 为了快速覆盖全球用户或满足使用单个公有 IP 的要求， AWS Global Accelerator 也可以用于跨区域故障转移。 [AWS Global Accelerator](https://aws.amazon.com/global-accelerator/?blogs-global-accelerator.sort-by=item.additionalFields.createdDate&blogs-global-accelerator.sort-order=desc&aws-global-accelerator-wn.sort-by=item.additionalFields.postDateTime&aws-global-accelerator-wn.sort-order=desc)是一项网络服务，可提高本地和全球覆盖的应用程序的可用性和性能。 AWS Global Accelerator 提供静态 IP 地址，这些地址充当应用程序终端节点的固定入口点，例如您的应用程序负载均衡器、网络负载均衡器或单个或多个 AWS 区域中的 Amazon EC2 实例。它使用 AWS 全球网络来优化从用户到应用程序的路径，从而提高性能，例如 TCP 和 UDP 流量的延迟。

AWS Global Accelerator 持续监控应用程序终端节点的运行状况，并在当前终端节点变为不健康时自动将流量重定向到最近的健康终端节点。为了满足其他安全要求，Accelerated VP Site-to-Site N 使用 AWS Global Accelerator 智能路由流量通过 AWS 全球网络和 AWS 边缘站点来提高 VPN 连接的性能。

![\[描绘使用 AWS Global Accelerator 或 Amazon Route 53 进行区域间高可用性设计的示意图。\]](http://docs.aws.amazon.com/zh_cn/whitepapers/latest/real-time-communication-on-aws/images/inter-region-ha-design.png)


# 数据持久性和高可用性（带有永久存储）
<a name="data-durability-and-ha-with-persistent-storage"></a>

 大多数 RTC 应用程序依靠永久存储来存储和访问用于身份验证、授权、记账（会话数据、呼叫详细记录等）、操作监控和日志记录的数据。在传统的数据中心中，确保永久存储组件（数据库、文件系统等）的高可用性和耐久性通常需要通过设置存储区域网络 (SAN)、独立磁盘冗余阵列 (RAID) 设计以及备份、恢复和故障转移处理流程来完成繁重的工作。这 AWS 云 极大地简化并增强了围绕数据持久性和可用性的传统数据中心实践。

 对于对象存储和文件存储，[亚马逊简单存储 AWS 服务](https://aws.amazon.com/s3/) (Amazon S3) 和[亚马逊弹性文件系统](https://aws.amazon.com/efs/) (Amazon EFS) 等服务提供托管的高可用性和可扩展性。Amazon S3 的数据持久性为 99.999999999%（11 个 9）。

 对于交易数据存储，客户可以选择利用完全托管的亚马逊关系数据库服务（Amazon RDS），该服务支持具有高可用性部署的亚马逊 Aurora、PostgreSQL、MySQL、MariaDB、Oracle 和微软 SQL Server。对于注册商功能、订阅者资料或会计记录存储（例如 CDRs），Amazon RDS 提供了容错、高度可用和可扩展的选项。

# 使用 AWS Lambda Amazon Route 53 和 Amazon A EC2 uto Scaling 进行动态扩展
<a name="dynamic-scaling-with-aws-lambda-amazon-route-53-and-aws-auto-scaling"></a>

AWS 允许将功能链接起来，并能够根据基础架构事件将自定义的无服务器功能作为服务合并。其中一种在 RTC 应用程序中具有多种用途的设计模式是将自动扩展生命周期挂钩与 [Amazon Ev CloudWatch ents、Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/WhatIsCloudWatchEvents.html) Route 53 和[AWS Lambda](https://aws.amazon.com/lambda/)函数相结合。 AWS Lambda 函数可以嵌入任何动作或逻辑。下图演示了将这些功能链接在一起如何通过自动化增强系统的可靠性和可扩展性。

![\[该图描绘了通过动态更新 Amazon Route 53 进行自动扩展。\]](http://docs.aws.amazon.com/zh_cn/whitepapers/latest/real-time-communication-on-aws/images/auto-scaling-dynamic-updates.jpg)


# 搭载亚马逊 Kinesis Video Streams 的高可用性 WebRTC Amazon Kinesis Video St
<a name="highly-available-webrtc-with-kinesis-video-streams"></a>

[Amazon Kinesis Vid](https://aws.amazon.com/kinesis/video-streams/?nc=sn&loc=0&amazon-kinesis-video-streams-resources-blog.sort-by=item.additionalFields.createdDate&amazon-kinesis-video-streams-resources-blog.sort-order=desc) eo Streams 通过 WebRTC 提供实时媒体流，允许用户捕获、处理和存储媒体流，以便播放、分析和机器学习。这些直播具有高可用性、可扩展性，并且符合WebRTC标准。Amazon Kinesis Video Streams 包括 WebRTC 信号终端节点，用于快速发现对等设备和建立安全连接。它包括用于 NAT (STUN) 的托管会话遍历实用程序，以及在 NAT (TURN) 端点周围使用中继进行遍历，用于在对等体之间实时交换媒体。它还包括一个免费的开源 SDK，该软件开发工具包直接与相机固件集成，可实现与 Amazon Kinesis Video Streams 端点的安全通信，从而实现同行发现和媒体直播。最后，它提供了适用于Android、iOS的客户端库，允许 JavaScript 符合WebRTC标准的移动和网络玩家安全地发现摄像设备并与之连接，以进行媒体流和双向通信。

# 使用 Amazon Chime 语音连接器实现高度可用的 SIP 中继
<a name="highly-available-sip-trunking-with-amazon-chime-voice-connector"></a>

[Amazon Chime Voice Connec](https://docs.aws.amazon.com/chime-sdk/latest/ag/voice-connectors.html) tor 提供 pay-as-you-go SIP 中继服务，使公司能够使用其电话系统拨打和/或接听安全、廉价的电话。Amazon Chime Voice Connector 是服务提供商 SIP 中继或综合服务数字网络 (ISDN) 主速率接口 () 的低成本替代方案 ()。PRIs客户可以选择启用入站呼叫、出站呼叫或两者兼而有之。

该服务使用 AWS 网络在多个网络上提供高度可用的通话体验 AWS 区域。您可以将来自 SIP 中继电话的音频流式传输，或者将基于 SIP 的媒体录制 (SIPREC) 源转发到 Amazon Kinesis Video Streams Amazon Kinesis Video Streams，以实时从商务电话中获取见解。通过与 [Amazon Tran](https://aws.amazon.com/transcribe/) scribe 和其他常见的机器学习库集成，您可以快速构建用于音频分析的应用程序。