当当网是全球知名的综合性网上购物商城,涵盖图书、电子书、听书、服装、百货等品类。在数字化已经成为社会经济发展趋势的背景下,电商行业也在数字化的驱动下加速更新换代,销售内容、社交模式、消费体验全面升级,同时也要支撑应对突发流量、新业务快速上线等需求,一套高可靠性、高可扩展性、性能强大的IT架构就成为了必需。
日前,记者采访了当当网云原生实验室负责人李志伟,对当当网近年来的数字化转型之路做了梳理。
一步跨入Kubernetes,开启云原生之路
前些年,当当网的大多数业务都运行在物理机上,运维自动化水平不高,系统架构多种多样,错综复杂,计算资源的利用率不足 20%。当有突发流量的时候,水平扩展和迁移非常困难。同时,因为历史原因,当当网的老旧服务很多,需要有一个新的平台平滑迁移过去。
根据当时的情况,当当网认为首先应该构建自己的私有云平台,然后一步一步的进行转型。但是在接触到了Kubernetes 平台之后,当当网认为可以直接进入到容器云平台。
Kubernetes是微服务架构最佳的运行平台之一,如果把当当网现有的业务按照微服务架构思想全部改造,大约需要几年的时间。当当网最终决定基于现有的应用基础做平滑迁移,在半年左右的时间把所有业务都迁移过来,第一步就是用 Kubernetes实现一个高可用的、高度自动化的运维平台,一个高效的服务编排平台。
事实证明,Kubernetes真正改造了当当网的研发流程,真正实现了一次构建就可以运行在多个运行环境中。Kubernetes 遵循 Borg 的架构思想,规范了现有的系统架构设计,实现自动化运维。并且,使用 Kubernetes 可以不被云厂商锁定,在不同的服务商之间快速迁移。
Kubernetes虽然有诸多优势,但是开发者使用它的门槛很高,起初,当当网使用Jenkins,Helm, Chart来简化CI/CD流程,但配置及运维管理依然复杂。开发人员不仅要关注容器构建、缩扩容,还要关注流量控制的实现细节,急需一种简单有效的服务编排标准来解决开发与运维管理复杂度问题。此外,Kubernetes本身并没有解决低频使用的服务资源占用问题,依然有大量服务、作业即使很少被使用,但依然占据着CPU和内存资源,导致计算资源的使用率较低。
Knative,把Serverless变得简单易用
在云原生时代,Kubernetes和Istio的引入给微服务的开发和部署提供了完整的解决方案,同时也带来了更高的维护复杂度,Knative作为新一代无服务架构平台提供了一套简洁的方案来解决微服务的管理问题。
Serverless(无服务器架构)指的是由开发者实现的业务逻辑运行在无状态的计算容器中,它由事件触发,完全被第三方管理,其业务层面的状态则被存储在数据库和其他存储资源。Serverless不代表不需要服务器,而是开发者不用过多考虑服务器的问题,计算资源作为服务而不是服务器的概念出现。Serverless是一种构建和管理基于微服务架构的完整流程,允许开发者在服务级别而不是服务器级别来管理应用部署,这大大降低了软件开发的复杂度,使得开发者可以快速迭代,更快速地开发软件。
虽然Serverless拥有无需管理基础设施、按用付费、事件驱动、自动化构建部署等优势。但是当前各厂商的Serverless标准不统一,软件不能跨厂商迁移,客观上存在厂商锁定问题,这是制约Serverless发展的最主要因素。正因为如此,谷歌发起了Knative项目。Knative 是谷歌发起的基于kubernetes平台的Serverless 开源项目, 将Serveless的服务管理,事件驱动,构建部署进行了标准化。它不仅可以以托管服务形式运行在公有云中,也可以部署在企业内部的数据中心,很好地解决了多云部署以及供应商锁定问题。
Kubernetes作为基础设施,解决了应用编排和运行环境问题。Isito作为通信基础设施层,可以保证服务的运行可检测、可配置、可追踪。Knative使用应用模板和统一的运行环境来标准化服务的构建、部署和管理。
Knative 将kubernetes和istio的复杂度进行抽象和隔离,解决了繁琐的构建,部署,服务治理步骤,并且基于开放标准使得服务变得可移植。
Knative作为开源仅两年多的项目,各项特性还在快速发展演进过程中,出于稳妥考虑,当当网选择了相对成熟的Serving组件,应用到业务形态相对独立的单品API服务进行了实践。
单品API服务是当当网基础平台中核心的基础服务之一,由一系列与商品相关的API服务构成,单品API为所有相关上游服务提供高效可靠的底层服务支持。
当当网搭建了一套完整的运行环境:首先编写用户容器对应的dockerfile,然后编写对应的Tekton task及taskrun文件,构建代码打包运行时容器推送到私有镜像仓库,编写Knative的service.yaml 配置文件并完成部署。
在运维工具方面,Knative直接使用了Kubernetes平台上的解决方案,避免了重复建设。
从测试结果来看,对比Kubernetes原生的部署方案,Knative的引入带来了27ms的延迟和10%的TPS损失。
Knative Serving支持缩容到零,极大提高了低频应用的资源占用,为了解决冷启动的问题,当当网采用保留服务最小副本数的方法,在资源占用和服务响应延迟之间进行平衡。对于可预见的高并发场景可以为服务预设预期最小所需副本数,这样避免了突发高并发请求导致大量请求积压;为服务预设最大所需副本数可以避免资源过度分配;为服务的每个POD设置最大并发请求数上限保障每个服务的可用性。
从当当网的Knative应用案例可见,Knative对于Serverless平台的标准化意义重大。Knative的发展前景广阔,有望成为未来的主流无服务架构平台。同时,Knative还在逐步走向成熟的阶段,大规模应用还需要进一步完善。
受访人:李志伟,当当网云原生实验室负责人,《Knative实战》作者。2016年加入当当网,期间担任数字业务产品线技术总监,架构部、云原生实验室负责人。一直致力于推广和实施云原生技术在当当平台的应用。2018年实现了当当云阅读产品线的全面容器化,完成了Kubernetes的平台的整体方案设计和实施工作。