实战:使用AWS平台实现Serverless架构
本例将演示利用AWS平台的Serverless架构来让游戏实现全球同服。
全球同服的游戏架构有以下需求。
·全球所有玩家的持久化信息(包括用户基本信息、等级、装备、进度等状态信息)都保存在中心站点。玩家统一通过HTTP(S)登录中心站点并获取状态信息。
·对战初始,由中心站点对玩家进行重定向到对应的Game Server。
在对战过程中,使用TCP长连接从而保证更好的游戏体验。
·对战结束后,客户端与Game Server中断TCP连接,对战结果数据回滚到中心站点并保存最终的状态信息。
基于上述的架构,游戏完全构建在统一的“大世界”中(唯一中心站点),并且由分布在全球的Game Server来保证游戏的低延迟。由于Game Server分布在全球不同的地区,如何做到资源的快速扩展和按需伸缩将是一个难点。下面将以Serverless架构的方式阐述实现这一需求。
首先,AWS平台提供了非常完整的API接口,开发者可以选择各种语言的SDK完成对资源的调度,这里我们可以将代码运行在Lambda中。如下所示,我们的中心站点(即Lambda部署的站点)选择的是Virginia(弗吉尼亚,美国东部地区),通过Node.js SDK跨地区到Tokyo(东京,日本首都)来启动EC2服务器。
var AWS = require('aws-sdk');
exports.handler = function (event, context) {
console.log("Received data as:", event);
var ec2 = new AWS.EC2({re