开发者学堂课程【云计算、容器和云原生基础课程第一课时:为什么要学习“云原生”技术(上)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/823/detail/13942
为什么要学习“云原生”技术?(上)
一、什么是云原生?
1、信息系统迭代的关键历程
(1)几个关键纬度
开发流程
应用架构
打包与部署
基础设施
(2)分布式应用
提升系统容量
加强系统可用性
2、分布式系统面临的问题
(1)技术手段:服务治理(依赖关系、调用链)、架构管理(版本管理、生命周期管理、编排、聚合、调度)、DevOps、自动化运维、资源调度管理、整体架构监控、流量治理(负载均衡、路由、熔断、...)
3、创建运行分布式应用的需求
(1)运行分布式应用的典型需求有如下几个类别
●生命周期管理
●网络
●状态管理
●绑定(应用集成)
(图中解释每个需求维度涉及到的技术细节点)
(2)ESB中间件及其变体是满足这类分布式需求的前一代主流解决方案
●提供良好的功能集
●但是,单体架构以及业务逻辑和平台之间紧密的技术耦合会导致的技术和组织的中心化
4、ESB分布式应用中间件的限制
(1)ESB满足分布式系统需求时的局限性
●生命周期:通常只支持的一个语言运行时,( 比如Java),这就限定了软件该如何打包、哪些库可用、它们打补丁的频率等
●网络:集中于一种主要的编程语言及其相关的技术,而且,网络问题和语义也深深地嵌入到了业务服务中
例如,对于Java语言,它就是指JMS、JDBC和JTA等
●状态:与状态交互的库和接口没有完全抽象出来,也没有与服务运行时完全解耦
●绑定:必须根据消息交换模式构造代码和设计流程
连接器必须与应用程序共存的事实意味着,依赖项必须与业务逻辑一起更新和打补丁
(2)云计算时代的解决方案:基于容器化、容器编排、DevOps、微服务及典型的治理系统服务网格等技术的云原生解决方案
5、云原生的定义
(1)( 2017年) Pivotal认为, 云原生具有如下四大特性:
●DevOps
●持续交付(CD)
●微服务
●容器化
2018年新增两个特性是:服务网格和声明式API
6、容器技术( Containers )和容器编排
(1)容器技术由来已久,dotCloud (后改名为Docker )公司在Docker项目中发明了“容器镜像”技术之后, 创造性地解决了应用打包的难题才焕发出新的生命力,并以“应用容器”的面目风靡于世。
(2)单个容器难以产生价值,容器编排才是根本
●Kubernetes是云原生系统的底座
(3)现代应用容器技术和Kubernetes将打包、分发和部署应用程序的方法演化成了与编程语言无关的格式。
7、Kubernetes和声明式API
(1)Kubernetes的关键特性
●容器编排系统
●声明式API
●“以应用为中心”的现代应用基础设施
纳管各类基础支撑类服务,并经由声明式API向上层应用暴露这些基础设施
●Platform for Platform类型的系统
根本目标在于方便基础设施工程师构建其它的平台系统
例如Service Mesh或Serverless等
8、微服务(MicroServices)
(1)微服务是一种流行的架构风格,用于构建弹性化、高度可扩展、可独立部署且能够快速迭代的应用程序
●微服务架构由一系列小型自治服务组成
●每个服务都是自包含的,应该在有界上下文中实现单个业务功能
9、微服务治理
(1)动态化是云原生应用的天然属性,微服务架构是支撑该目标的关键所在
(2)服务治理工具,又是支撑微服务运行的根本所在
●Dubbo
●Spring Cloud Alibaba
●ServiceMesh
10、服务网格(ServiceMesh)
(1)服务网格的定义
●专用于处理服务通讯的基础设施层
●负责可靠地完成请求传送,这些请求由复杂拓扑结构下的云原生应用组成服务生成
●是一组同应用服务协同部署的轻量级网络代理,并且对应用服务透明
11、Sidecar模式
(1)Service Mesh以Sidecar形式,将服务治理从业务逻辑中剥离,并拆解为独立进程,实现异构系统的统治理和网络安全。
12、不可变基础设施( immutable infrastructure)与一次性组件
(1)不可变基础设施是早在2013年由Chad Fowler在其一篇博客中提出的一个很有的预见性的构想
●其核心思想在于,任何基础设施的实例一-旦创建之后即变为只读状态,若需要修改和升级,只能通过替换为新的实例来实现
●传统的服务器(裸金属或虚拟机)支持配置的多次变更,因而通常会导致如下问题
◆灾难发生时,重新构建较为困难(因手动的变更操作所致)
◆存在导致状态不一 致的风险
(2)实现
●容器和容器镜像
●云端虚拟化组件