2014年2月16日

读书笔记:淘宝技术这十年

淘宝技术这十年

2014年2月7日--2014年2月16日在Kindle上阅读此书
读书笔记写于2014年2月16日晚于新加坡

“所有的进步都是不稳定的,一个问题解决了,我们不得不面对又一个新问题。”——马丁・路德・金
个人注释:全书各章都引用这个相同的名言,不断凸显了它的重要性。事实也确实如此,系统如此,人生亦如此。

浏览器在一个域名下同时加载的资源,IE7是两个,IE 8是6个,chrome各版本不大一样,一般是4~6个。很多人将资源分布在不同的域名下变相地绕过浏览器的这个限制,同时也为下文的CDN工作做准备。
个人注释:我自己做的机器翻译网站完全没有考虑这个,因为规模太小。

Oracle的性能和并发访问能力之所以如此强大,有一个关键性的设计——连接池,连接池中放的是长连接,是进程级别的,在创建进程的时候,它就要独占一部分内存空间。也就是说,这些连接数在固定内存的Oracle Server上是有限的,任何一个请求只需要从连接池中取得一个连接即可,用完后释放,这不需要频繁地创建和断开连接,而连接的创建和断开的开销是非常大的。
个人注释:进程级别的长链接可以极大的缓解系统的资源开销,NGINX之所以比Apache优秀很多,也是这个原理。

Java被世界上主流的大规模网站普遍采用,其中有一个网站就是eBay,那时侯eBay的系统刚刚从C++ 改到Java,而且就是请Sun的工程师给改造成Java架构的,这下你懂了吧?他们不仅更懂Java,而且更懂eBay。
个人注释:对于Java和C++哪个更好?我觉得争论没有意义,各有利弊吧。Java开发效率见长,C++执行效率较高。加上众多的编程语言,其实只要精通一种即可。就像《天龙八部》里,大理天龙寺在天竺和尚鸠摩智计划用《少林七十二绝技》交换天龙寺秘笈《六脉神剑》时,枯荣禅师对弟子的训诫言犹在耳。其实各种武功练好了都是绝世武功,所以不管Java还是C++,抑或其他语言,真正融会贯通后,就靠内功来比高下了。用过三年的Java,三年的Python,三年的Matlab,六年的C++,半年的Golang下来,我觉得C++配上Golang算是一种很合乎我的一种配置。
 
ChinaCache是一家获信产部许可的CDN服务提供商,目前ChinaCache在全国50多个大中城市拥有近300个节点,全网处理能力超过500Gbps,其CDN网络覆盖中国电信、中国网通、中国移动、中国联通、中国铁通和中国教育科研网等各大运营商。
个人注释:这个有点象Amazon Web Services提供的服务。互联网时代,这些底层建设集中化、规模化、平台化,可以极大减小很多初创企业的成本。当然,在抓住长尾的大型服务提供商也会赚得满盆黄金。
 
我们认为,Nginx是目前性能最高的HTTP服务器(用户空间),代码清晰,模块化非常好。
个人注释:玩过一阵子Nginx也部署到了我做的分布式机器翻译集群系统上,十分佩服。有机会时应该把它的代码翻出来研究研究。
 
Tair(TaoBao Pair的意思,Pair即Key-Value数据对)。Tair包括缓存和持久化两种存储功能。Tair支撑了淘宝几乎所有系统的缓存信息。Tair已开源,地址为code.taobao.org
个人注释:淘宝对外共享了很多代码,这一点感觉和Facebook,Google,Yahoo很类似。分享创造价值。在code.taobao.org以及github.com/taobao中有很多开源的代码
 
分布式的标准Service方式的RPC(Remote Procedure Call Protocol,远程过程调用协议)框架,Service的定义基于OSGI的方式,通讯层采用TCP/IP协议。关于分布式的服务框架的理论基础,HSF的作者毕玄写了一篇博文(http://www.blogjava.net/BlueDavy/archive/2008/01/24/177533.html),有关基于OSGI的分布式服务框架,也有一系列的博文(http://www.blogjava.net/BlueDavy/archive/2008/01/14/175054.html)。
个人注释:有空得翻出来读读,开阔一下视野。
 
分发消息数量上来之后,常常造成拥堵,消息的顺序也会出错,在系统挂掉的时候,消息也会丢掉,这样非常不保险。然后鲁肃提出做一个系统框架上的解决方案,把要发出的通知存放到数据库中,如果实时发送失败,再用一个时间程序来周期性地发送这些通知,系统记录下消息的中间状态和时间戳,这样保证消息一定能发出,也一定能通知到,且通知带有时间顺序,这些通知甚至可以实现事务性的操作。
个人注释:消息分发的网络事务采用数据库的方式来解决,算是很彻底的方案。很多技术都能达到相同的效果,但根本性的解决问题才是上上策。
 
帮@胖胡斐推销他的新书《玩法变了》,这是一本讲述淘宝店怎么运营的好书,用一个很俗的词来形容,就是“干货!”,书中提到抽奖的玩法,其中有一次活动就是我写的代码。在“魅力属性”这个篇章中也出现了我的名字,嘿嘿。然后再打一个广告,就是老包宗曦翻译的《触动人心》,主要介绍苹果上的用户交互,也是精品。我在淘宝遇到的牛人多,但心甘情愿拜倒在他的牛仔裤下的神人不多,而胖胡斐和老包属于神人这个范畴。
个人注释:这两本书也值得读读啊。

同事想赚钱,想提升自己的职称,这些都是十分正常的。在这点上,我特别喜欢马总的理念——做公司要赚钱,但阿里从不把赚钱作为第一目标,我们服务好了客户,客户赚了钱,我们一定会得到自己应得的一份。在个人成长问题上也是类似的道理,这就是,一个人如果把做事、做成事作为主要目标,该他得到的东西,一定会顺理成章的、水到渠成地得到,但是,如果把上升作为主要目标,做同样的事,结果就会完全不一样。一句话,你的心态会最终决定你的成就。
个人注释:心态决定一切。放宽心做事就好。

微软的研发模式比较重,流程和审核机制非常严格,每一行代码都要审核很多遍,做事很稳,但很慢,我想这也是它在互联网市场很难施展的一个原因。我觉得百度其实不如淘宝重视技术,KPI导向的文化很重,各部门之间的协作和配合比较难(这一点淘宝要好不少),不同部门、不同项目的开发人员做了不少有差别但其实比较类似的东西,看起来个体效率高,但整体效率未必高,这可能是百度加班很严重的原因之一。
个人注释:正祥的这段介绍不知现在这微软和百度是否还都如此。估计应该都有很大的变化了吧。
 
每天读技术方面的文章或者图书,写代码的时间可能每天只有两三个小时。每隔一段时间会去想一想将来干什么比较好,因为写代码时间会过得很快,要经常跳出来想一想。
个人注释:很欣赏毕玄的这个做法,人应该在不断低头走路的时候时常抬头看路。
 
毕玄:如果你是向技术方向发展的人员,我们要看技术方面的专业性;然后看你的技术对公司的业务发展有多少贡献。还有一点,我比较看重的是,也许你不在其位,但能够跳出自己的范围,想到公司未来到底会面临什么问题,用什么方法来解决。当然,仅想是不够的,如果你能够落实就最好了,我们不管你落实的技术含量有多高,关键是你解决了什么样的问题。如果你能够做到这些,你这个人对公司就非常重要。
个人注释:毕玄的观点对于公司发展对于个人发展都很重要。
 
毕玄:… … 国企,我在那里做了4年,从一个学生很快做到一个小部门的主管,这个成长的主要原因是我的直属领导不断离职,我就不断地补上去了。从技术上说,在这里有成长,但不是很大。4年以后,我感觉自己的发展遇到了瓶颈,虽然在这里生活比较安逸,但不是这个年龄应该有的状态,当时也才27岁左右,就想换个环境。
个人评论:和我的经历类似?
 
放翁:其实从P7级开始,就没有人帮我做规划了。技术委员会在级别P7~P9的定义中,要求P7级的人员要对一个小的产品或团队有方向性的指导,P8级就要求在一个大部门或公司级的产品上有方向性的指导,P9级要求除了考虑自身的产品之外,还要站在公司的角度考虑自身的产品对公司的发展有什么帮助。
个人注释:P级的认定很清晰

放翁:推荐在杭州,全家去走走云栖竹径、虎跑后山、江洋畈,这些地方的人比较少,很安静,能够让你放松身心。长一点的路线是从古荡上去到北高峰,然后到宋城。
个人注释:杭州真是到处都是旅游资源啊
 
放翁:在个人发展的不同阶段寻找到合适的导师很重要,看准方向会事半功倍。在刚刚参加工作还没有形成自己的判断时,方向有两个来源,一个是个人的兴趣,一个是找一个你非常佩服且能掌握未来方向的人,当然,如果这两者正好重合,那么剩下的就是脚踏实地坚持。
个人注释:很赞同。好的老师胜过很多因素。但师傅领进门,修行靠自身。
 
性能也是一种功能:一些产品很关注功能,当功能通过后,先草草上线,而后再逐步完善性能上的问题,这个嘉宾的说法让我产生了强烈的共鸣。
个人注释:这个就是现在很流行的一种做法:先做出整体,再不断优化。不断是作系统,还是写科研论文,这种策略都很好。
 
一个计算机工程师该以怎样的态度和方式来工作和学习?多隆的一条朴素的建议或许可以很好的解答:“发现问题,解决问题,不要绕开问题的本身;多做事情,不会吃亏,即使不是你的事情。”这大概也是多隆最大的成功秘诀吧。看似容易的原则,却不是每个人都能做到的。做到了,你也有希望成为“多隆”。 始终保持对代码的那份单纯的热爱,保持对技术的专注和钻研;别人把工作当工作,他把工作当事业——这就是多隆的程序世界。
个人注释:多隆是淘宝的第一位程序员,十分乐于帮助别人,十分热爱编程。有机会要好好拜会一下。




总结:淘宝牛人众多,技术发展的很快。待读书籍《玩法变了》《触动人心》

没有评论: