【云原生】云原生:云计算的再升级
admin
2023-10-17 04:21:15
0
通过半年的时间,在现在的公司把产研流程、技术体系、基建能力整体落地,为了接下来的业务战略和技术战略,对现有的架构(考虑产品的快速上线,架构的普适性和扩展性考虑较少)需要进行优化调整。在创业公司不同在阿里的日子,大厂的技术优势是我们无法比拟的,从人员组织结构、资源成本管控、架构实施能力等多方面考虑,选择云原生之路。为了系统地了解云原生的体系,选择了老东家初版的《阿里云云原生架构实践》一书,阅读过程中的笔记总结做的比较详细,一是为了留下记录,二是为了对部门下属进行知识分享,为了把分享的范围扩大,在此地也会把笔记总结同步一份,欢迎专家和有兴趣的同学互相交流!

云原生(Cloud Native):分解为云(Cloud)、原生(Native),隐藏着计算(Computing)。云原生本质上是一种与云计算(Cloud Computing)相同的计算方式,因此,云原生实际是指云原生计算(Cloud Native Computing)。

一、云原生的概念

任何新的底层软硬件技术出现后,上层应用软件都需要很长一段时间才能够真正认识到新的软硬件给上层应用软件带来的价值,并开发新的软件架构,以便充分利用新软硬件的能力
例1:x86 CPU和服务器出现二十年后,以 CORBA、EJB、RPC、瘦客户端等为主的多层架构才逐步成为应用开发的主流架构
例2:2000年 FreeBSD 在 Jails 中提出容器技术,但真正得到大规模应用是2013年 Docker 兴起之后,应用层是几年之后基于容器的微服务架构

1、上云不是真正的云原生

早期上云操作,仅是讲在私有数据中心/IDC 中的应用,“搬”到云上。应用无需重写,只需要重新部署(云平台提供的计算、存储、网络等完全兼容应用迁移之前的计算环境)

  • 物理机部署 → 虚拟机部署
  • 本地化存储 → 兼容的块存储或者文件存储
  • 传统负载均衡 → SLB(Server Load Balance,服务器负载均衡)
  • MySQL → 云上数据库

从技术角度看,简单理解就是使用的技术或者产品进行“一对一”替换,本质上来讲,系统的架构没有变化,只是系统运行的平台和运维的技术体系发生了变化。而在分布式场景下需要解决的问题(稳定性、组件/服务之间的数据同步、高可用/容灾、CI/CD 自动化过程、资源利用率不高、端到端链路跟踪等)人需要自行解决

优点:应用整体成本(Total Cost of Ownership,TCO)因为采用按量付费的模式大幅度下降,且企业的 IT 指出从 CapEx(Capital Expenditure,资本性支出)模式转变为 OpEx(Operating Expense,管理支出)模式,IT 整体支出变得更可控

在阿里的那么多年,确确实实经历了从上云到真正云原生的过程,整个过程也清晰体会到云原生架构的演进和升级

2、Heroku 十二因子应用

Heroku 2011年提出十二因子应用的概念,适用于任何编程语言,被普遍认为是最早的云原生应用的技术特征

软件通常会作为一种服务来交付,被成为网络应用程序,或软件即服务(SaaS),12-Factor 为构建 SaaS 应用提供了方法论:

  • 使用标准化流程自动配置,从而使新的开发中花费最少的学习成本加入项目
  • 和操作系统之间尽可能地划清界限,在各个系统重提供最大的可移植性
  • 适合部署在现代的云计算平台,从而在服务器和系统管理方面节省资源
  • 将开发环境和生产环境差异降至最低,并使用持续交付实施敏捷开发
  • 可以在工具、架构和开发流程不发生明显变化的前提下实现扩展

以上方法论适用于任意语言和后端服务(数据库、消息队列、缓存等)开发的应用程序

12-Factor:

  • 基准代码:一份基准代码,多份部署
  • 依赖:显式声明依赖关系
  • 配置:在环境中存储配置
  • 后端服务:把后端服务当做附加资源
  • 构建/发布/运行:严格分离构建和运行
  • 进程:以一个或多个无状态进程运行应用
  • 端口绑定:通过端口绑定提供服务
  • 并发:通过进程模型进行扩展
  • 易处理:快速启动和优雅中止可最大化健壮性
  • 开发环境与线上环境等价:尽可能的保持开发、预发布、线上环境相同
  • 日志:把日志当做事件流
  • 管理进程:后台管理任务当做一次性进程运行

3、CNCF 定义

云原生是一种可以充分利用云计算优势构建和运行应用的方式。云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式API。这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术使工程师能够轻松地对系统做出频繁和可预测的重大变更

4、云原生相关概念的关系





所有云原生应当包括云原生技术、云原生产品、云原生架构以及构建现代化应用的开发理念:

  • 云原生产品和云原生技术需要基于公有云、私有云或混合云的云基础设施(IaaS)
  • 云原生架构和云原生开发理念是基于云原生技术和产品构建或实现的
  • 现代化应用和云原生应用是基于云原生的架构和开发理念构建实现的

二、云原生是云计算的趋势

1、技术发展趋势角度

国家正常和企业需求的双重驱动下,更多企业广泛应用云原生技术,中国云计算的强势增长是必然趋势

2、软件开发角度

云原生技术为企业带来更快进行企业创新的价值。云服务的专业性和高 SLA,让企业在数字化转型的过程中将 IaaS 和 PaaS 的通用技术复杂性委托给了云平台,从而能够更好地专注于自身业务逻辑的创新。利用云原生技术重塑企业的软件生产流水线,可以加大业务组件的复用程度,将软件交付周期从周、天降低到小时甚至分钟级别,从而提升业务的市场嗅觉灵敏度,增强市场反应能力

3、应用技术栈角度

传统的应用已经无法满足数字化业务的需要,所以会对应用进行彻底升级,会更多地采用云原生技术和云原生架构作为构建现代化应用的核心框架,从而帮助企业打造具备弹性、韧性、可观测性、API驱动、多语言支持、高度自动化、可持续交付等特性的现代化应用软件

三、云原生是云计算的再升级

1、重塑研发流水线

企业追求持续发布,但是持续发布面临诸多挑战:

  • 配置基线
  • 版本管理
  • 自动化

特别当应用具有多个不同的硬件环境、OS 或第三方依赖时,问题频出,如:测试环境 OK,生产不行

而容器可用于对制品进行打包和分发,结合 GitOps 和不可变基础设施,可以实现软件运行环境的整体化部署

  • 自动化:任何变更提交 Git,经过版本管理后重新持续集成,形成新版本制品并进行部署
  • 版本跟踪:关于运行环境的所有变更都有迹可循
  • 回溯机制:如果出现异常,可根据 Git 记录进行回滚至上一个正常的版本

2、重新定义软件交付模式

传统软件交付模式




云原生软件交付模式




3、运维模式的升级

传统运维是面向操作的运维,本质上是基于规则的运维,即运维人员根据实现准备好的规则,在规则前置条件都满足的情况下采取相应的运维操作,只要是人工就会存在遗漏和操作错误的风险,而风险和故障带来的经验教训继续被规则化,导致运维无法形成完整的闭环,难以持续优化

云原生的运维是面向观测数据的自动化运维,基于标准化基础设施的运维,通过完整的可观测性实现系统中各类异常的实时可见

4、应用架构的升级

云原生技术的两种使用方式:

  • re-platform:不重构代码的情况下,尽量采用云原生技术
  • re-build:重构甚至重写应用

5、组织结构的升级

一个企业中的 IT 文化,实际上是开发、运维等IT人共同认可和遵守的工作流程、知识体系、工具集的总和

云原生作为一种全新的计算模式,带来了工具集的升级、知识体系的更新和工作流程的改变,也变更了企业的 IT 文化。在这个过程中,可能会出现很多问题,比如,有人会因为不愿意接受改变而产生抵制情绪(惯性),因为对新知识掌握不牢而导致各种失误,从瀑布模型到DevOps不适应,产生新的技术债务,甚至部分岗位会被淘汰(如大机运维人员)和产生新的岗位(如 SRE,Site Reliability Engineer,网站可靠性工程师)

四、构建现代化应用

1、现代化应用的特点

  • Web Scale(弹性):应用可以随着业务峰值自动扩展,具备应对 Web Scale 流量的水平扩缩容能力
  • 可观测和度量:应用具备很强的可观测性,具备服务调用、服务提供的细颗粒度的 SLA 度量
  • 高可用和容灾:任何主机的故障,都不会对业务的可用性带来影响
  • 灰度发布:应用可以根据机器、分组、用户组、地理位置等多个属性进行灰度升级
  • 可管理:具备版本机制,通过标准 API 集成,符合配置管理的最佳实践
  • API 优先:所有的应用都基于 API 生态,任何组件都提供了 API 和 SLA
  • 容器技术:生产流水线和应用基于容器构建
  • 灵活选择语言:云原生架构的应用可以自由选用自己认为开发速度最快的语言
  • 微服务架构:按领域把复杂的软件细分为多个微服务,每个领域分别进行迭代,通过标准化接口来规定服务间的访问
  • 无状态的应用:通过收敛和云服务重新设计有状态组件,让应用具备横向扩展能力
  • DevOps:采用 DevOps 而不是瀑布模型构建应用,利用 CI/CD 提升发布频率
  • 自动化交付和运维:利用 GitOps、OAM(Open Application Model,开放应用模型)、不可变基础设施等云原生理念进行自动化交付和运维
  • 策略驱动:软件的配置、运行、升级等策略也是一种声明式描述
  • 认证和鉴权:应用天生带有认证、鉴权的安全体系,数据在传输和保存前加密,以防止信息从内部泄漏

2、云原生架构给企业带来的价值

  • 创新速度加快:依托云基础设施,构建“小步快跑”的微服务化应用,实现模块化迭代和快速试错,同时将每次业务升级的负面影响降到最低;此外,自动化流水线、API集成、业务持续发布,可以帮助内部技术和业务团队之间形成更紧密的合作
  • 用户体验提升:数字时代强调差异化、个性化的用户体验,业务上实现“千人千面”,不仅要求企业在业务上不断推陈出新,还要求企业可以利用云平台强大的计算能力,对用户进行全域的用户体验管理;此外,云原生应用具备更高的可用性、更低的延迟和更好的质量,可以减少数字时代用户的使用障
  • 成本优化:从购买一大堆软硬件到云资源按量付费模式,只要在业务需要的时候开通对应的服务即可,减少企业的资本性支出(CapEx),将其中的一部分转换到管理支出(OpEx);同时,由于云服务具备“永远在线”的特性,因此业务的运维成本、风险成本都得以下降,最终实现整体成本的降低
  • 业务风险降低:数字时代对安全的诉求进一步提升,安全需求不仅包括抵御各类黑客攻击、减少隐私泄露、监管合规、舆情监控等,还包括防欺诈、数据泄露响应、调查取证、业务资损等内容。云服务提供商虽然不能 100% 保证所有数据的安全,但在数据安全方面做得最好,因为云厂商持有最大的数据中心,每天要面对成千上万次的攻击,以及TB级的流量风暴,每年需要修复数十万的各类安全漏洞等,所以积累了丰富的经验。通过众多云产品和解决方案,云厂商为业务提供了从硬件、网络、软件服务、账号等到数据、运营、业务等多个层面的安全保护,并且能够满足等保三级 & 四级、ISO 27001、CSA STAR、ISO 20000、SOC等的合规性要求
  • 人才结构:原生技术的大量应用,使企业内部的分工发生了变化,由于大量管理服务(Managed Service)的使用,IaaS、PaaS层组件的运维人员会不断减少,最典型的就是数据库管理员、硬件运维工程师等将会大量减少;总体上,企业内非业务核心的IT人员会不断减少,相应的成本支出会逐步转移到业务的核心相关人员上

相关内容