网站的高性能架构---应用服务器性能优化

应用服务器就是处理网站业务的服务器,网站的业务代码都部署在这里,是网站开发最复杂,变化最多的地方,优化手段主要有缓存、集群和异步等。数据库

  • 分布式缓存

  缓存无处不在,既存在于浏览器、也存在于服务器和数据库;既能够对数据缓存,也能够对文件缓存,还能够对页面片断进行缓存。浏览器

   网站性能优化第必定律:优先考虑使用缓存优化性能。缓存

  1. 缓存的基本原理

  缓存是指将数据存储在相对较高访问速度的存储介质中。一方面缓存访问熟读快,能够减小访问时间;另外一方面若是缓存的数据是通过计算处理获得的,那么被缓存的数据无需重复计算便可直接使用,所以缓存还能够减小计算时间。安全

     缓存的本质是一个内存HASH表,网站应用中,数据缓存以一对Key、Value的形式存储在Hash表中。缓存主要用来存放读写频率比较高、不多变化的数据。应用程序读取数据时,先到缓存中读取,先到缓存中读取,若是读取不到或数据已经失效,再访问数据库,并将数据写入缓存。性能优化

  2.合理使用缓存服务器

      使用缓存对提升系统性能有不少好处,可是不合理使用缓存非但不能提升系统的性能,还会成为系统的累赘,甚至风险。网络

  频繁修改的数据:若是缓存中保存的是频繁修改的数据,就会出现数据写入缓存后,应用还来不及读取缓存,数据就已经失效,徒增系统负担,还可能读取到脏数据。数据结构

  没有热点的访问: 缓存使用内存做为存储,若是应用程序访问数据没有热点,那么缓存就没有意义。多线程

  数据不一致与脏读: 通常对缓存的数据设置有失效时间,一旦超过失效时间,就要从数据库中从新加载,所以应用要容忍必定时间的数据不一致,在应用中这种延迟一般是能够接受的,但在具体应用仍须要慎重对待。还有一种策略是数据更新时当即更新缓存,不过这也会带来更多系统开销和事务一致性问题架构

  缓存可用性:当缓存服务崩溃时,数据库会由于彻底承受不了如此大的压力而宕机,进而致使整个网站不可用,这种状况被称做缓存雪崩,发生这种故障,甚至不能简单地重启缓存服务器和数据库服务器来恢复网站访问。实践中有的网站经过缓存热备等手段提升缓存的可用性:当某台缓存服务器宕机时,将缓存访问切换到热备服务器上。经过分布式缓存服务器集群,将缓存数据分布到集群多台服务器上可在必定程度上改善缓存的可用性。当一台缓存服务器宕机时,只有部分缓存数据丢失,从新从数据库加载这部分数据不会对数据库产生很大影响。

 

 

  3.分布式缓存架构

      分布式缓存是指缓存部署在多个服务器组成的集群中,以集群方式提供缓存服务.一种是以Jboss Cache为表明的须要同步更新的分布式缓存,一种是以Memcached为表明的互不通讯的分布式缓存.

       Memcached设计简单、性能优异、互补通讯的服务器集群、海量数据可伸缩架构另网站架构师趋之若鹜。

 

 

 

  • 异步操做

      使用消息队列将调用异步化,在改善网站扩展性的同时,还能够改善网站系统的性能。

 

      在不使用消息队列的状况下,用户的请求数据直接写入数据库,在高并发的状况下,会对数据库形成巨大的压力,同时也使得响应延迟加重。在使用消息队列后,用户请求的数据发送给消息队列后当即返回,再有消息队列的消费者进程从消息队列中获取数据,异步写入数据库。因为消息队列服务器处理速度远大于数据库,所以用户的响应延迟可获得有效改善。

      消息队列具备很好的削峰做用-----------即经过异步处理,将短期高并发的事务消息存储在消息队列中,从而削平高峰期的并发事务。

 

  • 集群

  在高并发场景下,使用负载均衡技术为一个应用建构一个由多台服务器组成的服务器集群,将并发访问请求分发到多台服务器上处理,避免单一服务器因负载压力过大而响应缓慢,使用户请求具备更好的响应延迟特征。

 

  • 代码优化

  1.多线程

      解决线程安全问题的几个主要手段:将对象设计为无状态对象:指对象自己不具存储状态信息、使用局部对象、并发访问资源时使用锁。

  2.资源复用

      系统运行时,尽可能减小开销很大的系统资源的建立和销毁,好比数据库链接、网络通讯链接、线程、复杂对象等。资源复用模式主要有两种:单例和对象池。对象池模式经过复用对象实例,减小对象建立和资源消耗。

  3.数据结构

  在不一样场景中合理使用恰当的数据结构,灵活组合各类数据结构改善数据读写和计算特性可极大优化程序性能.

  4.垃圾回收

 

相关文章
相关标签/搜索