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