二、云原生应用设计(10%)#
1. 云原生应用介绍#
1.1 云原生应用设计相关概念#
包括:应用架构的发展、云原生的概念、云原生的关键技术、微服务概念、容器化概念、DevOps概念、持续交付概念和Serverless ☆
应用架构的发展
- 系统资源
操作系统 -> 虚拟化 -> 云计算 -> 容器 - 应用架构
单体架构 -> SOA -> 微服务,serverless架构 - 生命周期管理
瀑布开发 -> CI/CD -> CI/CD/CO
- 系统资源
云原生的概念
“适合云的应用” 和 “好用的云架构”【云原生应用的12-factors】
云原生的关键技术、
- 微服务概念
拆服务, 串联服务。 内聚,敏捷 - 容器化概念
轻量级虚拟化, namespace隔离, 每个容器都有唯一的可写文件系统和资源配额
两部分: 运行时 + 编排层 - DevOps概念
计划 -> 需求 -> 设计 -> 开发 -> 部署 -> 运营
CI/CD
DevOps 工具链[有个图] - 持续交付概念
CI/CD pipeline - Serverless
- 微服务概念
1.2 为什么需要云原生#
云原生应用 VS 传统应用 ☆
| 类型 | 部署可预测性 | 抽象性 | 弹性能力 | 开发运维模式 | 服务架构 | 恢复能力 |
|---|---|---|---|---|---|---|
| 云原生应用 | 可预测 | 操作系统抽象 | 弹性调度 | DevOps | 微服务解耦架构 | 自动化运维快速恢复 |
| 传统架构 | 不可预测 | 依赖操作系统 | 资源冗余多 缺乏资源扩展能力 | 瀑布式开发, 部门孤立 | 单体耦合架构 | 手动运维恢复缓慢 |
2. 在腾讯云上实现微服务架构#
2.1 微服务的常见框架#
微服务的挑战 ☆
微服务框架:Spring Cloud、Service Mesh ☆
微服务的挑战
- 分布式系统的复杂性
- 服务监控报警
- 服务治理
- 集中化配置管理
- 调用链跟踪
微服务框架:Spring Cloud、Service Mesh
- Spring Cloud
- Service Mesh
service mesh处理服务间请求/响应的可靠传递,并可用于服务治理、遗留系统的零侵入接入
以及异构框架开发的微服务。
2.2 微服务的设计原则#
“总体原则:领域优先,聚焦对象模型,聚焦面向对象设计,减少复杂性,增加可维护性” ☆☆
- 微服务的设计原则
- 业务领域蓝图(DDD)
- 领域模型, 系统核心价值所在
- 设计理念
广泛使用的语言
界限上下文
保持改进: 基于模型驱动
易于重构
query/command分离 - 设计模型
entity object(有生命周期)/value object(描述性)
aggregate roots
object creation patterns
repository
specification
domain services
modules
domain events
1 系统中的重要事件
2 cqrs 读写模型之间的数据同步
3 事件驱动架构: 事件源, 重复领域事件
state machines
- 全维度可视化
服务拓扑
服务监控
调用链 - 全流程自动化
- 容错设计
熔断器
集群 - 去中心化设计
提供服务扩展能力 - 独立部署
- 业务领域蓝图(DDD)
2.3 设计微服务架构#
包括:TSF与全维度可视化、TSF与Devops、TSF与微服务容错设计、TSF与微服务去中心化设计和TSF与独立部署 ☆☆☆
TSF与全维度可视化
基于调用链跟踪的可视化架构TSF与Devops
全流程自动化[有个图]TSF与微服务容错设计
优雅的服务降级
变更管理
健康检查和负载均衡
自我修复
舱壁模式
隔离资源测试故障 chaosmonkey
重试逻辑
快速失败原则和独立性
限流器和负载降级 -
故障转移缓存 -
帮助应用程序在服务故障时提供必要的数据
[有个图]断路器
[有个图]
TSF平台的容错设计
- 服务注册中心
- 健康检查与负载均衡
- 重试逻辑
- 服务限流
- 断路器
- 配置管理,回滚
TSF与微服务去中心化设计
- [三种方式,pic]
- 微服务工程中, 架构理念由面向系统结构转为面向服务设计
TSF与独立部署
- 微服务TSF平台 在发布部署过程中基于’部署组’维度进行服务路由,完成不停服的灰度发布[pic]
- 微服务TSF平台中,容器是微服务运行的计算资源,结合使用[pic]
[TSF同时支持vm和container]- 微服务-应用层演化
演进方式 自上而下 - container是资源层演化
演进方式 自下而上
- 微服务-应用层演化
2.4 TSF微服务架构最佳实践#
微服务调用中的安全架构、技术架构 ☆☆
微服务调用中的安全架构
- 鉴权包括两部分[pic]
- 微服务之间的内部鉴权
黑白名单
自定义tag - 微服务对外通过api鉴权
api网关
- 微服务之间的内部鉴权
- 鉴权包括两部分[pic]
微服务最佳实践-技术架构
- CLB, TSF, 消息队列[pic]
分层微服务架构-组件最佳实践[pic 要看]
- 公共服务层(稳定可靠)
kafka, redis, es+kibana, oauth2 - 公共基础应用微服务(高内聚,低耦合)
user,privilige, registry, metadata,
scheduler, dataflow… - 聚合服务层(聚焦核心业务)
sales,order, member, shopping cart
- 公共服务层(稳定可靠)
3. 在腾讯云上实现 Serverless架构#
3.1 Serverless架构的设计原则#
Serverless架构组件 ☆☆
无服务器架构与主流部署形态的对比 ☆
Serverless面临的困难 ☆
Serverless架构介绍
- 是什么?
- 为什么要用?
没有用,不需要付费
Serverless架构组件[pic]
- faas + baas
- faas(开发者使用)
定义业务逻辑
代码部署 - baas(云服务商提供)
对象存储
数据库
mq
身份认证
内容分发
无服务器架构与主流部署形态的对比[pic 要看]
- kvm
稳态业务的首选
隔离环境
场景: 视频编码,机器学习 - container
微服务的最佳载体 - serverless
应用层隔离
事件驱动
- kvm
Serverless面临的困难
- 场景[pic]
- 应用后端服务
- 大规模数据处理和计算类应用
- 基于事件的内容处理类应用
- Serverless 架构的局限
- 代码调试复杂
- 不适用低时延服务
- 未标准化
- 厂商绑定
- 场景[pic]
3.2 在腾讯云上实现Serverless架构#
腾讯云函数SCF ☆☆☆
无服务器云函数的架构设计 ☆☆☆
腾讯云函数SCF
- SCF 运行方式依赖事件触发
- SCF的工作
服务器 cpu memory network
资源维护 代码部署 弹性伸缩 负载均衡
安全升级 资源运行监控等 - 容错性
函数在多地域部署
腾讯云函数原理[pic]
- 分四层
- 调用层
sdk web cos cmq - 接入层
api接口 - 控制层
函数调用
函数配置 + 函数调度 - 执行层
函数实例
- 调用层
- 分四层
腾讯云函数主要参数[pic]
内存, cpu …无服务器云函数应用案例[pic]
腾讯相册
思考题#
云原生关键技术
microservice ,container, ci/cd, devops等微服务可以怎么拆分?
根据ddd拆分serverless架构的应用场景
应用后端服务
大规模数据处理和计算类应用
基于事件的内容处理类应用