TWS 学习笔记 – FTA内部结构
FTA,DM,MDM在很多环节上有类似的结构,下面的图并没有涵盖所有的部分,只包含了作业调度,作业分发的部分。其关键性的组件是Batchman,jobman,和mailman。 启动顺序:当一个FTA启动的时候,首先启动脚本启动的是netman,然后由netman初始化mailman,batchman,jobman。 netman的主要职责是接受远程FTA的消息,并动态的生成一个Writer的进程,将消息写入Mailman的消息队列mailbox.msg,Writer进程将随着任务的完成而结束。 batchman是整个任务调度的核心,主要两个任务:1)它负责根据mailman提供的任务完成最新情况(定期读取intercom.msg队列),更新任务计划文件(Symphony file),2)读取Symphony文件,解析作业之间依赖,将可以执行的作业写入courier.msg队列。 Jobman定期读取courier.msg队列中获取可以执行的作业信息,执行任务,完成之后将执行结果通知mailman(把结果写入mailman的mailbox.msg队列)。 Mailman做消息传递的核心组件,他负责接收远程FTA传递过来的作业完成情况(从netman渠道),以及本地(从jobman渠道),并将结果汇总发给batch。 从中可以看出,其中两个环节对作业的执行性能有较大的影响: 进程之间的通信都是通过异步的消息传递,因此,消息队列的查看频率是我们调优的一个主要环节,以上涉及到的哦三个重要的队列,batchman队列:intercom,jobman队列courier,以及mailman队列mailbox,在adminguide 143页有每个队列的长度以及检查频度的调优方式。 另一个重要的环节就是batchman对symphony的解析,因为TWS的调度依赖跨机器,因此任何一个任务的结束势必将广播消息,导致所有FTA的batchman扫描整个Symphony,即便所有的工作都在内存完成,也会比较慢(当symphony所包含的job数量超过一定的限度-假定按照文档是40000个,那么性能的瓶颈将会出现在batchman,最近的测试所展现的症状是这样),我目前能想到的绕行的方法是定期jnextplan,将整个作业计划切分成较小的部分。 注:由于本人也刚开始接触TWS,有些理解未必正确,仅供参考: 大图:http://ext.xoopit.com/2/m4QrH71SZXGtFDcRf.b068kLcXWV_AI2w/rmm.contents.raw?cd=a ...