内容简介:这几天网上很多讨论腾讯技术过时了,腾讯的技术简直一团糟。然后,我们就调侃这个叉子,你不行啊,作为全栈,腾讯的老技术,也不在这个时候发声,于是,叉子被bb的写了一篇。原文是这样的:
这几天网上很多讨论腾讯技术过时了,腾讯的技术简直一团糟。
然后,我们就调侃这个叉子,你不行啊,作为全栈,腾讯的老技术,也不在这个时候发声,于是,叉子被bb的写了一篇。
原文是这样的:
8230人关注。近40万人浏览。300个回答。
于是有了这篇文章:
最近网络上突然出现一篇文章质疑腾讯现在2018年的技术建设,我读过文章里面的内容对比我所知道的内幕,我是不认同的,可我是无法直接反驳,因为我也不清楚腾讯现在的技术平台,但我可以讲一下9年前腾讯的技术基础,用9年前的情况对比文章里面现在提到的情况,能作比对的解的地方,我不觉得该文章仅仅是偏颇,而是作者对腾讯了解不足够多。我做不到像作者那样站在那样的高度去评价腾讯,文中提到的、我不了解的情况我也无法发表看法,我也考究不了该文作者写这些内容的时从何处获取的信息。因此本文也不可能全面的介绍腾讯的技术架构,原因是我虽然在腾讯工作的时间比较长,但仅在腾讯的一个部门的不同技术岗位上工作过。
我摘选出文章的一些片段,讲一下我的看法
一、文中提到:“有内部 mysql 集群(这算最基础了吧),可是呢,必须从指定的远程跳板机用命令行处理,没有一个可用的客户端或者web GUI,然后还强制不允许安装myphpadmin之类的开源,说是不安全;”
对于这个问题,我分几个角度去讲:
1、DB的Web管理界面是存在的,我可以非常肯定的说,在2009年的时候,我工作的部门ISD(现在叫SNG)就已经用Web去管理大量的数据库和数据库的cache server(名字不透露),DB的管理手册我看过,如果打印出来是很厚的一份文档,里面大部分内容并不是平时网上看的Mysql的命令,而是内部开发的管理平台的Web界面,用于数据的变更,备份,对于数据库的初始化、安装是另外一个系统。
2、对于腾讯不让使用 phpMyAdmin(文中写成myphpadmin,应该是笔误,我在百度和bing上没有搜到myphpadmin) 这个情况有点失礼的说,抱怨腾讯不让使用 phpMyAdmin 的话确实不合适,但是要说明白这个问题,倒需要花一点篇幅从几个方面去说:
1)我在腾讯工作的时候,腾讯并没有不让安装phpMyAdmin,我记得我为我的同事安装过phpMyAdmin,但仅限于开发环境,测试环境并没有,生产环境更加不可能有。在当时,腾讯的测试环是会有一些真实的数据,请想一下,以腾讯的规模,通过 phpMyAdmin 这样直接去接触数据库会有多大的风险,phpMyAdmin 又不能提供数据库操作的审计的功能(当然,假如做二次开发是可以的,可是直接用开源是不行的),万一有人在 phpMyAdmin 上面下载用户数据或上传一些数据,我想这样造成的后果绝对比腾讯不让使用phpMyAdmin要大很多。对于测试环境,我要额外说明一下,读者千万别误会通常我们的认为的腾讯的测试环境可以随便访问腾讯的生产环境的数据库,我说的腾讯的测试环境包括灰度测试,就比如说,要验证用户对一个新开发的功能的反馈,那么腾讯会选择小范围的向一些号段的QQ用户开放,让这些用户看到这个功能的入口,观察这部分用户的反应,再做产品运营上的调整,这种灰度测试,这灰度测试的数据,也是放在生产环境的,是用户的真实的数据,毫无疑问这些数据是不能随意触碰的。
2)哪怕腾讯允许使用 phpMyAdmin ,我相信大部分在腾讯工作且需要操作数据库的人也不会去用phpMyAdmin,要知道,在2009年之前腾讯的业务已经是亿级了,对于这种亿级的业务系统的数据库的大致规模我简单描述一下,但不能太详细,在2009年,Qzone空间里面的一些模块使用的数据库是的数量是两位数,尤其是QQ农场最火爆的时候,部门为了支撑这个业务,运维团队几乎大部分时间都在为Qzone申请资源设备或从原有的设备中腾挪出空闲的设备出来给Qzone使用,每次大的扩容都是将数百台设备在极短的时间里上线。我读书的时候就经常使用phpMyAdmin,也曾经修改过phpMyAdmin的源码,试想一下:先不考虑全局,一个模块里数百上千个数据库实例怎么用 phpMyAdmin 去管理?我们都知道像这种量级的用户数据必然要分库分表的, 分库的就会导致用户的数据会分散在数百上千个数据库物理服务器(那时还没有腾讯云,都是用物理服务器)上,这样的情况下用 phpMyAdmin 能管得过来吗?我没在腾讯工作之前曾经在多玩(后来的欢聚时代,多玩现在好像是被剥离出来了)亲自设计开发了多玩通行证系统:udb,那时我设计的保守容量是一亿用户,我拆了1000张表,逻辑上分了10个库,像这样数据库结构要查询用户数据,现在有什么好的手段我不清楚, 但在当时只能是需要开发管理后台根据用户的id算出所在的库表后再去访问。
3)在腾讯这样的公司,哪怕是在2009年,直接操作数据库是会带来数据和缓存不同步,因为server要承受的请求是海量的,如果这些请求都直接传递到数据库硬盘是支撑不住的,因此在很早的时候(具体什么时候我也不知道)腾讯就在mysql前端部署了大量的 cache server(名字不透露,统一用cache server称呼),来自Web前端的 CGI/FCGI/自研发的http moudle 都不会直接访问数据库,而是通过 API 去访问 cache server ,cache server 会把来自Web层的请求转换为对mysql的请求,对于mysql返回的数据集则会缓存在cache server的内存里,Web层下次访问的同样的数据时就直接从内存返回,不再去请求后端mysql server,即便是这样,海量的用户请求还是让运维的同事小心翼翼维护这些设备。我记得当时部门会对没有使用 cache server 的业务模块进行统计,有计划的升级整改,对于确实不需要隔着一层 cache server 的 mysql 当然也不会强求一定要经cache server过。说到这里,我想有点技术基层的读者就明白了,直接操作数据会导致 cache server 的数据没有更新就有可能导致混乱。
4)至于phpMyAdmin是否安全的问题,我就只发表个人见解,以我的资历和经验,我认为不足够安全,你说安全就安全吧,不争论了,我有我的工作场景,反正我不需要,我是在字符界面用 mysql client 的。
3、在2008年,我所工作的部门,非DB的运维工程师和研发工程师已经不需要访问数据库了,我记得我刚担任QQ秀运维负责人的时候就接到一个工作,把QQ秀所有的数据库全部移交给DBC(database center)又称为DB组去管理,为了完成这项工作我去和QQ秀的同事协调,他们很爽快的答应下来,QQ秀的技术总监Ciline还跟我半开玩笑说:“你别搞出故障来啊”,这一句话让我感到有点紧张,那时的QQ秀并没有去主推红钻包月服务,因此每时每刻存在大量一两块钱甚至几毛钱的用户消费请求,如果一部分核心数据库出问题,几乎可以心算出每小时部门的损失,而在此之前,每个业务Qzone、QQ秀、QQ会员、QQ音乐这四大业务的运维都得亲自管理自己名下的数据库,这种工作是令人胆战心惊的,幸好那几年没有出现过严重的数据丢失的运营事故,可是没有人为的操作事故也会有硬盘的物理故障,在我担任QQ秀运维负责人期间,就遇到过好几次数据库硬盘故障,幸而那时DB组接管了数据库的管理,因此我的工作就是申请服务器提供给他们重新部署,DB组开发了一套管理的平台还有制定了一套严密的数据迁移流程,每次都是平平稳稳的完成工作。
对于访问数据库这个话题,我重点说了三点,其实读者会发现,在腾讯,至少是我工作过的部门,只有少数技术的同事需要接触到数据库,其他的人根本不需要直接跟数据库打交道,而且需要跟维护数据库技术人员也是通过管理平台去操作数据库,因此我不太明白那篇文章的作者为什么对在腾讯工作不让直接接触数据库而有点抱怨,我那天在苹果零售店遇到这样一个情景,一个顾客和天才吧的苹果员工说,他想为他的新iPhone买一张贴膜,天才吧的苹果员工告诉他:“您已经买了Apple Care了,不需要了”;我不太确定用Apple Care来比喻是否合适,可腾讯的DBC团队是作为一个服务平台为各业务提供支撑,业务部门的技术人员是基本上就是需要专注业务逻辑本身的开发就可以了,不需要直接去访问数据库。在约9年前类似的这样的团队还有Web组,由于我非常精通Web Sever,所以我经常去找他们提各种需求,例如部署Web cache,http gzip压缩,footprint,这些需求都是符合当时的运维规范,合规就办,公事公办,我可以提需求,但操作必须是他们来,大家都没有做越界的事。在这里,我顺便说下一下,当时包括现在很多开源的代码放在当时腾讯的业务环境下是根本支撑不住腾讯的惊人的用户请求,我最早在腾讯内部使用nginx,期间也花了不少精力去修改nginx的代码以适应腾讯的环境,然后拉着好几个同事和我做各种测试,灰度测试,打包,上线部署,上线后观察。前后搞了三个月,证明了方案是可行的,这时我又提出还不如把用到的Nginx的这几个功能特性在自研发的http server上实现,这样Web组就可以少维护一种Web Server,用户访问速度还有性能会更好,这个想法被接纳,然后请平台组去实现。
在腾讯爱折腾技术是可以的,但得有一些前提条件,第一得有能力,第二得遵循公司的规范;没能力有不遵守规范那肯定办不成事情;而有能力不遵循规范把事情办成并不算了不起,这是小聪明,而且这样很不好;有能力又遵守规范又把事情办成,才是大智慧。
该文的作者似乎还对于用跳板机访问数据库这种方式还有一点看法,这里我要提一下,这是数据库啊,里面存的是用户的私密数据啊,经过跳板机的目的是什么?我有点保守,不打算在公开场合说,希望你自己能想明白。
对于文中一句话,可以引出这么多话题,我希望读者不要误以为我纠缠于原文作者的一句话不放穷追猛打,我的本意是借这个话题让读者多了解一点腾讯的运维,多了解一点,误会就少一点,但是具体的一些信息又不能讲的太细,对于亿级别平台的运维,身在其中就要时刻保持敬畏之心。虽然我之前的工作是研发和运维都涉及,但QQ秀的运维是我第一份全职的运维工作,而且没多久就成了QQ秀的运维第一负责人,打理着好多台服务器(数量不能透露),QQ秀当时是腾讯很赚钱的一个产品,想了解更多的可以查看当时的财报,每天在平台上有好多笔购买QQ秀的交易,硬是把我的粗枝大叶性格改成谨小慎微,期间也犯了不少错误,也连累很多很多同事陪我加班,特别是测试组的同事,现在想起来既怕又惭愧。
二、 Linux 入域(加入内网),不可自行组局域网,内网分成三种网络,并实行物理隔断的问题
腾讯的服务器的OS是用Linux的,至于现在办公环境有多少人用Linux和macOS我是无法知道的,但我在腾讯工作的时候直到我离开,上千人部门只有两个人用 Linux 桌面,一个人称廖大师的大神(那时没有大神这个词,我们都叫他大师,推荐读者搜索一下这位大佬经历:关键词:廖生苗),另外一个就是我(那时还没成为大神),然后廖大师调去其他其他部门做Linux内核开发后就剩下我一个人使用当时的 OpenSuse 做笔记本电脑的桌面,这笔记本电脑我是每天从家里带来的,我还有一台装了X系统的FreeBSD台式电脑,我日常办公的电脑是Windows7,毫无疑问,我的Linux和FreeBSD是不能接入公司的内网的,可问题是我没觉得影响到我的工作,整个部门都没几个人用Linux桌面,我01年开始用FreeBSD,07年到现在一直用Linux做桌面,我认为这是我个人的事,到腾讯上班就是加入一个大集体,就得服从公司统一规划,这是基本的职业素质。因此,Linux入域这个问题,我是这样看的,如果有,固然可以用,如果没有,我也不抱怨,像我这种深度的Linux/BSD用户现在甚至几乎不会维护Windows10了,我不觉得这有什么困惑,这时我的个人看法。
在腾讯确实不能自行组局域网,这样会引发许多问题,不展开来说,可是腾讯并不是不提供实验环境,要进入实验环境,我记得当时有两个选择,一个是在工位上经过几重跳板机可以进入实验环境, 另外个是进入楼层里面一间很冷并且充斥着服务器风扇声的机房去做实验,我有一次要去测试Intel的编译器icc和当时intel最新的服务器CPU,我也觉得在工位上经过几重跳板机太麻烦了,我选择进入机房去做测试,那间机房确实很冷又吵,我提前把测试程序写好,把工作规划好,进去,基本按时出来,似乎也不难受。在腾讯工作其实很容易懂得抱怨并不能解决问题,至少不能解决在腾讯工作中遇到的问题,保持积极的心态或许能找到解决问题的办法。
下图是我当年的工位,左边是Linux,中间是Win7,右边是FreeBSD,在腾讯中午是可以玩游戏的,只要不发出声音影响到别人午休就行。
左边是Linux,中间是Win7,右边是FreeBSD
三、对于文中这句话:“如果腾讯一个T3(高级工程师)的研发人员告诉你说他不习惯用git,不太会用。。。你会有什么感觉?”
对于这个情况,我觉得我必须站在一个比作者更高一点的角度去看这个情况:我觉得这似乎跟腾讯的技术能力没有必然的关系,我意思是用git与不用git不能作为衡量一家公司的技术能力的关键指标,既然不是一个关键指标,就不能用这个来探讨腾讯的研发体系是否落伍。就举一个例子,像我这个有十几年工作经历的精通研发&运维的全栈工程师:Qzone、QQ秀运维,写过iOS和android开发framework,前端Web开发,开发过门户网站BBS,CMS,通行证系统,游戏平台,各种运维监控平台,还有从nginx模块、 c10k的通信server到OpenGL,H264解码,音频流server端和移动端,我都做过(一个工作了十几年工程师有这样的工作经历是很正常的啦,没有晒简历的意思,腾讯里面比我厉害的工程师多到数不过来),我有个爱好就是工作的时候喝冰冻的可口可乐,我觉得在从事繁重的技术工作的时候喝可口可乐可以舒缓神经,保持头脑清醒,可是,我们可以说不喝可乐的工程师就不行吗?事实上,我发现一些经历比我更丰富更资深的工程师他们保持头脑清醒的办法有喝茶喝咖啡的,也有我没看出来他们有什么明显的习惯的。
因此我概括一下,衡量一家公司的技术能力,可以从代码的版本管理这个角度去衡量,而不是看具体用什么版本管理的工具,我们只需要看团队有没有版本管理,有没有管好就行了。
事实上,我现在也不会用git,可我最近正在学习使用git,因为我有一个项目打算开源,之前不学习git是因为我还没用到,至于腾讯将来用什么版本管理工具,我也无法预估。我能理解作者在问的对于没有git是“什么感觉”的意思,我想说,工作归工作,个性归个性,下面这张图是我当年的工位,作为你们的大神我也曾经年轻过,现在也很年轻,我有一次带实习生的参加公司活动的时会议室里有个不认识的同事看到我笔记本电脑运行是很酷炫的 Linux 3D 桌面,就因为这个,他居然把我当成是实习生。
顶到天花板掉的可口可乐罐子
写到这里,我总结一下,我认为那篇文章充斥着年轻的情绪,当然我不认为年轻就一定有情绪,其实我当时初入腾讯工作的时候,我并不打算在这公司待很长时间,面试的时候也没想到腾讯会录取我,刚开始上班的时候觉得好多限制,很难适应,没有那时的网易和多玩既做开发又做运维那么自由,腾讯毕竟是腾讯,你在外面技术再厉害,在腾讯里面比你厉害的人多去了,人家都老老实实守规矩,你凭什么做不到。由于各种原因我在腾讯工作的时间比我原本计划的要长很多,随着时间的推移收获到了很多体会,我想如果当初我过早离开腾讯,或许我也像该文的作者那样对腾讯有着各种年轻的想法,幸运的是我在腾讯待的时间比较长并且学到了很多东西。
我以后不一定会再写关于腾讯的文章,因此顺便在这里说一些有趣的事情:
下图是我在腾讯得了一笔专利奖金后搞的一次恶作剧,我把全部奖金都拿去买方便面分给大家吃。
方便面
还有一次的1500专利奖金是全部用来买肯德基,由于我们用公司的座机订餐,后来我的同事告诉我,经过我这么一折腾,科技园那家肯德基已经把腾讯的电话升级为VIP用户了,可是当时的照片一时找不出来。
近年网上流传着一些段子,调侃服务器上线时一众技术烧香拜佛,祈求上线顺利,其实这种玩笑我在2007年时就搞过,下图是QQ秀2.0上线当晚的情景,一大群人在公司通宵加班,直到第二天早上六点才回家,我开玩笑主张大家用夜宵供奉一下Q神,保佑我们上线顺利,刚好办公室还有一些生日活动剩下的蜡烛,也顺便点上。
2007年QQ秀2.0上线,拜Q神保佑上线顺利
2007年QQ秀2.0上线,全体人员通宵到第二天清早
2007年那时,我们工作的部门许多IT平台还在建设中,很多事情还需要用人手工去做,因此大家对现网变更还是提心吊胆的。
从2008年开始,各种IT平台就开始变得很完善,很多以前需求手工敲命令的操作都改为平台化一键操作,例如2009年QQ农场通常要大规模扩容,都是通过平台一键化操作,此后我们很多工作都基于数据,服务质量好不好,资源有没浪费,什么时候需要扩容,都是用数据来说话,不再凭直觉去猜。在我离开腾讯很多年之后有一些公司请我去交流技术,我告诉他们这些平台化的运维理念,他们一般都觉得很惊讶,当然,他们是不会使用这种方式去建设IT平台的,因为这样的结果需要堆钱和时间。公平的说,这些亿级平台的运维理念和实践Google比腾讯走得更早,更远,但在国内而言,腾讯是在当时是领先其他公司是很多年的。至于现在是什么情况,我不太清楚。
2007年春节大家收到的开年红包
作为一名工程师(全栈),我觉得我的在电脑前的大部分时间不应该花在写作上,因此我不会对那文章每段的内容都拿出来评讲,但本文最后,我想向读者们介绍一下Dowson。我注意到那篇文章里提到了 Dowson Tong(汤道生),但后来内容做了一些修改,从作者的口吻来看,感觉作者不太像是在腾讯工作过或在腾讯工作有一定年限的人,因为腾讯里面很少对人直呼其名,都是互相称英文名。
Dowson曾经在全球第排行第二的软件公司Oracle工作过,我曾经听Dowson 的关于 Oracle DB 的技术分享,很精彩,我记得我当时的提问有点钻牛角尖,Dowson的回答让我领会到在方案的选上要懂得“平衡”,“平衡”在技术工作上是很重要的一个思维方式,这里无法展开讲。Dowson 还教过我一条Linux的命令 ps -efwww 这样输出的进程的信息就不会因为终端屏幕大小的限制而截断输出的信息,工程师在敲命令的时候一般会想起教他这条命令的人。
Dowson 刚到腾讯的时候国语还不太熟练,经常听见工程师们说哈希而不知为何物,后来才知道原来大家说的是hash,当我第一次见到Dowson的时候,他已经是用国语来面试我了,至于哈希,现在我都是图方便用hash来表达。
Dowson 为人很nice,他的nice也影响到我后来的做事方式,以至于我能够用一种温和的方式写这篇文章,如果是在以前(没进腾讯之前),我或许会写一篇比原文更长的文章逐条找问题批驳作者的观点,当然这文章就会长得没法看了。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 决胜未来,2019年前端开发十大战略性技术布局
- 中国企业面临信息技术复杂性的挑战:46%的企业认为自身信息技术环境比两年前更复杂
- 谷歌无人车CTO:十年前大家都嘲笑我们,技术发展比我预想更快
- 2019年前端学习路线
- 那些年前端跨过的域
- 2018年前端开发五大趋势
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Windows内核原理与实现
潘爱民 / 电子工业出版社 / 2010年4月 / 99.00元
本书从操作系统原理的角度,详细解析了Windows如何实现现代操作系统的各个关键部件,包括进程、线程、物理内存和虚拟内存的管理,Windows中的同步和并发性支持,以及Windows的I/O模型。在介绍这些关键部件时,本书直接以Windows的源代码(WRK, Windows Research Kernel)为参照,因而读者可以了解像Windows这样的复杂操作系统是如何在x86处理器上运行的。 ......一起来看看 《Windows内核原理与实现》 这本书的介绍吧!