Java基础、中级、高级、架构面试资料

Google技术架构演变之路

JAVA herman 4025浏览 0评论
公告:“业余草”微信公众号提供免费CSDN下载服务(只下Java资源),关注业余草微信公众号,添加作者微信:xttblog2,发送下载链接帮助你免费下载!
本博客日IP超过2000,PV 3000 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:xttblog2,之前的微信号好友位已满,备注:返现
受密码保护的文章请关注“业余草”公众号,回复关键字“0”获得密码
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
视频教程免费领
腾讯云】1核2G5M轻量应用服务器50元首年,高性价比,助您轻松上云

淘宝的架构是进化来的。支付宝的架构是设计来的。对于创业公司,尤其是随时变化的用户需求来说,如何做好我们的架构,以及如何进化我们的架构?

谷歌为何总是快人一步?

从Google成立以来的10多年,一直在给大家创造着各种各样的惊喜,也成为了全球科技的领先者。如果回头来看,Google可以总结三个经验:

第一,需求倒逼改革。

即产品需求、业务需求、用户需求让Google不断改进自己的业务模式,革新业务流程。
03年加入Google时,Google刚好就站在了搜索引擎时代的风口浪尖上。那时,对于搜索产品的使用率和产生的数据都是前所未有的,之前没有人见过这么大规模的数据。这个需求就要求Google不能从现成的解决方案中去找答案,也没办法找一个现成的产品把它拼凑起来。
所以以需求为导向,意味着我们必须要将之前的业务模式推倒重来,从无到有搭建一个合适的系统。因此,日后很多领先的技术,都基于这个前提。

第二,对于基础架构的重视。

当时Google有一些很具体的问题需要解决。但它不仅只解决单一问题,而是希望能系统化地解决这一类问题。比如Google最早就开始搭建一个非常强大、超大规模的数据中心。在有了这样的一个硬件基础,再加上一批非常厉害的人,开发出了一个有深远影响的基础架构。

第三,选用最好的人,即便做最普通的工作。

不管在哪里,人的问题都非常重要。Google一开始就把招聘的标准放得非常高。招进来的人一开始可能不做特别资深的工作,但Google一贯的招聘理念是把最好的人招进来,即使让他做最平凡的工作,他也能做出闪光点。这样才能保持公司持续的创造力。

架构的演变,是一个周而复始的过程

我认为好的架构,都需要经过这么几个过程:设计——进化——进化 ……——被推翻——再设计,是这样一个迭代的过程。最开始的架构,肯定是从无到有,根据产品的需求和当时的业务的需求设计出来的。

我觉得,一个系统的演化,一般会经过这样的阶段:

第一个版本肯定是Under-engineer的,从无到有被设计出来后,一定是不完善的;

第二个版本一般是Over-engineer的,因为随着之前那个版本的使用,积累了一定量需求后,会发现想要增加很多内容在上面;

到第三个版本,应该是最恰当的,因为其减去了一些没必要的设计之后,更合适。但当到了某一个时间点,会发现现有的系统架构已经没有办法再维持下去,跟不上需求增长时,就需要推到再重新设计。

拿Google的广告系统来说,我03年加入了Google,当时的架构还是比较简单的,只分为两层,web serving层和存储层。所有的数据都存在MySQL里,前端的web server会把用户搜索的关键词转化成一个数据库的Query,然后把所有的查询结果做聚合和排序。

但很快就遇到了问题。我们有两个Customer,一个是eBay、一个是Amazon,他们什么关键词都买,所以他们一家就要占用一个独立的数据库,而且他们的量还不断往上涨。当时的解决方案就是多做一层分离,把存储数据和需要响应在线搜索的数据通过分开,增加一层cache server。

后来很快用Customer做分片也不够了。我们就转为了用Keyword的Fingerprint做shard  key,从增长最快的数据着手解决。其他还做了的包括异地容灾,多套Primary数据中心同时运行等等,都是后来的升级了。

业务驱动vs技术驱动,谁优先?

业务驱动或技术驱动,其实不如理解为商业模式的创新和技术创新。但在实际工作中,我觉得没有固定的模式,因为不同的产品会有不同的需求。

例如,搜索显然是一个技术跑在前面的产品,搜索本身并没有什么业务模式。它是一个免费的,供用户使用的工具,这完全依靠技术驱动。正是因为谷歌发明了全新PageRank的算法,能够比当时其它所有的搜索引擎的结果要好,于是,技术驱动产生了这样的效果。

但谷歌广告系统的出现,又让搜索引擎变成了一个商业模式创新驱动的产品。这是技术创新和商业模式完美结合的例子。

大家习惯将业务和技术分开来看,可能是因为目前国内的大多数互联网公司,采用产品和技术分离(至少是两个团队)的方式来工作。而在Google,我们并没有那么明确的划分。Google AdWords系统,当时也就是我们十个人不到的团队负责,从思路、技术实现,到最后商业模式的建立,都是在共同讨论实现的。

因此,具体是哪个优先,还是要以产品的属性和需求来看。

什么才是好的技术人才?

如何定义一个好的技术人才?

我觉得这没办法给出一个统一标准,如果用Google的文化来衡量,那就是能否把一个以前从来没有接触过、或是完全不会的东西,在很短的时间内学会,并且做得很好,这是一个很重要的因素。和学习能力相比,个人经验就显得并没有那么重要。

这一点我相信放在哪里都同样适用,但同时,随着回国组建团队,开始慢慢发现中国工程师和美国工程师的一些差异。

中国的工程师有一些明显的长处,例如说,很擅长做一些理论基础很强的事情,算法、基本功、计算机能力都很强,能一件事情做得很工整、很好。

但不一样的地方在于,中国工程师的思维发散程度明显不如美国的工程师们。我们可能特别习惯于被分配一个工作,把这件事情做好。然而那些硅谷的工程师,他们每天中午吃饭、或是喝咖啡的时候,随便聊天都是在说,我应该做一件什么样的事情去改变世界。他们对这些事情,特别感兴趣。

每一次转型,都是逼着自己跳出原先的舒适圈,在面对和探索全新领域的过程中,也在不断的学习和试探自己的潜力边界。最后送给大家两句话:  
• 值得去的地方,没有捷径;难走的路,才更值得开始!
• 稳定的背后是不变,不确定的背后,是无限种可能!

版权声明:本文为博主原创文章,未经博主允许不得转载。

业余草公众号

最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加作者微信号:xttblog2。备注:“1”,添加博主微信拉你进微信群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作也可添加作者微信进行联系!

本文原文出处:业余草: » Google技术架构演变之路