浅谈性能优化

性能优化的重要性

        性能是网站的一个重要指标,除非没得选择(必须到12306上买票,现在好像有所改变【此处并非是技术问题,解决方案改变业务进行分流,即不同时间放票】),否则用户无法忍受一个响应缓慢的网站,这将导致严重的用户流失。
提升系统的健壮性&可靠性使程序可以适应正常和非正常的运行环境,并且都可以正确地运行;随着业务量的增加,不会出现阻塞和不可用的情况。
提高响应时间,增强用户体验。

性能指标

  •  响应时间
    响应时间的绝对值并不能直接反映软件的性能的高低,软件性能的高低实际上取决于用户对该响应时间的接受程度。游戏(LOL)和工具软件(PhotoShop) 一秒时间来说,游戏感觉卡,软件感觉还可以介绍。
  • 吞吐量
    吞吐量是指系统在单位时间内处理请求的数量。例:TPS(每秒处理的事务数),HPS(每秒可以处理的HTTP请求),QPS(每秒处理的查询数)
  • 并发用户数
    并发用户数是指系统可以同时承载的正常
    使用系统功能的用户的数量。
  • 资源利用率
    资源利用率反映的是在一段时间内资源平均被占用的情况。

前端优化方法(JSP)

  • 减少http请求
    http是无状态的应用层协议,意味着每次请求都需要建立通讯链路、进行数据传输,在服务层有单独线程处理,这些都是昂贵的资源 。
  • 启用压缩
    在服务端对文件进行压缩,浏览器端进行解压,可以减少文件传输。
  • 启用缓存
    CSS,JS,LOGO等资源更新频率较低,但几乎每次http都需要请求,使用缓存可以提高性能。
  • 合理布局
    浏览器会在下载完全部CSS进行页面渲染,因此CSS放置在页面最上面,让浏览器尽快下载CSS,而JS相反,加载到JS立马执行,会阻塞页面渲染,所以JS放置页面最下面(不适合渲染中用到JS的情况)。
  • 减少Cookie传输
    1.Cookie包含在每次的请求和响应中,太大的Cookie会严重影响数据传输,因此写Cookie要慎重,减少Cookie的传输。
    2.对静态资源的访问,如CSS,JS等,发送Cookie无意义,可以考虑使用独立域名,动静分离,减少Cookie传输。
  • CDN加速
    CDN的全称是Content Delivery Network,即内容分发网络。其目的是通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到最接近用户的网络“边缘”,使用户可以就近取得所需的内容,提高用户访问网站的响应速度。

后端优化方法

  • 分布式缓存
    网站性能优化第一定律:优先考虑使用缓存优化性能。
  • 异步操作
    消息队列调用异步化,可改善网站扩展性和性能。
  • 使用集群
    负载均衡构建集群,分散访问压力,减少响应延迟。
  • 代码优化
    最简单最难的优化手段。简单,我们每个人可以直接操作。最难,需要有较高的理论及实践 。

缓存

  • 原理及优势
    将数据存储在较高访问速度的存储媒介中。1.减少数据访问时间;2.减少数据计算时间。
  • 本质是内存Hash表,时间复杂度为O(1)。
  • 存储读写比高、变化少的数据
    遵循二八定律  80%用户访问20%数据,缓存20%数据,改善系统性能。

消息队列

  • 请求写入消息队列服务器,由消息消费者获取数据,异步写入数据库,达到削峰作用(削平高峰期的并非事务)。

多线程

  • CPU计算型任务:最多不超过CPU内核数。
  • IO磁盘等待型任务:启用多线程有助于最大使用cpu资源。

垃圾回收JVM调整

  • 使用jconsole等工具来查看堆【新生代老年代】栈使用情况,调整jvm参数获取更多内存资源。

资源复用

  • 单例模式和对象池

合理使用缓存

  • 频繁修改:读写比大于2:1才有意义,一次缓存两次以上读取。
  • 非热点:要遵循二八定律。
  • 数据脏幻读:缓存有失效时间,需要容忍一定时间的数据不一致。
  • 缓存可用性:缓存丢失或不可用不影响系统正常运行。
  • 缓存预热:缓存系统启动时加载热点数据。
  • 缓存穿透:持续高并发的访问某个不存在的数据,由于未缓存此数据,所有压力落到DB,可能会引起崩溃。解决方法:存缓存value为null。

数据库优化

          在Web应用程序体系架构中,数据持久层(通常是一个关系数据库)是关键的核心部分,它对系统的性能有非常重要的影响。MySQL是目前使用最多的开源数据库,但是MySQL数据库的默认设置性能非常的差,仅仅是一个玩具数据库。因此在产品中使用MySQL数据库必须进行必要的优化。

         MySQL三范式
  • 1NF:字段不可分;
    2NF:有主键,非主键字段依赖主键;
    3NF:非主键字段不能相互依赖;  
    解释:
    1NF:原子性 字段不可再分,否则就不是关系数据库;
    2NF:唯一性 一个表只说明一个事物;
    3NF:每列都与主键有直接关系,不存在传递依赖(关联表的使用);
         优化规则粗略记录
  • 1.合适的数据类型:最基本的优化之一就是使表在磁盘上占据的空间尽可能小。这能带来性能非常大的提升,因为数据小,磁盘读入较快,并且在查询过程中表内容被处理所占用的内存更少。同时,在更小的列上建索引,索引也会占用更少的资源。
    2.声明列为not null。
    3.索引使用:在Unique列上定义Unique index等。
    4.使用explan:分析您的SQL语句
    5.查询啥取啥,不要用*,减少cpu和网络开销
    6.避免数据库频繁连接【druid的监控】
    7.避免使用存储过程,定时器等【其他方法解决】
    8.优化语句使用缓存,now()等函数不使用缓存。
    9.返回结果集少的条件放到右边等等
         配置修改
  • innodb_buffer_pool_size=80%
    这个参数主要缓存innodb表的索引,数据,插入数据时的缓冲,设置得越大,存取表里面数据时所需要的磁盘I/O越少,专用服务器默认70--80%;
  • innodb_thread_concurrency
    线程并发数,建议设置为CPU内核数*2;
    修改配置缩小连接死亡时间减少休眠的线程等等;
  • 配置慢查询参数,抽出慢SQL进行优化;
    MySQL表空间碎片整理;
  • 开启冷热备份,放置数据库的崩溃造成数据丢失,容灾机制;
    在热备份基础上使用读写分离;


《大型网站技术架构:核心原理与案例分析》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值