最近一个评论腾讯技术的问题在知乎上引发了近40万人浏览,个回答。其中有一个回答认为腾讯的技术已经过时,这个回答在南极圈的社群也引发了大讨论。
老企鹅小X第一时间撰文反驳了文中某些观点。
作为腾讯的全栈技术,小X的职级T3,-年任职腾讯,他不仅回忆了当年的工作内容说明了腾讯的技术实力,还回忆了当年在腾讯工作时,那些充满着创新、努力、开发的小细节。
腾讯之所以能够成为世界巨头,技术实力当然不可缺少,更重要的是企业文化和精神,才是更重要的秘诀所在。
最近网络上突然出现一篇文章质疑腾讯现在年的技术建设,我读过文章里面的内容对比我所知道的内幕,我是不认同的,可我是无法直接反驳,因为我也不清楚腾讯现在的技术平台,但我可以讲一下9年前腾讯的技术基础,用9年前的情况对比文章里面现在提到的情况。
我不觉得该文章仅仅是偏颇,而是作者对腾讯了解不足够多。我做不到像作者那样站在那样的高度去评价腾讯,文中提到的、我不了解的情况我也无法发表看法,我也考究不了该文作者写这些内容的时从何处获取的信息。因此本文也不可能全面的介绍腾讯的技术架构,原因是我虽然在腾讯工作的时间比较长,但仅在腾讯的一个部门的不同技术岗位上工作过。
我摘选出文章的一些片段,讲一下我的看法
一、文中提到:“有内部mysql集群(这算最基础了吧),可是呢,必须从指定的远程跳板机用命令行处理,没有一个可用的客户端或者webGUI,然后还强制不允许安装myphpadmin之类的开源,说是不安全;”
对于这个问题,我分几个角度去讲:
1、DB的Web管理界面是存在的,我可以非常肯定的说,在年的时候,我工作的部门ISD(现在叫SNG)就已经用Web去管理大量的数据库和数据库的cacheserver(名字不透露),DB的管理手册我看过,如果打印出来是很厚的一份文档,里面大部分内容并不是平时网上看的Mysql的命令,而是内部开发的管理平台的Web界面,用于数据的变更,备份,对于数据库的初始化、安装是另外一个系统。
2、对于腾讯不让使用phpMyAdmin(文中写成myphpadmin,应该是笔误,我在百度和bing上没有搜到myphpadmin)这个情况有点失礼的说,抱怨腾讯不让使用phpMyAdmin的话确实不合适,但是要说明白这个问题,倒需要花一点篇幅从几个方面去说:
1)我在腾讯工作的时候,腾讯并没有不让安装phpMyAdmin,我记得我为我的同事安装过phpMyAdmin,但仅限于开发环境,测试环境并没有,生产环境更加不可能有。在当时,腾讯的测试环是会有一些真实的数据,请想一下,以腾讯的规模,通过phpMyAdmin这样直接去接触数据库会有多大的风险,phpMyAdmin又不能提供数据库操作的审计的功能(当然,假如做二次开发是可以的,可是直接用开源是不行的),万一有人在phpMyAdmin上面下载用户数据或上传一些数据,我想这样造成的后果绝对比腾讯不让使用phpMyAdmin要大很多。对于测试环境,我要额外说明一下,读者千万别误会通常我们的认为的腾讯的测试环境可以随便访问腾讯的生产环境的数据库,我说的腾讯的测试环境包括灰度测试,就比如说,要验证用户对一个新开发的功能的反馈,那么腾讯会选择小范围的向一些号段的QQ用户开放,让这些用户看到这个功能的入口,观察这部分用户的反应,再做产品运营上的调整,这种灰度测试,这灰度测试的数据,也是放在生产环境的,是用户的真实的数据,毫无疑问这些数据是不能随意触碰的。
2)哪怕腾讯允许使用phpMyAdmin,我相信大部分在腾讯工作且需要操作数据库的人也不会去用phpMyAdmin,要知道,在年之前腾讯的业务已经是亿级了,对于这种亿级的业务系统的数据库的大致规模我简单描述一下,但不能太详细。
在年,Qzone空间里面的一些模块使用的数据库是的数量是两位数,尤其是QQ农场最火爆的时候,部门为了支撑这个业务,运维团队几乎大部分时间都在为Qzone申请资源设备或从原有的设备中腾挪出空闲的设备出来给Qzone使用,每次大的扩容都是将数百台设备在极短的时间里上线。我读书的时候就经常使用phpMyAdmin,也曾经修改过phpMyAdmin的源码,试想一下:先不考虑全局,一个模块里数百上千个数据库实例怎么用phpMyAdmin去管理?我们都知道像这种量级的用户数据必然要分库分表的,分库的就会导致用户的数据会分散在数百上千个数据库物理服务器(那时还没有腾讯云,都是用物理服务器)上,这样的情况下用phpMyAdmin能管得过来吗?
我没在腾讯工作之前曾经在多玩(后来的欢聚时代,多玩现在好像是被剥离出来了)亲自设计开发了多玩通行证系统:udb,那时我设计的保守容量是一亿用户,我拆了张表,逻辑上分了10个库,像这样数据库结构要查询用户数据,现在有什么好的手段我不清楚,但在当时只能是需要开发管理后台根据用户的id算出所在的库表后再去访问。
3)在腾讯这样的公司,哪怕是在年,直接操作数据库是会带来数据和缓存不同步,因为server要承受的请求是海量的,如果这些请求都直接传递到数据库硬盘是支撑不住的,因此在很早的时候(具体什么时候我也不知道)腾讯就在mysql前端部署了大量的cacheserver(名字不透露,统一用cacheserver称呼),来自Web前端的CGI/FCGI/自研发的