不涉及具体技术,都是烂大街的东西,只是简单总结一下。
1 前端域名分流
不同的内容从不同的域名的服务器获取。值得注意的是,cookie不能跨域名访问。
主域名下会产生一些cookie,通过不同的静态文件,比如图片,JS等,通过其他域名访问获取,可以节约cookie产生的流量。
2 页面静态化
频繁需要从数据库中查询的数据需要显示在网页中。直接在服务器端生成html静态页面。访问直接请求html文件。
3 CDN
CDN一般都只应用于静态资源。解决空间线路问题。
中心服务器发布资源,然后分发给CDN服务器。客户端的请求通过DNS解析到离客户端线路最近服务器的IP地址。
4 静态文件压缩与合并
js css等文件使用代码压缩工具进行压。
css sprite是一种典型的合并方案。将小图片合并到一起,显示图片时,通过CSS显示大图片的一小部分。
5 分离思想
同一件事的不同细节使用不同组件程序实现,完成功能的分离。比如:
- 上传与下载分离。
- 消耗资源(CPU或内存)的程序与web服务器分离。
- 数据库读写分离。
分离是架构设计中非常重要的思想。这里就不多说了。
6 缓存
缓存是提升性能最有效的方法。
对于准实时的数据可以通过缓存降低数据库的访问压力。
7 全文检索
对于大型网站,站内搜索一定不能用数据库的like搜索。like效率低下,而且会造成全表扫描,消耗数据库资源。
使用倒排索引与分词技术可以实现高速文本搜索。
搜索功能一般使用专用的搜索服务程序来实现,比如非常著名的Solr。
8 负载均衡
负载即计算机的资源被消耗。计算机资源一般指的的就是CPU资源,内存资源,磁盘资源,网络IO资源。
将资源的消耗分担给多个计算机来处理即负载均衡。而多个计算机连接后的计算机组即计算机集群。
而负载均衡也被分为硬负载均衡与软负载均衡。
我们常说的负载均衡一般指的都是网络IO的负载均衡。具体的技术非常多,LVS,Nginx,智能DNS等等,都可以对网络IO负载有效的分流。
9 一些特殊模式的解决方案
秒杀场景
1 数据库锁(不可行)
2 “二阶段处理”,记录大量用户提交的请求。之后统计这些请求的排在前面的用户。
3 使用Redis的List排队。
文章阅读数
1 数据库表锁
2 “二阶段处理”,每阅读一次文章,记录增加一条,使用一个计算条数的程序定时统计文章的被阅读数量。
3 使用Redis的key-value实现。
以上特殊场景在具体环境下肯定有更好的解决方案。
10 云计算
这是个颠覆性的技术,这是个云计算的时代,几乎所有人都在谈论云计算。云计算到底意味着什么?
云计算的本质即以虚拟机为基础,当负载较大时,可以快速启动一些虚拟机,实现负载均衡;而当负载较小时,可以放弃掉一些虚拟机以解决资源。
云计算的真正意义在于把计算资源变成一种真正可以被计费的资源,就像家中的自来水,当需要的时候,增大阀门,使用更多的资源,当不需要的时候,关小阀门即可。
有句话说的好,云计算让低端网管失业。
------------------------------------------------------------------------------------------
话题太大,有空再扩充。