系统架构如何进行性能优化?
对于业务系统的性能优化,我已经系统的讲过分析诊断的思路。今天我就说说业务系统性能优化中思考和分析系统性能问题的一些常用方法。
上线前的性能测试有用吗?有时候大家可能会疑惑,为什么我们的系统在再次上线之前已经测试过了,为什么上线之后还是会出现系统性能问题。那么我们可以在上线之前考虑一下我们性能测试中可能存在的一些地方,这样可以不能真正模拟生产环境,特别是:
1.硬件能否完全模拟真实环境?最佳性能测试通常直接在构建的生产环境中进行。
2.数据量能否模拟实际场景?真实的场景往往是很多业务表已经积累了大量的数据,而不是空表。
3.并发可以模拟真实场景吗?一个是需要记录复杂的业务场景,一个是并发量大的时候需要多台测压机。
其实我们做性能测试的时候很难做到以上几点,所以完全模拟真实的生产环境是相当困难的,这也导致很多性能问题在真实上线之后才被发现。
系统本身的横向弹性扩展是否完全解决了性能问题?第二点,也是我们经常讲的,就是在设计我们业务系统的架构的时候,特别是面对非功能性需求的时候,会讲系统本身的数据库,中间件采用集群技术,可以实现灵活的横向扩展。那么这种弹性水平扩展真的解决了性能问题吗?
事实上,我们看到,对于数据库来说,往往很难实现无限的弹性水平扩展,即使对于OracleRAC集群,也往往高达单点性能的2到3倍。对于应用集群来说,往往可以实现灵活的横向扩展,目前的技术已经比较成熟。
当中间件可以充分弹性扩展的时候,可能还是会出现性能问题,也就是随着我们系统的运行,以及业务数据的不断积累和增值。其实你可以看到非并发状态下的单用户访问是很慢的,并不是并发满了。因此,也就是我们常说的给分,即:
当单点访问性能正常时,集群可以扩展以应对大并发状态下的同时访问。
当单点访问本身性能有问题时,首先要优化单节点访问的性能。
商业系统性能诊断的分类
对于业务系统性能诊断,从静态的角度来看,可以考虑以下三个方面进行分类。
操作系统和存储中间件层(包括数据库和应用服务器中间件)和软件层(包括数据库SQL和存储过程、逻辑层、前端表示层等。),那么就是某个业务系统的应用功能有问题。当然,我们也可以从动态层面看一个实际的应用请求从被调用到现在经历了哪些代码和硬件基础设施,通过分段的方法定位和查询问题。
比如我们经常看到的是查询功能。如果有问题,第一件事就是弄清楚这个查询函数对应的SQL语句在后台是不是很慢。如果SQL本身很慢,那么就有必要对SQL语句进行优化。如果SQL本身快但查询慢,就要看是前端性能问题还是集群问题。
软件代码的问题通常是一个性能问题。;不可忽视。对于业务系统的性能问题,我们往往会想到扩展数据库的硬件性能,比如扩展CPU和内存,扩展集群,但实际上我们可以看到很多应用的性能问题并不是硬件性能造成的,而是软件代码性能造成的。我在以前的博客文章中也谈到了软件代码的常见性能问题,通常包括。
1.初始化大型结构对象、数据库连接等。在循环中。
2.资源未释放等导致的内存泄漏
3.基于场景需求的缓存并不能带来适度的性能提升。
4.长周期事务消耗资源。
5.在处理某个业务场景或问题时,没有选择最优的数据结构或算法。
以上是一些常见的软件代码性能问题,这些往往需要通过我们的代码评审或者代码复查来发现。因此,要想做全面的性能优化,就必须考察软件代码的性能问题。
一般有两种途径可以通过IT资源监控或APM应用工具发现性能问题。一是通过我们的IT资源监控、APM性能监控和预警提前发现性能问题,二是通过业务用户在使用过程中的反馈发现性能问题。
随着D
什么是远程桌面会话主机(RDSessionHost)?
RD会话主机(也称为RDS主机)是一台服务器计算机,用于承载要远程访问的应用程序和桌面。在View部署中,RDS主机是安装了Microsoft远程桌面服务角色、Microsoft远程桌面会话主机服务和ViewAgent的Windows服务器。