大型分布式系统性能调优

分布式系统非常复杂,是由多个机器,互连网络,存储,多核心CPU,多级缓存等复杂部件配合来完成工作的庞大系统。
想让这些千差万别的软件硬件配合的天衣无缝,高性能(高吞吐低延时)的处理任务,十分不易。因此有必要对整个系统性能抽象,分析。
总体抽像,分布式系统由 一组任务(tasks), 一堆计算资源(CPU), 一堆存储(storages), 复杂网络(nets)组成。而系统优化也从这些方面进行着手进行。需要注意
一个系统的性能不但受单个要素的性能影响,更受整个系统的组织结构影响。本文力图从整个系统结构出发,最后能深入到单个系统,分析调优分布式系统性能。

首先要思考的问题是分布式系统这么复杂,为什么非要使用分布式系统,不使用单机。这个例子就是超级计算机。超算价格昂贵,系统复杂... //TODO: 查查为什么
即使在超级计算机中也有性能问题。同样需要合理利用资源。

多任务单机模型

多个任务提交给一个单机进行执行。处理方式:批处理,抢占式分时间片处理。 可见核心问题在于多个任务如何调度。本文不讨论这种情况。早期
大型机,超算,现代操作系统对此研究比较多。已经有 非常多的经验可借鉴。本文主要讨论单任务,分布式系统。即任务只有一个,资源是分布式的。

单任务分布式模型

同构的资源池中分为一组一组单元。如相同配置的容器,物理机等,单元之间通过网络连接,每个单元的计算,存储网络等完全相同。  异构资源分到不资源池中。此时只有一个任务需要执行。

目标是更快地完成这个任务。

要想让单个任务尽快的完成,那么任务必须可拆解。否任务只能运行于单机上。 拆解分为两个方向。

横向拆解:将任务拆分成多个可以并行的的子任务,此时利用分布式系统天然的并行特性进行并行计算。此时问题转化为多任务调整到集群上的模型。

纵向拆解:是把任务划分成多个阶段(Stage),并连成pipeline. 如job = [subJob1, subJob2, subJob3...]. 此时任务变成流水线,需要优化的是这个流水线。

递归拆解:拆解后的任务还能进行横向拆解或者纵向拆解。如此递归下去。直到拆解到合适的单元。

job单元优化:当job拆解后,要做的就是优化各个子单元. 而优化每个单元对系统的影响是不同的。应该优化最值得优化的job单元。

如何优化拆解后的复杂系统?

复杂系统中有很多参数需要人为调整如并发度,batch数,缓存大小,同步异步,各种尝试,很快会让你陷入疲惫不堪的工作。每就是改参数,跑任务,看效果。使得优化分布式系统变得事倍功半。此时你需要的是能快速定位到系统的瓶颈,集中精力解决瓶颈。对于复杂的参数,能自动进行调整。而非人肉尝试。是的,这需要建立一套复杂的优化系统。

分布式系统优化系统

分布式系统性能监控


并行任务,需要监控最先开始的任务和最后结束的任务,时间差才是这批任务的执行时间。监控单个任务的执行时间,不能完全反应任务性能。
串行任务,需要监控每个串行部分的运行时间,运行时间最长的部分才是性能瓶颈。

分布式系统性能自动调优


并行任务:调优目标是让所有任务齐头并进。
串行任务:调优目标是让pipeline中耗时最长的部分的时间越短越好。
自动调优系统就是为了达到上述两个目标。

本文先讨论到这里,后续将继续讨论 监控&调优系统的设计。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值