
近年来,美图在海外发展迅速,BeautyPlus 作为美图海外的旗舰 APP,截至 2019 年 6 月,总 MAU 达 6682 万,是目前最受印度用户喜爱的相机产品之一。
而美图海外背后提供支撑的云端平台正是 Google Cloud。美图海外业务架构全部基于 Kubernetes 进行容器化部署,同时依托于 Google 的资源,能及时、专业地解决难题。美图海外的业务迁移成为在 GCP(Google Cloud Platform) 上 Kubernetes 迁移部署的最佳实践之一。
其实在容器技术方向,特别是 Kubernetes 推进上,Google 一直是引领者,其 2015 年推出的 GKE(Google Kubernetes Engine)——Google 云容器引擎,在框架、安全性能以及其他 Google 基础设施能力依托下,具有独到的优势。
2019 Arch Summit 全球架构师峰会·北京站 Google Cloud 技术专场上,Google Cloud 工程师魏衡、美图海外高级服务端经理陈泽青分享了 GCP 上 Kubernetes 迁移部署最佳实践 相关内容。从容器集群技术方面分析了 Google Cloud 的优势及美图的实践,以下内容主要来自魏衡和陈泽青的分享。
Google 与 Kubernetes 的关系
Kubernetes 是 Google 开源的容器编排系统,2014 年对外宣布,2015 年发布 1.0 版本,同年 Google 与 Linux 基金会一起成立云原生计算基金会(CNCF-Cloud Native Computing Foundation),并把 Kubernetes 作为种子产品捐赠给了 CNCF。Google 一直在带领着 Kubernetes 的开发,我们也可以看到 CNCF 的 Kubernetes 项目代码贡献量,Google 所占比重是最高的。

(图片来自 stackalytics)
从 Borg 到 Kubernetes,Google 的容器技术时间线

Google 在容器领域拥有超过 15 年的经验。
2003 年,Google 内部几个工程师做了一个集群自动化管理的工具,叫做 Borg;
2012 年,Google Borg 升级成 Omega,实现容器的管理;
2013 年,随着业界 Docker 发布,整个行业开始往容器方向迁移;
2014 年,Borg/Omega 开源为 Kubernetes 项目;
到如今,Kubernetes 已经成为整个容器编排的主流技术。
Kubernetes 脱胎于 Borg/Omega 的系统设计,而因为开源,使得社区能够合力去解决 Borg 的遗留问题。在 Kubernetes 面世后,Google 在开源、容器技术优化的道路上继续前行。
2018 年,Google、IBM 和 Lyft 联合开源了服务网格(Service Mesh)框架——Istio,发布 Istio1.0 版本;Google 又相继推出了 gVisor,Knative 云原生框架、GKE On-Prem ;2019 年 Google Cloud Next 大会上隆重推出 Anthos。
这些技术不断让容器领域大放光彩,Istio 是建立于 Kubernetes 上层的服务,用于进行微服务管理;Knative 扩展了 Kubernetes,专注于解决容器为核心的 Serverless 应用的构建、部署和运行问题,构建在 Kubernetes 和 Istio 平台之上;gVisor 作为新型沙箱解决方案,为容器提供安全的隔离措施,并且能够与 Docker 及 Kubernetes 实现集成,从而在生产环境中更轻松地建立起沙箱化容器系统。
而 Google 今年推出的 Anthos 其实是以 Kubernetes 为核心的混合云 / 多云管理平台,其下面就包括多种产品和解决方案,如 GKE 、GKE On-Prem、Istio on GKE 等……GKE On-Prem 是一种混合云软件,作为 Anthos 的核心组件,可将 GKE 引入本地数据中心。
GKE 架构与特色
什么是 GKE?
有了运行 Gmail 和 YouTube 等容器化服务超过 12 年的丰富经验,Google 2015 年推出的 GKE——Google 云容器引擎,是一个可用于生产的托管式环境,用于部署容器化应用。
通过 GKE,用户可以管理 Google 计算引擎(GCE)资源的逻辑集群,其中包括使用 Kubernetes 在集群节点上自动部署 Docker 容器。根据需要,GKE 将虚拟机的配置、启动和停止过程,以及在数量可变的 Docker 容器上部署容器化应用程序的过程自动化。
关于 GKE 架构
Kubernetes 的架构都由 Master (控制节点)和 Node(计算节点) 两种节点组成,通常,发布一个命令后,由控制节点分配到计算节点。

上图是 GKE 集群的结构框架演示,我们看到有 Master Node、Worker Node、Node Pool 等要素。Master Node、Worker Node,这两种角色对应的是控制节点、工作节点。控制节点由几个紧密协作的组件组合而成:API Server、controller-manager、scheduler、etcd,这部分是 Google 管理的项目,Master 内的通讯我们一般看不到。当控制节点分配任务到工作节点,Worker Node 开始发挥作用。
但在这个地方我们发现 GKE 多了一个 Node Pool 的概念,其实是把 Worker Node 进行分组,根据自身需求把相同硬件或者相同需求的计算资源分组,分成一个个 Node Pool。ReplicaSet、StatefulSet 等可以根据属性部署在不同的 Node Pool 上面,部署完成后,最后创建成 Service、Ingress,给到用户使用。
Pod 水平伸缩与垂直伸缩
谈到容器自动伸缩的问题,Kubernetes 有一个强大的功能,它能在运行的服务上进行编码并配置弹性伸缩。如果没有弹性伸缩功能,就很难适应部署的扩展和满足 SLAs。而 Pod 就是弹性伸缩的单位。Pod,而不是容器,是 Kubernetes 项目中最小的编排单位,我们可以把 Pod 看作是传统部署环境里的”虚拟机“,而容器是其中的”用户程序“,Pod 的设计可以让用户从虚拟机环境到容器环境的迁移变得更加平滑。Pod 水平扩展与收缩,是平台级项目必须具备的编排能力。
HPA(Horizontal Pod Autoscaling),是指 Kubernetes 中实现 Pod 水平自动伸缩的功能,按需实现部署的自动扩展和缩减。在 GKE ,除了支持 HPA ,还支持 VPA,VPA 即 Vertical Pod Autoscaler 纵向扩容,用来调整 CPU 和内存请求,目前只在 Google Cloud 上支持此功能。除了 Pod 的伸缩,其实更重要是计算资源的伸缩,Google Cloud 支持 Worker Node 自动部署,当 HPA / VPA 使用资源不够时可以自动部署 Node 节点。

GKE 的负载均衡
在 GKE 里可以直接享受 Google 强大的负载均衡。创建 Ingress 时,只要写一个 YAML 文件,Google Cloud 可自动创建一个全球负载均衡。同时可以支持 Secret 模式创建证书,同一 GCLB 支持多证书,以及支持 CDN 和网络安全属性服务。
另外 Google 还做了一个有趣的服务叫 Network Endpoint Group,把 Pod 作为后端负载均衡的节点,这样在服务发布的时候,遇到网络繁忙,直接检查 Pod 是否符合要求,如果可以就转发流量,相比分组方式常出现二次跳转的现象,优化了网络路径。

日志和监控 - 与 GCP Stackdriver 深度集成
Google 公司做大数据出身,日志和监控系统做的非常好,Stackdriver 产品可以监控和管理服务、容器、应用及基础架构,普遍用于混合云监控、日志记录和诊断。
除了 Kubernetes,配套的服务如容器镜像仓库、容器的可执行软件授权等,GKE 也是业界最早支持 Istio 的 Kubernetes 平台。GKE 是 Google Cloud 云上产品,如果想在自己数据中心部署,GKE On-Prem 可以帮助部署在自己的数据中心,通过 GKE On-Prem,可以使用到和在 Google Cloud 一样的 GKE Service。
Google Cloud 与美图海外的携手

以上产品都是美图出海的明星产品,BeautyPlus 和美图秀秀海外版在东南亚市场表现活跃,AirBrush 主要布局在欧美市场。在本文开篇我们也提到了 BeautyPlus 是美图海外的旗舰 APP,据美图财报显示,2019 年上半年,BeautyPlus 的月活跃用户数较 2018 年 12 月大涨 12% 达到 6682 万,是目前最受印度用户喜爱的相机产品之一。
亮眼成绩的背后离不开美图在出海策略上坚持高度本地化运营,注重与当地品牌合作,共同打造符合当地市场流行趋势及偏好的产品,
今年 4 月份美图正式发布 AI 开放平台,为美图全线产品提供云端图像处理能力,也为很多 B 端品牌客户提供 AI 技术的支持,比如 Bobbi Brown 的 WebAR 和五官分析,雅诗兰黛的多款定制化妆容,娇韵诗的上妆效果及拍照角度推荐等。

能够在海外取得这样的成绩,除了得益于美图自身本地化运营策略的成功,以及美图 AI 开放平台为其提供 AI 能力外,也离不开 Google Cloud 的大力支持。不管是 To C 的 BeautyPlus,还是 To B 的美图 AI 开放平台,都需要在海外有一个稳定强大的云端平台来做支撑。美图选择了 Google Cloud。
自 2016 年起美图便与 Google 开展深入合作,包括 Google Could、Firebase、Google AdMob、Google Ads 等方面,ARCore 是 Google 推出的搭建增强现实应用程序的软件平台,ARCore 技术也已成功应用在美图 BeautyPlus 的多款 AR 特效中。
美图为什么选择 Google Cloud
1、更低的成本
CP 有特有的持续使用折扣定价模式。计算实例定价不是固定的,而是随着使用时长不断降低,对于需要长期使用的实例,会越使用越便宜。
美图海外高级服务端经理陈泽青也提到 “我们的缓存实例占用总支出很大一部分,且对缓存实例的带宽依赖较大。但是,实例最大带宽是与实例规格是成正比的,为了大带宽只能开大规格的实例,造成其他资源(CPU、内存)的浪费。而 GCP 上,小规格的实例就能承载非常大的带宽,避免资源浪费。在我们的具体业务场景中显著的降低了成本。”
美图每种算法容器都需要不同的配置比,Google Cloud 可以进行任意的 CPU 和内存配置,与其他云服务的固定机器类型相比,在美图业务中提升了资源的利用率,更节省费用 。另外在业务高低峰期,请求量变化较大场景下如节假日,GKE 与 GCE 服务的弹性伸缩功能,使得整个业务平台都能在较低的成本下运行,并且还能在有大量突发请求时,保持业务的稳定性。
2、更先进的功能
Google 在全球部署了很多专线来打造一个骨干内网,以提升区域间访问的速度。基于 GCP 负载均衡和 AnyCast 技术也方便打造美图的全球化架构,使用负载均衡实现就近接入。
美图海外业务架构全部基于 Kubernetes 进行容器化部署,依托于 Google 的资源,能及时、专业地提供各类技术支持。
在运维层面,GCP 的 Cloud Shell 可以直接在浏览器中通过命令行访问云端资源,且无需安装 SDK。通过 Cloud Shell,可以随时使用最新且经过全面身份验证的 Cloud SDK 、gcloud 命令行以及其他必要的实用工具进行云端资源管理,并且有独立的用户数据空间,简化了云端资源的运维管理操作。
3、丰富的自定义监控和日志
GCP 上的 Stackdriver 平台正在为美图海外业务监控和日志分析的需求提供支持。包括收集各类云上资源运行指标和日志,并对日志进行各个维度的分析,及生成监控图表。同时,通过 Stackdriver 无缝结合 GCP 的其他功能比如 BigQuery 和大数据分析服务,对日志进行更多维度的分析。代替了美图海外自己搭建的监控日志平台,节省了资源成本和配置、管理成本。
“我们在迁移后统计,使用 GCP 平台,每月节省了近 44% 的成本。”陈泽青总结到。
分享嘉宾:
魏衡,Google Cloud 工程师,IT 从业 20 年,专注在网络、Linux 和容器领域。曾就职于 Cisco 和 Microsoft。
陈泽青,美图海外高级服务端经理,美图海外及 AI 云计算负责人,多年机器学习高性能计算及云计算研发经验。2017 年加入美图,组建团队架构美图 AI 开放平台,后负责美图海外服务端业务,通过云平台服务美图海外亿级用户。
评论 1 条评论