何为云原生
经常见和说这个词,但让具体说说云原生的定义的话又说不出个所以然......
本文参考《阿里云云原生架构实践》
目录:
何为云原生0. 定义1. 云原生应用2. 云原生计算2.1 云原生架构2.2 云原生开发理念2.3 云原生产品2.4 云原生技术3. IaaS(公有云/私有云/混合云)
0. 定义
云原生即云原生计算,来自CNCF的定义如下:
云原生技术有利于各组织再公有云、私有云、混合云等新型动态环境中构建和运行可弹性扩展的应用。
云原生的代表技术包括容器、服务网格、微服务、不可变基础设施、声明式API。
这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术使工程师能够轻松的对系统做出频繁和可预测的重大变更。
云原生可以分为三大概念:
1. 云原生应用
就内容而言,优秀的云原生应用一般拥有:
-
整洁的代码:编写良好的代码
-
DDD:无处不在的领域模型
-
微服务原则:为了适应变化而优化过的服务
-
k8s模式:大规模自动化容器
2. 云原生计算
2.1 云原生架构
和传统架构相比,区别在于两方面:
-
剥离非业务代码,让云设施接管非功能性特性(例如,弹性、韧性、安全、可观测、灰度)
-
将资源以及相应的自动化部署和运维能力交由云基础设施执行(资源包括:计算、存储、网络等)
包含:
-
Service
服务化设计原则是指通过服务化架构拆分不同生命周期的业务单元。采用面向接口编程方式;强调在架构层面抽象化业务模块之间的关系。
服务化拓展:
a. 功能划分:单体->微服务
b. 水平扩展:复制扩展
c. 数据分区:通过拆分相同数据进行扩展,比如按照用户ID
-
EDA(事件驱动架构)
将比较重要的业务时刻封装成“事件”,并通过某个 EventBus 将事件路由给下游系统。
2.2 云原生开发理念
-
DevOps
即透过自动化“软件交付”和“构建变更”的流程,来使得构建、测试、发布软件能够更加快捷、频繁和可靠。
-
自动化发布管道、CI工具
-
快速部署到生产环境
-
开发、运维协同合作
-
-
GitOps
一种持续交付的方式。核心思想是将应用系统的声明性基础架构和应用程序存放在Git版本库中。
ps: 交付模式还有:利用容器做整体交付、声明式API、OpenAPI作为系统间的集成方式。
将Git作为”Single Version of Truth“(唯一真实版本)。Git作为交付和运维的仓库,记录了所有软件变更的版本、配置参数、脚本、用户名、密码等信息,同时所有的脚本、工具和k8s的Operator,都读取Git中的信息作为事实的唯一来源,即使是做版本升级或回滚,以及变更评审,都以Git中的信息为准。
-
12原则
-
基准代码
-
显式声明依赖关系
-
在环境中存储配置
-
把后端服务当作附加资源
-
严格分离构建、发布和运行
-
无状态进程
-
通过端口绑定提供服务
-
通过进程模型进行扩展
-
快速启动和优雅终止
-
开发环境与线上环境等价
-
日志作为事件流
-
管理进程
另外还有补充的三点:
-
API声明管理
-
认证和授权
-
监控与告警
-
2.3 云原生产品
-
Docker
-
k8s
2.4 云原生技术
-
容器
-
微服务
3. IaaS(公有云/私有云/混合云)
IaaS层基础资源云服务化是将计算、存储、网络等IaaS层基础资源完成云服务化,实现基础资源的同一管理、快速扩容、统一调度和自动分配。
网友评论