#私藏项目实操分享#GCP NLB全球动态加速配置实践

网友投稿 322 2022-10-09

#私藏项目实操分享#GCP NLB全球动态加速配置实践

引言

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

一、背景概况

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

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

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

二、方案设计及架构

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

三、关键技术说明

3.1 GCP NLB TCP Proxy即外部 TCP/UDP 网络负载均衡

TCP 代理负载均衡是一种反向代理负载均衡器,它将来自互联网的 TCP 流量分配到 Google Cloud VPC 网络中的虚拟机实例。使用 TCP 代理负载均衡时,经由 TCP 连接传输的流量会在负载均衡层终止,然后使用 TCP 或 SSL 转发到最近的可用后端。

备注:NLB不限制TCP端口而GLB会有固定端口限制,如果动态加速为Http协议则选择GLB,同时Http协议也不适用于本文,可以直接采用GLB+NEG的方式进行动态加速。 TCP 代理负载均衡器为全球所有用户使用一个 Anycast IP 地址。TCP 代理负载均衡器可以自动将流量路由到离用户最近的后端。同时它是一种直通式负载均衡器,因此它不会替换来自客户端的源地址。

3.2 Nginx Server(即Google Compute Engine)

Nginx Server建议使用E2机型, E2 虚拟机提供 2 到 32 个 vCPU 的大小,并且内存比率如下:标准虚拟机为每 vCPU 0.5 GB 到 8 GB,共享核心 E2 虚拟机为 0.25 个到 1 个 vCPU 及 0.5 GB 到 8 GB 内存。它们有 Intel 和 AMD EPYC Rome 处理器可选。在创建虚拟机时选择处理器。E2 虚拟机在所有区域和可用区中均可用,最多支持 32 个 vCPU 和 128 GB 内存。

3.3 Instance Group实例组

Instance Group是可以作为单个实体进行管理的虚拟机 (VM) 实例的集合。Compute Engine 提供了两种虚拟机实例组,即托管实例组和非托管实例组:

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

四、详细实施步骤

4.1 创建Nginx Server托管实例组

在Compute Engine导航中找到Instance Groups,选择创建。备注:建议创建实例组之前先根据业务需求创建实例模板(instance template)。

创建instance gourp,建议选择stateful实例组,选择实例模板(instance template)选择一个靠近源站的可用区(本方案以外部源站在东京为例,所以选择Single Zone,东京的可用区B。如果考虑跨区域容灾的高可用性,可以选择Multiple Zones。)

4.2 创建NLB负载均衡

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

选择单个区域(NLB仅支持单个区域)

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

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

4.3 配置外部源站动态加速

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

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

详情参考:

详情参考【1】Google Cloud 负载平衡器的底层技术

Google 前端 (GFE) 是位于 Google 入网点 (PoP) 的软件定义分布式系统,可与其他系统和控制层面协同执行全球负载平衡。Andromeda 是 Google Cloud 的软件定义网络虚拟化堆栈。Maglev 是用于网络负载均衡的分布式系统。Envoy 代理是专为云原生应用设计的开源边缘和服务代理。

详情参考:​​代理负载均衡和直通式负载均衡

(1)代理负载均衡器会终止传入的客户端连接,并打开从负载均衡器到后端的新连接。区域外部 HTTP(S) 负载均衡器和内部 HTTP(S) 负载均衡器是基于开源 Envoy 代理的代管式服务。

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

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

详情参考:​​NEG网络端点组简介

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

区域 NEG(一个或多个解析为 Compute Engine 虚拟机实例或 GKE Pod 的内部 IP 地址端点。)互联网 NEG(在 Google Cloud 外部托管的单个通过互联网路由的端点。只有全局外部 HTTP(S) 负载均衡器(经典版)支持)无服务器 NEG(Google 网络内解析为 App Engine、Cloud Functions 或 Cloud Run 的单个端点。)混合连接 NEG(一个或多个解析为本地服务、其他云中的服务器应用以及 Google Cloud 外部其他可通过互联网访问的服务的端点。)Private Service Connect NEG(解析为 Google 管理的服务端点的单个端点)

详情参考:​​Google CLoud网络层级

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

优质层级利用 Google 高度可靠的低延迟全球网络,将来自外部系统的流量传输到 Google Cloud 资源。此网络由一个大型专用光纤网络组成,在全球有 100 多个接入点 (PoP)。

GCP网络经过专门设计,可承受多处故障和中断,同时仍能传输流量。 对于虚拟机实例和负载平衡器,优质层级既支持地区级外部 IP 地址,又支持全球级外部 IP 地址。所有全球外部 IP 地址都必须使用优质层级。如果应用对性能和可用性的要求很高(例如,应用需要将带有后端的 HTTP(S)、TCP 代理和 SSL 代理负载平衡器用于多个地区),则需要使用优质层级。对于用户遍布于全球多个位置的客户,如果需要出色的网络性能和可靠性,则非常适合使用优质层级。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:#yyds干货盘点# Prometheus Exporter(六)SNMP Exporter
下一篇:Java超详细讲解设计模式中的命令模式
相关文章

 发表评论

暂时没有评论,来抢沙发吧~