云端架构:基于云平台的41种可复用的架构最佳实践
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.3.4 面向全球用户的竞赛模块

竞赛模块是基于云平台的实验操作比赛平台,不定期举行一些竞赛。与全天24小时均可以做实验的模块不同,竞赛模块只在指定的几个小时内开放,如在3月10日9:00—12:00期间进行,因此会带来用户集中登录访问的问题,和电商平台的抢购、高考成绩查询业务类似,会带来业务峰值。竞赛面向全球范围的技术爱好者,因此要考虑尽可能分布式部署在全球用户相对集中的地方。因为用户群体定位于全球范围的技术爱好者,所以在选择业务部署地域(Region)时尽可能参照用户所在地区进行选择。

首先将全球用户按照注册地分散到不同的地域中进行登录和访问,如中国的用户均访问上海地域的登录服务器,东南亚的用户访问新加坡的登录服务器,偶尔有用户的位置信息不准确可能会造成跨地域访问,最多会造成几秒的延迟,对于登录功能仍在可接受范围内,因此可在3月10日比赛日 9:00之前提前10分钟开放登录,从时间维度上分散登录压力。

用户登录后将状态存储在Redis中,访问MumuLab每个验证权限的页面时都会去Reids中获取当前用户是否登录、是否有该页面的访问权限等信息。为了减轻访问压力,将竞赛中的静态页面生成HTML页面并存储到对象存储中,用户通过CDN访问(未命中则回源至对象存储),竞赛中的赛题提交是核心业务逻辑,可通过压力测试获得该API的SLA,并设置限流策略。竞赛赛题审核和判分可通过异步函数进行处理,和前端用户提交赛题进行解耦。