以下文字是摘至一篇读后感,其中包含了大多数人或者说是多年来一些关于分布式应用的常见错误概念
我的一些思考:
看完这篇文章《通过了解MySpace的六次重构经历,来认识分布式系统到底该如何创建》首先很惊讶myspace居然是基于.net平台的系统,windows2003+asp.net+IIS+SQLSERVER,虽然我是一个纯粹的MS技术者,但是对于MS的WEB应用总是有点疑虑,我的担心大概是来自于到处都在鼓吹的LAMP,我并不敌视开源,但是我承认,它给我带来了很大的压力.看了这篇文章,我有点庆幸也有点笑自己之前的迂腐,其实对于技术来说,优劣只在于开发者本身,myspace的六次重构,很好的说明了这一点.
我们常常讲分布式系统,这个概念很大,简单点说,就是把系统给拆分开来,把本来一台服务器做的事,分到两台服务器来做.如果只在一台服务器上部署两个程序来执行之前一个程序做的事,我认为那不叫分布式,也是完全没必要的,分布式的原则是"后分布"(lazy distribute),因为这本身是件损耗性能的工作,如果不能通过它来获得明显的性能提升,那为什么还要分布式?
myspace的六次重构基本都是围绕数据库来进行的,做了这么多年的WEB应用,我早就知道了数据库对于一个网站来说是多么的重要.在程序没有额外的问题的基础上,随着流量的增大,最先出现问题的,往往就是数据库.症状通常为,数据库查询/更新变的非常非常的慢,经常超时等.
这个时候,我们能做的事非常有限,无非是调整下SQLServer的内存大小,给服务器加内存换速度更快的硬盘等.如果要认真的解决这个问题,对于一般的开发者来说,都会自然的想到拆库.海量的数据查询对于SQL来说本就是不该存在的,无论你的数据库优化的多么好,比如你用的Oracle,数据吞吐量很大,难道查询100W的记录会比SQL查询1W条更快吗?拆库又分本地数据库分多个表和多个服务器分多个库,执行顺序为由前到後,当数据库的压力由海量查询变成磁盘IO之后,就需要更多的数据库服务器了.
除了硬件手段,更常用的是采用缓存.myspace直到第四次改版的后期才开始正式的引入缓存策略,这确实是个失误,如果从最开始就考虑到缓存的作用的话,那么数据库服务器至少不会膨胀的那么快,也可以有更多的时间来思考更好的架构.当然,正如Benedetto所说,这是件一开始就该考虑的事,但是myspace成长的太快了.
不是谁都有机会来为一个流量在世界上排名前10的网站来设计架构,因此myspace的后面的若干次重构,对于普通的开发者已经很难接触了,我认为,在第三个里程碑时,也就是通过服务器的横向扩展来实现的分布式,已经足够支持巨型网站的应用了.myspace是个交互型特别强的网站,用户执行的请求数会远大于一般的网站,这也是它巨大的数据库压力的来源.
最后总结一下WEB系统分布式的要点:
1.不到需要,绝对不要分布
2.分布式应该围绕数据库展开
3.分布式系统本身具有很强的扩展性,系统性能的提升和硬件的增加是线性关系.
感想写的比较乱,基本想到什么写的什么,各位看官各取所需即是.