【大型网站技术架构】一:网站性能优化

读书笔记开写第一篇!不仅仅是读书笔记,也是我平时项目经历的一个系统性的总结,希望通过这种方式一方面能够理解书中晦涩的概念和实现策略,另一方面则是学到更多原理性的东西来指导自己平时的项目。

总结一下对于一个网站而言,优化的方案有哪些(不包括怎样使用这些方案实现网站的高可用性,也不对这些方案的优缺点作深入讨论)。

基本概念


  1. 网站吞吐量:TPS/每秒的事务数,QPS/每秒的查询数,HPS/每秒的HTTP请求数
  2. 服务器性能指标:系统负载,内存使用,CPU使用,磁盘使用以及网络I/O等

前端优化方法


  1. 减少HTTP请求:通过将多个前端资源合并成一个实现减少HTTP请求提高性能。
  2. 设置响应头字段是部分及时性要求不高的静态资源在缓存在前端浏览器中。
  3. 启用传输压缩。例如gzip。
  4. 合理的布局前端代码结构,css,html,js代码的顺寻由上至下。
  5. 对于一些可公开访问的资源,可以通过设置其他的域名的方式减少传输过程中的cookie。
  6. 使用CDN分发,将静态资源部署在各大网络运营商的机房中,这样子用户就可以非常快的就近获得资源。
  7. 使用反向代理将热门内容,静态资源或者一些可被缓存的计算结果缓存在代理服务器中。通过配置代理服务器可以实现代理服务器直接转发被缓存的资源。

后端优化方法


  1. 使应用服务器实现无状态,将会话信息存储在缓存服务器集群中,这样每台应用服务器之间就可以被相同的对待。就可以通过增加服务器数量的方法水平扩展整个系统的吞吐量。
  2. 选择合理的缓存策略,只缓存对于业务而言及时性要求不高,且访问量达
    的数据,选取合适的缓存命中算法,减少增加服务器或者服务器宕机对于应用的影响。
  3. 缓存防御策略,将可预见的但是并不存在的数据缓存下来,防止恶意攻击连续对缓存发起该资源的请求导致最终请求压在数据库上面。
  4. 使用消息队列实现网站的异步处理。对于某些接口调用需要花费很长的时间,可以通过一个消息队列来实现生产者消费者模式,每一个模块既可以是消费者也可以是生产者。但是消息队列也有一定的确定,需要增加额外的机制来保证事务性,例如通过一张表来记录消息的消费记录和消费结果来实现事务最终的一致。
  5. 对各种资源费复用来减少创建资源时的时间和性能开销,例如使用数据库连接池和线程池。
  6. 提高代码逻辑和代码中数据的数据结构的合理性以及优化算法提高应用程序的处理时间。
  7. 硬件上采用更加优秀(快)的硬件。

总结

上面写的哪些优化方法对于一个中大型的网站而言,算是一个非常普遍的解决方案了,但是落实到不同的业务,会有自己的实现方式,这里的实现方式指的是不同的方案组合和对应的技术实现方式。举个形象点的例子,有些网站不需要前端再加一个CDN,有些网站不需要加缓存服务器集群,有些业务使用JMQ实现消息队列,有些使用redis缓存消息实现消息队列,对于事务性的保证,也不一定通过数据库锁或者线程同步来实现,也可以通过增加额外的存储结构来记录锁,锁只是一种概念,我们可以选择编程语言自带的方式也可以用数据结构去描述一把锁。

你可能感兴趣的:(【大型网站技术架构】一:网站性能优化)