关于大访问量、高性能、高稳定性网站建设的个人意见 (转)
目前接洽了一个网站的建设,涉及到标题所述问题的讨论,个人想了一下,提出以下几点想法。
这是一个综合性的问题。达到这一目标并非单一方面做的好、完美就可以解决的。
1. 高访问量的处理,首先需要硬件支持,交换机分流服务器集群做负载是跑不了的。暂且不提,在网站结构设计上,有以下几个方面需要做好。
a) 静态化处理大部分页面结构。例如使用cms系统生成页面内容,服务器的压力会减轻很多。
b) 使用缓存,仅仅在访问量高的问题上,可以使用自己制作cache,也可以调试、配置web服务器cache,还可以使用第三方例如memcache等组件。
c) 服务器分组分类,db服务器专门负责db,甚至读写db可以分开,如果数据逻辑不复杂可以采用nosql比如MongoDB等。图片服务器专门负责图片,文件服务器专门负责文件等等。
2. 高性能的处理。
a) 缓存是不得不用的主要手段之一。缓存可以提高访问响应速度,提高网站整体性能。而缓存在提高性能上又分为几个层次,
i. 前台缓存,属于细节,可以配置前台页面可在客户端缓存;
ii. 服务器端缓存,例如使用web服务器,打开apache的MPM等。或者使用多层服务器缓存,Lighttpd+apache等;
iii. 使用java代码缓存业务逻辑数据
iv. 使用临时db或专用读取db,nosql由于其构造的原理在读取上可以大大提高性能。
b) 网站的性能瓶颈很可能在网络传输上,因此可以优化网站互动操作,减少大数据量的提交、下载,可大量使用ajax技术,减少网络传输的数据量,由于ajax是异步操作,还可以提高用户体验。
c) 优化代码,这个就更细致了,例如不必要的循环、循环中的IO、减少对象实例数量等等。
3. 高稳定性。对于稳定性的处理,有软硬两方面。
a) 硬件需要做多机热备,某一台服务器宕了,其他服务器立即跟上,不会导致整个网站不能访问。
b) 使用磁盘阵列增加数据的稳定性。
c) 分布式存储数据,冗余的数据库设计有时候再稳定性的提高上是一个非常好的方法。
d) 软件方面需要做大量的容错处理。为保证网站的正常运营,上线前还需要大量测试。Java语言本身就是一个高重用性、高稳定性的设计语言,java的错误处理机制是非常优秀的。
画个图(有些丑陋)