亚马逊云科技助力游戏上云学习心得-运行篇

news2024/11/26 14:59:38

云服务已经是大势所趋了,通过购置传统服务器来进行应用开发,无法与现代化敏捷的开发方法相结合,对于系统运维的难度也大大增加,而云服务的弹性伸缩、动态计费可以很好地帮助中小企业实现快速应用开发,使得产品的价值最大化,而亚马逊在这方面有很多年的技术和解决方案的沉淀,本次是通过学习亚马逊云科技助力游戏上云《运行》阶段的学习心得,主要是是研究了亚马逊在云游戏上的相关解决方案,真的让我醍醐灌顶。

这次主要学习了:

  • Amazon对于游戏上云提供的基础设施
  • MOBA游戏如何上云?
  • 无服务器游戏后端解决方案
  • 如何防范DDOS攻击以及相关解决方案?

Amazon对于游戏上云的基础设施

弹性游戏服扩展

如何实现游戏的弹性扩展呢?在之前的学习中就有提到GameLiftAmazon GameLift 是一个专门的托管解决方案,可以用来部署并自动扩展,基于连接的多人游戏服务器队列,以满足全球玩家的需求。用户通过 Amazon GameLift 能够创建和上传游戏服务器,一次性构建、复制,并且部署至多个地区和本地区域,提供全球玩家低延迟游戏体验。

通过GameLift可以轻松地实现弹性的游戏扩展,在保证服务器的扩展性同时还可以有较低的延迟,对于对战匹配模块还可以有效保证对局的平衡、缩短等待的时间;当解决完应用的扩展性之后,我们也要考虑底层数据库的扩展性,要想整个系统扩展性都得到较大的提升,必须对整个链路的可用性进行合理评估,并根据扩展性情况进行合理重构或者上云。

游戏数据库

游戏其实也是需要数据库的,往往游戏都不止会使用一种数据库,因为在游戏中,用户会产生各种各样的数据。例如用户的注册,积分榜、虚拟物品,还有游戏中的一些比赛检测,玩家都会产生大量需要实时处理、存储和访问的数据,为了保证业务能够合理地开发,我们需要根据业务情况选择合理的数据库,并且保证数据库能够具备高扩展性。

而在这方面,亚马逊提供了丰富的数据库让我选择:

  • 关系型数据库:AuroraRDS
  • 键值型数据库:DynamoDB
  • 文档型数据库:Document
  • 图式数据库:Neptune
  • 时序数据库:Timestream
  • 记账式数据库:QLDB
  • 宽列存储数据库:Managed Cassandra

我们在游戏开发的过程中,一般都会使用到Nosql,而对于非游戏核心模块,例如注册、用户基本信息等都会使用关系型数据库。而对于Nosql,亚马逊这边也提供了多种数据库给我们选择:

  • Amazon DynamoDB:键值型NoSQL数据库,适合存放游戏玩家的数据,稳定的延迟,无限的扩展
    • 支持海量数据和吞吐,写入读出个位数毫秒延迟
    • 无需运维
  • Amazon Redis:兼容Redis6所有协议的内存级数据库,适合高速变化的游戏状态数据,高速且持久化
    • 内存级读取速度
    • 数据持久化能力,个位数毫秒写入延迟
  • Amazon DocumentDB:完全托管式文档数据库服务轻松扩展JSON工作负载,兼容MongoDB场景
    • 通过独立扩展计算和存储,支持每秒数以百万计文档的读取请求
    • 可扩展、高持久性且完全托管式数据库服务,用于操作任务关键型MongoDB工作负载

这里可以着重关注一下 DynamoDB,这个组件的论文获得了图灵奖,是亚马逊通过多年经验研发的,通过使用这些云数据库,可以不再用DBA团队,节省运维成本,对于DynamoDBSupercell使用之后成功获得了1亿日活的用户,解决了每天产生的500TB数据,足可以看出其性能和可扩展性是非常高的

在这里插入图片描述

但是这么多弹性组件,真能组合成一款游戏吗?这个我也是带着疑问的,最后看到亚马逊自己做了一个新世界游戏,并且有很明显的效果,真的很感慨,未来已来!

MOBA游戏如何上云?

MOBA类游戏就不得不提英雄联盟手游、DOTA2、英雄联盟等等,这类游戏的玩法是:在战斗中一般需要购买装备,
玩家通常被分为两队,两队在分散的游戏地图中互相竞争,每个玩家都通过一个RTS(Real-TimeStrategy)风格的界面控制所选的角色。这类游戏通常无需操作RTS游戏中常见的建筑群、资源、训练兵种等组织单位,玩家只控制自己所选的角色。

  • (1)以局为单位(开房间),快节奏(每局游戏时间为几分钟至几十分钟不等)。
  • (2)组队对抗(4V4,5V5),即时对抗.互动性强,社交属性。

MOBA游戏常见的技术挑战有哪些?

  • 资源调度
    • 战斗匹配的机制,对于战斗服的需求,根据业务的高峰低谷时间差异明显,需要很强的资源调度能力以节约成本
  • 网络要求
    • 实时竞技中,客户端与服务器端产生海量的数据交互,对网络带宽吞吐能力和延迟要求非常高。玩家匹配的公平性成为保障游戏成功的核心要素
  • 大量实时计算
    • 游戏中由玩家移动、发动技能、转换装备、调整属性等产生的数据需求,服务端需要进行大量实时计算进行支持。

以下是一个MOBA应用的架构用例:

在这里插入图片描述

MOBA大厅服务的推荐架构

大厅服功能主要是:竞技类型的游戏通常分为大厅服和战斗服,玩家在进入战斗之前和战斗结束之后都停留在大厅服,在大厅服中玩家可以查看自己角色的信息,和好友之间互相聊天、组队,查看战斗回访录像,进入商城购买喜欢的道具与皮肤,查看自己战绩排行榜,匹配其他玩家开启一局对战等。

为了支持玩家所需要的各种功能,大厅服包含了大厅、消息通道、聊天、排行榜、匹配、商城等功能模块。

  • 大厅主要用于承载玩家的连接,获取玩家角色状态信息
  • 聊天用于玩家之间的文字语音交流
  • 排行榜用于显示所有玩家的排名情况
  • 匹配用于玩家、玩家队伍之间的匹配
  • 消息中枢是大厅和其他功能模块之间通信的中间桥梁
    在这里插入图片描述

无服务器游戏后端解决方案–事件驱动的serviceless游戏后端架构

常见的游戏后端服务器管理方式

  • 完全自建: 在云中创建一个定制的服务器基础设施,同时保持对环境的控制。然后根服务器监控指标做出管理。
  • 托管服务: 更快地发布你的游戏,并迅速为玩家带来他们所期望的游戏体验。用更少的操作资源维护服务器,并轻松提供更新、补丁和新内容。

完全自建的情况下需要考虑我们的运维成本和运维压力,但是托管服务可以大大减少我们时间从而有更高的可用性,因为云平台在退出产品时就已经达到了五个9的可用性了。

托管服务解决方案有:

  • 事件驱动Serverless:如果是可以拆分成微服务,事件驱动导向的架构,可以做到无状态化,可以使用全Serverless架构。
  • 会话管理Gamelift:如果对网络对战和事件有优先级需求,那么可以使用Gamelift帮助你管理game session.和底层服务器的硬件调度。

为什么会采用事件驱动的serverless架构

网游最受欢迎的两种模式是p2p和dedicated server,现代化游戏开发又出现了一种新的架构方式,即游戏云原生(没有固定的服务器去运行服务端程序,而是通过API)

  • 我们来看一下传统的游戏后端架构:
    在这里插入图片描述
  • 采用serverless的游戏架构:

在这里插入图片描述
可以看到,serverless架构就没有和传统架构一样有明确的分层了,对于游戏服务层里面可以更灵活地组合起来。采用Serverless后对项目还是产生了比较大的影响,从新旧架构中也能发现:

  • 快速启动项目、不需太多运维人员: 客户之前的经验,管理docker系统仍须相当多的人员,但使用Serverless的架构,大量的运维工作转移到AWS,只需4~5人的团队
  • 更加云原生、可以随时调整架构:没有固定的基础架构,可以灵活的调用AP之间的逻辑调用,功能间隔离较佳,降低模块间的依赖间,方便新增功能模块
  • 天然贴近开发思维、业务逻辑清晰:Serverless可以用开发人员管理AP的方式,管理整个架构,天然形成DevOps的开发模式,便于长期的开发运维管理

事件驱动设计的原理

所有的游戏逻辑和玩家行为都认为是事件驱动的

  • 每个模块独立:每一项模块有独立的一套架构,将每项服务拆分为一个单独的独立流程,从而加速开发。
  • 每个模块统一:所有的模块遵循统一的API开发模式,统一的数据结构,服务直接都是通过API互相调用。
  • 每一项功能使用独立的DynamoDB表去存储缓存和状态数据

为什么我们要强调模块化呢?模块化带来的好处是啥?

  • 模块之间相互独立,耦合度低
  • 按功能区分,可以分别使用合适的协议,WSS保持客户端长连接和http短连接,甚至使用MQTT
  • 信息交互放到DDB
  • 可以通过SNSSQS做消息推送和队列,能降低lambda运行时间
  • Dynamodb等服务可缓存可持久化

事件驱动设计案例

例如登录和大厅模块等,我们可以通过HTTP请求来负责登录和大厅模块,包括帐户创建/帐户修改/帐户删除/身份验证和支付
模块。将卡片商店,卡片收集API也包含在这部分中。

通过 CloudFront -> API Gateway -> Lambda -> DynamoDB 的这个流程,很简单就能研发出我们需要的效果,那么匹配模块就可以改造成下图:
在这里插入图片描述

Serverless架构于游戏的优点和挑战

优点

  • 实现快速上线缩短创新周期:
    • 小团队的开发人员正可以在短期内开发应用程序并部署到生产。使用短而简单的函数和事件来驱动游戏逻辑和数据存储
      等API。部署速度极快。
    • 很适合小型初创的游戏团队。
  • 增加弹性和灵活性:
    • 对于传统应用来说,要应对更多的请求的方式,就是部署更多的服务器。而Lambda会自动的扩展。无需规划业务的弹性扩缩策略。
  • 减少资源浪费
    • 不计划到底需要使用多少资源,而是根据实际需要来请求资源。根据使用时间来付费,根据每次申请的计算资源来付费,让计费的粒度更小,将更有利于降低资源的开销。这是对游戏的优化。

挑战

主要在状态管理上:

  • 要想实现自由的缩放,需要将有状态和无状态的服务进行分离,而要做Serverless架构就需要尽量避免事务性操作,所以在Serverless游戏中就要做事务性操作的无状态改造。
  • 大部分的对战游戏会倾向使用有状态服务去处理玩家的游玩逻辑,而Serverless的游戏可以通过session和隐藏表单等方法解决有状态服务的事件问题。

抵御全球DDOS攻击

什么是DDOS攻击?

首先,我们要先理解DOS攻击DoS(Denial of Service) 是拒绝服务攻击,过各种手段,使网络服务无法使用或不可用的行为,让正常用户的使用受到影响。

简单的DOS攻击如何应对呢,如果攻击来源单一,可以简单拦截IP防范,在入网层设置好对应黑名单,过滤规则等就可以了;但是随着互联网的不断发展,黑客们也明白了这种防范方式,于是就产生了DDOS攻击,是一种分布式拒绝服务攻击,攻击者往往地区都分布的比较分散,普通的范文已经足以产生效果了
在这里插入图片描述

例如这个ACCN攻击小组,直接对企业进行勒索,采用DDOS攻击收 “保护费”
在这里插入图片描述
一般中小企业根本没有办法抵挡,那我们应该如何解决呢?

如何从技术上防止DDOS攻击?

DDOS攻击类型

在这里插入图片描述
首先就是我们的网络是根据七层模型来构建的,黑客是可以根据他的环境对任意层进行攻击,所以我们的防范也需要在多层上进行处理。

UDP反射攻击

例如上图中黑客可以通过发送大量的UDP请求包,造成服务器的带宽消耗,让你的带宽没有办法处理正常用户的请求,从而达到攻击的目的,以下是一个攻击示例:

在这里插入图片描述

SYN泛洪攻击

黑客还可以在传输层,建立大量的TCP连接,形成SYN 泛洪攻击,对我们的防火墙或者负载均衡层造成影响,因为我们的链接表是有限的,如果连接表全让恶意请求给站满了,那么正常的用户就没法建立TCP连接了

在这里插入图片描述

Http泛洪攻击

在这里插入图片描述

通过并发大量的Get请求,让服务器的处理速度下降甚至是没有办法处理正常用户请求

近两年DDoS攻击趋势的变,边缘的计算能力增强,带宽变,肉鸡的能力也变强了;目前黑客对7层CC攻击变多了,
攻击也更加有纪律性(黑客对肉鸡的控制能力强了),我们系统做了防护错误,但是在短时间内,大流量的攻击,防御系统尚未及时启动

亚马逊是如何解决DDOS攻击的?

首先就是将整个请求链路梳理清楚,对各个地方的基础设施进行安全处理
在这里插入图片描述
通过上图可以看到,亚马逊的基础设施是十分安全的,攻击者无法获取到服务器的最终IP,而是会先进入边缘节点,而边缘节点也不是固定IP,会根据请求用户的环境进行分配,从而减少最终的服务器请求

如何缓解HTTP/HTTPS的DDoS

在有盾和没有盾的情况下都有不同的解决方案,如果在没有遁的情况下,我们需要尽可能让攻击效果最小化,并且让后台服务能够自动扩展,提升承载能力

在这里插入图片描述
可以看到,不同的角色访问的入口都是不一样的,普通用户通过ELB分配请求到EC2,因为ELB本身就具备了可扩展能力,所以可以轻松应对大量流量。
在这里插入图片描述
在这里,如果不想自己去处理,也可以使用亚马逊提供的安全盾解决方案:

亚马逊云科技Shield标准盾,主要分为:标准盾和高级盾。标准盾是默认开启的,并且免费,保护所有AWS,所以只要购买了基础的EC2服务器亚马逊就提供了安全保护措施;如果你的系统有更复杂的攻击,完全可以选择高级盾针,他可以针对大型和复杂的攻击提供全面的,额外的保护,需付费。

正确的配置Shield Standard标准盾
  • 如果架构合适,尽可能的使用ALB/NLBCloudFront/AGA
    • 托管的服务,后端自备弹性的架构
    • 全球PoP,流量很难打爆单点
  • 正确的设置网络ACL和实例安全组
  • Linux/Windows系统加固

当有3/4层DDoS攻击会发生啥?

  • Cloudfront
    • 影响范围是很多客户,快速自动处理(号称秒级)
    • 处理方法,丢弃并黑洞被攻击的IP,生成新的IP放入DNS
  • ALB
    • 影响范围是一个客户
    • 较快速的自动处理(号称分钟级)
    • 处理方法基本同上
  • NLB
    • 影响范围一个客户
    • 部分自动处理(号称分钟级)
    • NLB默认不能抛弃IP,只能扩容抵挡(有上限)
  • AGA
    • 局部类似NLB,全局较难打死

在这里插入图片描述

如何防止CC攻击

AWS 有提供 WAF 服务(即web应用防火墙),他会自动生效,通过 CloudFront 检查是否需要引入WAF实现自动化防护
在这里插入图片描述
当受到攻击后,亚马逊会自动发送攻击通知和报告,让我们能够及时感知到服务器的状态,并且很方便取证

以下是一个实际的攻击,可以看到攻击流量之大,但是通过 Shield Advanced 高级盾是可以完美解决的:
在这里插入图片描述

如果我们遇到了DDOS攻击,我们应该做么做呢?

  • 先做好 Well Architected 良好架构
  • 设置好NACL/安全组,使用AGA服务
  • 巧妙使用托管服务,ALB/NLB
  • Shield Standard可以免费防护3/4层攻
    • 可以保护Route53/CloudFront
    • 流量清洗/黑洞/海量带宽
  • Shield Advance有专家24x7保驾护航
    • 可以保护EIP/ALB/Route53/CloudFront
    • 攻击通知/攻击报告/Byte Match等
  • WAF可以防护7层攻击,包括Xss攻击,SQL注入和cc攻击

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/167223.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一文吃透python面向对象基础+进阶

目录基本理论面向过程与面向对象面向过程面向对象基本概念面向对象基本语法定义类创建对象属性属性和变量区别对象属性类属性限制对象属性添加方法实例方法类方法静态方法私有属性只读属性私有方法魔法方法字符串表示可调用索引操作切片操作比较操作布尔判断遍历操作面向对象三…

字节青训营Go语言学习第一天--基础语言+实战案例

文章目录走进Go语言基础语言2.2基础语言-变量2.3基础语法- if else2.4基础语法-循环基础语法-switch基础语法-数组基础语法-切片基础语法-map基础语法-range基础语法-函数基础语法-指针基础语法-结构体基础语法-结构体方法基础语法-错误处理基础语法-字符串操作基础语法-字符串…

通讯录升级--可增容(动态增长空间)

通讯录成员的改变 之前我们定义了date[100]的数组用来存放100个人的信息,但是当需要存储的人数超过100时,内存不够,存储人数较少时,又有些浪费,并且数组空间在创建时就已经确立,无法随需求改变&#xff0c…

rabbitmq+netcore6 【6】RPC:远程过程调用

文章目录1)前言2)Client interface 客户接口3)Callback queue回调队列4)Correlation Id 关联Id5)Summary总结6)综合以上代码准备工作服务端客户端结果验证官网参考链接: https://www.rabbitmq.c…

372. 超级次方

372. 超级次方题目算法设计:迭代算法设计:递归题目 传送门:https://leetcode.cn/problems/super-pow/ 题目不难懂,问题在于 b 是一个非常非常大的数,会溢出。 迭代和递归,各有解决方法,记录在…

Elasticsearch入门——kibanna和postman操作Elasticsearch索引示例

目录一、使用kibanna操作Elasticsearch索引示例二、使用postman操作Elasticsearch索引示例三、kibanna和postman操作Elasticsearch的总结一、使用kibanna操作Elasticsearch索引示例 启动Elasticsearch和kibanna服务,浏览器访问http://localhost:5601/,进入Dev Tools…

week11

T1汤姆斯的天堂梦 题目描述 汤姆斯生活在一个等级为 000 的星球上。那里的环境极其恶劣,每天 121212 小时的工作和成堆的垃圾让人忍无可忍。他向往着等级为 NNN 的星球上天堂般的生活。 有一些航班将人从低等级的星球送上高一级的星球,有时需要向驾驶…

【C语言】数据结构基础(每日小细节025),有三数之和哦

算法好题初阶(一共14回已经更新完毕),从今天开始就是基础的数据结构题目 1.只出现一次的数字 如果不额外开辟任何空间的话一定要想到位运算符 异或^ :两个整数异或,遵循相同为0,相异为1的二进制位运算规则 &#x…

【Nginx 基础】

Nginx 的安装 Nginx 的静态网站部署 理解 Nginx 的反向代理与负载均衡,能够配置反向代理与负载均衡 一、 Nginx 概述 Nginx 是一款高性能的 HTTP 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,由俄罗斯的程序工程师伊戈…

spring学习系列

Spring_三种方式的依赖注入1.第一种,set方式,property2.构造器注入(构造方法)3.p命名空间注入4、注入各种数据类型//老师类 public class Teacher {private String name;private int age; }//课程类 public class Course {private…

云原生技术学习笔记(基础版)

一、容器基本概念容器运行时,多种虚拟化技术,runC、kata、gVisor等。containerd -shim不是个lib,是个守护进程,管理容器生命周期,可被containerd动态接管。(可以从containerd中脱离出来,插件化管理&#xf…

jvm系列(1)--JVM和Java体系架构

目录Java-跨平台的语言JVM-跨语言的平台多语言混合编程虚拟机虚拟机概念Java虚拟机JVM的位置JVM的整体结构Java代码执行流程JVM的架构模型基于栈的指令集架构基于寄存器的指令级架构两种架构的举例JVM架构总结JVM的生命周期虚拟机的启动虚拟机的执行虚拟机的退出Java-跨平台的语…

VTK-vtkSelectPolyDataFilter

前言:本博文主要记录vtkSelectPolyDataFilter接口的应用,实现原理,以及与其近似的vtkClipPolyData&vtkImplicitSelectionLoop的应用相比较,帮助小伙伴理解vtkSelectPolyDataFilter接口的实现原理,并且与其它接口进…

2023新生个人训练赛第08场解题报告

问题 A: Candies 题目描述 We have a 2N grid. We will denote the square at the i-th row and j-th column (1≤i≤2, 1≤j≤N) as (i,j). You are initially in the top-left square, (1,1). You will travel to the bottom-right square, (2,N), by repeatedly moving ri…

鉴源论坛 · 观通丨轨交系统安全性设计

作者 | 刘艳青 上海控安安全测评中心安全测评部测试经理 版块 | 鉴源论坛 观通 引语:第一篇对轨交信号系统从铁路系统分类和组成、城市轨交系统分类和组成、城市轨交系统功能、城市轨交系统发展方面做了介绍,第二篇从信号基础出发,讲述了信…

【蓝桥杯算法 1】AcWing166.飞行员兄弟

本文已收录专栏 🌲《蓝桥杯周训练》🌲 “飞行员兄弟”这个游戏,需要玩家顺利的打开一个拥有 16 个把手的冰箱。 已知每个把手可以处于以下两种状态之一:打开或关闭。 只有当所有把手都打开时,冰箱才会打开。 把手可…

支持数位板的远程软件,实现远程使用 Wacom 数位板

现在数位板越来越流行了,影视、动漫、游戏、设计等行业经常需要用到。Wacom 是数位板领域的全球领导者,其设备为创意人员带来了真正的纸感绘图体验。 数位板用户需要远程办公的时候,经常会遇到两个问题:远程软件不支持数位板、远…

(考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例

文章目录一:计算机网络结构分层的必要性(1)分层思想(2)计算机网络分层思想①:如何让两台计算机通过网线传输数据②:如何让分组在单个网络内传输③:如何让分组在网络间传输④&#xf…

SpringBoot项目练习

项目名称:旅游网站后台管理一:项目简介旅游网站后台管理,包括如下用户:旅游线路:线路图片:线路分类:旅行社:后台技术:springboot、mybatis、mybatis plus前台:bootstrap、…

测试开发 | 专项测试技术初识Hook

本文节选自霍格沃兹测试学院内部教材Hook 技术需要预先分析目标应用的源代码和逻辑,根据目标测试场景设置目标、逻辑和数据,然后运行时动态的对目标函数参数值、逻辑或者返回值做修改,达到修改现有函数逻辑、实现目标测试场景的目的。Hook的价…