发布时间:2025-01-24 22:19:01 点击量:
HASH GAME - Online Skill Game GET 300
在实施多区域架构之前,我们考虑了其他解决方案,主要是因为该服务的处理时间约为 15 毫秒,几乎没有改进空间。我们考虑的一个选项是使用 地理散列(geohashing)来优化内容分发网络(CDN)中的缓存,在我们的例子中 CDN 是 Amazon CloudFront。但由于数据的高度可变性,这种方法被证明是无效的。我们的分析显示成功率仅为 28%,生存时间(TTL)为 7 天,地理哈希长度为 5,代表网格面积约为 4.89 公里 x 4.89 公里。
我们有两个每日 cron 作业;第一个在主区域中,创建快照并将其存储在 AWS S3 存储桶中。第二个作业在其他区域运行,遵循不同的流程。此过程使用一个用 Curator 构建的小型管道,以更好地处理和控制错误(特别是从 API 的角度来看)。读者可能想知道,如果我们必须在每次恢复操作期间创建一个新索引,API 该如何获知新索引的信息呢?这就是 Elasticsearch 的别名特性大展身手之处。我们使用别名来管理具体指向哪个底层索引的信息。管道首先将快照恢复到临时索引。然后,在一个原子操作中,我们将别名从主索引切换到临时索引,确保使用的是最新的数据。接下来,我们重新索引主索引,切换回别名,并删除临时索引。整个过程无缝进行,不会对服务造成任何中断,使我们能够继续无中断地处理请求。它还有合适的错误处理机制,利用了重试和超时,并有良好的可观察性。
AWS Global Accelerator 配备了静态 IP 和自定义路由,可确定性地将流量路由到我们的服务实例。它利用了 AWS 全球网络的强大功能,通过减少首字节延迟、最小化抖动和增加吞吐量显著提高了性能。与公共互联网相比,它提供了更快、更一致的体验。它在边缘执行 TCP 终止,并使用流量拨号将流量定向到最近的区域,从而提供跨区域的快速故障转移。这使我们能在移动应用程序中维护单个端点,无需手动管理路由。
另一个组件是无线电资源控制器(RRC),它管理设备与无线基站之间的连接,影响延迟、吞吐量和电池寿命。要管理无线信道的数据传输,RRC 必须分配资源或向设备发送有关传入数据包的信号。RRC 使用状态机来定义每个状态下可用的无线电资源,会影响性能和能耗。关键状态包括 RRC 空闲和 RRC 连接。这些状态由超时控制。例如,在 HSPA+ 连接中,状态在 10 秒不活动后从高功率(具有专用的上行和下行网络资源)转换为低功率状态。这种低功率状态消耗的能量较少,但依赖共享的、有限的低速信道(低于 20 Kbps)。如果在此转换之后发生数据请求,则会切换回高功率状态。这一协商过程需要几毫秒,会增加延迟并消耗电池续航。
消除不必要的应用程序保持活动也很关键,因为运营商网络管理连接生命周期时并不管设备的无线连接状态。预测网络延迟开销是另一个重要考虑因素。考虑到控制平面、DNS 查找、TCP 握手、TLS 握手和 HTTP 请求等因素,建立一个新连接在 4G 网络中最多需要 600 毫秒,在 3G 网络中最多需要 3500 毫秒。我们采用的一个有效策略是在用户与输入组件交互之前发送一个“空”请求,从而抢先建立连接并更快地发出后续请求。