because master schedule the dag, so if a master is down , the dag need to recover at another master node . Then the master need get the dag from db and find the task which is running . This tasks is running on some worker nodes , if tasks status is change ,the worker need know which master node is the task's schedule node.
qiao zhanwei <[email protected]>于2019年12月9日 周一22:22写道: > very good ! > > Can be achieved in stages ? > > first of one master and worker can communication. > > main point : > 1,master send task to worer by rpc(task_queue,kill_queue) > 2,worker receive task to execute > 3,master monitors the worker's execution task results(including > normal task execution results and kill task execution results) > > new features need to consider : > 1,master need to election worker to execute task instand of zk preempt > lock,so need election algorithm > 2,ifthe worker task is completed, but the master is down。at present, > other masters will be fault tolerant and take over process instances, > but workers need to be aware of the existence of other masters。but > the current architecture is that workers do not sense the existence of the > master > > thx > > ————————————— > DolphinScheduler(Incubator) PPMC > Zhanwei Qiao 乔占卫 > > [email protected] > > > *From:* guo jiwei <[email protected]> > *Date:* 2019-12-09 19:38 > *To:* dev <[email protected]> > *Subject:* Re: A proposal for DolphinScheduler- refactor > WorkerServer/MasterServer > Sorry for not attach img > > On Mon, Dec 9, 2019 at 7:19 PM guo jiwei <[email protected]> wrote: > >> >> Hello everyone , >> >> I would like to share some ideas about refactoring >> WorkerServer/MasterServer for dolphin-scheduler. >> >> Background >> For current implement of dolphin-scheduler, task info are stored in >> zookeeper , and worker-server is using zookeeper lock to keep executing >> task continuously. Each worker will try to acquire lock , and if it gets >> the lock, it has the ability to execute the task (fetch task from zk, get >> task info from db, and etc), or it has to wait for the lock . This is not a >> nice way, for performance, dependance or parallelism. >> >> Proposal >> I suggest worker-server execute task in a way like listening tcp >> port, and receive task command via rpc request instead. In this way, >> worker-server is not using lock or connecting db anymore. And it can >> execute task concurrently. >> >> General Implementation >> 1. Refactor worker-server as a tcp server listening some port using >> Netty for tcp communication. And we define our own binary protocol for >> scheduling. >> 2. After starting worker-server, register itself in zookeeper , >> ephemeral node like >> /dolphinscheduler/nodes/worker/test/xxx.xxx.xxx.xxx:9800. >> {/dolphinscheduler/nodes/worker/$workerGroup/ip:port} >> 3. MasterServer has take the responsibility for trigger the task, and >> choose worker-server to execute it 。 >> - first, we have to listen for worker nodes in zookeeper. And cache >> the worker list in memory . >> - second, when MasterScheduleThread acquire the lock to execute >> command(t_ds_command) , it will extract the task info process instance, >> then establish a tcp connection to target available worker using task info >> , and send the command to worker. >> 4. When worker-server receives a task command , it will deserialize >> the command into a Task, and execute in thread pool or subprocess. >> 5. After worker-server executes the task , it has to report the result >> using the pre-connected socket to MasterServer。but if the socket is closed >> in any way, WorkerServer has to connect to any other MasterServer to report >> the result. >> >> >> More detail for MasterServer/WorkerServer can be discuss in later mail >> >> Simple graph >> >> [image: image.png] >> >> >> >> >> Tboy >> [email protected] >> >> <https://maas.mail.163.com/dashi-web-extend/html/proSignature.html?ftlId=1&name=Tboy&uid=technotboy%40gmail.com&iconUrl=https%3A%2F%2Fmail-online.nosdn.127.net%2Fqiyelogo%2FdefaultAvatar.png&items=%5B%22technoboy%40apache.org%22%5D> >> >
