昨日与朋友探讨,想到了一个做云计算的调度实现思路,不知道具体可行与否,到时候做出来试试看。
之前有本《编程之道》,其中有一节讲到,世间万物皆有阴阳,空间和时间就是软件的阴和阳。
空间可以比拟为内存与内存中的对象,而时间可以比拟为cpu的计算能力,或者虚拟机中的虚拟cpu计算能力。
分布式计算或者集群计算的难点,可以说是如何协调多台服务器的cpu来共享内存和共享对象的问题了。
这里可以考虑先采用一个简化的实现方案,任务调度器在发送执行命令给执行器时,同时在共享内存区域创建(可使用redis)出一个指定的变量表空间,并将这块变量表的访问地址和程序代码快同时指定给执行者。
而执行者接收到执行命令时,先从共享内存中下载变量表空间,准备执行环境所需要的变量表空间在本地,然后再在这个变量表的基础上开始执行代码。
当执行代码达到一定次数(例如1000条命令时),将本地的变量表再回写到网络的共享内存表中,本地执行结束,将执行结果返回给调度者。
调度者收到执行结束的信号,就可以将内存表的地址和执行脚本,发送给下一个执行者进行继续执行,直到所有脚本执行结束。
这种执行方案相对实现起来比较简单,可以找时间试试看效果如何。
这种执行方法的缺点,就是内存表中不能存储无法序列化的对象,例如jdbc rs之类有状态的对象。
计划这个月能写出个新版本的雏形出来。
网友评论