面向多租户的微服务架构实践

如果无法正常显示,请先停止浏览器的去广告插件。
分享至:
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.

Accueil - Wiki
Copyright © 2011-2024 iteam. Current version is 2.137.1. UTC+08:00, 2024-11-16 00:41
浙ICP备14020137号-1 $Carte des visiteurs$