架构设计与重构

批量系统设计之禅

2017-12-01  本文已影响175人  monkey01

之前写过关于基于SpringBatch框架来实现批量的文章,有些同学反应希望写写关于批量设计的文章,毕竟笔者以前也在国有大银行写过3年的后台OLAP批量系统,在批量程序方面还是掉过很多坑,同时也学到了很多批量优化方面的经验,本篇文章就是总结了我自己批量的经验和原先行里总结的一些批量设计经验,以前我们批量都是使用大量的存储过程来实现功能,使用存储过程的问题就在于扩展性非常差,对某个数据库的依赖非常高,工作中会遇到各种因为数据库产品导致的bug,对程序员SQL要求非常高,优秀的SQL和烂SQL性能可能会差几十倍,所以目前除了一些传统公司还在使用老式的存储过程来实现批量,大部分互联网公司的批量都已经改为使用一些类似Springbatch的框架,通过这样的框架可以减少很多开发工作,而且对于一般能够写java的同学都可以去写批量了,但是做联机和做批量在设计思想上还是有很大差别,本文就给大家梳理下批量设计思路。文章开头说下批量的设计核心思想就是“减少IO”,这是所有批量系统优化性能的核心思路,做批量的同学请牢记这一条!!!

1. 批量系统使用场景

2. 批量设计原则

3. 批量设计策略

为了辅助批处理系统的设计和实现、应该通过结构示意图和代码实例的形式为设计师和程序员提供基础的批处理程序构建模块和以及处理模式. 在设计批处理Job时,应该将业务逻辑分解成一系列的步骤,使每个步骤都可以利用以下的标准构建模块来实现:

因为业务逻辑不能用上面介绍的这些标准模块来完成, 所以还需要另外提供一个基本的程序外壳.

除了这些主要的模块,每个应用还可以使用一到多个标准的实用程序环节(standard utility steps),如:

批处理程序也可以根据输入来源分类:

所有批处理系统的基础都是处理策略.影响策略选择的因素包括: 预估的批处理系统容量, 在线并发或与另一个批处理系统的并发量, 可用的批处理时间窗口(随着越来越多的企业想要全天候(7x24小时)运转,所以基本上没有明确的批处理窗口).

典型的批处理选项包括:

上面列表中的顺序代表了批处理实现复杂性的排序,在同一个批处理窗口的处理最简单,而分区实现最复杂,分区实现虽然并发性能高能够充分利用IO资源,但是缺点是对数据结构设计和批量设计要求很高,弄不好就会出很多多线程或资源死锁问题导致批量加工数据错误或中断,所以如果数据量不是非常巨大就不要用分区批量实现方案了,当你数据量足够大了,并且自己已经能力提高并能够充分理解批量精髓后,自然就会灵活使用批量分区实现方案了.

总结

本文主要是从各个角度讲诉了下批量设计的思路,真的只是思路,估计很多同学看完了很多条tips都不知道在说啥或者不知道如何实践,如果具体展开讲这些tips要写太多字了,本人比较懒不想写了,如果感兴趣的人比较多后续可能会对于大家感兴趣的一些tips展开讲讲后面的故事。

上一篇下一篇

猜你喜欢

热点阅读