从2013年,云原生(Cloud Native)的概念由 Pivotal 的 MattStine 首次提出,到现在,其技术细节不断得到社区的完善。云原生逐渐演变出包括 DevOps、持续交付、微服务、容器、敏捷基础设施等内容,也形成了一种团队、文化、技术组织形式和管理方法。企业采用云原生来构建应用,可以更好地把业务生于“云”或迁移到云平台,从而享受“云”的高效和持续的服务能力。
那么云原生究竟有哪些神奇的力量?云原生技术的发展又面临着怎样的境况?京东作为CNCF云原生基金会的白金会员,又是如何利用自身业务场景优势来推动开源技术的应用实践?京东云产品研发部专家架构师刘俊辉为大家做出了解答。
云原生是什么?
在云原生技术全面爆发之前,我们开发的应用可以被称为非云原生应用,非云原生应用并没有考虑到应用的弹性和规模性,甚至很多都不具备扩展性,当业务规模扩大时,特别依赖硬件的升级,进而带来了巨大的成本问题。
相比于传统开发,云原生的核心优势是:
- 灵活性,可以随意组合各种应用,通常是基于容器的应用;
- 弹性,可以按需使用云的资源,节约成本;
- 规模性,不再受传统机房物理机的限制,在云上几乎可以做到无限扩展。
除了利用云本身的特点外,云原生在成本上、规模上都能更好的适应企业未来发展。
当然,也不排除一些公司上云后并未明显降低成本,这类公司业务通常是非常稳定的,并且可预测在未来不会有爆发性增长的需求,那么企业运维原有的硬件以及维持一个稳定的团队就足够了。而真正的互联网公司,对用户增长的期待一定是指数级的,这样就要尽早考虑云原生的应用。
其实,在国内谈云原生是比较前沿的。
现在的互联网企业领导者,或多或少会意识到云或云原生的价值,但是多和少的程度差别很大,新兴的互联网公司基本上可以100%的拥抱云原生,但老牌企业对传统架构进行转型时就会遇到各种问题。
企业上云可能面临着三方面的需求:应用的技术改造、人员的技能升级、管理者的观念转变。
这三个需求是由易到难的。这其中最困难的就是管理者的观念转变,因为决心难下,决定难做。转变就意味着投入,意味着调整,意味着在短期内可能看不到收益并且会有较大的投入或者是生产力的下降。
如果领导者下定决心去做,还能给企业人员一定的时间去学习、转型新技能,这之后遇到的技术问题将会是最容易解决的问题。
京东为什么做云原生?
京东云,作为具有强产业属性的云智能厂商,在云原生技术的大量投入来自于自身业务的需求,在每年的京东618、京东11.11电商促销季的海量数据和洪水般的流量面前,从电商的前端网站、订单、结算、支付、搜索、推荐,到后端的仓储、配送、客服、售后,以及采销人员使用的各种业务系统都面临前所未有的挑战。京东几千个系统,几万个应用,每一个环节正常工作才能保证整体业务顺利运行。
因此,京东云需要一个灵活的、有弹性的、可规模化的平台,这是对云原生的天然需求。同时,京东云也要有自己的架构模式,并向着100%云原生努力着。
目前京东云的实践主要分成三个阶段:
第一阶段,在京东云刚起步时,大量参考了OpenStack的实现,基本上是定制化的OpenStack。之后在使用过程中暴露出的问题比较多,其中一个重大问题是云原生的规模化,当规模迅速提升时,OpenStack已经无法满足需求,会出现各类问题,包括稳定性问题、数据一致性问题等;
第二阶段,京东云用自己研发的组件完全替代了OpenStack,在这个过程中,一部分业务做到了容器化,并在此期间研发了原生容器容器技术。原生容器可以看作使用容器镜像的虚拟机。相对于虚拟机更轻量化,能更快捷的启动;相对于Docker容器,能更好的实现安全性和隔离性。
第三阶段,也是目前正在做的阶段,京东云希望把所有的业务都容器化、Kubernetes化,以便拥有快速、一致性的部署能力。
由于用户规模和业务量庞大,京东云在运行大规模集群方面也积累了不少经验,尤其是在集群的可靠性、稳定性、数据的安全性方面表现突出。
京东在云原生上有哪些技术突破?
容器化 · 京东云容器部署 10x 加速
在传统情况下,容器启动时整个容器镜像都要被加载完才能开始启动的过程,但从抽样调研的一些京东容器应用中发现,平均每个容器镜像只有10%会在启动阶段被访问到。京东云所做的工作就是实现一边加载一边启动,优先加载启动所需要的部分,也就是说,典型情况下只要加载10%的镜像的内容就可以完全启动容器。
据了解,10x 加速的说法是从统计意义上定义的,不同业务模式的容器,启动模式不同,加速效果也不同。比如在京东云上运行机器学习的容器,它的镜像的大小可能超过 10G,相应的启动速度加速会更明显。
微服务 · 架构拆分和粒度
企业是否采用微服务、什么时候采用微服务、如何采用微服务的技术路线,一定是从需求出发的。如果企业是面向互联网的,像电商、社交网站等,在用户增长时一定会面临大量问题,如果不用微服务会导致架构到某个阶段被迫重构。但是对于一些客户数量、模式比较固定的应用,就可以选择其中具有弹性和规模性需求的部分应用先进行微服务化。
微服务的一个优点在于相互之间可以使用不同的开发语言,在处理不同的任务上发挥各自的优势。同时,可以根据开发人员的能力,来决定以何种语言开发何种功能,借此来进行整体架构的拆分。
京东云的微服务平台依托于京东的多可用区部署,可以实现跨可用区的分布式部署。用户无需任何运维操作,就可以获得跨机房的高可用性。此外,平台还将微服务框架、弹性部署、日志分析等系统深度集成,一站式满足各类运维需求。
自动化运维 · 云原生& DevOps
DevOps和云原生是相对独立的关系,即使没有云原生,DevOps依然是一个非常领先的一个理念。DevOps存在的价值在于帮助互联网公司快速的迭代,能让用户的需求能在第一时间被满足,所以DevOps要求开发环境和运行环境的一致性,以及灰度发布等快速迭代的能力。
现在的互联网公司每天发布几十个变更已是常态,这几十个变更不只在开发环境,还包括在生产环境中。这种发布变更的模式就是由DevOps能力提供的,如果能持续的发布变更,并且不影响用户的使用,那么企业就可以比其他的竞争者更好地满足用户需求。因此在京东云,DevOps和云原生是非常好的协同关系,而并非强绑定的。
为了更好的在云原生的环境下实践 DevOps ,京东云做了什么?
京东云的DevOps目前主要能够提供全链路的部署、监控、运维、服务治理等解决方案,提升企业DevOps水平,实现研发、测试、运维高效协同,提升服务效率和整体稳定性。
京东云提供了代码仓库、云编译、云部署等DevOps各关键环节的产品解决方案,同时提供了代码流水线产品将DevOps全流程贯穿起来,
京东云提供的服务管理功能,能够进一步提供基于服务树的角色权限管理和机器、资源管理自动化运维服务,满足各种复杂运维场景一键式作业,实现自动化运维。
在持续交付方面,基于Kubernetes的容器编排方案,提供从代码编译构建、部署、流量接入的持续交付流程,未来还将在网络和调度层进一步进行定制化调优,更切合企业实际场景。
另外,京东云提供从基础资源到服务可用性、服务性能和业务逻辑的全链路监控服务,支持多种类型的监控:基础监控,进程/端口监控,域名监控,死机监控,日志监控,组件监控,方法监控和自定义监控。进一步形成故障发现 – 故障定位 – 故障恢复整个故障生命周期闭环,降低MTTR。
Serverless · 函数计算和原生容器
通常,企业在建一个网站时,至少需要一个虚拟服务器或是物理服务器。但有了无服务器架构的概念后,一些拥抱前沿技术的公司就把网站转移到了无服务器技术上。二者最大的区别是无服务器的网站不再需要外部服务器模块,所有动态的内容、资源、框架类的部分静态内容,都可以通过无服务器提供。因此Serverless能够帮助应用开发者摆脱服务器等底层基础设施管理的负担,专注于业务层的创新。
无服务器技术目前并无公认的定义,京东云认为服务器技术目前有三种实现:
第一种是真正的无服务器,就是所谓的函数计算;
第二种是类似京东云的原生容器,容器直接呈现给用户,并且背后不需要有虚拟机来支持”。
第三种是应用的比较广泛的无服务器,背后的虚拟机由云厂商来提供,但是对用户不可见,仍然是以机的方式来提供容器。
根据现在企业的运作模式不难判断,无服务器未来大部分会迁移到函数计算,至于以分离容器形式存在的无服务器未来会不会保留,目前还没有结论。
京东云在无服务器方面开放了两个层面的服务:函数计算产品和原生容器,其主要考虑因素包括稳定性、可靠性和安全性,其中还包括规模化和快速部署能力。
函数计算方面,京东云和AWS的Lambda 以及Azure的Function类似,都是需要用户提供一段代码,这段代码以HTTP的入口形式可以访问。代码可以用Java等多种语言写出,处理完用户请求后给出一定的反馈,整体代码的生存周期就是请求的处理过程。代码是由函数计算来提供包括CPU、内存、语言平台等运行环境,用户完全不用关心代码运行在什么地方。
当并发请求非常多时,平台就会运行这段代码容器的多个副本,这样就能做到:用户无需预留计算资源,仅仅根据调用的时长、次数来付费。这种情况是目前为止计算资源能做到的最小化分配粒度。粒度越小时,越有可能填满服务器的计算能力,粒度越大,后期就可能有越多的计算能力被闲置。
目前京东云比较关注的开源项目集中在Kubernetes生态,比如京东云的原生容器与Kubernetes的结合,他们希望能将原生容器和Kubernetes通过一个比较紧密的方式结合在一起。比如在Kubernetes里的Kata Container,其在Kubernetes里使用了更安全的容器;还有 Rancher Labs基于K8s推出的轻量级的 Kubernetes 发行版 K3s,可以满足在边缘计算环境中运行在内存和处理能力受限的小型、易于管理的 Kubernetes 集群日益增长的需求。
京东云在云原生上的未来规划
京东云原生未来的整体规划主要包括三个方面:
在IaaS层,持续提供高可靠性、高灵活性、高扩展能力、高性能的基础设施,能够更好的运行云原生的各种任务,比如说函数计算等。
在PaaS层,让用户更便利的使用云原生生态,比如服务治理、服务网格等方面的产品都能为用户提供便捷。
在DevOps层,提供DevOps产品,其紧密集成了IaaS和PaaS的应用产品,让用户能有一个端到端的云原生开发和运行环境。
在函数计算方面,京东云目前主要通过函数服务和API网关构建后端,未来还将提供更加灵活的拓展架构,帮助用户获得更丰富和个性化的应用程序体验。另外,目前京东云能够通过对象存储上传事件来触发多个函数,完成实时图片或文件筛选、转存、创建缩略图、转换视频编码等处理分析,未来通过增强事件触发机制,能让用户更快速部署复杂的应用与服务,构建更为弹性、可靠的后端系统。
在原生容器方面,京东的产品推出时Kubernetes还没这么流行。所以为了实现节点容量的无限大,是通过一个叫virtul kubelet的一个插件让Kubernetes集群拥有一个虚拟节点。而如今,原生容器完全看用户需求。如果是一次性的任务处理批量计算工作,这种方式是非常有效的;因为虚拟节点可能会在某些方面不能实现Kubernetes所有的接口,某些特殊应用可能需要一定的适配工作,例如daemonset。京东云正在考虑把原生容器运行的节点暴露出来,并提供和现在Kubernetes所有接口兼容的一个应用。而在Docker方面,京东云希望能向轻量化发展,可以随时创建、随时销毁,并且可以随时随地创建更多的副本。
在DevOps方面,京东云会进一步提供一站式的DevOps服务,集成代码、编译、调试、部署、监控运维各个环节,降低用户的迁移、使用门槛和使用成本。
在云原生领域,软件技术很少有像Kubernetes一样在短短几年时间就得到广泛的支持的。当聊到云原生的未来,刘俊辉谈到:“云原生里Kubernetes是一个优秀的代表,但是他不能是唯一的代表,我们会有各种各样的场景、各种各样的需求,需要各种各样的云原生工具或者应用来完成。我希望能有与Kubernetes竞争的一个产品,让大家有更多的选择。同时,我也希望未来会有对电信平台应用、5G应用、边缘计算等更友好的云原生平台的出现。”
刘俊辉,京东云产品研发部专家架构师。对计算(虚机、容器)、网络(传统网络及虚拟网络)、存储(云硬盘及云文件系统)产品有深入理解。拥有多项专利,涉及网络、存储及数据中心领域。
RECOMMEND
推荐阅读
这大概是今年介绍云原生最清晰明了的文章!
干货 | 京东云Kubernetes集群最佳实践
在线公开课 | 从理论走向实践,多角度详解Cloud Native