Posts in 2021
-
Release v0.0.5
Sunday, September 26, 2021 in Kitex
项目:
功能: 增加默认的 ErrorHandler 封装 Error(用户指定会被覆盖)。 metainfo 支持反向传递。 支持了 JSON 泛化调用,使用指南可参考:Kitex 泛化调用使用指南。 优化: 多路复用场景下使用了新的 netpoll API 来改善吞吐和延迟。 多路复用场景下支持 metainfo 的正向和反向传递。 Client 会在需要的时候默认使用 RPCTimeout 中间件。 连接池配置增加全局空闲连接和单实例空闲连接合法性校验。 当更新 QPS 最大限制时会重置计数 …
-
字节跳动 Go RPC 框架 Kitex 性能优化实践
Thursday, September 23, 2021 in 新闻
项目:
前言 Kitex 是字节跳动框架组研发的下一代高性能、强可扩展性的 Go RPC 框架。除具备丰富的服务治理特性外,相比其他框架还有以下特点: 集成了自研的网络库 Netpoll;支持多消息协议(Thrift、Protobuf)和多交互方式(Ping-Pong、Oneway、 Streaming);提供了更加灵活可扩展的代码生成器。 目前公司内主要业务线都已经大范围使用 Kitex,据统计当前接入服务数量多达 8k。Kitex 推出后,我们一直在不断地优化性能,本文将分享我们在 Netpoll …
-
Release v0.0.4
Thursday, September 16, 2021 in Netpoll
项目:
优化: 默认支持 TCP_NODELAY 支持在一个循环中读写 返回 nocopy rw 的真实错误 更改了循环策略的默认数量 重新定义了 EventLoop.Serve arg: Listener -> net.Listener 在 DisableGopool 中增加了 API 删除了读锁 连接 Flush API 调整为阻塞的 Bug 修复: 设置剩余待读取大小。
-
字节跳动开源内部微服务中间件 CloudWeGo
Tuesday, September 07, 2021 in 新闻
项目:
开源背景 CloudWeGo 是一套由字节跳动开源的、以 Go 语言为核心的、可快速构建企业级云原生架构的中间件集合,专注于微服务通信与治理,具备高性能、可扩展、高可靠的特点。 字节跳动内部使用 Golang 作为主要的业务开发语言,我们支持着数万个 Golang 微服务的可靠通信,经过数量众多的微服务和海量流量的验证,我们已经有了较为成熟的微服务最佳实践,于是考虑将内部的实践开源出去丰富社区生态。 但微服务相关的项目较多,每个项目单独开源对外部用户并不友好,为了更好地让大家聚焦于微服务, …
-
Release v0.0.4
Thursday, August 26, 2021 in Kitex
项目:
优化: transMetaHandler 在自定义 boundHandlers 之前执行,保证自定义 boundHandlers 可以拿到 RPCInfo 信息。 TransError 暴露封装 error 的 typeID 用于支持自定义 Error 回传错误码。 Bug 修复: 复用 RPCInfo 不对 stats level 重置, 以修复在使用 netpollmux 时 metric 丢失问题。 清理不存在节点的连接池。 Streaming 中增加 Netpoll EOF 错误判 …
-
Release v0.0.2
Friday, July 30, 2021 in Kitex
项目:
优化: Kitex 在没有 tracer 时关闭 stats 分阶段耗时采集,避免无 Trace 时额外的性能消耗。 Kitex client 默认使用连接池。 Bug 修复: 修复了一个 lbcache 中 nil-pointer 的错误。 修复了一个 retry 重试(Backup Request)中的 data race 问题。 工具: Kitex 工具去掉默认生成的配置文件。 Kitex 工具现在使用最新的 thriftgo API 以避免老版 API 在生成代码时的几个边角案 …
Posts in 2020
-
字节跳动在 Go 网络库上的实践
Sunday, May 24, 2020 in 新闻
项目:
本文选自“字节跳动基础架构实践”系列文章。 “字节跳动基础架构实践”系列文章是由字节跳动基础架构部门各技术团队及专家倾力打造的技术干货内容,和大家分享团队在基础架构发展和演进过程中的实践经验与教训,与各位技术同学一起交流成长。 前言 RPC 框架作为研发体系中重要的一环,承载了几乎所有的服务流量。随着公司内 Go 语言使用越来越广,业务对框架的要求越来越高,而 Go 原生 net 网络库却无法提供足够的性能和控制力,如无法感知连接状态、连接数量多导致利用率低、无法控制协程数量等。 为了能够获 …