写点什么

架构师课程第七周总结

用户头像
dongge
关注
发布于: 2020 年 07 月 22 日
架构师课程第七周总结

本周的课程讲解性能测试、性能优化。性能测试已在上一篇中说明,这篇主要总结性能优化。


https://xie.infoq.cn/article/bad8d0996c7f0067e5c613138


如果只记住一条性能优化的原则,那就是没有测试就没有优化。


性能优化一个系统是由很多方面构成的,程序只是这个系统的一小部分,因此进行性能优化的时候,也需要从系统的角度出发,综合考虑优化方案。


用户体验优化性能优化的最终目的是让用户有更好的性能体验,所以性能优化最直接的其实是优化用户体验。同样 500 毫秒的响应时间,如果收到全部响应数据后才开始显示给用户,相比收到部分数据就开始显示,对用户的体验就完全不一样。同样,在等待响应结果的时候,只显示一个空白的页面和显示一个进度条,用户感受到的性能也是完全不同的。除了用户体验优化这种比较主观的性能优化,即使我们想要真正优化性能指标,进行客观的性能优化,我们也可以从系统的角度,全方位考虑系统的各个方面。从系统的宏观层面逐渐往下看,可以在 7 个层面进行性能优化。


第一层:数据中心优化首先是数据中心性能优化,我们开发的软件是部署在数据中心的,对于一个全球访问的互联网应用而言,如果只有一个数据中心,那么最远的用户访问这个数据中心,即使以光速进行网络通信,一次请求响应的网络通信时间也需要 130 多毫秒。这已经是一个人可以明显感受到的响应延迟了。所以,现在大型的互联网应用基本都采用多数据中心方案,在全球各个主要区域都部署自己的数据中心,就近为区域用户提供服务,加快响应速度。


第二层:硬件能力的提升,对系统性能的影响是非常巨大的。网络通信是整个计算作业的一个重要瓶颈点。1G 网卡我们看到,在使用 1G 网卡的情况下,某些计算阶段的网络通信开销时间需要 50 多秒。如果用软件优化的方法,进行数据压缩,一方面提升有限,另一方面还需要消耗大量 CPU 的资源,使 CPU 资源成为瓶颈。后来通过硬件升级的办法进行优化,使用 10G 网卡替换 1G 网卡,网络通信时间消耗得到极大改善。10G 网卡原来需要 50 多秒的通信时间,现在只需要 10 多秒就可以完成,整个作业计算时间也大大缩短。硬件优化效果明显。


第三层:操作系统优化不同操作系统以及操作系统内的某些特性也会对软件性能有重要影响。操作系统自身消耗的 CPU 占比特别高时,需要分析是否为操作系统参数需要调优。在某些版本的 Linux 中,transparent huge page 这个参数是默认打开的,导致系统占用 CPU 过高。关闭这个参数后,系统 CPU 占用下降,整个计算时间也大幅缩短了。


第四层:虚拟机优化像 Java 这样的编程语言开发的系统是需要运行在 JVM 虚拟机里的,虚拟机的性能对系统的性能也有较大影响,特别是垃圾回收,可能会导致应用程序出现巨大的卡顿。


第五层:基础组件优化在虚拟机之下,应用程序之上,还需要依赖各种基础组件,比如 Web 容器,数据库连接池,MVC 框架等等。这些基础组件的性能也会对系统性能有较大影响。常见有 SQL 调优,对业务数据处理能力有巨大的影响。


第六层:架构优化我们这个模块就是讨论各种互联网技术架构,大部分技术架构方案也是用来提升系统性能的。主要有缓存、消息队列、集群。

  • 缓存:通过从缓存读取数据,加快响应时间,减少后端计算压力,缓存主要是提升读的性能。

  • 消息队列:通过将数据写入消息队列,异步进行计算处理,提升系统的响应时间和处理速度,消息队列主要是提升写的性能。

  • 集群:将单一服务器进行伸缩,构建成一个集群完成同一种计算任务,从而提高系统在高并发压力时候的性能。各种服务器都可以构建集群,应用集群、缓存集群、数据库集群等等。


第七层:代码优化通过各种编程技巧和设计模式提升代码的执行效率,也是我们最能控制的一个优化手段。具体技巧有:使用合理的数据结构优化性能。编写性能更好的 SQL 语句以及使用更好的数据库访问方式。实现异步 I/O 与异步方法调用,避免不必要的阻塞。此外,还可以使用线程池、连接池等对象池化技术,复用资源,减少资源的创建。当然最重要的还是利用各种设计模式和设计原则,开发清晰、易维护的代码。因为一团糟的代码里面有什么性能问题谁也搞不清楚,也没办法优化。


小结


性能优化的一般步骤是:首先进行性能测试,根据测试结果进行性能分析,寻找性能的瓶颈点,然后针对瓶颈进行优化,优化完成后继续进行性能测试,观察性能是否有所改善,是否达到预期的性能目标,如果没有达到目标,继续分析新的瓶颈点,不断迭代优化。性能优化的一个前提是需要进行性能测试,了解系统的性能指标,才能有目标地进行性能优化。另一个前提是,必须要了解系统的内部结构,能够分析得到引起性能问题的原因所在,并能够解决问题。因此性能优化是对一个架构师技能和经验的全面挑战,是架构师的必备技能之一。


用户头像

dongge

关注

还未添加个人签名 2017.10.19 加入

还未添加个人简介

评论 (1 条评论)

发布
用户头像
请加“极客大学架构师训练营”标签,便于分类
2020 年 07 月 22 日 18:17
回复
没有更多了
架构师课程第七周总结