持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第 7 天,点击查看活动详情
1 前言
在前文中已经讲述了性能优化的一些关键的关注点,这样在做性能优化时就有了具体的目标和衡量方法,使得需要做的工作进行量化。在具体的性能优化过程中,又可以分为技术优化和性能优化,业务优化的作用是非常大的,毕竟所有的技术都是为业务做服务的。但是对于开发者来说,可以通过一些具体的手段来完成,在后续的文章中,将会介绍一些常用的技术手段。
2 复用的思想
在日常的开发过程中,代码复用也是很常见的,这样就可以把公用的逻辑提取出来,既可以简明逻辑也可以方便业务维护。如果没有代码复用,就需要处处维护业务逻辑和公共逻辑。在硬件系统中,说到数据复用,就会想到缓冲和缓存
。两者的区别如下所示:
- 缓冲即 buffer , 通常用于数据的暂存操作,然后进行批量传输或者写入,多数情况下使用顺序写,用来缓存不同设备之间读写速度不一致的问题,由此可以看出缓冲主要针对的是写操作。
- 缓存即 cache, 通常是对于已经读取的数据复用,通过将读取的数据存放在内存中,方便后续的复用读取操作。缓存主要是对数据的读操作。
除了上述的缓存和缓冲,还有就是一些的池化操作,比如数据库连接池、redis 连接池和线程池,这些在日常的开发中有很多的使用场景。比如线程池,线程的创建和销毁都是比较消耗资源的操作,因此可以将创建的线程存放在线程池中,任务执行完成后再放入池中,方便循环使用。
3 优化计算过程
3.1 并行计算
目前的服务器硬件 cpu 都是多核的,而且性能也越来越高,如果能最大限度的利用好 cpu 资源,也可以最快最优的解决问题。针对并行计算,一般有三种模式:
多机模式
: 采用负载均衡的方式,将大批量的计算拆解成多个小任务,分发到各个资源服务器上进行分别处理。例如 hadoop 通过 mapreduce 的方式,将任务分配到多个服务器进行计算。
多进程模式
:比如 Nginx 服务采用 NIO 编程模型,由 master 统一管理 worker 进程,然后由 worker 进程进行真正的请求处理,这样在单机上也能更好的使用 cpu 资源。
多线程模式
: 多线程模式在日常工作中是最常使用的,比如线程池,在一个应用中通常是建立一个公共的线程池,用来处理异步任务,这样也可以充分发挥服务器的多核资源。
3.2 同步变异步
计算的优化另一种方式,就是同步变异步,这里通常涉及编程模型的变更,同步方式会导致请求一直阻塞,直到失败或者成功的返回结果。这种编程方式虽然比较简单,但是对突发的流量问题就比较大,容易导致请求失败。异步操作可以支持横向扩容,可以缓解瞬间的请求压力,使得请求变得平滑。
3.3 懒加载
懒加载是一种常见的业务优化模式,通常使用单例模式或者代理模式,类似于先加载页面信息,然后通过异步使用 ajax 方式异步请求后台获取数据。
4 总结
在本文中,主要讲述了复用的思想和计算优化两种方式,这是性能优化中最常见的方式,后续还会继续分享性能优化的其它技术手段。