面向多租户的微服务架构实践
如果无法正常显示,请先停止浏览器的去广告插件。
1. 面面向多租户的微服务架构实践
洪增林林
字节跳动 / 资深架构师
2. 关于我
• 洪增林林 / 字节跳动 架构师
• 14年年从浙江大大学硕士士毕业,从业 8 年年,致力力力于业务技术架构方方向
• 19 年年加入入字节,现负责技术中台架构解决方方案团队,先后推进多租户、
单元化、数据访问保护和业务上云等技术架构演进
3. •
•
•
多租户的业务驱动力力力
面面向多租户微服务架构
• 多租户解决方方案
• 全链路路流量量身份票据
• 计算层流量量调度管理理
• 存储层隔离管理理
• 业务场景实践
后续的演进思考
4. 业务形态
今日日头条
抖音音
轻颜相机
⻄西瓜瓜视频
懂⻋车帝
…
剪映
番茄小小说
⻜飞书
火火山山引擎
5. 以一一个共享服务视⻆角来看
产品1
产品2
服务
共享存储
业务早期
产品1
服务1
存储1
产品2
共享模式的问题
•
• 不不同租户共享一一套服务,存在 Noisy
Neighbor 问题
• 数据合规和隔离需求
• 分场景的隔离要求,比比如Sandbox、压测环
境、Chaos 环境等,一一种泛化的租户
服务2
存储2
业务成熟期
6. 微服务调用用拓拓扑
7. 服务域
• 复杂微服务网网络的治理理不不能仅关注单个微服务
• 服务域:一一个内聚的微服务结合,对外提供能力力力
• 服务域下的微服务需要整体考虑对上游提供多租
户治理理能力力力
• 在字节跳动一一个服务域会包含上千个微服务
8. 微服务下多租户挑战
• 服务域内包含大大量量微服务,上下游的服务域
对于租户的拆分维度可能不不同
• 微服务链路路⻓长,中间包含异步链路路
• 共享服务对接租户初期倾向于用用共享资源,
后期面面临拆分需求
• 租户数据的隔离按照不不同的场景,需要支支持
db/table/row 级别隔离
9. •
•
•
多租户的业务驱动力力力
面面向多租户微服务架构
• 多租户解决方方案
• 全链路路流量量身份票据
• 计算层流量量调度管理理
• 存储层隔离管理理
• 业务场景实践
后续的演进思考
10. 我们面面对的本质问题
• 容器器化和微服务已经在业务中广广泛落地,微服务的规模和链路路越
来越复杂
• 从租户隔离、数据保护、多机房部署等业务要求下,我们需要重
新思考更更精细的微服务治理理手手段
• 多租户是一一个切入入的场景,本质问题就是在复杂微服务架构下的
流量量和数据治理理问题
11. 在微服务架构下怎么解
12. 多租户解决方方案
• Key1 - 流量量身份标识,入入口口注入入,全链路路透传
• Key2 - 计算流量量调度,不不同租户的流量量路路由->
隔离单元
• Key3 - 流量量隔离保证,单元内部流量量闭环,支支
持逃逸
• Key4 - 存储访问管理理,不不同单元的存储按需隔
离,支支持动态迁移
13. 全链路路流量量身份票据
•
TIM(Traffic Identity Mark)
Online Traffic
2nd-Party Dependencies
1. Load Config
Application Gateway
•
2. Request Identity Info
TIM 票据 - 基础身份信息 + 业务扩展信息
TIM Plugin
Device
RPC - 框架/Mesh 支支持,注入入 RPC request header
• MQ - 中间件支支持,注入入 Message header
Region
SSO
网网关层注入入,全链路路透传
•
Passport
3. Return Identity Info
4. Traffic with TIM meta
•
TIM CP
Service1
5. RPC call with TIM context
Service2
Identity-Related Services
6. Produce message with
TIM in message header
Message
Queue
TIM content format
Meta: Version/Signature
User: UID/Role
7. Traffic with TIM meta
8. Traffic with TIM meta
Device: DeviceID
•
应用用 - 流量量治理理、数据访问控制、应用用鉴权
App: AppID
Service3
Service4
Region: Country/Province
Scene:Stress/Activity
Extended: Business Infos
14. TIM 落地经验
• 统一一注入入 - 推荐在 AGW 层
• 可传递性 - 框架能力力力覆盖,KiteX/Mesh/MQ etc…
• 票据不不丢 - 票据丢失/定位,解决断点识别
• 票据可信 - 保证票据不不可伪造篡改
•
• 注入入方方身份识别,基于容器器粒度 ZTI Token
• 非非对称加签/验签
票据大大小小 - 注意检查 http/rpc header size 限制
15. 从一一个微服务视⻆角看
•
Service - 单个微服务
Service
• Cluster - 服务下的逻辑集群,对应多个 Deployment
• 绝大大部分服务都启用用了了 Mesh Proxy
Logic-Cluster1
K8s Nodes
…
K8s Nodes
Mesh Sidecar Mesh Sidecar Mesh Sidecar Mesh Sidecar
Deployment Deployment Deployment Deployment
Pod
Pod
Metrics/Log/
Consul Agents
Region1/IDC2
Logic-Cluster2
Pod
Pod
Metrics/Log/
Consul Agents
Region1/IDC1
Pod
Pod
Metrics/Log/
Consul Agents
Pod
Pod
…
Metrics/Log/
Consul Agents
Region2/IDC2
Region2/IDC2
16. Mesh 流量量策略略路路由
• 流量量路路由基本要求是对业务透明
• 租户路路由策略略下发到 Mesh Proxy,流
量量 Egress 中动态计算目目标逻辑集群
• 路路由规则 = TIM 变量量 + 路路由策略略表达
式
17. 服务域入入流路路由
• RPC - MeshProxy 策略略路路由
• AGW - MeshProxy 策略略路路由
• LB - LB lua 插件策略略路路由
•
能力力力和 MeshProxy 保持一一致
18. 域内流量量路路由
• 流量量优先在单元内闭环
• 支支持单元内亲和性调度(调度兜底机制)
• 支支持流量量逃逸,不不要求每个单元全量量微服务
• 单元有优先级,访问下游服务时优先访问到高高优单元
• 支支持 RPC 调用用直接指定单元
19. 存储层流量量路路由
• 存储代号在不不同单元指向不不同实例例
• 存储访问中间件层生生效租户存储路路由
• 跨单元访问拦截,兜底计算层流量量调
度 badcase
20. 存储访问中间件
• 为异构存储提供一一个统一一的治理理和管控中间件层
• 核心心定位和能力力力:
• 底层存储引擎适配
• 租户请求路路由
• 数据访问管控
• 租户数据在线拆分
21. 存储引擎对接
• 尽量量减少对于业务研发的侵入入
• 在 query hook 中动态改写 req/resp 完
成租户数据路路由
• 未授权的跨租户访问在 pre hook 中拦截,
通过身份 + 访问规则来决策
22. 延伸场景1-租户数据拆分
• 隔离性 vs. 成本的权衡,租户数据拆分不不可避免
• 我们的目目标:租户数据拆分标准化
23. 平台化解决方方案
• 一一站式租户单元管理理,计算/存储/路路由规则/数据迁移…
• 关注标准化、效率和可靠性
24. 解决了了哪些问题
服务能力力力扩展
•
•
平台租户数量量不不断增⻓长
单租户的流量量持续增⻓长
流量量和数据隔离
•
•
•
租户间流量量隔离
数据隔离(物理理/逻辑)
数据访问管控
研发复杂度
•
•
按照单租户模型开发
不不同租户版本和变更更差异化
运维复杂度
•
•
垂直的隔离环境搭建
共享租户拆分到独享
25. User Case - 租户/场景流量量隔离
多租户隔离:
•
•
信息流、账号、IM、电商、支支付 等
场景化隔离:
•
• 封板核心心链路路隔离
• 电商 Sandbox
• UG 活动链路路
• etc.
26. 这个事情是不不是值得做
27. 多租户架构投入入考虑
服务复杂度
•
•
•
•
服务域内微服务规模大大
微服务链路路⻓长
服务域内存储多
多 RD/SRE,需要标准
租户隔离场景
•
•
•
业务服务多个租户
租户间有隔离诉求
需要从共享拆分独立立环境
垂直隔离链路路
•
•
隔离压测链路路
隔离活动链路路
安全合规要求
•
•
租户的数据隔离有技术保证
跨租户数据访问有管控
28. •
•
•
多租户的业务驱动力力力
面面向多租户微服务架构
• 多租户解决方方案
• 全链路路流量量身份票据
• 计算层流量量调度管理理
• 存储层隔离管理理
• 业务场景实践
后续的演进思考
29. 租户间调度到机房间调度
场景
多租户
单元化
机房内租户隔离
机房间的容灾
流量量标识
需要业务标识
需要业务标识
计算层路路由 存储层路路由
业务透明路路由
业务透明路路由
•
•
•
•
业务投屏路路由
跨单元拦截
业务投屏路路由
跨单元拦截
数据同步 数据拆分 容灾管理理
租户数据隔离 租户拆分时需要 不不存在租户间容灾
•
容灾机房间同步
多租户和单元化面面向不不同场景,原子子能力力力有很多重合
不不需要
•
容灾切流
强一一致场景切
流禁写
30. Key Takeaways
• 在微服务架构下构建面面向多租户解决方方案关注的核心心问题
• 复杂微服务架构下的流量量和数据治理理思路路
• 面面向多租户的微服务架构的必要性、投入入和收益
• 字节跳动在面面向多租户场景的实践
• 后续业务架构的演进和投入入
31.