关于网站系统性能的一些设计思想

谈到网站性能,似乎就是系统架构上的事情。实际情况远非如此。

好的设计代码和差的设计代码在同样的架构下,能有数量级的差别。

很多技术决策者喜欢着眼于一些大的方面,而不能或不愿埋头用最经济的方法解决真实的问题。

或许也是受到“硬件是便宜的,而程序员是昂贵的”观念的影响,从而倾向于选择更容易和体面的方式来彰显成绩。

实际上优化性能的第一步应该从设计和代码本身开始,其次才是考虑引入和运用架构层面的解决方案(记住这是需要额外的运营代价的)。

无论是谁,在设计编写一个系统的时候,都是按部就班的,不可能从第一个版本就实现所有的事情,所以这给后续优化提供了空间。

一开始的时候,总是功能优先的,可扩展性和性能是被放在后面考虑的。但是在整体设计的时候,必须要考虑给性能优化提供基础的框架。

总体的系统设计应该遵循以下几条原则:

1、尽量不用

2、尽量缓存

3、尽量压缩

 

4、尽量重用

5、合理冗余

6、合理索引

7、引入优先级

8、引入分布式

9、引入异步和回调

10、尽量内存化

 

遵循第一条原则,那么在系统设计的时候,就应该采用动态加载/模块化/可配置/细粒度的使用策略

可配置/细粒度的含义是指可以通过细粒度的配置来控制系统的功能选项,执行流程和位置,

比如需要使用的数据,需要创建的对象,需要执行的检查,需要放置的位置(ex: css在上js在下)。

 

遵循第二条原则,则理应采用多层次组合的缓存策略。你的系统应该能够支持:

*) 页面缓存,局部缓存,查询缓存,web服务缓存,数据模型缓存,对象缓存,配置缓存,代码缓存,资源缓存。

*) 并且支持多种缓存的方式,比如可以方便的在文件和内存缓存之间做选择。

*) 在页面缓存上系统应该支持准静态页面缓存和静态页面缓存。把一切可能静态化的页面静态化,静态化的功能应该是以可配置的系统扩展插件的方式来提供。

*) 把任何引入的第三方的服务和库放在第三方自己的CDN上,通常比放在自己服务器上要快,何况还节省了流量。

*) 在任何需要一次性解析结果(比如URL解析,代码解析等)而影响性能的地方,引入缓存配置。

 

遵循第三条原则,通常意味着对资源的处理,比如图片尺寸的自动调整和限制,资源文件的简化和合并,服务器压缩功能的启用等。

遵循第四条原则,则需要尽可能的简化代码,设计精致的基类和可重用的方法,共享数据等。

第五、六条原则,指的是可以通过冗余字段、索引来加快查询、浏览、数据统计的速度。

第七条原则,是可以设计简单的QoS,对用户的请求进行分类,区分优先级,比如文字优先处理,图片延迟加载,图片渐次加载,比如VIP优先处理。

第八条原则,指的是在数据层面,可以通过配置来动态更改请求的分布,这个配置还可以匹配预先设定的模式。

第九条指的是使用诸如Ajax,消息队列,订阅推送,数据总线等技术,一方面减少等待时间,一方面弱化耦合。

第十条指的是设计能按照数据的读写频率调度存储设备的动态运用机制。

 

认真而耐心的实践上面的设计思想,会节省大量因为设计粗糙而导致的运营成本,也能最大限度的帮助简化系统架构。

posted @ 2014-08-06 22:08  阳光小屋  阅读(178)  评论(0编辑  收藏  举报