如今,云原生被企业和开发者奉为一种标准,并被认为是云计算的未来。
严格来说,云原生并不是一个产品的名称,而是一套技术体系和一套方法论,它包括 DevOps、持续交付、微服务、容器、敏捷基础设施等内容。云原生(Cloud Native)概念在 2013 年被首次提出,在云原生技术爆发之前,我们开发的应用可以被称为非云原生应用,非云原生应用并没有考虑到应用的弹性和规模性,甚至很多都不具备扩展性,当业务规模扩大时,特别依赖硬件的升级,进而带来了很多问题。
云原生的出现,带来了一种新的建设思路和开发模式,使得服务交付方式改变,构建应用效率显著提升。同时,云原生也在拓展云计算的边界,一方面借助云原生技术,云端智能正在加速向边缘智能扩展。另一方面,多云、混合云形态逐渐成为主流。越来越多的企业愿意技术架构向“云原生”演进。
一、京东的云原生之路
在云原生技术全面爆发之前,早在2014年,京东就率先将Docker容器技术大规模应用至生产环境, 2016年上线了京东新一代容器引擎平台JDOS2.0,成功从OpenStack切换到JDOS 2.0的Kubernetes技术栈,打造了完整高效的PaaS平台。2017年初基于Vitess建设了弹性数据库。2018年京东正式加入CNCF基金会,成为其首位白金会员,并在当年获得CNCF终端用户奖。
二、云原生在京东
京东在每年的 618、11.11 都会面临海量数据和流量增长,从前端网站、订单、结算、支付、搜索、推荐,到后端的仓储、配送、客服、售后各种业务系统都面临着前所未有的挑战。因此,京东自然需要一个灵活的、有弹性的、可规模化扩展的平台,这也决定了京东从很早开始就拥抱云原生。京东目前运营着全球最大规模的 Docker 集群、Kubernetes 集群,以及最复杂的 Vitess 集群之一,基本实现了“All in Containers”,是目前全球容器化最彻底的互联网企业之一。
全世界最大规模的Docker集群、Kubernetes集群
京东作为容器技术先行者,早在 2014 年,就率先将 Docker 容器技术大规模应用至生产环境。在 2016 年初开始实践 Kubernetes,在2017年初基于 Vitess 构建起弹性数据库,并且自研京东“阿基米德”调度系统。京东零售基础架构团队持续建设“阿基米德”平台,作为支撑京东万亿 GMV 的技术基础设施,阿基米德由大规模容器集群调度、数据库与存储技术平台、组件化微服务平台、商品图片技术平台、异地多活与智能运维、边缘计算平台构成。其中容器技术是所有平台服务的基石。在此过程中,采用容器最大化资源利用,节省数据中心数亿元采购成本。大促之前加机器的历史一去不复返。
最早的Harbor用户
同样在 2016 年,京东需要云原生的 Registry 用来维护其镜像中央存储库。在考察了包括Docker原生注册表在内的多个解决方案之后,京东选择了 Harbor。从那时起,京东就开始成为 Harbor 的忠实用户。Harbor 操作简单、运行稳定,为京东节省了大约 60% 的镜像中央存储库维护时间。
随着业务量的增长,存储镜像的数据会变得越来越庞大,京东需要一个稳定、可靠、高性能的存储方案。ChubaoFS 是京东开发的一款为云原生应用提供分布式文件存储服务的开源项目,在所有分布式文件系统中,ChubaoFS 最适合支持云原生工作负载,这得益于其几乎无限的可伸缩性和分布在多个节点工作内存中的健壮元数据子系统。京东选择其作为 Harbor 后端存储方案,多个 Harbor 实例可以同时使用 ChubaoFS 共享容器镜像,它给 Harbor 提供了稳定的,可弹性扩展的,高性能的分布式存储服务。
Prometheus在京东开源项目ChubaoFS的应用
对于已经服务于京东 2000 多个应用以及在线业务的 ChubaoFS 来说,一个优秀高效的监控系统是十分重要的。Prometheus 项目是由前 Google 员工发布的新一代云原生监控系统,2016 年 5 月正式加入 CNCF 基金会的项目,是第二个 CNCF 的毕业项目,Prometheus 具有天然的 K8S 生态优势,而京东基础设施都部署在 Kubernetes 集群中,使用 Prometheus 可以更好地将监控应用于生产环境。Prometheus 提供了一种更便捷、高效的资源组织和使用方式,让部署和维护变得更简单,便于资源的动态伸缩及可靠服务,大大提升了开发、交付、运维系列流程效率,让我们在软件开发中更关注应用逻辑本身,从而让开发更加高效。
京东运用Helm 轻松部署多款云原生应用
在当前的 Kubernetes 应用生态当中,Helm 是最被广泛使用的应用定义标准之一,是 CNCF 旗下第十个顺利毕业的项目。Helm 相对于 Kubernetes 而言,类似于 Ubuntu 上的 APT 或 CENTOS 上的 yum 命令。该项目采用一种名为图表(chart)的打包格式,用以描述一组彼此相关的 Kubernetes 资源文件集合,它可以把整个 Kubernetes 的资源进行打包。好处:第一是复用性,第二是标准化,第三是版本控制。通过使用 Helm 在 Kubernetes 平台上部署 ChubaoFS 集群,京东团队将部署时间从几个小时减少到几分钟。除了 ChubaoFS,京东还使用 Helm 来管理许多其他的 chart,包括 etcd、 grafana、MySQL、zookeeper 等等。
全球规模最大、最复杂的Vitess使用者之一
作为中国最大的零售商,京东的 MySQL 数据库在发展过程中变得越来越大,导致性能下降,运营和维护成本上升。这时迫切需要一个解决方案,帮助京东轻松快速地扩展 MySQL,方便操作和维护,并降低硬件和运维成本。Vitess 是用于部署、扩展和管理大型 MySQL 实例集群的数据库解决方案。作为 Vitess 的早期采用者,同时也是全球规模最大、最复杂的 Vitess 使用者之一,京东通过使用 Vitess 对大规模数据库服务进行可伸缩的管理,并支持 MySQL服务在线扩容。
三、京东的开源贡献
京东还致力于为云原生技术开源贡献价值,将内部孵化并经过实践验证的融合分布式文件系统与对象存储服务的ChubaoFS捐献给CNCF,将分布式数据库中间件Apache ShardingSphere开源项目捐献给Apache基金会,并成为从Apache孵化器毕业的顶级项目,持续在云原生领域推动技术创新,推动云原生计算可持续发展。
名称:ChubaoFS(储宝文件系统)
类型:存储
说明:ChubaoFS是一款云原生分布式存储系统,同时提供文件系统与对象存储两种接口。它为运行在Kubernetes容器平台之上的云原生应用提供了多租户、POSIX兼容、可挂载的文件系统,以实现计算与存储分离。而且,ChubaoFS通过流行的S3协议来提供对象存储功能。ChubaoFS内部高效实现了数据与元数据弹性扩展、顺序和随机读写模式、强一致复制算法、以及安全认证等核心特性。通过支持CSI(Container Storage Interface)与Helm,ChubaoFS可以被轻松部署并与Kubernetes紧密配合。ChubaoFS项目由CNCF (Cloud Native Computing Foundation,云原生计算基金会)托管。
项目介绍
名称:Apache ShardingSphere
类型:数据库
说明:Apache ShardingSphere 是一套开源的分布式数据库中间件解决方案组成的生态圈,它由 JDBC、Proxy 和 Sidecar(规划中)这 3 款相互独立,却又能够混合部署配合使用的产品组成。 它们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如 Java 同构、异构语言、云原生等各种多样化的应用场景。
Apache ShardingSphere 定位为关系型数据库中间件,旨在充分合理地在分布式的场景下利用关系型数据库的计算和存储能力,而并非实现一个全新的关系型数据库。 它通过关注不变,进而抓住事物本质。关系型数据库当今依然占有巨大市场,是各个公司核心业务的基石,未来也难于撼动,我们目前阶段更加关注在原有基础上的增量,而非颠覆。
Apache ShardingSphere 5.x 版本开始致力于可插拔架构,项目的功能组件能够灵活的以可插拔的方式进行扩展。 目前,数据分片、读写分离、多数据副本、数据加密、影子库压测等功能,以及 MySQL、PostgreSQL、SQLServer、Oracle 等 SQL 与协议的支持,均通过插件的方式织入项目。 开发者能够像使用积木一样定制属于自己的独特系统。Apache ShardingSphere 目前已提供数十个 SPI 作为系统的扩展点,仍在不断增加中。
基于内部探索,京东智联云打造的丰富的云原生产品,提供全方位技术服务外,也为企业快速发展提供源动力。
Serverless 实践
真正的无服务器,就是所谓的函数计算 FaaS;
类似京东智联云的原生容器,容器直接呈现给用户,并且背后不需要有虚拟机来支持;
应用比较广泛的无服务器,背后虚拟机由云厂商来提供,但是对用户不可见,仍然是以虚拟机的方式来提供容器。
负责提供计算能力的 FaaS
负责提供通信能力的 Queue Service 和 Notification Service
负责提供持久化能力的 Serverless KV 和 Object Storage
负责提供入口的 API Gateway
负责提供编排能力的 Step Function
FaaS
通过对象存储上传事件可以触发多个函数,完成实时图片或文件筛选、转存、创建缩略图、转换视频编码等处理分析。通过事件触发机制,您能够快速部署复杂的应用与服务,构建一个弹性、可靠的后端系统。
通过函数服务和 API 网关构建后端,以验证和处理 API 请求。采用函数服务构建可灵活拓展架构,轻松创造丰富、个性化的应用程序体验。
队列服务
异步解耦,削峰填谷。上下游系统处理能力存在差距的时候,利用队列作为数据的缓冲器,增加系统架构的可用性和可靠性,平滑处理峰值流量,解耦系统架构,避免对业务主流程的影响。
性能扩展,容错处理。由于队列服务会解耦分离用户应用的处理进程,因此对于有扩展需求的应用,可以轻松提高从队列服务发送或接收速率来增加用户应用的处理能力,对于部分故障的模块可以从整个系统中摘除。
原生容器
此外,京东智联云也希望能将原生容器和 Kubernetes 通过比较紧密的方式结合在一起。比如在 Kubernetes 里的 Kata Container,其在 Kubernetes 里使用了更安全的容器;还有 Rancher Labs 基于 K8s 推出的轻量级的 Kubernetes 发行版 K3s,可以满足在边缘计算环境中运行在内存和处理能力受限的小型、易于管理的 Kubernetes 集群日益增长的需求。
未来已来,愿云原生继续推动技术发展,不断变革!