提高系统性能方法论

  看了一些提高系统性能的方法,抽象出方法论。

1. 拆分

  拆分相当于企业的扩大再生产,这并没有提高企业的效率。即单个节点的处理能力并没有变化。只是把负载分给了其它节点。具体是:集群,分片。

  DNS集群,应用服务器集群,数据库读写分离,再到更细粒度的多进程等。

2. 精简

  精简是指降低单个处理占用的资源,或者减少处理流程。比如占用的内存,CPU,锁,网络,磁盘等等,从而提高单个处理的处理速度。

  进程->线程->协程,降低占用的内存和CPU。

  HTTP->RPC,精简单次请求消息体,提高有效载荷的占比,提高消息收发速度

  发送网络请求时,内核会将数据拷贝到用户内存,用户内存再将数据发给网卡,操作系统支持直接将数据从内核拷贝到网卡。好像是叫DMA。这就是简化处理流程

3. 复用

  提高资源的利用率,从而提高吞吐量和速度。

  将多进程/多线程改为IO多路复用,就可以大大降低对CPU,内存的占用。

  进程池,数据连接池的使用,由于创建进程和数据库连接耗时,重复利用可以提高速度。

  在通信中,也有频分复用,时分复用,码分复用。

4. 异步

  消息队列,buffer。其实消息队列就是一个buffer,这是延时处理。将消息写入消息队列,后台有worker处理消息队列中的消息。通过将允许异步完成的操作,由同步转为异步可以提高速度。

  Kafka中有组提交,这也是异步。即写入时写到队列中,worker在等其达到指定长度或时间后会处理(提交)。

5. 换更快的硬件

  磁盘->内存,如使用缓存可以提高读取速度,使用buffer可以提高写入速度

  3G->4G->5G

  千兆网卡->万兆网卡

  普通磁盘->SSD

  普通计算机->量子计算机

6. 读写硬件时,遵循其特性

  比如磁盘在顺序写时,比随机写的速度要快很多,那写入时就尽量使用顺序写。WAL就是顺序写

7. 使用合适的数据结构与算法

  关系数据库使用B+树

  查找时二分查找

8. 换编程语言

  我们编程时,会使用特定的编程语言,但不同的编程语言的处理速度有快慢之分。一般来说,编译型语言的速度比解释型要快。比如Go比Python快。目前,著名的开源后端服务中,大部分使用的是C/C++/Java,Python的项目也有,但基本上不是对性能要求很高的项目。我估计后面Go的开源项目也会越来越多。

猜你喜欢

转载自www.cnblogs.com/ajianbeyourself/p/12090598.html