知乎从Python转为Go,是不是代表Go比Python好?

易娃 等级 777 1 0

众所周知,知乎早在几年前就将推荐系统从 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 作为开发语言。

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

收藏
评论区

相关推荐

知乎从Python转为Go,是不是代表Go比Python好?
众所周知,知乎早在几年前就将推荐系统从 Python 转为了 Go。于是乎,一部分人就说 Go 比 Python 好,Go 和 Python 两大社区的相关开发人员为此也争论过不少,似乎,谁也没完全说服谁。 知乎从Python转为Go,是不是代表Go比Python好?我认为,各有优点,谁也取代不了谁,会长期共存! “由 Python 语言转向 Go 语言
1年前的小五都用 Python 来做什么?
↑ 点击上方 “凹凸数据” 关注 + 星标  每天更新,干货不断   (多图预警) 注:这是小五一年前在知乎的回答,当时还只有凹凸数读一个公众号,所以很多图片都会带有数读或者知乎的水印。 作为一个菜鸟数据分析师,只会sql+python业余时间写写文章:用python爬取数据→数据清洗→数据分析→数据可视化词云镇楼20190730回来看,前面
最好用的Python学习教程第一篇章
学习不打烊,充电加油只为遇到更好的自己。希望大家如果觉得好的话可以点赞,评论鼓励一下。 一、从这里学起?学Python你应该知道这些内容。 1.1 导语如何快速学会Python?这篇博客会告诉你如何从无到有,构建自己的知识框架,博客主励志打造最好用的Python基础教程。 1.2 为什么要学习Python 简单易学Python是一种代表简单主义思想的语言,
关于学习python的一点意见分享
Python适合初学者入门。Python作为一门叫做ABC语言的替代品。 Python提供了高效的高级数据结构,还能简单有效地面向对象编程。相比其他主流语言,有更好的可读性,上手相对容易。各种模块,免去了很多重复的工作,更快地写出东西。配置环境也不复杂,mac和linux内置了Python。自学python,最大的3个经验:.一本易懂,比较好的教程,从头到尾
小白学习python该往哪方面走小白必看
整理了Python的7大就业方向,希望大家能找到适合自己的,然后学习下去,完成人生的目标。1、Web开发(Python后端)Python有很多优秀的Web开发框架,如Flask、Django、Bootstar等,可以帮助你快速搭建一个网站。当需要一个新功能时,用Python只需添加几行代码即可,这受到了很多初创型公司的一致欢迎。像知乎、豆瓣、小米这样的大厂,
全网最全python学习路线图,让学习不迷路
学习Python有一段时间了,最近也是在不断的整理Python相关的基础知识和学习一些新的知识,想来分享给大家。我刚开始接触Python时,和大多数初学者一样不知道从那里开始学习python,我也在网上找了许多python相关的资料来学习,但是资料多也不见得就好,因为不知道从哪里开始下手,走了许多弯路。后面我就整理了一套对初学者来说学习python能很快上手
python的这些必备干货知识点,快来看看有没有你不了解的?
Python是当前主流的编程语言之一,其优点有:一:语法简洁,可以让使用者用少量的代码完成相对复杂的效果。二:标准库和第三库多,功能强大;三:站在了人工智能和大数据的风口上;像国内的豆瓣呀,知乎呀等等知名网站都是基于python开发的,而Youtube、Reddit、Dropbpx也是用python的框架开发的。近几年学习python的小伙伴越来越多,那么p
知乎文章转Markdown的艰辛历程
好吧,让我们从头说起。众所不周知,我有了我自己的博客,于是就想把我的知乎内容同步到博客上去(目前还空空如也)。但是,出于能犯懒就犯懒的原则,我决定做一个自动化程序,自动将知乎上的文章转换成Markdown食用。嗯……结果还挺满意的,就是好像时间耗费的长了一点(三个月啊,中间搁置了两个月零30天)。。总之,我Python爬虫,成功构建了一个知乎2MD全自动转换
小白建议收藏,python20条非常实用的代码
Python一直以来被诟病速度慢,影响开发效率,希望这次Guido老爷子能帮python打一场漂亮的翻身仗。这篇文章不准备介绍Python速度如何,而是给大家带来一些常用且实用的Python代码实例,几乎是开发者必备的知识点。1、合并两个字典Python3.5之后,合并字典变得容易起来。我们可以通过符号解压字典,并将多个字典传入中,实现合并。def Merg
VIM Go的IDE搭建图解
响应号召,咋们不翻墙 安装总体流程 ------ * go安装 * 查看vim是否支持python插件编写; * 下载vundle,管理vim的各种插件; * 配置.vimrc, 用于表现vim的功能行为,包括:颜色、字体、布局、IDE等 * 因为要安装go的IDE,没有翻墙,则需要github下载golang官方的tools包 *
25条很棒的Python一行代码,建议收藏!
点击上方“ **Python爬虫与数据挖掘** ”,进行关注 回复“**书籍**”即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 中岁颇好道,晚家南山陲。 自从我用Python编写第一行代码以来,就被它的简单性、出色的可读性和特别流行的一行代码所吸引。 在下面,我将给大家介绍并解释一些Python一行程序。
Python 爬虫:把廖雪峰的教程转换成 PDF 电子书
写爬虫似乎没有比用 Python 更合适了,Python 社区提供的爬虫工具多得让你眼花缭乱,各种拿来就可以直接用的 library 分分钟就可以写出一个爬虫出来,今天就琢磨着写一个爬虫,将廖雪峰的 Python 教程 爬下来做成 PDF 电子书方便大家离线阅读。 开始写爬虫前,我们先来分析一下该网站[1](https://www.oschina.net/
Python快速入门(一)
**引言** Python作为一个,目前最火的编程语言之一,已经渗透到了各行各业。它易学好懂,拥有着丰富的库,功能齐全。人生苦短,就用Python。 这个快速入门系列分为六篇,包含了Python大部分基础知识,每篇阅读时间不长,且内容含量高。大家最好亲自码一遍代码,这样可以更有收获。 **概要**
Python爬取暴走漫画动态图
最近再之乎上看到比较好的Python爬虫教程,看过之后对爬虫有了大概的了解,随后自己写了个爬取[暴走漫画](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fbaozoumanhua.com%2Fcatalogs%2Fgif)动图的爬虫练练手,另外附上[Python爬虫教程](https://w
Python环境搭建—安利Python小白的Python和Pycharm安装详细教程
人生苦短,我用Python。众所周知,Python目前越来越火,学习Python的小伙伴也越来越多。最近看到群里的小伙伴经常碰到不会安装Python或者不知道去哪下载Python安装包等系列问题,为了方便大家学习Python,小编整理了一套Python和Pycharm安装详细教程,只要大家按照这个步骤来,就可以轻松的搞定Python和Pycharm的安装了。