|
我也来说说,微信的后台。
微信整个后台系统基本都是linux C/C++构建的。RPC框架,服务器框架代码生产器,微服务系统,例如服务发现,基于一致性Hash的路由策略,自适应的流量控制和过载控制等等都是linux C/C++的。
另外,基于paxos容灾的NoSQL分布式存储系统,自建的消息队列,基于C写成的协程框架,日志上报系统,保证全局唯一且递增的ID生成器等也是linux C++/C的。
各个业务,消息,朋友圈,公众号,支付,游戏等,也都是构建在这套基础系统上,也是linux C/C++.
主流的开发环境是ssh到开发机,用 vim + gcc + gdb , emacs也有用,不过比较少。整体的代码量不记得了,可能超过千万行了。因为是微服务架构,每个服务(模块)的代码量不是很大,一般在千到万行的级别,用vim 完全可以搞定。 而且vim 语法高亮,自动补全,ctags, 搭配gcc + gdb 无论是编译还是调试都很方便,不觉得比IDE差。
当然也有同学在本地机器上用IDE写好,再传到编译机,编译和调试的,不过不是特别多。
一般一个同学可能会负责十几个模块。一个需求下来的时候,根据不同的情况,可能会要修改几个到十几个模块,有时一个人可以搞定,有时要几个,都看情况。只要保证不要有两个人同时修改一个模块的代码就行。
开发效率倒没有因为这个环境的问题受到影响,大家好像也没有在这个上面遇到大问题。麻烦的问题还是来自产品需求的频繁变更。
2019-04-28
一段时间没看,有了些评论。
看评论有不少同学在说没有版本管理,这个怎么可能吗? 当然有呀,要不怎么工作。
但就算有版本管理,如果两个同学去修改同一个模块,也有代码合入的问题呀,你也需要花时间去讨论合并的逻辑吧。我上面表述的意思是,一般开发流程都是很顺的,这种同时修改的合入会带来沟通的开销,排期的时候,我们尽量避开。
我们的开发环境跟线上编译环境是分离的。在上线到正式环境的是,会经过线上编译环境的统一编译,保证各种依赖都是一致的。
有全自动化的发布系统。支持自动化测试(测试用例需要提供),灰度发布,灰度发布支持按城市,按机房,按机器等粒度。过程中也有支持审批流程(比如有些关键模块的上线,需要上级的批准)。灰度完成后,会列出相应的监控曲线,让操作者可以一眼看到灰度带来的变化。
因为当时这个题目只是提到vim, 我的回到也就是针对vim的,其他部分没有涉及。但感觉大家都喜欢怎么都喜欢往坏的方向去揣测呢?微信这么大的系统,怎么可能会连版本管理系统都没有呢,正常逻辑都不可能吧。
我只是随便描述下,当然不会面面聚到,但我感觉大家的揣测都有点不怀好意的感觉,好像贬低了我的描述,就可以显得你很牛B吗?
我一直以为知会是个高端的社区,可以平和的探讨和交流问题的,但感觉是喷子居多,才来知乎没多久,就有点让我累觉不爱了。 |
|