【架构】大型网站优化技术思路

1、I/O优化

     1、增加缓存,减少磁盘的访问次数。

     2、优化磁盘的管理系统,设计最优的磁盘方式策略,以及磁盘的寻址策略,这是在底层操作系统层面考虑的。

     3、设计合理的磁盘存储数据块,以及访问这些数据库的策略,这是在应用层面考虑的。例如,我们可以给存放的数据设计索引,通过寻址索引来加快和减少磁盘的访问量,还可以采用异步和非阻塞的方式加快磁盘的访问速度。

     4、应用合理的RAID策略提升磁盘I/O。

2、Web前端调优

      1、减少网络交互的次数(多次请求合并)。

      2、减少网络传输数据量的大小(压缩),比如优化图片大小,压缩js,css文件大小。

     3、尽量减少编码(尽量提前将字符转化为字节,或者减少从字符到字节的转化过程。)

     4、使用浏览器缓存。

     5、减少Cookie传输。

     6、合理布局页面。

     7、使用页面压缩(gzip)。

     8、延迟加载页面。

     9、CSS在最上面,JS在最下面。

     10、CDN缓存静态内容,提高响应速度。

     11、反向代理

     12、页面静态化

     13、异地部署

3、服务降级(自动优雅降级)

     拒绝服务和关闭服务

4、幂等性设计

      有些服务天然具有幂等性,比如讲用户性别设置为男性,不管设置多少次,结果都一样。但是对转账交易等操作,问题就会比较复杂,需要通过交易编号等信息进行服务调用有效性校验,只有有效的操作才能继续执行。

    (注:幂等性是系统的接口对外一种承诺(而不是实现), 承诺只要调用接口成功, 外部多次调用对系统的影响是一致的. 声明为幂等的接口会认为外部调用失败是常态, 并且失败之后必然会有重试.)

5、负载均衡技术

  • HTTP重定向负载均衡 
    当用户发来请求的时候,Web服务器通过修改HTTP响应头中的Location标记来返回一个新的url,然后浏览器再继续请求这个新url,实际上就是页面重定向。通过重定向,来达到“负载均衡”的目标。例如,我们在下载PHP源码包的时候,点击下载链接时,为了解决不同国家和地域下载速度的问题,它会返回一个离我们近的下载地址。重定向的HTTP返回码是302。 
    优点:比较简单。 
    缺点:浏览器需要两次请求服务器才能完成一次访问,性能较差。重定向服务自身的处理能力有可能成为瓶颈,整个集群的伸缩性国模有限;使用HTTP302响应码重定向,有可能使搜索引擎判断为SEO作弊,降低搜索排名。

  • DNS域名解析负载均衡 
    DNS(Domain Name System)负责域名解析的服务,域名url实际上是服务器的别名,实际映射是一个IP地址,解析过程,就是DNS完成域名到IP的映射。而一个域名是可以配置成对应多个IP的。因此,DNS也就可以作为负载均衡服务。 
    事实上,大型网站总是部分使用DNS域名解析,利用域名解析作为第一级负载均衡手段,即域名解析得到的一组服务器并不是实际提供Web服务的物理服务器,而是同样提供负载均衡服务的内部服务器,这组内部负载均衡服务器再进行负载均衡,将请求分发到真是的Web服务器上。 
    优点:将负载均衡的工作转交给DNS,省掉了网站管理维护负载均衡服务器的麻烦,同时许多DNS还支持基于地理位置的域名解析,即会将域名解析成举例用户地理最近的一个服务器地址,这样可以加快用户访问速度,改善性能。 
    缺点:不能自由定义规则,而且变更被映射的IP或者机器故障时很麻烦,还存在DNS生效延迟的问题。而且DNS负载均衡的控制权在域名服务商那里,网站无法对其做更多改善和更强大的管理。

  • 反向代理负载均衡 
    反向代理服务可以缓存资源以改善网站性能。实际上,在部署位置上,反向代理服务器处于Web服务器前面(这样才可能缓存Web相应,加速访问),这个位置也正好是负载均衡服务器的位置,所以大多数反向代理服务器同时提供负载均衡的功能,管理一组Web服务器,将请求根据负载均衡算法转发到不同的Web服务器上。Web服务器处理完成的响应也需要通过反向代理服务器返回给用户。由于web服务器不直接对外提供访问,因此Web服务器不需要使用外部ip地址,而反向代理服务器则需要配置双网卡和内部外部两套IP地址。 
    优点:和反向代理服务器功能集成在一起,部署简单。 
    缺点:反向代理服务器是所有请求和响应的中转站,其性能可能会成为瓶颈。

  • LVS-NAT:修改IP地址

  • LVS-TUN: 一个IP报文封装在另一个IP报文的技术。

  • LVS-DR:将数据帧的MAC地址改为选出服务器的MAC地址,再将修改后的数据帧在与服务器组的局域网上发送。

 6.避免重定向

 7.减少DNS查询次数

 8. 代码优化

    提高代码质量,减少重复代码,使用效率更高的算法,少使用递归。

原文地址:https://www.cnblogs.com/songgj/p/10357480.html