标签:
应用服务器就是处理网站业务的服务器,网站的业务代码都部署在这里,是网站开发最复杂,变化最多的地方,优化手段主要有缓存、集群和异步等。
缓存无处不在,既存在于浏览器、也存在于服务器和数据库;既可以对数据缓存,也可以对文件缓存,还可以对页面片段进行缓存。
网站性能优化第一定律:优先考虑使用缓存优化性能。
缓存是指将数据存储在相对较高访问速度的存储介质中。一方面缓存访问熟读快,可以减少访问时间;另一方面如果缓存的数据是经过计算处理得到的,那么被缓存的数据无需重复计算即可直接使用,因此缓存还可以减少计算时间。
缓存的本质是一个内存HASH表,网站应用中,数据缓存以一对Key、Value的形式存储在Hash表中。缓存主要用来存放读写频率比较高、很少变化的数据。应用程序读取数据时,先到缓存中读取,先到缓存中读取,如果读取不到或数据已经失效,再访问数据库,并将数据写入缓存。
2.合理使用缓存
使用缓存对提高系统性能有很多好处,但是不合理使用缓存非但不能提高系统的性能,还会成为系统的累赘,甚至风险。
频繁修改的数据:如果缓存中保存的是频繁修改的数据,就会出现数据写入缓存后,应用还来不及读取缓存,数据就已经失效,徒增系统负担,还可能读取到脏数据。
没有热点的访问: 缓存使用内存作为存储,如果应用程序访问数据没有热点,那么缓存就没有意义。
数据不一致与脏读: 一般对缓存的数据设置有失效时间,一旦超过失效时间,就要从数据库中重新加载,因此应用要容忍一定时间的数据不一致,在应用中这种延迟通常是可以接受的,但在具体应用仍需要慎重对待。还有一种策略是数据更新时立即更新缓存,不过这也会带来更多系统开销和事务一致性问题
缓存可用性:当缓存服务崩溃时,数据库会因为完全承受不了如此大的压力而宕机,进而导致整个网站不可用,这种情况被称作缓存雪崩,发生这种故障,甚至不能简单地重启缓存服务器和数据库服务器来恢复网站访问。实践中有的网站通过缓存热备等手段提高缓存的可用性:当某台缓存服务器宕机时,将缓存访问切换到热备服务器上。通过分布式缓存服务器集群,将缓存数据分布到集群多台服务器上可在一定程度上改善缓存的可用性。当一台缓存服务器宕机时,只有部分缓存数据丢失,重新从数据库加载这部分数据不会对数据库产生很大影响。
3.分布式缓存架构
分布式缓存是指缓存部署在多个服务器组成的集群中,以集群方式提供缓存服务.一种是以Jboss Cache为代表的需要同步更新的分布式缓存,一种是以Memcached为代表的互不通信的分布式缓存.
Memcached设计简单、性能优异、互补通信的服务器集群、海量数据可伸缩架构另网站架构师趋之若鹜。
使用消息队列将调用异步化,在改善网站扩展性的同时,还可以改善网站系统的性能。
在不使用消息队列的情况下,用户的请求数据直接写入数据库,在高并发的情况下,会对数据库造成巨大的压力,同时也使得响应延迟加剧。在使用消息队列后,用户请求的数据发送给消息队列后立即返回,再有消息队列的消费者进程从消息队列中获取数据,异步写入数据库。由于消息队列服务器处理速度远大于数据库,因此用户的响应延迟可得到有效改善。
消息队列具有很好的削峰作用-----------即通过异步处理,将短时间高并发的事务消息存储在消息队列中,从而削平高峰期的并发事务。
在高并发场景下,使用负载均衡技术为一个应用建构一个由多台服务器组成的服务器集群,将并发访问请求分发到多台服务器上处理,避免单一服务器因负载压力过大而响应缓慢,使用户请求具有更好的响应延迟特征。
1.多线程
解决线程安全问题的几个主要手段:将对象设计为无状态对象:指对象本身不具存储状态信息、使用局部对象、并发访问资源时使用锁。
2.资源复用
系统运行时,尽量减少开销很大的系统资源的创建和销毁,比如数据库连接、网络通信连接、线程、复杂对象等。资源复用模式主要有两种:单例和对象池。对象池模式通过复用对象实例,减少对象创建和资源消耗。
3.数据结构
在不同场景中合理使用恰当的数据结构,灵活组合各种数据结构改善数据读写和计算特性可极大优化程序性能.
4.垃圾回收
标签:
原文地址:http://www.cnblogs.com/wxgblogs/p/5473576.html