《大规模微服务破局之道:合并编译-尹旭然 .pdf》由会员分享,可在线阅读,更多相关《大规模微服务破局之道:合并编译-尹旭然 .pdf(33页珍藏版)》请在三个皮匠报告上搜索。
1、字节跳动微服务合并编译实践字节跳动微服务合并编译实践尹旭然字节跳动后端研发工程师1.字节跳动微服务背景2.如何解决微服务过微的问题3.合并编译如何解决面临的挑战4.案例分析5.总结与展望目录目录字节跳动微服务的背景字节跳动微服务的背景字节跳动微服务的现状-微服务过微微服务过微的原因微服务过微的危害字节跳动微服务的现状字节跳动微服务的现状-微服务过微微服务过微字节跳动微服务过微的现状:微服务数量超过30w,部分业务人均维护微服务数量超过10个 微服务的数量仍然在快速的增长当中 微服务的调用关系错综复杂按季度新增微服务数量某业务线微服务调用拓扑图导致该现状的原因:自18年以来,业务高速增长,研发效
2、率优先 缺乏统一的管控措施和规范,微服务拆分粒度和把控不合理微服务过微的危害微服务过微的危害研发效率研发效率人均维护的服务数量过多导致研发效率下降稳定性稳定性链路过长导致所需准备的容灾预案工作难度提升,下游任何一跳的服务故障都可能导致整个链路受损服务治理服务治理依赖的服务过多导致超时、限流等配置增多,合理配置的难度大幅上升运行效率运行效率序列化、服务治理开销大,消耗资源过多;链路过长导致时延过高架构观测架构观测链路庞大导致全链路评估和观测的成本高如何解决微服务过微的问题如何解决微服务过微的问题如何解决微服务过微的问题合并编译的方案是什么合并编译的优势和挑战如何解决微服务过微的问题如何解决微服务
3、过微的问题 过微服务 长尾服务 重复定位服务能删就删能删就删 服务增量管控能合就合能合就合 微服务 SDK 化改造 合并编译新增治理存量治理 服务治理 链路治理 领域治理合并编译是什么合并编译是什么合并编译:两个(或多个)微服务(独立的多个进程),在编译期间合并编译期间合并为一个二进制,以一个进程一个进程的方式运行。优势 极致的性能 灵活的合并与拆分 稳定性提高 链路复杂度流量比例 A:C:D=8:1:1 时的合并示意图100%的资源20%的资源劣势 进程内隔离性 版本管理合并编译面临的挑战合并编译面临的挑战隔离性隔离性:1.依赖隔离2.环境变量隔离调用转换:调用转换:RPC Call=Fun
4、c Call易用性:易用性:自动化工具建设稳定性:稳定性:1.测试保障2.线上问题排查易用性:易用性:1.版本管理2.研发流程隔离性:隔离性:运行时进程内的隔离性用户认知:用户认知:让用户接受合并编译的形态3.权限隔离4.身份隔离5.配置文件隔离3.编译问题排查4.本地 Debug稳定性:稳定性:灰度发布基础优化理想合并编译如何解决面临的挑战合并编译如何解决面临的挑战依赖隔离环境变量隔离调用转换灰度上线版本管理合并编译技术介绍合并编译技术介绍-依赖隔离依赖隔离依赖版本冲突:1.依赖版本不兼容全局单例 SDK 冲突:1.初始化2.配置合并3.相互影响无法收敛:每次合并都有新的 case 出现业务
5、有感合并编译技术介绍合并编译技术介绍-依赖隔离依赖隔离go mod 管理方式:1.标准库 fmt:$GOROOT/src/fmt2.三方库 kitex:$GOPATH/pkg/mod/ mainimport(fmt namespace 并且修改三方库的 import 路径呢合并编译技术介绍合并编译技术介绍-依赖隔离依赖隔离package mainimport(svc_inline/namespacea/ svc_inline/namespaceb/ svc_inline/namespacea/./kitex=/tmp/svc_inline/namespacea/kitexreplace svc
6、_inline/namespaceb/./kitex=/tmp/svc_inline/namespaceb/kitexreplace svc_inline/=/tmp/svc_inline/tmp svc_inline namespacea cloudwego kitex namespaceb cloudwego kitex合并编译技术介绍合并编译技术介绍-依赖隔离依赖隔离go mod vendor下载依赖将该服务的依赖拷贝到$dep_path/$namespace下将项目中的import 进行 namespace隔离增加 replace合并编译技术介绍合并编译技术介绍-环境变量隔离环境变量隔