昊净电商网

谷歌加速(Google Cloud全球动态加速解决方案)

作者:邓军

引言

在国内游戏版号限制的大背景下,很多中国游戏公司开始了海外“掘金”之路。海外游戏运营根据不同题材或者游戏类型,多会进行跨地区、跨平台、甚至是全球同服的部署方案。这其中如mmo《原神》、slg《万国觉醒》、moba《无尽对决》、tps《freefire》等游戏的作品,给国内游戏研发及发行公司带来了不小的启发。

一、背景概况

在全球化、多地域游戏架构设计中,笼统的划分有前端和后端两类架构组建。其中前端有游戏匹配服、网关服、游戏平台服、游戏(战斗服)服务器等;后端服务器一般有游戏数据库(关系型数据库、nosql数据库等)、数据分析等。

本节内容将以游戏前端架构中常见的跨区域玩家匹配架构、googleplayappstore消息推送、支付验证、sdk访问等全球动态加速场景进行阐述和解决方案设计。

谷歌加速(Google Cloud全球动态加速解决方案)

海外游戏发行中拿slg这种轻量游戏来说,一般会选取覆盖核心发行区域的地域作为中心节点,其他区域作为边缘服。如以北美、欧洲为中心服,其他非核心区域如东南亚、日韩、港澳台等地区作为边缘服。在此架构中一般边缘服只会部署轻量前端业务,不会部署过重的平台业务逻辑和后端业务逻辑。那么解决边缘服到中心服的sdk加速,提高用户登录、支付的等游戏体验,就需要有全球或区域动态加速来解决问题。

二、方案设计及架构

针对上述情况中,我们一般会采用cdn厂商的动态加速,或者如aws、aliyun等厂商的ga产品解决问题。但是如果想要充分利用gcp全球优质网络资源,且源站不在googlecloud的情况下,我们推荐使用nlb+自建nginx服务器的方式来解决。具体架构如下:

三、关键技术说明

(1)gcpnlbtcpproxy(即外部tcp/udp网络负载平衡),tcp代理负载平衡是一种反向代理负载平衡器,它将来自互联网的tcp流量分配到googlecloudvpc网络中的虚拟机实例。使用tcp代理负载平衡时,经由tcp连接传输的流量会在负载平衡层终止,然后使用tcp或ssl转发到最近的可用后端。备注:nlb不限制tcp端口而glb会有固定端口限制,如果动态加速为http协议则选择glb,同时http协议也不适用于本方案,可以直接采用glb+neg的方式进行动态加速。

tcp代理负载平衡为全球所有用户使用一个anycastip地址。tcp代理负载平衡器可以自动将流量路由到离用户最近的后端。同时它是一种直通式负载均衡器,因此它不会替换来自客户端的源地址。

(2)nginxserver(即googlecomputeengine),建议使用e2机型,e2虚拟机提供2到32个vcpu的大小,并且内存比率如下:标准虚拟机为每vcpu0.5gb到8gb,共享核心e2虚拟机为0.25个到1个vcpu及0.5gb到8gb内存。它们有intel和amdepycrome处理器可选。在创建虚拟机时选择处理器。e2虚拟机在所有区域和可用区中均可用,最多支持32个vcpu和128gb内存。

(3)instancegroup实例组,是可以作为单个实体进行管理的虚拟机(vm)实例的集合。computeengine提供了两种虚拟机实例组,即托管实例组和非托管实例组:

托管实例组(mig)可以在多个相同的虚拟机上运行应用。利用自动化mig服务让您的工作负载具有可扩缩性和高可用性,这些服务包括自动扩缩、自动修复、区域(多地区)部署和自动更新。备注:本方案建议使用托管实例组。非托管实例组可跨一组自行管理的虚拟机实现负载平衡。四、详细实施步骤4.1创建nginxserver托管实例组

在computeengine导航中找到instancegroups,选择创建。备注:建议创建实例组之前先根据业务需求创建实例模板(instancetemplate)。

创建instancegourp,建议选择stateful实例组,选择实例模板(instancetemplate),选择一个靠近源站的可用区(本方案以外部源站在东京为例,所以选择singlezone,东京的可用区b。如果考虑跨区域容灾的高可用性,可以选择multiplezones。)

4.2创建nlb负载均衡

在“创建负载均衡器”页面选择“tcp负载均衡”

选择单个区域(nlb仅支持单个区域、但根据测试可以创建anycastip)

前端配置,网路服务层级建议选用“高级”网络层级,ip建议“创建ip地址”(该步骤会生成一个静态anycastip地址),端口根据业务需要自定义设置即可。

后端配置,选择现有实例组

4.3配置外部源站动态加速

1.注意nginx编译时需要加上stream模块及stream_realip_module模块;一个用来四层负载,一个用来获取客户端真实ip

2.开启透传功能proxy_protocolon,用于将连接信息从请求连接的源传递到请求连接到的目标。

详情请参考:https://blog.csdn.net/ll845876425/article/details/108352761

http://nginx.org/en/docs/http/ngx_http_upstream_module.html#upstream

五、补充说明5.1googlecloud负载平衡器的底层技术google前端(gfe)是位于google入网点(pop)的软件定义分布式系统,可与其他系统和控制层面协同执行全球负载平衡。andromeda是googlecloud的软件定义网络虚拟化堆栈。maglev是用于网络负载均衡的分布式系统。envoy代理是专为云原生应用设计的开源边缘和服务代理。5.2代理负载均衡和直通式负载均衡代理负载均衡器会终止传入的客户端连接,并打开从负载均衡器到后端的新连接。区域外部http(s)负载均衡器和内部http(s)负载均衡器是基于开源envoy代理的代管式服务。

全局外部http(s)负载均衡器使用全球的googlefrontend(gfe)代理终结客户端连接。此外,具有高级流量管理功能的全局外部http(s)负载均衡器使用envoy代理来实现加权流量拆分、离群值检测和流量镜像等功能。

直通式负载均衡器不会终止客户端连接。后端虚拟机会接收经过负载均衡的数据包,并且数据包的来源、目的地和端口信息(如果适用)保持不变。然后,后端虚拟机终止连接。来自后端虚拟机的响应直接发送到客户端,而不是通过负载均衡器返回。其术语称为直接服务器返回。如果您需要保留客户端数据包信息,请使用直通式负载均衡器。外部tcp/udp网络负载均衡器和内部tcp/udp负载均衡器是直通式负载均衡器。5.3neg网络端点组简介

网络端点组(neg)是一个配置对象,用于指定一组后端端点或服务。此配置的一个常见使用场景是在容器中部署服务。同时也可以将流量精细地分配给在后端实例上运行的应用,如将neg用作某些负载均衡器和trafficdirector的后端。

gcp的neg的类型有如下几种:

区域neg(一个或多个解析为computeengine虚拟机实例或gkepod的内部ip地址端点。)互联网neg(在googlecloud外部托管的单个通过互联网路由的端点。只有全局外部http(s)负载均衡器(经典版)支持)无服务器neg(google网络内解析为appengine、cloudfunctions或cloudrun的单个端点。)混合连接neg(一个或多个解析为本地服务、其他云中的服务器应用以及googlecloud外部其他可通过互联网访问的服务的端点。)privateserviceconnectneg(解析为google管理的服务端点的单个端点)5.4googlecloud网络层级

gcp的网络层级分为优质层级和标准层级,优质层级通过google的优质骨干网提供流量,而标准层级则使用常规isp网络。

优质层级利用google高度可靠的低延迟全球网络,将来自外部系统的流量传输到googlecloud资源。此网络由一个大型专用光纤网络组成,在全球有100多个接入点(pop)。此网络经过专门设计,可承受多处故障和中断,同时仍能传输流量。

对于虚拟机实例和负载平衡器,优质层级既支持地区级外部ip地址,又支持全球级外部ip地址。所有全球外部ip地址都必须使用优质层级。如果应用对性能和可用性的要求很高(例如,应用需要将带有后端的http(s)、tcp代理和ssl代理负载平衡器用于多个地区),则需要使用优质层级。对于用户遍布于全球多个位置的客户,如果需要出色的网络性能和可靠性,则非常适合使用优质层级。

展开查看全文

本文链接:https://www.hjjhkj.com/wenda/9757.html

版权声明:站内所有文章皆来自网络转载,只供主题演示使用,并无任何其它意义!

发表评论

提交评论

还没有评论,快来说点什么吧~

联系客服
网站客服 业务合作 QQ交流
182111886
公众号
公众号
公众号
返回顶部