每次我去面试别人肯定要问一句有没有大数据的网站经验。我的每次回答都是No。我也不想 啊。但是遇不到这种公司有什么办法。怎么办能。自己研究被。虽然知道和经验是不一样的。但是总比不知道好吧。
首先呢。我把网站性能分成几个部分 ①服务器压力 ②数据库压力 ③带宽开销 ④网络开销
服务器压力:
简介:当网站的浏览人数增加。web服务器会因为同一时间的并发访问数量太多处理不过来导致访问排队。或者由于并发访问变大。导致web服务器在处理脚本时占用服务器的 cpu、内存、io等资源超过安全线。
处理方法:
①将数据库和web服务器分离。web服务器的资源只用来处理web请求。
②部署多台web服务器。用nginx或者lvs来实现负载均衡。将压力分摊到多个服务器上。
③将静态文件从web服务器上剥离。静态文件统一保存在文件服务器上。如css、js、image等。这样对于静态文件的大量io和网络资源的开销就可以单独做优化。如缓存或CDN加速等。
数据库压力:
简介:由于数据量越来越大。导致数据库库的各个查询更新速度变慢。一个未经检查的查询语句可能就能摧毁一个数据库。
处理方法:
①利用缓存千方百计减少对数据库的访问。无论是用硬盘的文件缓存。还是用内存的memcache。将数据短期或者长期的缓存起来。尽量减少对于数据库的查询。
②检查没一条语句。不管数据库怎么优化。查询语句还是根本。添加适当的索引,索引不是乱添加的添加索引的同时也加重了插入更新删除的负担。只取需要的数据字段不要在用select *了。
③数据库的集群。这个其实我不是很明白。但是应该也有想web负载均衡一样。也可以用集群来分担数据库的压力。集群的话数据库应该就会有主从同步保证数据的一致性。同时可以将数据库的读写分离。
网络压力:
简介:即时到了20M的网速时代。网络依然是一个影响网站速度的原因。
处理方法:
①服务器响应HTML页面的时候。使用gzip压缩网页内容。据说压缩能力可以在85%。也就是100k的页面压缩后只有15K在网络上传输。
②html中的图片可以使用 map或者 css spirit技术。将多个小图片合并一张大图。这虽然并不能减少图片的大小。但是能减少获取图片的次数。同样可以减少开销
③将css、js文件合并并压缩。在开发的时候因为方便。所以css、js文件会分很多个。而且里面会有格式很多无用的空格。将这些全都合并之后。又可以将获取的文件减少。将文件的大小减小。