云计算可分为两个阶段:
云计算的发展阶段示意图:
云计算的上半场:云托管阶段-逐步替代传统的基础设施
数据:云计算已经普及国内70%的企业,95%的企业认为云计算能够降低IT成本,提高服务效率
传统的计算模式:当需要扩容时,就必须要添加新的硬件设备
云计算模式:当需要扩容时,云端自动调整容量
云计算下半场的挑战:云原生的挑战
云原生的目标:
云原生这个概念是随着云计算的普及深入及容器技术快速成熟,逐步发展而产生的
云原生的发展历程:
云原生的定义:不断更新
十二因子的应用定义
Pivotal提出的“Cloud Native”概念:云原生是一种可以充分利用云计算优势的构建和运行应用的方式
CNCF提出的云原生定义:云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式API
云原生是一种架构模式以及软件开发的新思想
云原生的架构图
云原生的作用及价值:释放云原生价值,推动行业数字化转型
云原生对软件开发模式及开发者的影响:云原生技术不断发展和改进
几种开发模式对比图:
云原生的适合对象:云原生的技术及理念,可以帮助大型企业及中小企业提高开发效能,降低运维成本,让企业更加专注业务发展本身
阿里云对云原生的定义
云原生的愿景:软件从诞生起就“生在云上、长在云上”、全新的软件开发、发布和运维模式
云原生使释放云计算红利的最短路径,其中有三层含义
云计算的下一站,就是云原生;IT架构的下一站,就是云原生架构;
云原生的理解
云原生是基于微服务原理而开发的应用,以容器方式打包,在运行时,容器由运行于云基础设施(PaaS或者叫云操作系统)之上的平台进行调度,应用开发采用持续交付和DevOps实践
云原生技术改变了传统的开发模式
传统应用结构图:
云原生应用结构图:
云原生的概念体系
云原生基金会
CNCF(云原生基金会)是目前云计算领域最成功的开源基金会之一,是Kubernetes,containerd,etcd,Envoy等知名开源项目的托管基金会
云原生技术社区
CNCF目前托管的20+正式项目共同构成了现代云计算生态的基石。其中Kubernetes项目是全世界第四活跃的开源项目
云原生技术产业
全球各大公有云厂商以及100+技术创业公司持续投入,总体市场于2021年逼近1000亿美元。
云原生的技术范畴
云原生技术学习主线解析
云原生的技术体系看似纷乱繁杂,但在不同视角都体现着“牵一发而动全身”的主线
云原生核心六大技术:
云原生的核心技术介绍
容器技术:为应用而生
容器作为标准化软件单元,它将应用及其所有依赖项打包,使应用不再受环境限制,在不同计算环境间快速、可靠地运行。
容器化的好处在于运维的时候不需要再关心每个服务所使用的技术栈,每个服务都被无差别地封装在容器里,可以被无差别地管理和维护。
容器技术核心价值:
几个重要的概念:
物理机:独占资源,特点:价格昂贵,交付时间几周
虚拟机:资源虚拟化,共享基础设施,特点:灵活、弹性,交付时间十几分钟到几天
容器:应用层虚拟化,共享操作系统内核,特点:部署密度高,秒级启动,弹性伸缩
主要的开源技术:
容器编排技术-Kubernetes容器编排的事实标准:容器的集群管理平台,云原生体系发展的基石
容器编排核心价值:
云原生微服务架构
单体架构:
单体架构的特点:
微服务架构:
微服务架构特点:
Serverless
“无服务器”简化云计算架构和编程模式,开发者不用关注服务器的问题,通过第三方后端提供计算服务执行
Serverless图示
Serverless特点:
Serverless架构:
DevOps:Development和Operations的组合词
DevOps的核心价值:
云原生的架构模式
企业架构演进示意图
云原生架构与传统架构的对比
传统软件架构:
从技术角度看:
云原生架构和传统架构的对比图
云原生架构中几种典型架构模式
典型的云原生架构反模式
云原生技术生态
CNCF是目前云计算领域最成功的开源基金会之一,是Kubernetes等知名开源项目的托管基金会。CNCF把云原生技术分为六层。
云原生核心六大技术
云原生架构模式
云原生架构相比较传统架构进了一大步,将业务代码中的大量非功能性特性剥离到 laaS和PaaS中
减少业务代码开发人员的技术关注范围
开发人员关注代码,底层通过专业性平台提升应用的服务能力
阿里云对云原生的断言:云原生成为释放云计算红利的最短路径
阿里云云原生的5个最
阿里云的云原生开源贡献:阿里是国内在云原生领域的开源贡献最全面的科技公司
阿里云的云原生产品家族图谱:
容器产品家族
微服务产品家族
阿里云微服务产品特点:
消息队列产品家族
Serverless产品
阿里云云效DevOps产品体系:企业级一站式DevOps平台
云原生产品的应用场景:弹性伸缩
容器服务可以根据业务流量自动对业务扩容/缩容,不需要人工干预,避免流量激增扩容不及时导致系统挂掉,以及平时大量闲置资源造成浪费。
云原生产品典型应用场景:DevOps持续交付
配合Jenkins帮您自动完成从代码提交到应用部署的DevOps完整流程,确保只有通过自动测试的代码才能交付和部署,高效替代业内部署复杂、迭代缓慢的传统方式
云原生产品典型应用场景:微服务架构
企业生产环境中,通过合理微服务拆分,将每个微服务应用存储在阿里云镜像仓库帮您管理。您只需迭代每个微服务应用,由阿里云提供调度、编排、部署和灰度发布能力
阿里云ACA云原生助理工程师认证50道真题,附部分答案和扩展
AHAS架构感知:
● 使用特征库泛识别进程所使用的技术组件
● 以可视化的方式呈现应用对基础架构的依赖关系
● 在服务器,容器和进程三个维度上以可视化的方式展示应用架构
一款专注于提高应用高可用能力的SaaS产品
● 以流量为切入点,从流量控制 熔断降级 系统负载保护等多个维度来保障业务的稳定性
● 从服务提供方或者消费服务方进行流量控制
● 强依赖:依赖服务出错影响整体流程
● 弱依赖:依赖服务出错不会影响整体流程
匀速请求实现同步调用的削峰填谷
● 给冷系统一个预热事件,避免系统被压垮
架构感知常用视图
● 云资源试图
● 应用试图
● Kubernetes资源视图
● 风险视图
和其他服务(基础设置 容器服务 应用服务 云资源)一起,构成高可用保障服务
● 安装探针
● 创建探针
● 执行演练
● 停止演练
动态管理代码中的配置项
● 步骤一:在代码中增加核心业务开关,植入埋点和业务逻辑
● 步骤二:在AHAS控制台功能开关中查看业务开关的信息和值分布
● 步骤三:在AHAS控制台开关中将此开关的推送值设为true
● 步骤四:在控制台上修改配置项,推送成功后,业务代码里会实时生效
代码中此开关变量值为true,表示可动态实时的通过功能开关控制业务逻辑
ARMS(Application Real-Time Monitoring Service)
一款阿里云应用性能管理(APM)类监控产品
可以基于前端 应用 业务自定义等维度,迅速便捷地为企业构建秒级响应的业务监控功能
APM(Application Performance Management 应用性能管理系统)
运用在分布式系统和微服务架构的应用,是一个可以实时监控的实时业务监控框架
● 用户体验
● 应用组件发现与建模
● 用户定制及多段交易关联
● 应用组件深入监控
● 应用性能分析:自学习 动态基线及性能预测
● 数据从哪来
● 实时计算流程怎么编排
● 数据该怎么用
● Java应用监控和诊断方案
● 用户体验监控场景
● 零售行业实时监控方案
● 车联网实时监控方案
● 缓存
○ 待定...
● 限流
○ 指当前端流量超过限流器设定的阈值时,限流器直接返回错误,避免后端服务被压垮
● 熔断降级
○ 熔断
■ 当服务调用请求后端应用时,发现过高失败率或响应时间过长,则暂时切断对下游服务器的调用,以免加重下游服务器的压力
○ 降级
■ 当服务调用者请求后端应用失败,或后端应用不稳定时,并不是简单的充实,等待或直接返回错误,而是寻求一种低水平的替代方案进行处理
● 削峰填谷
■ 把骤增的大量同步请求匀速分配
■ 以固定的间隔时间让请求通过,起到削峰填谷的效果
■ 从而避免流量骤增造成系统负载过高的情况
集组织文化 团队协作 工程实践和工具为一身的工作方式
● 组织架构与企业文化
● 自动化流水线
● DevOps工具集链
● 持续集成
● 持续交付
● 持续部署
● 需求管理
● 项目管理
● 代码管理
● 构建工具
● 持续集成
● 持续部署
● 自动化发布
● 配置管理
● 运营监控
● 容器及容器编排
● 质量防控
● 效率提升
● 数据度量
● 研发资产沉淀
● 研发模式多样化
● 平台的融合
● 平台化
● 标准化
● 自动化
● 可视化
● 项目协同
○ 精益及敏捷需求管理
○ 精益及敏捷交付协作
○ 精益及敏捷质量管理
● 代码平台
○ 代码提交
○ 代码扫描
○ 代码评审
○ 分支合并
● 流水线
○ 版本构建
○ 软件部署
○ 测试验证
○ 版本发布
● 知识库管理
○ 产品文档
○ 技术文档
○ 会议纪要
○ 总结沉淀
○ 知识分享
● 云效项目协作
○ 敏捷需求管理
○ 研发排期与过程跟踪
○ 研发效能反馈
● 云效代码管理
○ 核心功能
■ 阿里巴巴Java开发规约,代码补丁智能推荐,敏感信息监测,依赖包漏洞监测
■ 多种代码评审机制
○ 代码安全
○ 通用协作方案
● 云效流水线
○ 概念
■ 研发交付流水线,市持续交付的载体
■ 构建自动化 集成自动化 验证自动化 部署自动化
○ 什么市流水线
■ 自定义流程编排的工具
■ 通过构建 部署 测试 管控等组件化能力,把开发到交付的各项工作串联起来
■ 分为持续集成 持续发布
○ 持续交付流程
■ 编译构建
■ 开发验证
■ SIT验证
■ 预发验证
■ 上线审核
■ 生产发布
● 云效制品仓库
○ 制品仓库概念
■ 制品市软件交付的成果性产物,通常是可运行的二进制形式
■ 制品仓库又称为二进制制品仓库
■ 制品库在开发阶段为使用各种开发语言的微服务开发者提供依赖解析的唯一入口
○ 什么是云效制品仓库
■ 提供基于Maven Gradle Helm等软件包管理工具的企业级私有仓库服务
■ 用于康企业级依赖托管
■ 支持Maven制品和Helm charts制品
■ .....
● 云效测试管理
○ 什么是云效测试管理
■ 包含对测试计划与执行用例的创建 编辑 规划与关联等功能
■ 将测试计划与需求和缺陷一起进行管理
○ 云效测试管理的功能
■ 测试用例
■ 测试计划
■ 缺陷管理
■ 数据统计
○ 自动化最佳实践
■ 测试自动化用例存储在云效代码平台的git仓库中
■ 用于执行测试自动化的测试步骤,基于云效 的自定义step能力创建
■ 触发和串联代码 构建和自动化测试的云效流水线
■ 通知机制(钉钉消息)
■ 针对质量情况的数据报表(可以直接显示在流水线测试结果中,也可以将数据发送给自建的数据报表服务展示)
● 云效知识库
○ 企业知识管理系统
混沌工程:
● 在分布式系统上进行实验的学科
● 目的是建立对系统抵御生产环境中失控条件的能力以及信心
Rocket.MQ : 自研 商用 开源 三位一体的消息队列中间件
● 消息队列RocketMQ 阿里巴巴自研
● 消息队列RabbitMQ 支持RabbitMQ生态
● 消息队列Kafka
● 微消息队列MQTT
● 消息服务MNS 聚焦云产品生态集成 & 消息通知服务
● 事件总线EventBridge 提供中心化事件服务能力
● 实现分布式业务的最终一致性
○ 强一致性
■ 当更新操作完成所有数据立刻更新,根据CAP理论,需要牺牲可用性
○ 最终一致性
■ 所有的数据副本,在经过一段时间的同步之后,最终都能够完成更新,可满足高可用
○ 交易系统 支付红包等场景需要确保数据的最终一致性
● 实现计算和分布式缓存
消息轨迹查询内容
● 消息发送信息
● 消息到达信息
● 消息投递信息
● 消息消费信息
● 发送方式
● 订阅方式
● 接入协议
● 高级功能
● Name Server
○ Broker服务集群的注册中心
● Broker
○ 消息实际的接受转发服务模块
● 生产者,消费者
○ 服务模块的外部调用者
发布/订阅模型简介
● 普通消息
● 定时/延时消息
● 顺序消息
● 事务消息
● 该模式的Topic中,所有的消息严格按照FIFO原则进行消息发布和消费
● 适用于金融下单等场景
● 吞吐率不高
● 为每个消息设定一个sharding key作为分区字段
● 同一个sharding key的消息严格的按照FIFO原则进行消息发布和消费的场景
● 不同的sharding key可以交叉处理
● 该模式吞吐量高,适合企业场景
● 可靠同步发送
● 可靠异步发送
● 单向发送
速度:单向发送 》 异步同步
可靠性:异步同步》单项发送
在保证可靠性的同时,复杂模型发送速度:异步》同步》单项
● 适用于消费端集群化部署,每条消息只需被处理一次的场景
● 消费进度在服务端维护,可靠性更高
● 适合于消费端集群化部署,每条消息都需要被集群下的每个消费者处理的场景
● 实现消息队列可靠性和事务最终一致性的重要保证
● 消息生产者发送成功的消息,都会被持久保存
● 如果消息消费者消费失败,会在固定的时间重试
● 重试16次不成功的消息会进入死信队列,由开发者手动处理
● TCP 功能完整 吞吐量高
● HTTP 支持restful风格HTTP协议手法信息 功能受限
● MQTT,其中MQTT协议作为消息队列的MQTT
云原生是种架构模式及软件开发的新的思想理念
● 基本概念
○ 云原生是基于微服务原理而开发的应用,以容器方式打包,在运行时,容器由开发于云基础设置(PaaS或叫做云操作系统)之上的平台进行调度,应用开发采用持续交付和DevOps实践
● 容器
● 微服务
● DevOps
● 云原生是随着云计算概念的细化和思想升华,我们可以把云原生时代定义为云计算2.0
● 容器技术
● 容器编排技术
● 云原生微服务架构
● 云原生中间件
● Serverless无服务架构
● DevOps开发运营一体化
● 最丰富的云原生产品体系
● 最全面云原生开源贡献
● 最广泛的云原生客户群体
● 最大规模云原生应用实践
● 最高等级全球云原生评测
云原生架构相比传统架构进了一大步,将业务代码中的大量功能性特性剥离到Iaas和Paas中,从而减少了业务代码开发人员的技术关注范围,开发人员关注代码,底层通过专业性平台提升应用的服务能力
● 敏捷性
● 资源弹性
● 可移植性
● 容器部署与管理
● 容器网络自动化管理
● 容器弹性伸缩
● 支撑容器微服务架构
● 自动化CI/CD(持续集成)
● 容器安全管理
无服务器,开发者无需关注服务器的问题,通过第三方后端提供计算服务
● Serverless架构
○ Backend as a Service(BaaS) 后端即服务
○ Functions as a Service(Faas) 函数即服务
● 云原生是一条使用户能:低心智负担,敏捷的 以可扩展 可复制的方式 最大的利用云的能力,发挥云的价值的最佳路径
定时/延时消息
二进制
自动化部署
ACK Pro版集群适用场景
● 互联网企业
● 大数据计算企业
● 开展中国业务的海外企业
● 金融企业
不适合个人用户
ACK Pro最大支持5000个节点
● 可靠性强化集群
○ 更可靠的托管Master节点,API Server自动弹性,保障集群平滑过渡扩容
● 安全性强化集群
● 调度性强化集群
○ 集成更强调度性能的kube-scheduler
○ 优化在大规模数据计算,高性能数据处理等业务场景下的容器调度能力
Kubernates阿里云容器版,基于k8s的增强
● 基于Kubernetes 云原生技术
● 整合阿里云虚拟化 存储 网络和安全能力
● 提高高性能可伸缩的容器应用管理能力
● 简化集群的搭建和扩容等工作
● 集群管理
○ 集群形态:ACK / ACK Pro / ASK
○ 支持垂直伸缩 水平伸缩等多种扩容方式
○ 支持多云 混合云 多集群管理
○ 支持RAM授权和RBAC权限管理
● 应用管理:一站式容器生命周期管理
○ 支持灰度发布和蓝绿发布
○ 支持手动伸缩应用容器实例,HPA自动伸缩策略
○ 节点亲和性调度 应用间亲和性调度和反亲和性调度
● 存储和网络
● 运维和安全
● 弹性伸缩
○ 两个维度
■ 调度层弹性
● 组件
○ 容器水平伸缩(HPA)
○ 容器垂直伸缩(VPA)
○ 容器定时伸缩(CronHPA)
○ 弹性负载(Elastic-Workload)
■ 资源层弹性
● 弹性伸缩架构
● DevOps持续交付
● 云原生AL
10000(ACK Pro) (和培训课程中ACK Pro 最大5000节点有差异??)
https://www.aliyun.net.cn/7369.html
容器镜像(不确定)
推测:
● ACK对容器进行管理
● kube-scheduler在集群中对pod资源对象进行调度
● 而pod是组成Deployement最小的单元
● Deployement是kubernetes中部署应用最常见的一种方式
● 因此kube-scheduler实际上是在对容器在进行调度
容器水平伸缩
容器镜像分发不属于ACK的应用场景
集群列表
云效项目协作
DevOps
灰度发布
消息重试
集群消费模式
Go
NameSpace
● Pod
○ 是Kubernetes中能够创建和部署的最小单元
○ 是Kubernetes集群中的一个应用实例,总是部署在同一个节点的Node上
○ 包含了一个或多个容器 还包括了存储 网络等多个容器共享的资源
○ 支持多种容器环境,Docker最流行
○ 提供给容器共享的运行环境
● Etcd
○ 一个分布式一个存储系统
● Service
○ kubernates核心概念,可以为一组具有相同功能的容器应用提供一个统一的入口地址
○ 将请求进行负载分发到后端的各个容器应用上
○ 提供一个或多个Pod实例的稳定访问地址
● Deployement
○ 是Kubernetes中部署应用最常见的一种方式
○ 做应用真正的管理
○ Pod是组成Deployment的最小单元
● Volume
○ pod中能够被多个容器共享的磁盘目录
○ 用来管理存储
○ 用来声明在pod中的容器可以访问文件目录的
○ 一个卷可以被挂载到pod中一个或者多个容器的指定路径下面
○ 实现数据的持久化,和Docker总的volumn类似
Kubernetes
阿里云边缘托管Kubernates集群:
● 在云端提供一个标准 安全 高可用的Kubernetes集群
● 整合阿里云虚拟化 存储 网络和安全等能力
● 简化集群运维工作,更专注于容器化应用的开发于管理
镜像仓库
● 容器
● 镜像
● 镜像仓库
● 容器是自包含的
● 容器是可移植的
● 容器是互相隔离的
● 容器是轻量级的
弹性容器实例ECI
● 阿里云结合容器技术和无服务器技术为您提供的容器运行服务
● 无需管理底层服务器,也无需关心运行过程中的容器规划
● 仅为容器实际运行消耗的资源付费
● 不需要购买和管理ECS,可以直接在阿里云上运行容器/Pod
高效的容器镜像分发服务,容器镜像服务是云原生时代的重要基础设施,托管和分发客户容器应用制品
Master服务器
容器镜像服务ACR
Volume
EDAS控制台
● 一个应用托管和微服务管理的云原生PaaS平台
● 提供应用开发 部署 监控 运维等全栈式解决方案
● 用户不再需要自己组件微服务框架并精心维护各个组件,只需要使用EDAS,就可以快速进行微服务应用的开发
● 服务组测中心 Nacos
● 负载均衡 Nacos
● 服务网关 CSB
● 配置中心 Nacos ConfigServer
● 断路器 Sentinel(AHAS)
● 以容器的方式托管应用
● Java程序支持以Jar(war sar) 包或者容器的形式进行部署
● 其他语言使用容器进行部署
● CI/CD 的核心概念是持续集成 持续交付和持续部署
● EDAS目前支持Jenkins和云效两个平台
● EDAS(专业版或者铂金版)
○ 支持混合云,可以将公共云,本地云或其他服务商提供的及其通过专线连接,并添加到EDAS公共云的混合云ECS集群中
○ 对于阿里云公共云中的ECS实例,EDAS提供弹性伸缩功能
● 按照一定的批次,每次只对应用的一部分实例进行升级的发布过程
● 分批发布过程中如果出现故障,可以终止变更过程并进行回滚,带问题修复后重新发布
● 能够通过控制台实现灰度发布和流量管控
● 用户创建灰度分组,并在灰度分组中配置控制规则后。即可符合规则的流量导入灰度分组
● 通过流量控制可实现灰度发布,在线诊断,特定用户跟踪等功能
● 秒级自动弹性功能
● 动态实现应用扩容 缩容
● 限流
○ 通过调节流量的阈值来控制通过系统的最大流量值,保证系统安全可靠运行
● 降级
○ 在EDAS中,降级通常用于对下游出现超时的非核心服务提供者进行低优先级调用,确保上游核心应用服务消费者不被影响
● 定期检查
● 开发者可以查看应用的健康状况
● EDAS可以无缝对接ARMS应用监控
● 围绕分布式 微服务体系 重点建设服务集成和整合能力
● 实现PaaS平台开饭的生态体系
PaaS
laaS
分批发布模式
Spring Cloud
RMA权限 和 RBAC权限管理
● Cluster IP
● NodePort
● LoadBalance
● 云原生是云计算的再升级
● 云原生正在重塑整个软件生命周期
● 云原生正在加速企业的数字化转型升级
轻CR
重CR
自动化辅助CR
数据分析
镜像仓库
持续集成
持续交付
持续部署
TCP协议
HTTP协议
生产者集群
消费者集群
Broker端
ECS云服务器
容器服务Kubernetes版本(ACK)
节点自治和网络自治
并发模式和RPS模式
默认实例和企业版
jar包 容器
庞大的单体应用
缺乏自动化能力的微服务