除了Cache外,可以看到各大网站都采用了CDN,CDN可以让静态文件更加的靠近用户,以便用户快速获取,而除了让静态文件更靠近用户外,多IDC的建设除了提升可用性外,还可实现让动态数据更靠近用户,当然,这个在技术上的实现难度会比CDN高很多。
除了结构上的这几点外,技术创新是提升系统性能的重要方法,例如Google提高TCP的初始拥塞窗口值等,而要做到技术创新,显然可控性就是基础了。
成本
随着网站规模的不断扩大,系统的运行和维护成本将会成为公司中支出的重要部分,例如有数据表明腾讯每年的支出中,支付给运营商的费用是其中占比排第二的部分(2010年为208亿),因此网站规模越大,成本控制就越重要(潜台词是网站规模在不是很大的时候,也许支撑业务快速发展更重要),例如Google在设计系统时price/performance是重要的考量指标,有些网站也会采用x元/每千次page views来计算成本。
性能优化有些是需要增加成本的(例如cache、CDN),而有些性能优化是可以降低成本(例如Google对Index结构的优化)的,因此通常性能优化也是降低成本的一种方法,网站规模大了后的规模效应可以让有些性能优化带来的成本降低非常的明显。
硬件的不断升级,而软件系统层面上又更多的是靠cluster来支撑,因此通常很难完全消耗硬件资源,虚拟化就成为一种不错的降低成本的方法,虚拟化具备了很好的隔离机制,避免了应用的互相影响,因此落地的难度不大。
除了依靠虚拟化来降低成本的方法外,Google则采用了自行实现的一种Shared Environment的方法来降低成本,Shared Environment可根据不同类型的资源消耗,动态组合(例如分时)部署到同一台机器上,充分的发挥机器的资源。
在前文中也讲到,网站主要是靠可伸缩存活下来,随着规模的扩大,必然会有大量的机器, Google有上百万台的机器,Facebook有几十万台机器,在这么大规模的情况下,自行根据应用特征设计机器,会带来很大的成本下降,因此Google、Facebook都自行设计机器以及自行设计DataCenter,从PUE上就可以看到Google/Facebook自行设计DataCenter带来的成本降低是非常可观的。
以上四点挑战会由于网站业务的不同、人员知识结构的不同、做事风格的不同以及所处的阶段不同而采用不同的方法去解决,每个阶段都有自己适用的解决方案,例如Google在成立之初业务为搜索,相对而言搜索市场的竞争主要是技术,功能次之,而facebook/eBay等网站的竞争压力主要在业务功能上,因此在成立之初的时候必然会有不同的侧重点,所以也不用想着一开始就去把网站做成Google/Facebook等现在的结构,选择适合自己网站的就是好的,很多开发人员在加入规模较大的网站后,会觉得系统结构已经稳定了,没有发展的空间,但从上面各网站的发展历程来看,可以看出网站对技术的要求是不断在演变的,通过观察大网站的发展历程,对自己结合公司的业务背景、知识结构等来判断其下一步的发展,是会有很大的帮助的,并且也可以借此储备一些技术,以把握技术演变时的机会,获得更大的成长,如果是加入规模尚小的网站,技术储备做的好的话,就有机会亲身经历网站从小到大的演变了,因此都有机会,就看个人如何把握。
围绕这四个方向的发展,通常网站在发展到一定规模后会演变成类似如下的结构:
除了在可伸缩性、可用性、性能以及成本这四点的技术挑战外,网站还面临了其他很多方面的挑战,例如海量数据的分析和挖掘、网站安全、业务发展的灵活性支撑、人员增长后庞大的软件管理等等,因此构建一个支撑大访问量、长期发展、低成本运行的网站是需要有坚实的技术作为支撑的。
原文转自:http://bluedavy.me/?p=396