文章图片
最近在考虑从云原生角度去做一些架构维度的改造。但之前关注的在于平地而起的理想态云原生方案,基于存量架构来说就比较复杂了,比如如何衔接现有系统存量能力,低成本接入,同时还可以吃到技术升级的红利。
非常多的人在讨论云原生,那什么是云原生?解决什么问题?
上云的目的是利用云平台的优势,比如按需分配、弹性伸缩都是云原生的关注点,但应用程序并不能轻松的上云。所以想要应用程序可以利用云平台的优势,就需要对应用系统进行云原生改造。
那么什么是云原生?
Pivotal给出的云原生应用的几个特征可以参考,符合12因素应用、面向微服务架构、自服务敏捷架构、基于API协作及抗脆弱性。
其实云原生是一个思想集合,云原生技术包括技术维度、应用管理维度、企业管理维度等。
- 技术维度:微服务、敏捷基础设施
- 应用管理维度:DevOps、持续交付
- 企业管理维度:康威定律
更细化的架构维度特质包括:
1. 模块化应用
2. 可观测性
3. 可部署性
4. 可测试性
5. 可处理性
6. 可替换性
归纳下来即,DevOps、持续交付、微服务、容器化。
文章图片
那CNCF对云原生定义是什么呢?
包含三个方面:
1. 应用容器化
2. 面向微服务架构
3. 应用支持容器的编排调度
由于CNCF是以K8s为底座的,所以其关于云原生定义的概念主要围绕于上云,即:通过云原生实现各组织在公有云、私有云、混合云等新动态环境下,构建可扩展的弹性应用,涉及到容器、服务网格、微服务、不可变基础设施、声明式API。
通过以上技术可以构建更具容错性、易于管理、便于观察的松耦合系统。
文章图片
容器
说不太好是容器推进了云原生,还是云原生推进了容器发展。起码以目前看,容器是云原生下最关键的技术,有了Docker,整个云原生才找到了正确的打开方式。
Docker背后代表了基于镜像的动态交付,依赖于新型的应用打包、分发、运行机制。将容器镜像将应用运行时环境、代码、依赖库、工具、资源文件等打包成一种操作系统无关的变更软件包。实现了buid once、run anywhere。
微服务
在微服务架构下,每个服务实例是独立可部署的组件,对外以API暴露能力,通过微服务实现了云原生下面的应用模块化要求,进而实现了服务之间的松耦合。
每个服务都可以独立开发、测试、验证、部署。
服务网格
服务网格主要提供的是服务之间通信的通信基础设施,保障了服务之间通信的可靠性传递。
做好服务网格的标准:
- 应用程序通信的中间层
- 轻量级网络代理
- 应用程序无感知
- 解耦应用程序的重试、超时、监控、追踪、服务发现
目前的服务网格实现的功能越来越多,包括服务发现、负载均衡、故障恢复、指标收集、监控告警等研发与运维需求,借助于Mesh方案可以实现,如AB测试、金丝雀发布、限流、访问控制、端到端认证等。
文章图片
不可变基础设施
我觉得这个是理念上的改变,一个工作负载的承担(容器、虚拟机)一旦部署之后不再进行修改。当需要更新、修复或修改时,只是将新的、经过验证的工作负载替换掉就得即可。
不可变基础设施主要体现在系统稳定性方面,传统的应用程序一旦部署到用户特定服务器上之后,服务器系统是会不断变化的,比如操作系统升级或在上面安装新应用,这样在其负载之上的应用稳定性就受到了挑战。
而一旦定义了不可变基础设施,就避免了类似的问题,因为他不存在了变化的问题了。
声明式API
与声明式API对应的是命令式API。命令式API提供给用户怎么做,声明式API是给用户提供了做什么的能力,简单理解,前者是确定性rest api,后者是dsl。
其背后体现的是API背后能力的扩展性与弹性。
技术之外的事情
【java|云原生解决什么问题()】云原生除了对应用系统做了技术维度优化之外,还在流程与组织维度做了优化。它解放了开发和运维,让研发与运维的工作变得简单。云原生还关注于规模,让分布式系统具备了水平扩展能力,同时具备了故障之后的快速恢复能力。
推荐阅读
- #|Java 根据模板文件生成新的PPT
- docker|京东挂机 青龙面板的安装与使用2022年3月1日
- Docker|Docker 常见镜像问题
- Docker|Docker 常见配置相关问题
- Docker|Docker第五篇【容器数据卷、匿名和具名挂载、DockerFile】
- Docker学习|Docker 容器数据卷
- git|qinglong青龙面板使用
- docker|docker 容器数据卷+具名挂载匿名挂载
- Docker|Docker第四篇【Docker镜像原理、commit镜像】