- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
PAGE
PAGE 10
系统性能优化解决方案
系统性能优化解决方案
环境背景:
环境背景:
单台 40TPS,加到 4 台服务器能到 60TPS,扩展性几乎没有。
在实际生产环境中,经常出现数据库死锁导致整个服务中断不可用。
数据库事务乱用,导致事务占用时间太长。
在实际生产环境中,服务器经常出现内存溢出和 CPU 时间被占满。
程序开发的过程中,考虑不全面,容错很差,经常因为一个小 bug 而导致服务不可用。
程序中没有打印关键日志,或者打印了日志,信息却是无用信息没有任何参考价值。
配置信息和变动不大的信息依然会从数据库中频繁读取,导致数据库 IO 很大。
项目拆分不彻底,一个 tomcat 中会布署多个项目 WAR 包。
因为基础平台的 bug,或者功能缺陷导致程序可用性降低。
程序接口中没有限流策略,导致很多 vip 商户直接拿我们的生产环境进行压测,直接影响真正的服务可用性。
没有故障降级策略,项目出了问题后解决的时间较长,或者直接粗暴的回滚项目,但是不一定能解决问题。
没有合适的监控系统,不能准实时或者提前发现项目瓶颈。
优化解决方案 缓存优化方案
优化解决方案 缓存优化方案
针对配置信息和变动不大的信息可以放到缓存中,提高并发能力也能够降低 IO 缓存。
程序容错优化方案
在这一块我要先举一个程序的例子说明一下什么才是容错,先看程序:
注:
那么如果 service 层的方法调用 dao 层的方法,一旦数据插入失败,那么这种异常处理的方式是容错吗?
把异常给吃掉了,在 service 层调用的时候,虽然没有打印报错信息,但是这能是容错吗?
所谓容错是指在故障存在的情况下计算机系统不失效,仍然能够正常工作的特性。我们拿使用缓存来作为一个案例讲解,先看一个图:
这是一个最简单的图,应用服务定期从 redis 中获取配置信息,可能会有朋友认为这样已经很稳定了,但是如果 Redis 出现问题呢?可能会有朋友说,Redis 会是集群,分片或者主从,确保不会出现问题。其实我是这样的认为的,虽然应用服务程序尽量的保持轻量级是不错的,但是不能因此而把
希望全部寄托在中间组件上面,换句话说,如果此时的 Redis 是单点,那么后果会是什么样的,那么随着大量的并发请求到来的时候,程序中会报大量的错误,同时正常的流程也不能进行下去了业务也可能由此而中断。
那么在此种场景下我的解决方案是,要把缓存的使用分级别,有的缓存同步要求时效性非常高,比如支付限额配置,在后台修改完成以后前台立刻就能够获得感知,并且能够成功切换,这种情况只能实时的从 Redis 中获取最新数据,但是每次获取完最新的数据后都可以同步更新本地缓存,当单点的Redis 挂掉后,应用程序至少还能从本地读取信息而不至于服务瞬间挂掉。有的缓存对时效性要求不高,允许有一定延迟,那么在这种情况下我采用的方案是,利用本地缓存和远程缓存相结合的方式, 如下图所示:
方案一:
这种方式通过应用服务器的 Ehcache 定时轮询 Redis 缓存服务器更同步更新本地缓存,缺点是因为每台服务器定时 Ehcache 的时间不一样,那么不同服务器刷新最新缓存的时间也不一样,会产生数据不一致问题,对一致性要求不高可以使用。
方案二:
通过引入了 MQ 队列,使每台应用服务器的 Ehcache 同步侦听 MQ 消息,这样在一定程度上可以达到 准同步 更新数据,通过 MQ 推送或者拉取的方式,但是因为不同服务器之间的网络速度的原因,所以也不能完全达到强一致性。基于此原理使用 Zookeeper 等分布式协调通知组件也是如此。
部分项目拆分不彻底
拆分前
注:
一个 Tomcat 中布署多个应用 war 包,彼此之间互相牵制在并发量非常大的情况下性能降低非常明显。
拆分后
注:
拆分前的这种情况其实还是挺普遍,之前我一直认为项目中不会存在这种情况但是事实上还是存在了。解决的方法很简单,每一个应用 war 只布在一个 tomcat 中,这样应用程序之间就不会存在资源和 连接数的竞争情况,性能和并发能力提交较为明显。
因基础平台组件功能不完善导致性能下降
先看一段代码:
注:
首先我们先不说这段代码的格式如何如何,先看功能实现,使用 Future 来做超时控制,这是为何呢? 原因其实是在我们调用的 Dubbo 接口上面,因为是 Dubbo 已经经过二次封装,结果把自带的timeout 给淹沫了,程序员只能通过这种方式来控制超时,可以看到这种用法非常差劲,对程序性能造成一定的影响。
如何快速定位程序性能瓶颈
我相信在定位程序性能问题的时候,大家有很多种办法,比如用 jdk 自带的命令,如 Jcmd,Jstack, jmap,jhat,jstat,iostat,vmstat 等等命令,还可以用 Vis
您可能关注的文档
- HCIE-Cloud云计算运维指导手册( word 可编辑版).docx
- IBM v5000存储调试手册( word 可编辑版).docx
- IT数据安全技术方案( word 可编辑版).docx
- NSX网络虚拟化平台安装手册( word 可编辑版).docx
- SAP ERP产品解决方案建议书( word 可编辑版).docx
- VxRail超融合产品功能详解( word 可编辑版).docx
- 城市级智慧停车解决方案白皮书( word 可编辑版).docx
- 大数据安全白皮书( word 可编辑版).docx
- 大数据中心建设项目可行性研究报告( word 可编辑版).docx
- 定制开发项目技术实施方案( word 可编辑版).docx
- 项目实施及售后服务方案建议书( word 可编辑版).docx
- 项目实施及应急方案( word 可编辑版).docx
- 项目知识转移培训方案( word 可编辑版).docx
- 新型别墅智能化系统设计方案( word 可编辑版).docx
- 信息安全认证与数据安全管控平台技术方案( word 可编辑版).docx
- 虚拟现实医疗应用白皮书( word 可编辑版).docx
- 医疗信息平台-灾备系统设计方案( word 可编辑版).docx
- 移动运营商数字化转型分析报告( word 可编辑版).docx
- 银河麒麟服务器操作系统-Mongodb适配手册( word 可编辑版).docx
- 应急指挥场所集成方案( word 可编辑版).docx
文档评论(0)