谈系统优化

                                                           系统优化

   优化是一个大主题,谈优化从系统层面来说,首先我们要找到瓶颈的源头。从以下方面谈:

   Web前端性能优化

  1.     减少http请求 (http协议是无状态的应用层状态,意味着每次Http请求都需要建立通信连接,进行数据传输,而在服务器端,每个Http都需要启动独立的线程去处理),减少Http请求的数目可有效提高访问性能。
  2.    使用浏览器缓存(Css\JS\图片)静态资源更新频率比较低,如果将这些文件缓存在浏览器中可以改善性能(设置http头Cache-Control和Expires属性,可设定浏览器缓存)
  3.  启用压缩(在服务器对文件进行压缩,在浏览器端对文件解压缩,可有效减少通信传输的数据量)文本压缩率可达80%以上,因此http、css、js启用GZip可达到很好的效果。
  4. CSS放在页面最上面、JS放在页面最下面(浏览器在下载完全部Css之后才对整个页面进行渲染,而Js相反,浏览器加载JS后立即执行,有可能阻塞整个页面)
  5. 减少Cookie传输(一方面 Cookie包含每次请求和响应中,太大的Cookie会严重影响数据传输,另外一方面Js/css静态文件发送cookie没有意义,可以考虑静态资源使用独立域名,减少Cookie传输的次数)。
  6. 使用CDN(内容分发网络)使用户以最快速度获取数据;一般缓存的是静态资源
  7. 反向代理 实现负载均衡

 

应用服务器性能优化   

  1. 分布式缓存 缓存穿透(因为不恰当的业务、或者恶意攻击持续高并发地请求某个不存的数据,由于缓存没有保存该数据,所有请求都会落到数据库上,会对数据库造成很大的压力,甚至崩溃。一个简单的对策是将不存的数据也缓存起来,其value为null)  .Memcached是分布式缓存(互不通信的分布式架构,应用程序通过一致性Hash等路由算法选择缓存服务器远程访问缓存数据,缓存服务器之间不通信,很容易实现扩容,具有良好的伸缩性。)
  2. 异步操作;使用消息队列将调用异步化,可改善网站的扩展性、性能、削峰;
  3. 使用集群;在网站高并发的场景下,使用负载均衡技术为一个应用构建一个由多台服务器组成的服务器集群,将并发访问请求分发到多台服务器上处理;避免单一服务器因负载压力过大而响应缓慢;
  4. 代码优化;1)、合理使用多线程(将对象设计为无状态对象,这样多线程访问不会出现状态不一致,资源竞争);2)、资源复用;要尽量减少那些开销很大的系统资源的创建和销毁,如:数据库连接、网络通信连接、线程、复杂对象。从编程角度,资源复用主要有两种模式:单例和对象池;
  5. 存储性能优化; 数据库层面的优化:(垂直划分,首先根据业务系统拆分不同的业务线;水平划分:分库分表);设计的角度:使用三范式、合理的冗余字段、合理的使用索引;代码层面的优化:使用explain查看sql的执行引擎;

 

网站核心架构高可用要素

  1. 性能(同上两点优化)
  2. 可用性(通过预发布验证->自动化测试->发布)
  3. 伸缩性
  4. 扩展性(快速响应需求变化)使用分布式消息队列降低系统耦合性
  5. 安全性(保护重要的数据不被窃取)

 实现高可用服务策略:

  1. 分级管理(将服务器进行分级管理,核心应用和服务优先使用理好的硬件,同时在服务器部署上进行必要的隔离,避免故障的连锁反应)
  2. 超时设置(由于服务端宕机、线程死锁等原因,可能导致应用程序对服务端的调用失去响应,进而导致请求长时间得不到响应,同时还占用应用程序的资源,不利于及时将访问请求到正常的服务器上,如设置超时时间,可选择继续重试或请求转移到提供相同服务的其他服务器上)
  3. 异步调用
  4. 服务降级(在网站访问高峰时,为了保证核心应用和功能正常运行,通常需要对服务进行降级)
  5. 幂等性设计(服务重复调用是无法避免的,应用层也不需要关心是否真的失败,因此服务层必须保证服务重复调用和调用一次产生的结果相同)

CAP原理:一个提供服务的存储系统无法同时满足一致性、数据可用性、分区耐受性

 

 

 

 

 

你可能感兴趣的:(优化)