通过半年的时间,在现在的公司把产研流程、技术体系、基建能力整体落地,为了接下来的业务战略和技术战略,对现有的架构(考虑产品的快速上线,架构的普适性和扩展性考虑较少)需要进行优化调整。在创业公司不同在阿里的日子,大厂的技术优势是我们无法比拟的,从人员组织结构、资源成本管控、架构实施能力等多方面考虑,选择云原生之路。为了系统地了解云原生的体系,选择了老东家初版的《阿里云云原生架构实践》一书,阅读过程中的笔记总结做的比较详细,一是为了留下记录,二是为了对部门下属进行知识分享,为了把分享的范围扩大,在此地也会把笔记总结同步一份,欢迎专家和有兴趣的同学互相交流!
云原生(Cloud Native):分解为云(Cloud)、原生(Native),隐藏着计算(Computing)。云原生本质上是一种与云计算(Cloud Computing)相同的计算方式,因此,云原生实际是指云原生计算(Cloud Native Computing)。
任何新的底层软硬件技术出现后,上层应用软件都需要很长一段时间才能够真正认识到新的软硬件给上层应用软件带来的价值,并开发新的软件架构,以便充分利用新软硬件的能力
例1:x86 CPU和服务器出现二十年后,以 CORBA、EJB、RPC、瘦客户端等为主的多层架构才逐步成为应用开发的主流架构
例2:2000年 FreeBSD 在 Jails 中提出容器技术,但真正得到大规模应用是2013年 Docker 兴起之后,应用层是几年之后基于容器的微服务架构
早期上云操作,仅是讲在私有数据中心/IDC 中的应用,“搬”到云上。应用无需重写,只需要重新部署(云平台提供的计算、存储、网络等完全兼容应用迁移之前的计算环境)
从技术角度看,简单理解就是使用的技术或者产品进行“一对一”替换,本质上来讲,系统的架构没有变化,只是系统运行的平台和运维的技术体系发生了变化。而在分布式场景下需要解决的问题(稳定性、组件/服务之间的数据同步、高可用/容灾、CI/CD 自动化过程、资源利用率不高、端到端链路跟踪等)人需要自行解决
优点:应用整体成本(Total Cost of Ownership,TCO)因为采用按量付费的模式大幅度下降,且企业的 IT 指出从 CapEx(Capital Expenditure,资本性支出)模式转变为 OpEx(Operating Expense,管理支出)模式,IT 整体支出变得更可控
在阿里的那么多年,确确实实经历了从上云到真正云原生的过程,整个过程也清晰体会到云原生架构的演进和升级
Heroku 2011年提出十二因子应用的概念,适用于任何编程语言,被普遍认为是最早的云原生应用的技术特征
软件通常会作为一种服务来交付,被成为网络应用程序,或软件即服务(SaaS),12-Factor 为构建 SaaS 应用提供了方法论:
以上方法论适用于任意语言和后端服务(数据库、消息队列、缓存等)开发的应用程序
12-Factor:
云原生是一种可以充分利用云计算优势构建和运行应用的方式。云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式API。这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术使工程师能够轻松地对系统做出频繁和可预测的重大变更
所有云原生应当包括云原生技术、云原生产品、云原生架构以及构建现代化应用的开发理念:
国家正常和企业需求的双重驱动下,更多企业广泛应用云原生技术,中国云计算的强势增长是必然趋势
云原生技术为企业带来更快进行企业创新的价值。云服务的专业性和高 SLA,让企业在数字化转型的过程中将 IaaS 和 PaaS 的通用技术复杂性委托给了云平台,从而能够更好地专注于自身业务逻辑的创新。利用云原生技术重塑企业的软件生产流水线,可以加大业务组件的复用程度,将软件交付周期从周、天降低到小时甚至分钟级别,从而提升业务的市场嗅觉灵敏度,增强市场反应能力
传统的应用已经无法满足数字化业务的需要,所以会对应用进行彻底升级,会更多地采用云原生技术和云原生架构作为构建现代化应用的核心框架,从而帮助企业打造具备弹性、韧性、可观测性、API驱动、多语言支持、高度自动化、可持续交付等特性的现代化应用软件
企业追求持续发布,但是持续发布面临诸多挑战:
特别当应用具有多个不同的硬件环境、OS 或第三方依赖时,问题频出,如:测试环境 OK,生产不行
而容器可用于对制品进行打包和分发,结合 GitOps 和不可变基础设施,可以实现软件运行环境的整体化部署
传统软件交付模式
云原生软件交付模式
传统运维是面向操作的运维,本质上是基于规则的运维,即运维人员根据实现准备好的规则,在规则前置条件都满足的情况下采取相应的运维操作,只要是人工就会存在遗漏和操作错误的风险,而风险和故障带来的经验教训继续被规则化,导致运维无法形成完整的闭环,难以持续优化
云原生的运维是面向观测数据的自动化运维,基于标准化基础设施的运维,通过完整的可观测性实现系统中各类异常的实时可见
云原生技术的两种使用方式:
一个企业中的 IT 文化,实际上是开发、运维等IT人共同认可和遵守的工作流程、知识体系、工具集的总和
云原生作为一种全新的计算模式,带来了工具集的升级、知识体系的更新和工作流程的改变,也变更了企业的 IT 文化。在这个过程中,可能会出现很多问题,比如,有人会因为不愿意接受改变而产生抵制情绪(惯性),因为对新知识掌握不牢而导致各种失误,从瀑布模型到DevOps不适应,产生新的技术债务,甚至部分岗位会被淘汰(如大机运维人员)和产生新的岗位(如 SRE,Site Reliability Engineer,网站可靠性工程师)