大型应用吞吐量提升方案

【威哥寄语】

做任何一件事情,困难与行动并存,如果你一直在想的是困难如何如何,那这件事情做成的概率几乎没有,因为困难很容易成为你放弃的借口,反之你一直在想如何行动,成功的概率就要大得多,行动就会有办法,想要和得到之间还有个行动,不要拥有年轻的身体,却长着一颗养老的心。想做,你就不会晚。

理想没有付出行动,一切皆空,现实很骨感,但我们不能屈服,有计划、有目标、脚踏实地的走,你就会成为一个自食其力,实现自我价值的人。在没钱的时候,把勤舍出去,因为——天道酬勤。

你的系统吞吐量有多大?

吞吐量与延迟基本概念

延迟( Latency )和吞吐量( Throughput )是衡量软件系统的最常见的两个指标。

延迟一般包括单向延迟(One-way Latency)和往返延迟(Round Trip Latency),实际测量时一般取往返延迟。它的单位一般是ms、s、min、h等。

吞吐量一般指相当一段时间内测量出来的系统单位时间处理的任务数或事务数(TPS、QPS)

TPS:是Transactions Per Second的缩写,也就是事务数/秒。它是软件测试结果的测量单位。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数。

QPS:是Queries Per Second的缩写,意思是每秒查询率,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。

对 TPS与 QPS 的理解:

1、TPS即每秒处理事务数,包括:”用户请求服务器”、”服务器自己的内部处理”、”服务器返回给用户”,这三个过程,每秒能够完成N个这三个过程,TPS也就是3;

2、QPS基本类似于TPS,但是不同的是,对于一个页面的一次访问,形成一个TPS;但一次页面请求,可能产生多次对服务器的请求,服务器对这些请求,就可计入QPS之中。

3、一般的,评价系统性能均以每秒钟完成的技术交易的数量来衡量。系统整体处理能力取决于处理能力最低模块的TPS值。

4、QPS对应fetches/sec,即每秒的响应请求数,也即是最大吞吐能力。

提高系统吞吐量的解决方案

1、增加硬件设备

2、提高程序处理能力

Master-Worker模式是常用的多任务并行处理模式,它的核心思想是,系统由两类进程协作工作:Master进程和 Worker进程。Master进程负责接收和分配任务,Worker进程负责处理子任务。当各个Worker进程将子任务处理完成后,将结果返回给Master进程,由Master进程做归纳和汇总,从而得到系统的最终结果,其处理过程如图:

Master-Worker模式的好处,它能够将一个大任务分解成若干个小任务,并行执行,从而提高系统的吞吐量,而对于系统请求者 Client来说,任务一旦提交,Master进程会分配任务并立即返回,并不会等待系统全部处理完成后再返回,其处理过程是异步的。因此 Client不会出现等待现象。

Master-Worker模式结构

Master-Worker模式的结构相对比较简单,下图显示一个简明的实现方式。Master进程为主要进程,它维护了一个 Worker进程队列、子任务队列和子结果集。Worker进程队列中的Worker进程,不停地从任务队列中提取要处理的子任务,并将子任务的处理结果写入结果集。

Master-Worker模式是一种使用多线程进行数据处理的结构。多个 Worker进程协作处理用户请求,Master进程负责维护 Worker进程,并整合最终处理结果。

Master-Worker模式的主要参与者:

Worker:用于实际处理一个任务

Master:用于任务的分配和最终结果的合成

Main:启动系统,调度开启Master

Master-Worker代码实现

以上两个类已经展示了Master-Worker框架的全貌。应用程序中通过重载 Worker.handle()方法实现应用层逻辑。

注意:Master-Worker模式是一种将串行任务并行化的方法,被分解的子任务在系统中可以被并行处理。同时,如果有需要,Master进程不需要等待所有子任务都完成计算,就可以根据已有的部分结果集计算最终结果。

现应用这个Master-Worker框架,实现一个计算立方和的应用,并计算1-100的立方和,分解如图:

以上示例代码中,计算任务被分解为100个子任务,每个子任务用于计算单独的立方和。Master产生固定个数的Worker,来处理所有这些子任务,Worker不断地从任务集合中取得这些计算立方和的子任务,并将计算结果返回给Master。Master负责将所有 Worker的任务结果时行累加,从而产生最终的立方和。在整个计算过程中,Master与Worker的运行也是完全异步的,Master不必等到所有的Worker都执行完成后,就可以进行求和操作,即,Master在获得部分子任务结果集时,就已经可以开始对最终结果进行计算,从而进一步提高系统的并行度和吞吐量。

【完】

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20181029B1C6RA00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券