提升云原生时代程序员能力:必备技能与技术探讨
在当今技术快速发展的时代,云原生已成为一个引人注目的概念,它根本改变了我们开发、部署和管理应用程序的方式。随着越来越多的编程语言和框架开始支持云原生,像Spring推出了专门面向云原生的Spring Native,RedHat则开源了Java云原生服务框架Quarkus。这一趋势使得越来越多的企业选择在云端构建和运行其应用程序,在招聘市场上,云原生工程师的需求急剧增加,薪资水平也相应提高。
云原生相关岗位的兴起
作为开发者,我们与云原生息息相关,进入云原生时代的趋势已成为不可逆转的潮流。尽管许多读者对云原生的概念还不甚了解,本篇文章将探讨以下几个重要问题:
- 云原生的定义是什么?
- 云原生的优势有哪些?
- 在云原生时代,开发者必须掌握哪些技能?
云原生的定义
什么是云原生? 目前尚无一个确切的定义,但常见的误解有两个:
- 云原生等于容器;
- 云原生只是将应用程序部署到云端。
从字面上看,云原生(Cloud Native) 可以拆解为 Cloud + Native:
- "Cloud"表示应用程序在云环境中部署;
- "Native"则强调应用程序自设计之初便是为云环境而开发,充分利用云平台的弹性和分布式特点,提高资源利用率,缩短开发周期。
总而言之,云原生是一个在云环境中构建和运行应用程序的完整技术体系和方法论,当前这一技术体系主要包括 微服务、DevOps、持续交付、和容器化。
云原生计算基金会(CNCF)是云原生领域的权威组织,提供了云原生的官方定义:
- 云原生技术使组织能够在新式动态环境(如公有云、私有云和混合云)中构建和运行可伸缩的应用程序。
- 代表性技术包括容器、服务网格、微服务、不可变基础设施和声明式API,这些技术能够构建容错性强、易于管理且便于监控的松耦合系统。通过可靠的自动化手段,云原生技术使工程师能够轻松地对系统进行频繁且可预测的重大更改。
云原生基础设施
最近,我观看了腾讯技术开放日(Techo Day)的直播,腾讯云副总裁黄俊洪对云原生的定义也给出了很好的解释:
上云与云原生并不是一回事。 上云仅是将基础设施搬到云端,而云原生更深入,它依赖于云的弹性伸缩能力和按需付费模式,实现云上的开发、运维、测试和部署等生命周期,通过充分利用云计算的红利,才是真正的云原生。
许多国内云服务厂商早在几年前就已经开始在云原生领域发力。腾讯的自研业务如今已全面上云,QQ、微信、腾讯会议、腾讯视频、王者荣耀等常用产品均已基于云原生进行了技术改造,技术积累日益深厚,提供的云原生产品也愈加稳定和成熟。
对于个人或企业想要上云,建议选择规模较大的云厂商,因为他们提供的云原生服务能力更为成熟和稳定。腾讯云的产品体系尤其完善,能够提供完整的云原生应用开发和交付解决方案,涵盖软件研发流程、计算资源、架构框架、数据存储和处理等多个领域。
我个人使用过腾讯云的云原生产品,使用体验良好。所需功能基本都能满足,而且这些产品操作简单,使用文档详尽,对开发者非常友好。未来,云原生产品将更加丰富和完善。如腾讯云副总裁刘颖所说,云原生技术的落地将带来许多新机会,结合分布式云技术,企业能够更灵活地使用云计算。
云原生的优势
在探讨云原生的本质时,我们也提及了其优势。这里从两个方面进行归纳总结:
- 对于应用程序,云原生能加快开发和上线速度。应用程序可以实时、稳定、频繁地进行部署,而无需完全重新部署。此外,针对特定服务进行扩缩容,有助于节省资源。
- 对于开发者,云原生提供的开箱即用功能,如服务治理能力、DevOps,可以显著提高开发效率。开发者无需再花费精力搭建复杂的持续交付环境,敏捷基础设施(如K8S、Docker)开箱即用,提供一站式微服务开发解决方案。
未来,掌握云原生技术将成为开发者必备的技能之一。
黄俊洪也给开发者提了一些建议:
对于开发者,我们提供了许多云化的能力来提升效率,让大家更专注于业务开发。可以预见的是,云原生将成为未来开发者必备的能力之一,甚至在求职时不懂云原生可能会面临一些困难。
在具体能力方面,微服务的拆分能力、容器化改造能力、服务治理能力和DevOps能力,都是开发者需要掌握的重要技能。云原生知识的积累和储备对开发者而言尤为关键。
对于希望职业生涯更进一步的朋友们,建议考虑云原生相关的岗位。当前正是进入这一领域的良好时机,云原生工程师的需求极为旺盛,薪资也颇为可观。
云原生时代开发者必备技能
微服务
由于单体架构承载着庞大的业务,内部逻辑复杂,扩展性差,因此需要将单体架构拆分为更松散、模块更内聚的微服务架构。每个微服务在独立线程下运行,通过轻量级通信机制(如REST)相互交流。不同微服务可以使用不同技术栈和存储技术。
微服务独立部署后,修改某个服务时只需重新部署该微服务,无需重新部署整个系统。不同的微服务所承受的访问压力各异,可以对特定微服务进行扩缩容,从而节省资源和成本。
微服务架构下,服务治理是一个不可忽视的挑战。业界缺少一个支持多语言、框架无关且适用于异构基础设施的服务治理标准实现。
腾讯云在Techo Day发布了一款重量级产品 TSE Polarismesh(北极星),可以帮助我们解决这些问题。它是一款功能全面的服务治理中心,支持多种语言(如Java、Go、C/C++)与异构基础设施,且与具体部署架构、网络和存储架构无关。
TSE Polarismesh可以看作是一站式的分布式和微服务架构解决方案,开箱即用,提供服务注册与发现、服务配置、限流、熔断、降级、动态路由等能力。此前分享的 Spring Cloud Tencent 的核心也依赖于北极星。
北极星能力概览
在考虑是否要采用某项技术时,稳定性总是首要因素。目前,北极星在腾讯内部的服务注册数量超过百万,日接口调用量超过十万亿,经过大规模验证,其通用性和稳定性得到了充分体现。
网关
网关是微服务架构的流量入口,负责认证授权、请求分发、限流、API管理和负载均衡等,是微服务架构中至关重要的组成部分。因此,特意单独提及网关。
Kong是业界最常用的微服务网关,成熟稳定,具有高性能和高可用性,且支持丰富的插件。
大多数云厂商提供的网关能力均支持Kong。例如,腾讯云新推出的 TSE 云原生网关 Kong 是一款100%兼容开源Kong网关API的托管产品,开箱即用,能够有效降低用户自建网关的开发及运维成本。
容器
在容器技术诞生之前,正常部署的应用程序在生产环境中常常会出现问题,需要耗费数天时间修复各种部署错误。而有了容器技术后,这一问题得以解决。容器通过操作系统虚拟化,为应用程序提供环境兼容性和平台无关性。
容器技术是云原生发展的基石,Docker等容器工具提出了“一次构建,到处运行”的口号。
市场上有许多容器平台和工具,Docker占据了最大的市场份额,并已成为打包、部署和运行云原生应用程序的事实标准。
Kubernetes
对于一些大型项目,应用程序的部署可能涉及成千上万台容器。在这种情况下,人工部署和管理容器的方式变得不切实际。
因此,由Google主导开发的Kubernetes(简称K8s)应运而生,它旨在简化容器化应用程序的自动部署、扩缩和管理,减少重复劳动和出错的可能性。
K8s被称为云原生时代的操作系统,其所提供的功能与云原生应用的优势息息相关。
一个有效的Kubernetes部署称为集群,可以将Kubernetes集群视作两个部分:
- 控制平面:容器编排层,提供API和接口以定义、部署和管理容器的生命周期。
- 节点:由控制平面管理,集群中通常会有若干个节点,每个节点都有独立的Linux环境,既可以是物理机,也可以是虚拟机。一个节点内通常运行有多个容器。
为了提升节点资源利用率并解决维护和资源规划等运维问题,一些云厂商在Kubernetes基础上提供了各自的解决方案。例如,腾讯云推出的 TKE HouseKeeper原生节点。
HouseKeeper的产品能力特点包括:
- K8s运维新范式:提供基础设施声明式API,像管理workload一样管理节点,可通过Kubernetes API、云API和控制台三种方式管理节点;
- 自研智能运维系统:支持操作系统、运行时及K8s层面的故障检测和自动升级,帮助用户降低运维负担;
- 结合腾讯云内部的云原生技术实践,对操作系统、运行时及Kubernetes进行全方位参数调优和适配,显著提升节点初始化的稳定性。
DevOps
DevOps是一种软件交付的理念和方法。顾名思义,DevOps将开发(Development)与运维(Operations)结合在一起,然而其代表的理念和实践远不止于此。
DevOps关注实现应用程序全生命周期的自动化管理,包括开发、测试和运维,旨在实现更快速、更高质量、更频繁和更稳定的软件交付。DevOps团队通常会使用微服务架构来构建应用程序,并依赖于持续集成和持续部署(CI/CD)来实施DevOps。
Service Mesh
Service Mesh(服务网格)是CNCF推广的新一代微服务架构,旨在解决微服务架构下的服务管理问题,如服务发现、负载均衡和服务监控,并提供开箱即用的运维能力,例如金丝雀发布和访问控制。
可以将Service Mesh视为为了简化开发工作而特别抽象的一层,通常作为透明的层接入现有的分布式应用程序。
服务网格的实现依赖于Sidecar,一个轻量级的网络代理,与应用程序共同部署,对应用程序透明。所有应用程序间的流量都会通过Sidecar,从而实现服务发现、负载均衡、服务监控和金丝雀发布等功能。
Sidecar连接成网状结构,形成Service Mesh。
目前,Istio和Linkerd是较为流行的服务网格解决方案,均为开源软件。
十二要素应用程序
十二要素应用程序定义了构建优雅互联网应用所需遵循的一系列基本原则和方法论,旨在指导开发者构建专为云环境优化的应用程序。
基于这些原则构建的系统具有快速部署的特性(适合云上部署),并具备良好的扩展性、可移植性和可维护性。
十二要素应用程序的具体内容如下图所示。
《超越十二要素应用》这本书补充了当今新式云应用程序设计的三个额外要素。
总结
云原生是一套完整的技术体系和方法论,旨在在云环境中构建和运行应用程序。对于开发者而言,云原生提供的开箱即用的能力使得开发过程更加高效,无需再投入精力搭建复杂的持续交付环境,敏捷基础设施(如K8S、Docker)开箱即用,自带一站式的微服务开发解决方案。在不久的将来,掌握云原生技术将是开发者必不可少的能力之一。
以下是云原生时代开发者必须掌握的能力:
- 微服务(更适合云原生的一种架构模式)
- 容器(一次构建,到处运行)
- Kubernetes(自动部署、扩缩和管理容器化的应用程序)
- DevOps(实现应用程序全生命周期的自动化管理)
- Service Mesh(服务网格,现代微服务架构)
- 十二要素应用程序(指导开发者构建专为云环境优化的应用程序)