两年内飞速发展却没有动摇Pinterest最初的构架设计。
图片分享社区Pinterest自上线以来,在网站外观上做了不少变动,但却一直沿用着最初的网络代码,在代码层面并没有太多变动。Pinterest的工程师Jon Jenkins最近披露说,Pinterest仍然在最初的代码基础上运转。
“许多网络公司在扩大规模的过程中,都会对网站构架做一次或多次调整。虽然我们对堆栈构架进行了更新,使之与公司规模相适应,但却没有做大规模的根本性调整,还是沿用了最初的网站程序。”
Jenkins所指的“程序基础”指的是Pinterest运行的程序。随着网站发展,工程师不仅要对网站外观进行更新,还要用新的技术完善和修补程序基础,确保其能高效运行。Tumblr就是这样的典例,虽然有几次过于彻底的更新甚至影响到用户正常使用而让大家颇有微词。LinkedIn的工程师也曾花费两个月将网站的源代码全部重写——在LinkedIn的工程师看来,这种彻底的结构整改对维持网站规模扩大是十分必须的。LinkedIn的发言人就曾表示说,“网站平台发展迅速,我们也希望发布更多创新产品,这就要求我们从功能分支繁杂开发和部署软件的网站结构进化到连续部署结构”。
但Pinterest执意没有进行这样的网站架构改进,甚至在快速增长的用户群曲线面前也“无动于衷”。Jenkins表示Pinterest的基本网站结构包括Python web服务器,mySQL数据库,开源数据结构服务Redis和Memcache缓存系统。Pinterest的团队所采用的是保守的对数据库某个部分进行有针对性的重写,“换言之,我们所采用的是‘翻新’而不是‘替换’”。
从Pinterest上线之初就负责网站构架的三位工程师——Yash Nelapati,Marty Weiner和Ryan Probasco仍然在原岗位工作,对Pinterest的源代码也了然于胸。
据Weiner表示,Pinterest的团队采用这样保守的网站构架方式并不是有意设计如此,而是出于实用性的选择。Pinterest从2011年一推出就进入高速发展,实在没有时间进行大规模的代码重写。一旦发现问题,必须在12到24小时内进行修补,对某些事先发现的代码问题也要尽快做出修改,这种缝缝补补的方式并没有对基本的代码框架带来太大的变动。
因为一直在修修补补,各种技术应用到极限时难免发生故障,Pinterest的系统构架在应对网站的疯狂式增长时越来越难以扩展。当我们意识到各种技术拼凑在一起使得我们的基础代码变得不可靠的时候,有两种选择摆在面前:用其他的技术解决方案来替换现有的基础代码或者再重写和巩固现有的技术框架。
Weiner说:“综合各方面考虑,我们选择了MySQL,Solr,Memcache,Redis,放弃了Cassandra,Mongo等,上述选择的理由是基于软件的特性:成熟简单,有良好支持,性能优越,开源且失败的频率较低。在这一选择上建立了我们新的出发点,之后的发展都将以这些为基础。”
Pinterest呈现给每个用户的都是流畅美观的网页设计,而对网络构架程序员来说,Pinterest的代码编辑也是一个值得学习的宝库。
Weiner自称“最中意的还是最原始的note.txt文件,称得上是Pinterest的阿波罗13号登月表(最原始的计划书),这些文件记录了如何搭建服务器及解决问题的方法。”
(via readwhite 译/快鲤鱼)