第一节中我们讨论了简化,如果简化完毕,或者无法简化,那么就要考虑分解它了,那么如何去分呢?通常来说,可以从横向和纵向去分,也可以从软件和硬件去分,这个和我们构架的设计方面有关。
横向分解之我见:
①所谓横向分解,就是分离出的各个部分不存在明显的层次关系,彼此之间独立性较强,当然完全的独立是不现实的。
②第一点思路就是根据功能去分,比如网站分为bbs来交流问题,blog来展示博文信息,news来展示新闻等等,那么可以考虑根据二级域名来做相应的部署,比如bbs放到一台服务器上,blog放到一台服务器上。
③第二点思路就是根据文件去分,我们知道图片是相当耗费资源的,而它由于是静态资源,占用io较多,而动态解析网页文件主要是占用cpu较多,那么就可以让apache去解析网页文件,让lighttpd或者其他服务器来做图片服务器,或者说我们也可以独立出来一台日志服务器。
④第三点就是服务的划分,我们不一定所有的事情都自己去做,可以考虑去调用其他站点的对外服务,比如说我们使用jquery、bootsrap等类库的时候,就可以使用百度、新浪等cdn来简化调用,分担服务器流量,当然由于很多网站提供对外的服务,这点就看朋友们的知识池深浅了。
⑤第四点就是模块的划分,如果一个模块比较特殊,就可以把它独立出来,单独处理,比如文件的上传和下载,文件上传往往也是黑客攻击中很感兴趣的一个环节,我们也需要对上传的资源进行严格的控制,比如下载的时候需要做好防盗链,需要防止用户多线程无限制的下载等等,这些模块我们可以单独提出来,进行严格的控制,防止它们拖垮我们的性能。
纵向分解之我见:
①首先是web前端,我们把那些可以静态化的页面进行静态化,如果条件允许,就使用纯静态化生成真正的html页面,效率会快很多,比如网站的首页,如果不是实时更新的话,那么就可以考虑使用静态化的方式去做。至于伪静态化,由于它对大网站和小网站的意义差不多,就不介绍了。
②然后就是后端的模型上的分离,如果原来没有使用mvc就可以考虑使用mvc,如果mvc的扩展性不够就考虑hmvc来加一层来增强其扩展性,如果三层构架不足以解决问题就考虑四层构架,当然对于一个已经写好的网站来说,往往面临着重构,也是一个很头疼的话题。
③然后就是缓存了,每个层都可以使用缓存。比如服务器可以使用基于web反向代理的服静态服务器比如nginx,squid,varnish等等,在web前端可以考虑使用页面、图片、css、js等缓存,php也可以使用缓存,比如apc、eaccelarator等等,当然对于和服务器的调用,可以考虑memcache等等。