应用服务器性能优化
1 分布式缓存(内存性数据库)
1 缓存原理:
缓存定义:将数据存储在相对较高访问速度的存储介质中(内存性数据库),缓存的本质是一个内存HASH表
使用缓存原因:
1 缓存访问速度快,减少访问数据访问时间
2 如果缓存数据是经过计算得到的,被缓存的可直接使用,减少计算时间
HASH表索引计算方式:
1 计算key的hashcode,
2 hashcode%hash表数组长度 余数为hash表索引
缓存应用规则及小流程
1 读写比较高,很少变化的数据
2 先读缓存,读不到,再读数据库,并将数据写入缓存
3 80%的访问落在20%的数据上
2 合理使用缓存
1 频繁修改的数据
注意控制一般数据的读取比2:1;
2 没有热点的访问
系统访问的数据没有热点数据,大部分访问没有集中在小部分数据上,那么缓存就没有意义,
因为大部分数据还没有被再次访问,就已经挤出缓存了
3 数据不一致与脏读(卖家更新商品属性,买家要等一段时间才能看到)缓存实时更新需要考虑开销和事务
4 缓存可用性:
分布式缓存集群:将缓存数据分布到集群多台服务器上,可在一定程度 改善缓存的可用性。
当一台宕机,只有部分数据丢失,重新从数据库加载这部分数据不会对数据库有多大的影响。
5 缓存预热:
新启动的缓存系统,无任何数据,在重建缓存过程中系统的性能和数据库负载都不太好,
那么在缓存系统启动时就把热点数据加载好;
6 缓存穿透:
如果因为不恰当的业务或者恶意攻击持续高并发地请求某个不存在的数据,缓存的数据数据库不存在,将不存在的数据也缓存起来(value为null);
3 分布式缓存架构
1 JBoss Cache为代表的实时更新同步的分布式缓存
1 将应用程序和缓存部署在同一台服务器上
2 一台缓存更新通知其他进行缓存更新 所有集群服务器 缓存保持相同数据的缓存(代价大 应用企业范围,大型网站少用)
2 Memcached为代表的不互相通信的分布式缓存架构框架
1 将应用程序和缓存部署在不同一台服务器上,缓存系统部署在一组专门的服务器上
2 应用程序通过一致性HASH路由算法选择缓存服务器访问缓存数据
3 应用程序引用分布式缓存Memcached客户端
4 高效的内存管理 slab_class slab组 chunk组
2 异步操作
利用消息队列服务器异步写入数据库
短时间高并发产生事务消息存储在消息队列,削峰作用,可以抵御如促销活动,但是用户体验问题需要消息或者邮件告知。
3 使用集群
构建多台服务器的集群策略
需要关注性能测试曲线,服务器的并发请求数目,最佳的访问请求延迟
4 代码优化