目录
什么是云原生?
云原生有什么优势?
云原生时代开发者必须掌握哪些能力?
微服务
网关
Kubernetes
DevOps
ServiceMesh
十二要素应用程序
总结
最近看见云原生比较火,越来越多的编程语言、框架开始拥抱云原生,例如 Spring 推出了面向云原生的技术 Spring Native、RedHat 开源了 Java 云原生服务框架 Quarkus。
查看了招聘网站,发现该岗位的招聘需求非常大,薪资非常可观。
简单来说,云原生就是在云中构建、运行应用程序的一套完整的技术体系和方法论。 这里的技术体系和方法论就目前来说指的是 微服务+DevOps+持续交付+容器化 。
CNCF(Cloud Native Computing Foundation,云原生计算基金会)是云原生领域的权威组织,其对云原生提供了官方定义:
云原生技术使组织能够在新式动态环境(如公有云、私有云和混合云)中构建和运行可缩放的应用程序。
云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式 API。这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术使工程师能够轻松地对系统作出频繁和可预测的重大变更。
腾讯云副总裁黄俊洪大佬对云原生的定义也比较好:
上云跟云原生确实是不能划等号的。 上云只是简单地把基础设施能够搬到云上,而云原生是上云的更深层面。它需要借助的是云的 弹性伸缩的能力 ,还有 按量付费 的这种模式,去实现云上的开发、运维、测试、部署等生命周期,只有充分享受到云计算红利的这种模式,我觉得才是叫是真正的云原生。
国内的很多云服务厂商,早在几年前就已经开始在云原生领域发力了。据我了解,腾讯的自研业务现在已经全面上云了,像腾讯系大家比较常用的一些产品比如 QQ、微信、腾讯会议、腾讯视频、王者荣耀,都已基于云原生进行了改造,技术沉淀比较深厚,提供的云原生产品也越来越稳定和成熟。
以后,估计云原生产品会更加复合和完善,就像腾讯云副总裁刘颖说的,“云原生技术落地的过程中还有很多新机会,例如云原生技术与分布式云的结合让企业能够更好的 ‘随时随地’ 使用云计算,云原生技术与具体开发场景融合演进,能更进一步提升特定场景的开发效率。”
从两个方面总结一下它的优势。
对于应用程序来说, 云原生可以赋予其更快速开发上线的能力。应用程序可以更实时、更稳定、更频繁地被部署,而无需完全重新部署。并且,还可以针对特定的服务进行扩缩容,以节省资源。
对于开发者来说,云原生提供的一些开箱即用的能力比如服务治理能力、DveOps,可以帮助我们更高效地进行开发。你不需要再花精力搭建复杂的持续交付环境,敏捷基础设施(如 K8S、Docke)开箱即用,自带一站式微服务开发解决方案。
在不久的将来,掌握云原生技术会成为发者必备的能力之一。
再分享一下黄俊洪大佬对开发者的建议:
对于开发者来讲,我们提供了很多的这种原生的云化的能力来帮助开发者去提效,或者说让他能够聚焦在业务开发。那反过来,我觉得在未来,云原生可以说会成为未来开发者必备的能力之一,甚至说如果不懂云原生,在找工作方面可能相对来讲就比较困难。
从具体的能力上来说,比如说像微服务的拆分能力,容器化的改造能力,服务治理的能力,包括以及像 DevOps 的这些能力,其实都是开发者需要去必备的一些技能。我觉得云原生知识积累跟储备,对于开发者来讲还是尤为重要的。
单体架构由于承载的业务庞大,服务内部逻辑变得复杂,扩展性非常差。这个时候,我们往往需要将单体架构拆分为整体更松散,模块更内聚的微服务架构。
每个微服务都在运行在独立的线程下,它们之间通过轻量级通信机制(通常是 REST)进行通信。并且,各个微服务可以使用不同的技术栈,不同的存储技术。
各个微服务独立部署,对于单个微服务的修改,我们仅仅需要重新部署对应的微服务,而不需要重新部署整个系统。并且,系统中不同的微服务访问压力不同,我们可以对具体的微服务进行扩容缩容,这样更节省资源,节约成本。
微服务架构下,服务治理是不得不面临的一个难题。业界缺少一个多语言的、框架无关、支持异构基础设施的服务治理标准实现。
网关是整个微服务架构的流量入口,负责认证授权、请求分发、认证授权、限流、API 管 理、负载均衡等工作,是微服务架构中非常重要的一个组件。
Kong 是业界最常用的一款微服务网关,成熟稳定,高性能、高可用,支持丰富的插件。
大部分云厂商提供的网关能力都会支持 Kong,就比如腾讯云新推出的 TSE 云原生网关 Kong 就是一款 100% 兼容开源 Kong 网关 API 的网关托管产品,开箱即用,可以有效减少用户自建网关的开发和运维成本。
容器
没有容器之前,我们本地部署正常的应用程序到了生产环境很容易出现问题,经常修复各种部署错误就要花费数天的时间。有了容器之后,就不存在这种问题了。容器通过操作系统虚拟化的方式,为应用程序提供了环境兼容性和平台无关性。
容器技术是云原生发展的基石,以 Docker 为首的容器工具提出了“一次构建,到处运行”的口号。
容器平台和工具有很多,Docker 占据了最大长市场份额,已经成为打包、部署和运行云原生应用程序的事实上的标准。
对于一些大型的项目来说,一个应用程序的部署可能会涉及到成千上万台容器。这个时候,人工部署和管理容器就不太现实了。
于是,由 Google 主导孕育的 Kubernetes(简称 K8s) 就出现了,它就是帮助我们来做这些事情的,可以方便我们自动部署、扩缩和管理容器化的应用程序,减少重复劳动和出错的可能性。
K8s 被称为云原生时代的操作系统,云原生应用的优势与其提供的功能息息相关。
我们把一个有效的 Kubernetes 部署称为集群。你可以将 Kubernetes 集群视为两个部分:
控制平面 :容器编排层,它暴露 API 和接口来定义、 部署容器和管理容器的生命周期。
节点:节点由控制平面管理。通常集群中会有若干个节点,每个节点都是其自己的 Linux 环境,并且可以是物理机或虚拟机。一个节点中通常运行有多个容器。
为了提升节点资源利用率,解决节点维护、资源规划等各种各样的运维问题,部分云厂商在 Kubernetes 的基础上提供了自己的解决方案来解决这些问题,就比如腾讯云新推出的 TKE HouseKeeper 原生节点。
HouseKeeper 在产品能力上有这些特点:
K8s 运维新范式:提供基础设施声明式 API,像管理 workload 一样管理节点,可通过 kubernetes api、云 API、控制台三种方式管理节点;
自研智能运维系统:支持操作系统/运行时/k8s 层面的故障检测和自动升级,多维度助力用户降低运维负担;
结合腾讯云内部云原生技术实践,对操作系统、运行时、kubernetes 进行全方位参数调优和适配,节点初始化稳定性显著增强;
DevOps 是一种软件交付的理念和方法。从名字可以看出,DevOps 将开发(Development)和运维(Operations)结合在了一起。不过,DevOps 所代表的理念和实践要比这广阔的多。
DevOps 关注的是如何实现应用程序的全生命周期(开发,测试,运维)自动化管理,从而实现更快速、更高质量、更频繁、更稳定的软件交付。DevOps 团队通常会使用微服务架构来构建应用程序,借助于持续集成和持续部署(CI/CD)来实施 DevOps。
Service Mesh(服务网格) 是 CNCF 推广的新一代微服务架构,是微服务时代的 TCP 协议,致力于解决微服务架构下的服务管理问题比如服务发现、负载均衡、服务监控,提供开箱即用的运维能力比如金丝雀发布、访问控制。
你可以将 Service Mesh 看作是为了简化开发工作专门抽象出来的一层,通常作为透明的一层接入到现有的分布式应用程序里。
服务网格的实现依赖于 Sidecar。这是一轻量级的网络代理,与应用程序部署在一起,但对应用程序来说是透明。所有应用程序间的流量都会通过 Sidecar,这样的话,它就可以对所有流入与流出的网络请求进行拦截处理,进而实现服务发现、负载均衡、服务监控、金丝雀发布等功能。
如下图所示,Sidecar 连接成网状结构,组成了 Service Mesh。
Istio 和 Linkerd 是目前比较流行的服务网格解决方案,都是开源软件。
十二要素应用程序定义了构建一个优雅的互联网应用需要遵循的一些基本原则和方法论,也被用来指导开发者构建专为云环境优化的应用程序。
基于这些基本原则和方法论构建的系统,可以快速部署(适合云上部署)、快速扩展,可移植性和可维护性也增强不少。
十二要素应用程序内容如下图所示。
《超越十二要素应用》这本书补充了反映当今新式云应用程序设计的三个额外要素。
云原生就是在云中构建、运行应用程序的一套完整的技术体系和方法论。
对于开发者来说,云原生提供的一些开箱即用的能力可以帮助我们更高效地进行开发。你不需要再花精力搭建复杂的持续交付环境,敏捷基础设施(如 K8S、Docke)开箱即用,自带一站式微服务开发解决方案。在不久的将来,掌握云原生技术会成为发者必备的能力之一。
下面是云原生时代开发者必须掌握的一些能力:
微服务(更适合云原生的一种架构模式)
容器(一次构建,到处运行)
Kubernetes(自动部署、扩缩和管理容器化的应用程序)
DevOps(实现应用程序的全生命周期自动化管理)
ServiceMesh(服务网格,新一代微服务架构)
十二要素应用程序(指导开发者构建专为云环境优化的应用程序)