如何评价Go在百度BFE的应用?
发布网友
发布时间:2022-04-23 08:15
我来回答
共1个回答
热心网友
时间:2022-06-18 05:49
首先BFE( front end)这个项目是一个功能类似于nginx的项目,并不是大家传统意义上理解的前端(html+css+js)。之所以称作“frontend”是因为它相对于整个应用是处于最前面直接处理用户的http请求的。
一开始这个项目是使用c语言写的,因为业界大多数http服务器也都是使用c来开发的(如apache、nginx)这段时期称作c-BFE时期。
但是到后期,这个项目遇到了一些问题:
c语言的开发效率太低了
c语言应对需求变更比较吃力
c语言抽象能力不足
c语言需要手动管理内存(有些不很优秀的组员会写出导致内存泄漏的代码)
bug越改越多,稳定性和功能是一对矛盾
c语言程序员不好招
所以问题基本上是出在c语言不适应了现在互联网的快速变更的需求。之后百度决定重写这个项目。
那么在开发效率上,golang基本上是满足了百度的需求。首先BFE组有很多优秀的c/c++的程序员了,他们转go几乎没有什么压力。对于一些不那么优秀的c程序员(比如经常漏内存的),用golang之后也不会导致一些低级错误了。所以在学习成本上,更换golang对百度影响不大。
另外,golang本身的并发模型、语言的描述能力、和内存管理等功能,也超过了c语言。所以整体上,开发效率得到了很大的提升。
使用golang遇到的最大的一个问题就是gc带来的问题。李炳毅老师也重点是讲解了如何解决gc带来的延迟问题。
在golang的1.3版本,百度的实际测试下,10k个对象大概会带来1ms的延迟。而BFE一般会维持50万左右的连接数,如果不对golang的gc做任何优化的情况下,100万链接大概会带来400ms的延迟。相当于一个http请求还没有打到应用上,单单在nginx上就耗费了400ms。这肯定不能接受。