架构师训练营总结 -20200719

发布于: 2020 年 07 月 18 日

本周的课程中我们首先学习了性能测试方面的知识,包括进行性能测试的目的,性能测试中需要关注的重要指标,以及一般情况下软件系统随着测试时并发用户数的提升而出现的响应时间变化规律等。与去医院看病类似,压力测试是一种对软件系统的“体检”,通过对系统进行性能测试,并分析系统测试中关键的性能计数器的变化情况,可以以较低的成本对软件系统的运行情况有一个整体性的了解,为后续进行性能瓶颈的分析,验证优化过后系统性能是否有所提升提供了客观的指标化的依据。评估系统优化是否取得成效、取得了多大程度上的变化,都需要通过性能测试进行直观且客观的证据。

之后我们了解了基于性能测试指标后,对软件系统进行性能优化的一般思路,并通过“分层”的思路,列举了通常情况下可能进行系统性能优化的点,包括对物理设备的优化(交换机、网卡)、对操作系统参数的优化、对中间件的优化(升级中间件版本),以及对代码的优化(调整代码结构,修改算法)等。通过实际工作过程中的案例,详细的说明了如何从这些方面入手进行优化。但是结合我个人实际的工作经验而言,由于涉及跨部门,甚至跨公司协作的问题(如申请更换交换机需要跨部门协作),整个流程通常较长,且涉及到预算的问题;调整操作系统运行参数需要对相当深入的操作系统知识;这些方面就对于我个人目前工作的场景来说可行性都不算太高。目前还是首先考虑从中间件及代码实现逻辑方面入手进行系统性能优化比较有可实施性。

周六的课程中我们首先对操作系统如何进行多任务并发执行进行了探讨,描述了进程的运行期状态的概念,以及进程、线程的概念等。操作系统为了最大化提高自身性能,会通过多进程、多线程等方式分时并发执行的方式对进程进行调度;但是在多线程并行执行的过程中,存在多个线程同时对同一段代码或同样的资源进行方法的情况,此时被共享访问的代码和变量称为临界区。为了保证系统运行时共享内存进行操作时结果的正确性,因此会有线程安全方面的要求。最常见的保证线程安全的手段即为锁,通过临界区的代码进行加锁,保证同时一刻只有一个线程可以获取到锁,获取到锁的进程才可以执行临界区代码的方式,保证了同一时刻只有一个线程操作临界区,也就保证了数据的安全。但是锁在保证了线程安全的情况下,也会对系统性能带来相当大的影响,因为同一时刻只有有一个线程对临界区进行操作,就失去了多线程带来的系统性能上的增长,转变为通过单线程执行。因此如何更好的利用锁,如何用更轻量的方式满足实际业务中对数据安全层面的需求,以及如何在分布式场景下实现类似锁的机制,是当前软件开发过程中,开发人员需要面临的很大一部分挑战。

最后我们简单了解了文件与硬盘IO方面的知识。软件系统在进行IO操作的时候,由于需要等待外部设备(如硬盘、内存)完成IO操作后才可进行后续操作,因此可能对系统的响应时间有较大影响。为了解决IO操作的耗时问题,同时也为了解决保存在存储中的文件的可靠性,可以通过RAID等方式提高磁盘性能和可靠性,如RAID10可以通过保存多份拷贝的方式,提升IO性能,并在存储层面提供备份,防止当单块磁盘出现物理损坏等情况时导致数据不可用。当然RAID也有其限制,例如RAID10会使部分磁盘空间做为备份,因此磁盘利用率会相对较低。实际使用场景下,RAID5是比较常见的解决方式。另外近些年也出现过类似HDFS、NFS等分布式文件系统,通过网络整合存储资源,并透明的对应用程序提供接口,可以使存储层面能够更好的进行水平扩展,实现理论上近似无限容量的存储资源。

用户头像

caibird1984

关注

还未添加个人签名 2018.04.28 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营总结-20200719