美文网首页程序员
实现任务/项目的多进程部署

实现任务/项目的多进程部署

作者: 一抹斜阳丶 | 来源:发表于2017-12-27 17:02 被阅读87次

背景

最近遇到一些问题,比如一个服务,需要在请求的客户端上做路由。这时就需要

  1. 获取服务端在哪几个服务器的进程上,
  2. 需要自行实现路由,
  3. 需要针对服务端某一些节点上下线做自动更新。

还有一种场景。我有一个监控服务,读取DB的数据,当DB中需要监听的进程达到上千时,频率要求10秒1次,这时一台机器的监听已经不足以承载。需要扩展到多进程部署。

思考

以上问题均可以使用zk的curator通知机制来实现。
归纳一下问题。

  1. 需要通知服务上下线机制;
  2. 需要热更新,类似rehash的过程。

解决

针对场景一种的,路由+维持DubboRef方式,可以监听zk下的dubbo路径,dubbo的上下线均会通知过来,这时将服务进行上下线处理即可。问题是,在切换的过程中,部分服务不可用。因为zk延迟,切换也有成本。

针对场景二种,可以在启动进程时,注册zk节点,根据自行创建的节点取模获取不同的监控任务。这是任务分发,用以支持多进程扩展。

同时如果期望做到HA,高可用的话,可以先对数据进行分发,再对分发的任务进行备份。例如1,2,3数据,分别给a,b,c,d,e,f进程执行。a,b,c分配到1,2,3执行。d,e,f也分配到1,2,3,但是会监听zk节点,如果非活动时。可以随时代替挂掉的节点。这样就实现了HA高可用。

思考点

  • 扩展性,体现在能否数据量上来后,是否有简洁的扩展能力;
  • 可用性,体现在节点挂掉后,服务是否有部分/全部不可用的状态。

curator监听zk

private void setDubboRemoteListenter(CuratorFramework client) throws Exception{  
        PathChildrenCache childrenCache = new PathChildrenCache(client, ZkParams.servicePath, true);  
        PathChildrenCacheListener childrenCacheListener = new PathChildrenCacheListener() {  
            @Override  
            public void childEvent(CuratorFramework client, PathChildrenCacheEvent event) throws Exception {  
                ChildData data = event.getData();  
                switch (event.getType()) {  
                case CHILD_ADDED:  
                case CHILD_UPDATED:  
                    update(data.getPath(), false);
                    break;  
                case CHILD_REMOVED:  
                    update(data.getPath(), true);
                    break;  
                default:  
                    break;  
                }  
            }
        };  
        childrenCache.getListenable().addListener(childrenCacheListener);  
        childrenCache.start(StartMode.POST_INITIALIZED_EVENT);  
    }

总结

zk有多种玩法,可用来玩共享锁,主要还是用来服务发现,通知。缺陷是支持的并发略低,通知延迟服务状态不可用。
如果需要共享锁,使用redis setnx更为合适。redis setnx介绍

相关文章

  • 实现任务/项目的多进程部署

    背景 最近遇到一些问题,比如一个服务,需要在请求的客户端上做路由。这时就需要 获取服务端在哪几个服务器的进程上, ...

  • Linux 下部署Tomcat

    学习一项技能,需要有一个有目的性任务,学得才会快; 目的:部署一个网站; 参考文档:参考文档 一、资料显示,部署t...

  • 网络爬虫:多任务-进程、线程

    实现多任务的方式 多线程多进程协程多线程+多进程 为什么你能够实现多任务? 并行:同时发起,同时执行,多进程,进程...

  • 使用heroku发布部署nodejs项目

    使用heroku结合GitHub实现express项目的集成部署。这里需要科学上网工具。 创建一个express项...

  • 2018-11-22进程,线程,协程

    进程:代码+资源,可以实现多任务线程:运行在进程中的最小单元,消耗资源小于进程 可以实现多任务协程:Python独...

  • 实时同步服务详解

    1. 实时同步服务原理及概念 部署 rsync 守护进程服务,实现数据传输 部署 inotify 服务,实现目录中...

  • python multiprocessing模块实现多进程任务中

    python multiprocessing模块实现多进程任务中运行多进程子任务,并实现并发控制。起因是想使用ce...

  • Node.js的异步I/O

    1. 多任务的实现 多任务的实现只有三种方式: 多进程 单进程+多线程 多进程+多线程 第三种过于复杂,实现很少。...

  • 简要说明__python3中的进程/线程/协程

    多任务可以充分利用系统资源,极大提升程序运行效率,多任务的实现往往与 多线程,多进程,多协程有关 稳定性: 进程 ...

  • SparkCore(二)

    每种部署模式如何提交任务? Client模式yarn 本地通过Spark-Submit提交任务,执行Main进程,...

网友评论

    本文标题:实现任务/项目的多进程部署

    本文链接:https://www.haomeiwen.com/subject/pyiugxtx.html