对于网站经营者、创业者来说,“扩展性问题”是在网站流量成长过程中势必会面对的问题,如何建立一个具有可扩展性的架构(scalable architecture),是在规划网站过程中不可或缺的专业知识。
51CTO推荐阅读:大型B2C网站高性能可伸缩架构技术探秘
如果服务本身的功能性合乎使用者需求,却因为架构、程序效率、数据库效率的问题导致服务器增多出现瓶颈,如何评估、分析网站效能瓶颈?理清问题后如何找出对应的解决方案,可以思考的相关议题包括:
◆如何有效率地理清问题?从客户端端的数据(读取时间)或是从服务器端的log日志、硬件的负载率?
◆网站效能瓶颈是出现在Client或Server端?是数据库撑不住还是程序的执行效率不好?是Request太多还是日志太大?
◆Web Server、DB server如何挤出更多的资源?挤不出资源后如何扩展?扩展后会遇到什么问题?
参考国外知名网站在架构上的作法是一种很好方式,尽管同那些网站的服务的规模可能无法相比,但根据正确的作法与经验踏出对的***步,肯定是有助于突破网站运营效率的瓶颈。
Twitter身为全球***的微博服务站点,运用数千台的服务器提供服务给来自全球各地的使用者,然而每当网站内容、应用程序有更新时,如何尽可能地在越短的时间内将应用程序部署(deploy)到所有的服务器当中是相当重要的课题。
Twitter在早期便依赖Capistrano来进行应用程序的部署,每当有新版本的程序需要释出时,Capistrano会根据预设好的各种设定、流程到Twitter所有的服务器上进行更新,在过去服务器还不多的情况下,一切都很美好。但随着Twitter服务器数量的成长,到了几百台服务器时,事情已经不再像过去一样美好,甚至到后来拥有数千台服务器时,更新的时间会耗费40分钟。
Twitter针对这个问题,认为问题的关键在于:使用集中式的系统,也就是所有的服务器要轮流排队到同一台版本控制系统上进行程序更新。Twitter最初的想法是将版本控制系统也做出分散式的架构,服务器的程序代码更新就可以分散到不同的机器来压缩部署时间,但事实上版本控制系统即使分散在多台服务器上,也同样会有这些服务器要更新日志的时间。因此Twitter发现,需要一个完全去中心化、***像是BitTorrent,利用P2P的特色让所有的节点都可以协助进行程序的更新。
以结果来看,在采用了BitTorrent的方式来更新服务器后,部署的时间从40分钟大幅减少到只要12秒钟!实在是非常惊人的改善,数千台服务器的程序代码居然只要短短12秒钟就能运行完成。
Twitter也将此次部署流程改善的成果分享出来,叫做Murder,如果对于技术细节有兴趣的读者,可以再进行深入的研究,笔者简单摘录几个重点如下:
◆Murder是以BitTornado为基础开发出来的(BitTornado是某一种BitTorrent client);
◆Murder的定位是协助我们快速的将日志部署到大批服务器上;
◆利用BitTorrent的部署方式可避免防火墙的问题、拥有非常快的传输速度;
◆实际的部署程序代码是搭配Capistrano进行的,网页上有很清楚的说明。
【编辑推荐】