python 转 go

本文分享了从Python转向Go的原因,包括性能需求和实际测试结果。在迁移过程中遇到了包生态不完善、版本管理和部署的挑战。尽管Go的开发效率略低,但其类型检查、并发处理和编译特性带来了更稳定的运行和更高的性能。总结了Go的优点如性能、goroutine、静态类型等,同时也指出其表达力不足、错误处理和包管理等方面的挑战。对于性能和QPS有高要求的场景,Go是不错的选择;而对于Web开发,Python依然适用。
摘要由CSDN通过智能技术生成

最开始我们的业务架构是 all Python,api 服务使用 flask + celery + redis + mongdb + 基于 thrift 的 C++服务, 处理简单的图片分类。
转的原因:后面来了一个业务需求,对 api 的响应速度和 qps 都有要求,基本上是几千 qps 每秒。因为本身的业务逻辑比较简单,所以我们 profiling 了下,发现瓶颈在 Python 本身。我以前用过 Golang,所以基于 Gin 框架实现了一个简单的业务逻辑进行压测,发现性能比 Python 好很多,达到我们的预期。

工程效率对比:

  • 一个是响应时间快了不少,Python 的话能优化的空间有限,而且效果也不是很理想
  • 单机支持的 qps 提升很多,不需要增加线上的机器就可以满足新需求
    上面这两个提升基本是 5 倍左右吧,具体记不清了

然后我们基于 Golang 实现了原来的鉴别服务,达成了项目需要。

遇到的坑:

  • 包生态还不完善。我们重度依赖 Celery,Golang 当时没有类似 Python Celery 这个库,所以只能参考 Celery 的原理实现一个类似的。还有一些基于 Pandas 的代码还是保留 Python 版本。
  • Golang 的包版本管理以及下载比较麻烦,本地有代理还好,线上部署如果是实时拉代码的话很麻烦。后来我们把需要的库都本地打包到 docker 镜像里作为 base image。

其他收益

相比 Python 好的地方

  • Golang 的类型检查和基于防御性编程的错
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值