这里我把系统分成两类:一类是像搜索引擎、HBase、Zookeeper、Redis这样的在线分布式系统,一类是从移动端、服务器端,到数据服务端组成的垂直系统。这两类系统的性能有两个重要的指标:Throughput、Latency。
Throughput:吞吐量,即是系统每秒钟能够处理的请求数,任务数,常见的指标有 QPS、IOPS等;
Latency:系统延迟,也叫RT,是系统在处理一个请求或一个任务时的响应时间,一般分布式系统都是毫秒级;
一般来说:Throughput越大,Latency会越大,因为请求量过大,系统资源会被更充分利用,利用过多就会更繁忙,响应速度自然会降低。Latency越小,能支持的 Throughput就会越高。因为 Latency小说明平均单个访问被处理速度快,于是就可以处理更多的请求。
提到 Latency这里不得不说一下超时时间,这个参数非常关键,但也总是被忽视。每个系统都会设置超时时间,很多垂直系统都会设置成一个比较大的时间,比如3秒。其实超时时间是应该根据系统的队列长度和处理每个请求的时间来综合设定的。
大部分系统都会有一个请求队列、一个分发器和多个工作线程或进程。系统接收请求进入队列,分发器根据情况,看哪个符合条件的工作线程空闲,就从队列中取出请求分发给他,当然也有更复杂的调度系统。
C/S 模式中客户端发送请求到服务器,都会记录请求发起的时间,如果我等了太久就会超时放弃,我要干别的事情了。服务器也是同样的道理,我根据我的能力来承担相应的工作,给我更多我也无能为力。
如果可以把一个分布式系统比喻成一个团队,团队中有不同多角色,每个角色可以分工、合作,可以并行分别完成一部分的工作,也可以串行流水线的方式一起协作。一个复杂的分布式系统,会分成几个小组,每个小组完成工作的一部分,多个小组一起协作,资源充分利用完成更多的工作。
但是每个小组的成员水平各异,而且擅长的方向也不同,整个系统性能实际上取决于效率最低的那个小组。
在服务器内部,影响这两个指标的因素主要集中在CPU、内存、网络IO。
实际上资源的分配、调度、每个小组的效率都可能成为整个系统的瓶颈,这会因系统而异需要具体问题具体分析。
常见的性能优化策略大致有几个方面:
第一、用空间换时间,像缓存机制、内存池、线程池,L1/L2/RAM 等都是用空间来换时间的策略;
第二、用时间换空间,像网络传输过程中很大数据都是压缩的,虽然数据压缩算法很耗时,但这会大大减少网络传输的数据量;
第三、水平扩展,在行列式的集群架构中,多任务并行处理,大数据分 Partition。
领取专属 10元无门槛券
私享最新 技术干货