`
mgoann
  • 浏览: 249655 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

大批量工具的思考

    博客分类:
  • Java
阅读更多

大批量工具的思考

大批量工具的思考:大批量处理工具,适用于数据量大,业务处理对时间要求不高等特点。

 

往往这种工具对性能的要求比较高,怎样才能设置出满足性能要求的工具成功该类工具成败的一个关键点。在这里提出俩个概念:批量和并发

 

并发:

并发对于有效的利用系统资源有较好的表现,并发带来的好处,多个任务同时执行,并发带来性能上的提升外,也会引入一些的新的问题,应用引入复杂性,使得维护成本更高,并发引入资源竞争的问题,多个业务处理作业会对共享资源造成较大的资源竞争,影响的应用的最大效率发挥。

 

批量:

批量的原理其实就是通过提高其吞吐量来使应用在最小消耗的情况下,完成最多的工作。批量需要注意的几点是:定时和定量

定时:请求不能够无限制的等待满足处理的请求个数,这样会导致请求量不是很大的情况下,请求不能够在规定时间内给出响应。

定量:在请求量很大的情况下,不能在按照定时来处理,在满足定时器的条件时间段内,积压了太多的请求量,容易对应用造成较大的冲击,定量应该是应用一次能满足的最大请求个数处理,该数据应该是应用期望一次所处理的请求个数。

 

队列:

在大批量应用中,应该使用队列来串接消息在应用的传递,队列所涉及的操作最多的就是批量放入和批量取出。批量放入,批量放入的好处就是减少对共享资源的访问次数,减小由于并发而引入的资源竞争问题。批量放入还有一个好处就是减少中间临时对象的生成,减轻对垃圾回收机的压力。批量取出应该注意一些并发的问题,批量取出应该取多少这个问题看似无关紧要,其实关系到并发的最大效率化,批量取出应该每次都取出每个业务处理作业所有期望的数量,这样如果有1000个请求同时到达,有10个批量作业在同时运作,那每个批量作业每次取的请求个数应该是1000 + 10 – 1 / 10,这个算法是分页的一个算法,在这样可以很好的发挥将批量业务均匀分配到每个批量作业中。

 

内存分页:

内存分页就是当批量业务处理作业在处理多个请求时,应当将请求通过内存分页来完成内存存储,并满足flush的条件下,将处理结果批量输出,可以输出到下一个作业或是直接输出到结果。内存分页需要注意的俩个点,定时定量。如果满足这俩个点,可以通过俩个条件来判定满足其中任何一个条件就输出,定量:在内存分页中应该对当前的积压消息个数有计数器,每次通过判断计数器和最大消息个数来判定其是否能够输出,定时:在内存分页中应该对上次输出时间做统计,以便通过判断当前时间和上次输出时间之间的时间间隔是否满足最大停留时间来判定其是否满足输出条件,当这俩个条件当中的任意一个满足条件就满足了输出条件。可以输出,这样做到了内存分页的定时定量。

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics