0%

腾讯云TCP2-云原生应用设计

二、云原生应用设计(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
    • 全维度可视化
      服务拓扑
      服务监控
      调用链
    • 全流程自动化
    • 容错设计
      熔断器
      集群
    • 去中心化设计
      提供服务扩展能力
    • 独立部署
2.3 设计微服务架构#

包括:TSF与全维度可视化、TSF与Devops、TSF与微服务容错设计、TSF与微服务去中心化设计和TSF与独立部署 ☆☆☆

  • TSF与全维度可视化
    基于调用链跟踪的可视化架构

  • TSF与Devops
    全流程自动化[有个图]

  • TSF与微服务容错设计

    • 优雅的服务降级

    • 变更管理

    • 健康检查和负载均衡

    • 自我修复

    • 舱壁模式
      隔离资源

    • 测试故障 chaosmonkey

    • 重试逻辑

    • 快速失败原则和独立性

    • 限流器和负载降级 -

    • 故障转移缓存 -
      帮助应用程序在服务故障时提供必要的数据
      [有个图]

    • 断路器
      [有个图]

  • TSF平台的容错设计

    • 服务注册中心
    • 健康检查与负载均衡
    • 重试逻辑
    • 服务限流
    • 断路器
    • 配置管理,回滚
  • TSF与微服务去中心化设计

    • [三种方式,pic]
    • 微服务工程中, 架构理念由面向系统结构转为面向服务设计
  • TSF与独立部署

    • 微服务TSF平台 在发布部署过程中基于’部署组’维度进行服务路由,完成不停服的灰度发布[pic]
    • 微服务TSF平台中,容器是微服务运行的计算资源,结合使用[pic]
      [TSF同时支持vm和container]
      1. 微服务-应用层演化
        演进方式 自上而下
      2. container是资源层演化
        演进方式 自下而上
2.4 TSF微服务架构最佳实践#

微服务调用中的安全架构、技术架构 ☆☆

  • 微服务调用中的安全架构

    • 鉴权包括两部分[pic]
      • 微服务之间的内部鉴权
        黑白名单
        自定义tag
      • 微服务对外通过api鉴权
        api网关
  • 微服务最佳实践-技术架构

    • 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
      应用层隔离
      事件驱动
  • Serverless面临的困难

    • 场景[pic]
      • 应用后端服务
      • 大规模数据处理和计算类应用
      • 基于事件的内容处理类应用
    • Serverless 架构的局限
      • 代码调试复杂
      • 不适用低时延服务
      • 未标准化
      • 厂商绑定
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架构的应用场景
    应用后端服务
    大规模数据处理和计算类应用
    基于事件的内容处理类应用