VNG

VNG Corporation 是越南领先的互联网科技公司。在 2014 年,我们被评为越南唯一一家估值 10 亿美元的创业公司。VNG 推出了许多重要产品,比如 Zalo、ZaloPay 和 Zing 等,吸引了数亿用户。

  • 行业

    互联网科技

  • 地点

    越南

  • 云类型

    私有云

  • 挑战

    高可用、安全、可观察性

  • 采用功能

    DevOps、日志、监控

  • 作者

    Tan To Nguyen Duy

  • ZaloPay 介绍

    ZaloPay 发布于 2017 年,建立在 Zalo 的基础上,继承了 Zalo 生态中的诸多便利。在 Zalo 已有的生态系统中有着庞大的 Zalo 用户,活跃用户在 1 亿左右。相较于 Momo、Moca 的 GrabPay,以及 ViettelPay 等,ZaloPay 更具竞争力。

    在由越南最大的新闻类门户网站 VnExpress 所举办的 2018 技术大奖(2018 Tech Awards)颁奖典礼上,ZaloPay 荣获年度支付应用程序第三名。MoMo 占据头名位置,ViettelPay 紧随其后,Moca 的 GrabPay、VinGroup 的 VinID 以及 SEA 的 AirPay 也加入了市场,整个环境非常激烈。

  • 拥抱新科技

    VNG 是一家大公司,业务领域广泛。我们致力于使用最为尖端的框架、技术和编程语言来开发产品,创建架构。

    依靠过时的架构去构建和开发应用程序会导致可扩展性、适应性和可观察性等各方面的问题。例如,对于传统的单体架构,想要对一个大型、复杂的紧耦合应用程序进行更改非常之难。此外,单体架构可扩展性差、技术壁垒高。换言之,产品上市的计划可能会延后,更新周期也会拉长。然而,我们所追求的是业务的快速发展与交付,各类服务需要对各种改变迅速作出反应。

    毫无疑问,Docker 和 Kubernetes 为满足我们的业务需求提供了最好的自定义技术架构。关于容器化和其优势所在自不必多说。组件化加快了我们的开发速度,开发出的产品也更为可靠。Kubernetes 让我们的滚动升级和回滚模式自动化,通过探针监控应用的状况。

  • 采用 Kubernetes 和 KubeSphere

    2018 年底,我们使用 Kubernetes 作为容器编排解决方案。Kubernetes 帮助我们声明式地管理我们的集群,让我们得以控制应用版本,轻松复制应用。然而,有太多的问题需要我们去考虑,如日志监控、DevOps 和中间件等,这也使得 Kubernetes 的学习曲线相对较高。实际上,我们对几种最常用的工具进行了调研。例如,我们利用 EFK 进行日志管理,采用 Jenkins 作为 CI/CD 的引擎进行业务更新,我们也会在自己的环境中使用 Redis 和 Kafka。

    这些常用的工具帮助我们提升了开发和运营的效率。然而,我们当前最大的挑战是开发者们需要学习、维护这些工具,在不同的终端和界面之间来回切换也相当耗费时间。因此,我们开始研究一种集中化的解决方案,可以将云原生技术栈集成到一个统一的 Web 控制台。我们对比了一些解决方案(如 Rancher 和原生的 Kubernetes),最后发现 KubeSphere 最为方便。

    我们把 KubeSphere 安装在已有的 Kubernetes 集群上。目前,我们拥有两个 Kubernetes 集群,分别用于沙盒和生产环境。考虑到数据隐私问题,我们把集群都部署在物理机上。我们使用 HAProxy 安装高可用集群以实现流量的负载均衡。

  • 为什么我们选择 KubeSphere

    借助 KubeSphere 提供的对开发者友好的向导式操作界面,我们能轻松地监控从基础设施到应用程序的资源消耗情况。由此,ZaloPay 商户平台在 KubeSphere 上也已经稳定运行了半年。KubeSphere 提供了一系列功能,整合并打包了云原生技术栈,例如开箱即用的应用程序生命周期管理功能、监控日志、多租户以及告警通知等。由于每个功能和组件都可插拔,我们可以根据自己的需求去启用。

    • 对开发者友好的 Web 控制台

    • 多维度监控功能

    • 功能丰富且可插拔

  • 如何实现 DevOps

    通过执行 CI/CD 流水线,我们直接运行 ZaloPay 的商户平台。如下方视图,我们使用 KubeSphere 运行 CI/CD 流水线,将 GitLab、SonarQube、Docker、Kubernetes 和 Docker 仓库都整合到一套流程中。在第一阶段,流水线会对整个流程所需的一些必要环境进行初始化。接下来,通过设定环境条件(例如 checkout branch, deploy env 和 tag version 等),流水线会拉取 GitLab 上的源代码。在第三阶段会对 Golang 项目进行构建,触发 SonarQube 分析源代码,检查其质量。如果没有特殊情况或者代码没有重大问题,流水线将会进行下一阶段。

    一切正常运行之后,流水线会在第四阶段使用 Docker 打包项目。然后将 Docker 镜像推送至 Docker 仓库。第五阶段会将 Docker 镜像部署至所需的环境,例如沙盒和生产环境。流水线上的垃圾会随后清空,并向我们的团队发送流水线的运行结果。

  • 使用 SonarQube 进行代码质检

    我们使用 SonarQube 进行静态代码质量分析。下方的截图是 SonarQube 对我们服务分析结果的一个示例。这帮我们迅速定位问题,并找到我们代码中的缺陷。

  • KubeSphere 让 ZaloPay 的运维团队可以把更多的时间花在管理和工作流程的自动化上。

    Tan To Nguyen Duy

  • 问题和解决方案

    安装 KubeSphere 时,我们创建了一些 CRD。由于测试等一些原因,我重新安装并删除了一些资源。API Server 在处理 OpenAPI 验证 x-kubernetes-int-or-string 的 CRD 请求时,会出现 Panic。etcd 同时也会出现 Panic 并不断崩溃。

    这个问题出现在 Kubernetes v1.16.2 之前的版本。更新 Kubernetes API 并不安全,而且不可避免地会导致停机。不这么做的话则无法访问 API,kubectl 或所有的控制器也会终止运行。

    在 v1.16.2 之后的版本中,这些问题已经解决。在生产环境下请特别注意这些问题。

  • 贡献开源

    为了满足对云原生技术栈集中管理的需求,我们选择使用 KubeSphere 在 Kubernetes 的基础上加强可观察性。现在,我们可以在几分钟内迅速部署新的微服务并分配资源。KubeSphere 同样也帮助开发者加快了产品上市时间。

    KubeSphere 让 ZaloPay 的运维团队可以把更多的时间花在管理和工作流程的自动化上。KubeSphere 提供了丝滑的用户体验,对开发者友好的 Web 控制台将内在复杂的逻辑关系清晰地呈现,使得操作基础设施资源更为简单。KubeSphere 是世界上一个正在快速发展的开源社区。KubeSphere 社区帮助众多的公司和组织通过云原生技术轻松运营各自的业务,解决 Kubernetes 自身的痛点。

    我非常喜欢开源模式。这种模式让全世界的开发者们走得更近,得以在一个开放、活跃的社区相互讨论彼此的观点,帮助解决彼此的问题。我相信开源是软件行业的大势所在,我也在努力为这一社区贡献自己的一份力量。我希望 KubeSphere 可以继续助力开源社区的发展,为广大用户带来更好的产品。