字节跳动 成国柱 基于Service Mesh的服务治理探索和实践

CodeWarrior

2019/07/08 发布于 编程 分类

GIAC2019 

文字内容
1. 基于 成国柱 字节跳动 的服务治理探索和实践
3. 个人简介 字节跳动基础架构研发工程师 微服务框架团队负责人 年初加入字节跳动 主要负责微服务框架、服务治理、配置中心、 方向的研发工作 等
4. 目录 ❏ 概述 未来 展望 从微服务到Service Mesh Mesh 落地 ❏ ❏ ❏ 整体架构 实现方案 关键问题 服务 治理 ❏ ❏ ❏ 访问控制 动态过载保护 染色系统 ❏ 规划
5. 概述-案例分享一:服务端限流 语言&协议支持 、 、 、 、 多进程模型无法支持 限流策略 图:服务端限流模型 单实例限流 服务整体限流 丢弃策略 保证高权重请求 问题: 从开发到上线需要多久? 策略调整了怎么办?
6. 概述-案例分享二:服务安全 为什么需要内部服 务安全 数据越来越多,服 务信息越来越敏感 用户隐私意识逐渐增强 内网不可信假 设 内网服务安全的需求 身份认证 访问授权 防窃听加密 访问历史审计 问题: 强制性安全策略 ? 接入成本?
7. 概述-微服务及云环境下服务框架的新挑战 云环境部署 语言 组件不断增长 复杂的调用关系 基础功能重复建设 精细化的流量调度策略 更好的服务治理: 策略一致性问题 访问安全机制 更快速响应变更、负载均衡 功能新增、升 级、维 护困难
8. 概述 - Service Mesh 核心思想 1. 代理层接管所有流量 2. 中心化控制 3. 云平台原生集成 Istio架构(来源: istio官方) https://istio.io/docs/concepts/what-is-istio/arch.svg
9. 概述 - Service Mesh 收益 代理层收益 1. 基础功能收敛 2. 策略一致性 3. 与业务松耦合的功能升 级 4. 强制性安全策略 5. 非C++语言服务的性能平滑提升 控制面收益 1. 精细化的流量调度策略 2. 可定制的服务治理功能 核心收益 微服务框架成为可独立迭代的 产品
10. 概述 - Service Mesh 风险 性能与稳定性 proxy带来延迟/CPU消耗 proxy稳定性成为关键路径 中心化控制面 带来稳定性风险 开发运维模式 问题排查多一层 架构组成为线上问题的汇聚中心 不适用场景 技术栈稳定, 无服务治理/监控等强迭代需求 私有场景下需要长期技术/运维投入
11. 目录 ❏ 概述 未来 展望 从微服务到Service Mesh Mesh 落地 ❏ ❏ ❏ 整体架构 实现方案 关键问题 服务 治理 ❏ ❏ ❏ 访问控制 动态过载保护 染色系统 ❏ 规划
12. ByteMesh整体架构 实现方式 代理层接管所有流量, 执行路由和 服务治理策略 屏蔽语言 协议差异 服务治理中心根据 请求信息,动态 决定路由策略 无感知的快速升 级 主要特点 基于 持 支持私有 协议 支 协议 自研控制面 集成服务发现和配置 使用公司基础设施 统一裸物理机、容器云,一 键升级
13. ByteMesh实现方案 1. 2. 3. 流量代理(proxy) a. 基于元信息的流量代理 b. 多协议,统一接入规范 c. 性能(吞吐/延迟) 控制面(control panel) a. 流量调度和服务治理功能支持 b. 高可用 c. 扩展能力 云平台集成 a. 统一物理机和容器 , 与k8s解耦, 原生集成 b. 灰度升级和容灾方案 c. 大规模proxy平滑、稳定升级 一句话描述: 实现一个高性能多 协议的代理和一个灵活可 扩展的控制服务,将他们与云平台原生集成,最 终 通过轻量级的 框架来输出能力。
14. ByteMesh Proxy 事件模型与数据流 基于 的流量代理 每个线程对应一个事件循环 每个事件循环对应多个连接 连接隔离 实现 出口/入口分离 长短连接转换 支持thrift、HTTP、MySQL、MongoDB等协议
15. ByteMesh Proxy 平滑升级 优秀 协议的 特征 1. 明确的消息边界 2. 连接多路复用 3. 请求路由能力 thrift(buffered) TTHeader 消息边界 否 是 连接多路复用 否 是 请求路由能力 基于内容 基于元信息 thrift与TTHeader协议对比
16. ByteMesh控制面 特征 灵活的请求调度 多种服务治理策略 开放式接入协议 屏蔽服务发现和配置 控制面请求处理流程
17. ByteMesh控制面Arch
18. ByteMesh流量劫持 特点 1. proxy以sidecar形式部署 2. 显式接管流量 3. 可独立接管出、入、 mysql等流 量类型 4. proxy无感知升级 ByteMesh 部署方案
19. ByteMesh实现总结 1. 制定TTHeader协议规范 a. 实现元信息与用户数据分离, 基于元信息进行路由 b. 统一各语言的接入标准 c. 支持平滑升级 2. 重点关注proxy性能和稳定性 3. 控制平台面 4. a. 可扩展的插件架构 b. 多维tag支持灵活的调度需求 c. 多级缓存+分集群部署保 证高可用 平台集成 a. 显式接管流量 b. 通过mesh agent屏蔽底层环境差异
20. 目录 ❏ 概述 未来 展望 从微服务到Service Mesh Mesh 落地 ❏ ❏ ❏ 整体架构 实现方案 关键问题 服务 治理 ❏ ❏ ❏ 访问控制 动态过载保护 染色系统 ❏ 规划
21. 下的服务治理新思路 快速的迭代 精细化治理 定制化能力 标准化接入
22. 访问控制( 服务安全的需求 认证 授权 加密 审计 )
23. 访问控制 授权 授权粒度 源头:个人、服务 ✅、应用 目标:服务、接口 ✅ 授权模式 黑名单 松散授权(默认) 白名单 严格授权(可选)
24. 访问控制 鉴权 加密 审计 鉴权 Authentication 混合云环境下的Token注入 - Kubernetes - Secrets VM/PM 机器注入 加密 mTLS 审计 分析调用情况历史
25. 动态过载保护 判断过载状态:队列时间 从请求接收到服务开始处理的时间 决定期望拒绝比例 期望拒绝比例指为了完成服务的自动过载保护,周期内拒绝 掉的请求占实际总请求量的比例。 首先设立稳定区间 当 超过 期望拒绝 当 低于 望拒绝 。 当 ,加强限制,期望拒 绝比例 ,直到 ,放松限制,期望拒 绝比例 ,直到期 。 在稳定区间内,维持期望拒绝比例。 动态过载保护中的队列时间计算
26. 动态过载保护 统计优先级直方图 Ingress proxy 统计每个周期的请求优先级 累积直方图。 确立拒绝优先级 根据当前的期望拒绝比例,按照上一周期 的直方图划线,找出优先级阈值。 本周期,优先级低于阈值的请求被拒绝,高 于阈值的请求可通过。
27. 染色系统 请求染色 根据请求信息进行分组打标签 灵活调度与治理 服务治理平台支持染色 所有策略扩展至逻辑划分 请求染色及路由应用
28. 服务治理新功能 1. 动态负载均衡 2. 基于Deadline的Timeout 3. 流量录制 4. 故障注入和容灾演 练
29. 目录 ❏ 概述 未来 展望 从微服务到Service Mesh Mesh 落地 ❏ ❏ ❏ 整体架构 实现方案 关键问题 服务 治理 ❏ ❏ ❏ 访问控制 动态过载保护 染色系统 ❏ 规划
30. 未来展望 1. 更广泛的接入 场景 2. 持续优化proxy层性能 3. 探索更多的服 务治理应用和问题追查系统 4. 构建覆盖全公司的流量 视图和流量体系
31. 联系方式 微信公众号:微服 务实践充电站 关注 分享超大规模 探索微服务最佳实践 部署与治理经 验