天池中间件大赛Golang版Service Mesh思路分享

本文分享了作者在天池中间件大赛中使用Golang实现Service Mesh的心得和优化过程,包括为何选择Golang、优化点剖析、网络模型的改进,如Reactor网络模型和复用EventLoop,以及在高并发场景下的性能挑战和解决方案。最终在512并发压测中取得良好成绩。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这次天池中间件性能大赛初赛和复赛的成绩都正好是第五名,出乎意料的是作为Golang是这次比赛的“稀缺物种”,这次在前十名中我也是侥幸存活在C大佬和Java大佬的中间。

关于这次初赛《Service Mesh for Dubbo》难度相对复赛《单机百万消息队列的存储设计》简单一些,最终成绩是6983分,因为一些Golang的小伙伴在正式赛512并发压测的时候大多都卡在6000分大关,这里主要跟大家分享下我在这次Golang版本的一些心得和踩过的坑。

由于工作原因实在太忙,比赛只有周末的时间可以突击,下一篇我会抽空整理下复赛《单机百万消息队列的存储设计》的思路方案分享给大家,个人感觉实现方案上也是决赛队伍中比较特别的。

What’s Service Mesh?

Service Mesh另辟蹊径,实现服务治理的过程不需要改变服务本身。通过以proxy或sidecar形式部署的 Agent,所有进出服务的流量都会被Agent拦截并加以处理,这样一来微服务场景下的各种服务治理能力都可以通过Agent来完成,这大大降低了服务化改造的难度和成本。而且Agent作为两个服务之间的媒介,还可以起到协议转换的作用,这能够使得基于不同技术框架和通讯协议建设的服务也可以实现互联互通,这一点在传统微服务框架下是很难实现的。

下图是一个官方提供的一个评测框架,整个场景由5个Docker 实例组成(蓝色的方框),分别运行了 etcd、Consumer、Provider服务和Agent代理。Provider是服务提供者,Consumer是服务消费者,Consumer消费Provider提供的服务。Agent是Consumer和Provider服务的代理,每个Consumer或 Provider都会伴随一个Agent。etcd是注册表服务,用来记录服务注册信息。从图中可以看出,Consumer 与Provider 之间的通讯并不是直接进行的,而是经过了Agent代理。这看似多余的一环,却在微服务的架构演进中带来了重要的变革。

image

有关Service Mesh的更多内容,请参考下列文章:

赛题要求

  • 服务注册和发现
  • 协议转换(这也是实现不同语言、不同框架互联互通的关键)
  • 负载均衡
  • 限流、降级、熔断、安全认证(不作要求)

当然Agent Proxy最重要的就是通用性、可扩展性强,通过增加不同的协议转换可以支持更多的应用服务。最后Agent Proxy的资源占用率一定要小,因为Agent与服务是共生的,服务一旦失去响应,Agent即使拥有再好的性能也是没有意义的。

Why Golang?

个人认为关于Service Mesh的选型一定会在Cpp和Golang之间,这个要参考公司的技术栈。如果追求极致的性能还是首选Cpp,这样可以避免Gc问题。因为Service M

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值