龙空技术网

Google Cloud全球动态加速解决方案

MeshCloud脉时云 409

前言:

现时同学们对“nginxnlb”大概比较关注,朋友们都想要学习一些“nginxnlb”的相关内容。那么小编在网摘上搜集了一些有关“nginxnlb””的相关内容,希望小伙伴们能喜欢,你们快快来学习一下吧!

作者:邓军

引言

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

一、背景概况

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

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

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

二、方案设计及架构

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

三、关键技术说明

(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 代理负载平衡器可以自动将流量路由到离用户最近的后端。同时它是一种直通式负载均衡器,因此它不会替换来自客户端的源地址。

(2)Nginx Server(即Google Compute Engine),建议使用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)Instance Group实例组,是可以作为单个实体进行管理的虚拟机 (VM) 实例的集合。Compute Engine 提供了两种虚拟机实例组,即托管实例组和非托管实例组:

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

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

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

4.2 创建NLB负载均衡

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

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

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

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

4.3 配置外部源站动态加速

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

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

详情请参考:

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

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

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

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

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

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

标签: #nginxnlb