众所周知,知乎早在几年前就将推荐系统从 Python 转为了 Go。于是乎,一部分人就说 Go 比 Python 好,Go 和 Python 两大社区的相关开发人员为此也争论过不少,似乎,谁也没完全说服谁。

作者:hello架构

大概每个开发人员应该都会认为自己使用的语言是世界最好的语言吧。这都相对来说的。对于每个人应该都是不同的。

众所周知,知乎早在几年前就将推荐系统从 Python 转为了 Go。于是乎,一部分人就说 Go 比 Python 好,Go 和 Python 两大社区的相关开发人员为此也争论过不少,似乎,谁也没完全说服谁。

知乎从Python转为Go,是不是代表Go比Python好?我认为,各有优点,谁也取代不了谁,会长期共存!

“由 Python 语言转向 Go 语言就说明 Go 语言比 Python 语言好”完全是一种片面理解。

“语言至上论”是解决不了业务问题的,选 Go 也不行,Java 也不行。

Go 的优势是文件易部署,协程机制相对成熟且简单,以及静态编译语言的效率,还有就是编程模式相对简单。这大概是现在越来越多企业尝试Go的原因,除了知乎,B 站也把核心部件从 PHP 转到了Go。

除此之外,BAT 等互联网巨头,内部都有系统采用了 Go 语言。

那是不是说 Python、PHP 不行了?当然不是也不应该是这样的。如果要坚持Python、PHP,也是没问题。一个系统沉积太久的话,会产生很多大大小小、零零散散的“技术债”,这其间就涉及解决成本的考量,重构、重写、抑或重新设计核心模块或新模块?由此又带来技术选择的问题。还有Python、PHP人才储备的问题,还有团队希望尝试新技术的考虑。这些问题交织在一起,就不是哪个编程语言好跟坏这么简单的事儿了。所以还是要回到业务层面来看技术解决之道。

不得不说,Go的协程,一个“go”就能解决绝大多数问题,确实写代码很简洁,Python 新添的 asyncio 还是相对复杂,Future、Task等等还是有不少门道的。所以,技术永远只有合适的,而没有最佳的,也没有非此即彼的好坏分明。

我相信,如果团队在 Python 方面积累厚实,且热衷专注于 Python,选择Python 应该就是个大概率事件。Python 现在已经应用颇广,特别是在 AI 领域带动下,Python 人才也不像以前那样难找工作了,铁打的营盘流水的兵,是不是知乎也面临人才流动压力?此外,毕竟 Python 的生态,在这么多编程语言中,是数一数二的,Go 虽热,但在社区方面恐怕还是比不上 Python、PHP,这也是一个现实问题。知乎前端换了 React,我没感觉比原来的 AngularJS 进步,但不能就此说 React 不行。尝试用 Go 写一些原来 Python 的范围,也是同理。而且一个系统同时应用多种开发语言、一系列技术栈,都是再正常不过的事了。

Python 有自己的场景,不会被彻底替换的,担心也是多虑的,反正都是“增删改查”嘛!

至于,知乎为什么选择 Go,内部的一些工程师透露:选择 Go 并不是一个人的决定,而是整个团队深思熟虑后的结果!

众所周知,知乎社区后端的主力编程语言是 Python。

随着知乎用户的迅速增长和业务复杂度的持续增加,核心业务的流量在过去一年内增长了好几倍,对应的服务端的压力也越来越大。随着业务发展,我们发现 Python 作为动态解释型语言,较低的运行效率和较高的后期维护成本带来的问题逐渐暴露出来:

运行效率较低。知乎目前机房机柜空间已经不足,按照目前的用户和流量增长速度,可预见将在短期内服务器资源告急(针对这一点,知乎正在由单机房架构升级为异地多活架构);

Python 过于灵活的语言特性,导致多人协作和项目维护成本较高

受益于近些年开源社区的发展和容器等关键技术的普及,知乎的基础平台技术选型一直较为开放。在开放的标准之上,各个语言都有成熟的开源的中间件可供选择。这使得业务做选型时可以根据问题场景选择更合适的工具,语言也是一样。

基于此,为了解决资源占用问题和动态语言的维护成本问题,我们决定尝试使用静态语言对资源占用极高的核心业务进行重构。

为什么选择 Golang?

如上所述,知乎在后端技术选型上比较开放。在过去几年里,除了 Python 作为主力语言开发,知乎内部也不乏 Java、Golang、NodeJS 和 Rust 等语言开发的项目。

Golang 是当时知乎内部讨论交流最活跃的编程语言之一,考虑到以下几点,知乎决定尝试用 Golang 重构内部高并发量的核心业务:

  • 天然的并发优势,特别适合 IO 密集应用
  • 知乎内部基础组件的 Golang 版生态比较完善
  • 静态类型,多人协作开发和维护更加安全可靠
  • 构建好后只需一个可执行文件即可,方便部署
  • 学习成本低,且开发效率较 Python 没有明显降

相比另一门也很优秀的待选语言—— Java,Golang 在知乎内部生态环境、部署的方便程度和工程师的兴趣上都更胜一筹,最终我们决定,选择 Golang 作为开发语言。

最后,我们做个简单总结:第一点,重构语言的选择,关键要跟公司技术背景和业务场景结合起来;第二点,架构尽量灵活,并不断自我迭代;第三点,监控要早点开展,并尽可能底层化、通用化。

阅读目录(置顶)(长期更新计算机领域知识)

阅读目录(置顶)(长期更新计算机领域知识)

阅读目录(置顶)(长期科技领域知识)

歌谣带你看java面试题

第二十五期:知乎用Go替代Python,说明了啥相关推荐

  1. iOS摸鱼周报 第二十五期

    本期概要 话题:本期跟竹立交流一下关于求职和学习方法的话题. Tips:如何清除启动图的缓存:如何优化 SwiftLint 流程. 面试模块:本期解析一道 GCD 死锁题. 优秀博客:整理了 Swif ...

  2. android 猜歌游戏报告,Android第二十五期 - 猜歌小游戏

    周五开会时,有人提出在团队中采用结对开发的Agile实践.     当然团队里有人说,如果让新手与水平高的人结对,基本上就是知识的单向传递了,对于新手来说的确是个不错的学... //#include ...

  3. 第二十五期 总结《路由器就是开发板》

    在读<人人都是产品经理>这本书时,我最大的收获就是:不光要低头拉车,还要抬头看路.研究技术为了一个问题不吃不睡是经常的,但为了一个超出个人挑战能力的问题浪费时间而影响到团队的进度是万万不可 ...

  4. 第二十五期:搞定Linux Shell文本处理工具,看完这篇集锦就够了

    Linux Shell是一种基本功,由于怪异的语法加之较差的可读性,通常被Python等脚本代替.既然是基本功,那就需要掌握,毕竟学习Shell脚本的过程中,还是能了解到很多Linux系统的内容. L ...

  5. 第二十五期:5G预约用户超千万!是“虚火”还是“真旺”?

    十一假期刚过,"中国5G套餐预约数已超千万"的消息就迅速在朋友圈刷屏,这一庞大的数字背后,也引发了业界关于5G市场的种种思考和担忧:预约热闹过后真正的5G用户会有多少?暂时不选择5 ...

  6. Android第二十五期 - 猜歌小游戏

    代码已经整理好了,如下效果图: 地址:http://yunpan.cn/cArkdixh5NbpQ  提取码 9300

  7. 【AI视野·今日NLP 自然语言处理论文速览 第二十五期】Fri, 1 Oct 2021

    AI视野·今日CS.NLP 自然语言处理论文速览 Fri, 1 Oct 2021 Totally 36 papers

  8. 【AI视野·今日Robot 机器人论文速览 第二十五期】Fri, 1 Oct 2021

    AI视野·今日CS.Robotics 机器人学论文速览 Fri, 1 Oct 2021 Totally 26 papers

  9. 赛迪全球科技产业动态周报(第二十五期)发布!

    赛迪全球科技产业动态周报 (10月20日-10月26日) 机器人 日本研发可竖直攀爬楼梯的蛇形机器人 日本京都大学与电气通信大学的联合团队研发出一款能够在竖直楼梯上爬行的蛇形机器人,该机器人在西班牙举 ...

最新文章

  1. 2009年2月Windows Mobile Webcast预告
  2. Pandas简明教程:五、Pandas简单统计操作及通用方式
  3. 第六十七篇、OC_UITableView head下拉图片放大的效果
  4. 依时利考勤机说明书_考勤机(依时利)产品手册
  5. 解决在待办任务菜单中都会抛出异常,由于definitionId=undefined导致的问题
  6. 图的邻接矩阵(C语言)
  7. Spring缓存注解@CachePut , @CacheEvict,@CacheConfig使用
  8. java盒图_《》——8幅图图解Java机制
  9. iis绑定php程序应用池设定,什么是IIS应用程序池以及应用程序池详解
  10. 差分隐私 机器学习_微软发布多个建置可信AI的问责机器学习工具
  11. 深入理解JVM(第二版读书笔记)
  12. 『号外』 排名进入2000!再创佳绩!
  13. Wework和优客工场争相上市,共享办公第一股风云再起
  14. 神通数据库最新安装教程(2021年底)
  15. 说说基因组的垃圾DNA-Transposable elements
  16. 阿里巴巴普惠字体下载链接
  17. linux下设置MySQL密码
  18. 非支配排序遗传算法c语言,第三代非支配排序遗传算法(NSGA-III)
  19. 房地产中介管理信息系统演示
  20. ZPH01 粉尘传感器

热门文章

  1. asp IIS部署An error occurred on the server when processing the URL错误提示解决
  2. 浅析php学习的路线图
  3. Google Analytics 搜索引擎来源
  4. Web3d明日之星基于Javascript和OpenGL的技术
  5. 万能素材库_自媒体运营必备3款黑科技工具,一个万能素材网站,你都在用吗?...
  6. 嵌入式linux系统移植的四大步骤_嵌入式系统移植步骤
  7. 你如何在java中获取线程堆_如何在Windows上获取未在控制台中运行的Java进程的线程和堆转储...
  8. 如何用计算机求和,求和计算器
  9. 深度学习(三)之LSTM写诗
  10. C语言编程规范--代码注释