微服务框架 Kitex 的设计、实践及开源

如果无法正常显示,请先停止浏览器的去广告插件。
分享至:
1. 微服务框架 Kitex 的设计、实践及开源 字节跳动服务框架 杨芮
2. 主讲人 目目前主要负责字节跳动 Golang 微服务框架的设计开发。 QCon 2021 明星讲师。
3. 目 录 01. 字节 Go 微服务框架的演进 02. Kitex 框架设计概述和功能特性 03. Kitex 开源和在字节内的实践 04. 总结和展望
4. 01 字节 Go 微服务框架的演进
5. 字节微服务及 Golang 框架演进 引入 Golang 2014 Kite/Ginex 发布 2015 服务化开启 Thrift + HTTP Golang RPC 框架: Kite -> Kitex Golang HTTP 框架: Ginex -> Hertz Service Mesh 2016 2019 Kitex 启动 Kitex 发布 20年底 1w+ 服务接入; Hertz 立项 2020 Kitex 线上服务 5w+; Mesh 覆盖 90%+服务; Hertz 开源 2021 Kitex 开源; Hertz 发布 2022
6. 旧框架 Kite 的问题 n 能力扩展受限 • Kite 强耦合 Thrift、无法横向扩展协议 • 无法优雅支持其他特性,如新的交互方式 n 维护成本高 • 生成代码逻辑重,难改造 • 多仓库维护 n 用户使用体验不佳 • IDL 定义约束 • 代码生成工具依赖 Apache Thrift n 性能优化难 • 受限于与 Thrift 的深度耦合,网络模型还是编解码层 面,优化成本高 n 网络库优化诉求 • 感知连接状态 & 连接多路复用 业务场景复杂,需求也会多样化 接入入服务及调用用量量逐年年增⻓长 不不做好准备,后面面会越来越难维护
7. Kitex 框架及其核心依赖 字节接入 线上服务 5w+ 峰值 QPS 上亿 Kitex Netpoll Thriftgo ü 面向 RPC 场景 ü Thrift IDL 解析和代码生成器 ü 可感知连接状态 ü 支持完善的 Thrift IDL 语法和语义 ü 提供高性能的 LinkBuffer 支持 NoCopy 的读写接口 ü 支持内存池、协程池 检查 ü 支持插件机制,可根据需求自定义 生成代码
8. 02 Kitex 框架设计概述和功能特性
9. 框架设计的关键要素 扩展性 易用性 功能 丰富度 高性能
10. Kitex 框架设计概述 – 模块划分 Ø Kitex 核心 API 定义、核心逻辑实现以及对各 API 的默认扩展 Ø Kitex Byted 与字节内部基础能力集成的扩展 实现 Ø Kitex Tool IDL 解析和代码生成器
11. Kitex 框架设计概述 – 模块层级
12. Kitex 框架设计概述 – 扩展性 • 协议、通信、服务治理(注册、发现、限流…)、监控、异常处理、元信息处理、诊断…
13. Kitex 框架设计概述 – 扩展性 Ø Netpoll 扩展示例
14. Kitex 框架设计概述 – 易用性 • 无论是 Thrift、Kitex Protobuf、gRPC,一样的使用体验 $ kitex -service mydemo greet.thrift $ kitex -service mydemo -type protobuf greet.proto • 实现 handler
15. Kitex 框架设计概述 – 易用性 • RPC直连调用测试代码 • 编译 & 启动服务 $ ./build.sh $ ./output/bootstrap.sh 2022/05/26 15:03:01.405923 server.go:77: [Info] KITEX: server listen at addr=[::]:8888 • 测试 $ go test -v -run TestGreetService 2022/05/29 15:03:10.006479 client_test.go:20: [Info] Hello Kitex!
16. Kitex 框架设计概述 – 功能丰富度 • 内置:通用的内置到框架,也支持扩展定制 • 如负载均衡、熔断、限流、超时、重试、连接池、监控埋点、日志 • 扩展:非通用的扩展完善 • 如服务注册发现、指标监控、链路跟踪、配置
17. Kitex 框架设计概述 – 高性能 Ø Thrift
18. Kitex 框架设计概述 – 高性能 Ø Protobuf 注意:以上是各框架对 Protobuf 支持的压测,但并非使用一个协议,gRPC 协议基于 HTTP2 处理复杂性更高。 后面有对针对 gRPC 协议的压测数据。
19. Kitex 功能特性 – 协议、通信
20. Kitex 功能特性 – Thrift 高性能编解码 Ø Thrift ‒ FastWrite/Read 结合 Netpoll NoCopy API 重新设计的 Thrift 生成代码,减少函数调用、内 存拷⻉,优化生成代码提升 inline 效果。
21. Kitex 功能特性 – Thrift 高性能编解码 Ø Frugal 无需生成编解码代码,基于 JIT 的高性能动态 Thrift 编解码器~ 结合 Kitex 在大部分场景性能表现优于生成代码的编解码
22. Kitex 功能特性 – Protobuf 高性能编解码 Ø Protobuf ‒ FastWrite/Read 参考 Thrift 的 FastWrite/Read 实现,重新设计了 Protobuf 生成代码,避免反射和拷⻉的开销。 目前内置在 Kitex,后续考虑拆分开源。 • Protobuf Benchmark 官方对比测试 • FastWrite: (ns/op) ↓41.5% ,(B/op) ↓4.5% • FastWrite: (ns/op) ↓67.8% ,(B/op) ↓83.9%
23. Kitex 功能特性 – Protobuf 高性能编解码 Ø Protobuf ‒ FastWrite/Read • gRPC 协议 Unary 请求压测对比 Kitex 也在针对低并发场景优化性能
24. Kitex 功能特性 – Thrift Validator Ø thrift-gen-validator thriftgo 工具的插件,根据 Thrift IDL 中定义的注解描述约束给对应的 struct 生成 IsValid() error 方法,校验值的合法性。 $ kitex --thrift-plugin validator -service a.b.c youridl.thrift
25. Kitex 功能特性 – 泛化调用 Ø 网关场景 Ø 网关泛化调用 - 没有生成代码,没有业务数据结构 开源的一些泛化方式 Kitex 泛化方式:基于 idl 中的注解映射
26. Kitex 功能特性 – 泛化调用 Ø HTTP -> Thrift 泛化调用
27. Kitex 功能特性 – 泛化调用 Ø 泛化调用相关的扩展实现 有需求也会考虑 Protobuf 泛化调用
28. Kitex 功能特性 – 可视化-细粒度监控埋点
29. Kitex 功能特性 – 可视化-细粒度监控埋点 • 结合链路跟踪展示详细 RPC 调用信息
30. Kitex 功能特性 – 可视化-细粒度监控埋点 • 服务端 Tracer 展示
31. Kitex 功能特性 – 可视化-细粒度监控埋点 • 调用端 Tracer 展示
32. Kitex 功能特性 – 可视化-服务信息查询 Ø 框架 Debug 运行时状态查询 & pprof http://ip:18888/kitex/runtime http://ip:18888/debug/pprof
33. Kitex 功能特性 – 信息透传 Ø Metainfo • Golang 组件通用的元信息透传基础库 • github.com/bytedance/gopkg/cloud/metainfo
34. Kitex 功能特性 – 信息透传 Ø MetaHandler
35. 03 Kitex 开源和在字节内的实践
36. Kitex 开源 Kitex 不是为了开源而实现的,但它的实现是面向开源的~
37. Kitex 字节内部的实践 Ø 如何与内部基础设施集成
38. Kitex 字节内部的实践 Ø ShmIPC-应用在 ServiceMesh 和 IPC 场景 • 根据环境变量开启,用戶无需感知
39. Kitex 字节内部的实践 Ø 微服务合并部署 非合并微服务调用 合并微服务调用
40. Kitex 字节内部的实践 Ø 微服务合并部署 • 初始化条件判断 - 合并模式 • 监听多个地址 • 单独的服务发现 • 单独的连接池策略略(ShmIPC) • 多通信方方式:Shm、UDS、TC
41. 04 总结和展望
42. 总结 Ø 字节 Golang 框架的演进和遇到的问题 Ø 框架设计的关键要素:扩展性、易用性、功能丰富度、高性能 Ø Kitex 框架设计概述,并介绍了部分特有的功能特性
43. 展望 Ø 与社区同学共建,持续丰富社区生态 Ø 结合工程实践,为微服务开发者提供更多便利 Ø 完善好 BDThrift 生态,同时也会优化 Protobuf/gRPC Ø 更多特性支持或开源,ShmIPC、Proxyless、 Quic、Protobuf 泛化…
44. CloudWeGo 开源项目 www.cloudwego.io … 服务框架 Kitex Hertz Rust 框架 … 基础库 Netpoll Thriftgo Sonic Frugal
45. THANKS CloudWeGo 公众号

Home - Wiki
Copyright © 2011-2024 iteam. Current version is 2.137.1. UTC+08:00, 2024-11-16 18:42
浙ICP备14020137号-1 $Map of visitor$