[框架]浅淡集群和集群退休机制

浅淡集群和集群退休机制

second60  20180201

1 解释

     说到集群,就肯定会想到分布式,但今天我主要说的是集群。

 

1.1 分布式简介

分布式:就是不同业务,分部到不同进程上(进程可以不同机器)。一个系统,拆分为不同的子系统,子系统之间可能相互依赖,也可独立没依赖,相互通过socketrpc的方式调用。

 

比如:

业务1进程,业务2进程,业务3进程,分别负责不同的业务处理。

 

    上面是一个很简单的图,分布式说复杂也不复杂,说简单也不简单,每个分出来的子系统之间有一定的依赖关系,处理不同的业务. 每个子系统通过不同角色来区分,如:网关角色,登陆角色,业务1角色等。

 

1.2 集群简介  


集群 :相同的业务,分部到不同进程上。每个进程的业务操作相同。基本不会有依赖(当然也可以有依赖),可以无限启多个,可发分布到同一台机,也可以同布到不同机器。

 

     集群说起来比较简单,就是单个程序,启运无限多个,每个功能相同。重点再怎么来把业务分区到指定的服务进程中。

 

1.3 两者结合

在大型架构设计时,两者都是结合使用,按业务来分不同的角色,相同角色,又可以同时启动多个服务进程。这些,即使有某个服务进程出问题,也可以立刻切换到其他相同服务.

 

2. 集群

上面简单介绍了集群,现在说说集群间的使用和工作方式。

 

2.1 为什么会有集群

     很简单,就是当一个服务或进程不够用时,想多个相同的服务,一起工作,把单个服务的压力分发给多个相同服务中,从而减轻单个服务的压力。而且集群也可以部署到不同机器中,所以对容灾,扩展,性能,都会有很好的解决方法。

2.2 怎么样使服务集群

      首先,说到集群,当然离不开网络协议。网络协议可以让服务部署到不同机器,不同进程,只要每个服务进程分配不同的服务IP和端口即可。相对于外部来说,接口是一样的。

通常集群内部采用rpc方法实现。

   其次,问题又来了,有了相同业务的服务进程,但具体怎么管理,怎么分发处理呢?那么就必须有一个中心节点,这个中心节点的作用是用来管理和分布服务进程。就是常说的负载均衡。(如nginx或中心节点角色或写到某个服务中等)

      最后,当一个业务请求时,会先从中心节点找到一个最优存活的节点,然后业务会转发到此服务节点进行处理。

 

所以使集群的方法:

1. 采用网络的方式实现服务进程有不同的服务IP和端口

2. 此类服务进程有一样的接口

3. 中心节点负责管理和负载均稀

 

上面画的是精简版的请求集群处理流程,中心节点可以有很多方式实现。我这里介绍的是自已实现在个中心节点来管理的方法。

 

2.3 集群负载均衡

 

2.3.1 原理

    负载均衡原理,就是在多个服务进程中,载一个网络可靠,处理速度比较快,当前负载量小的服务进程,通知当前所需处理其他服务,去所分配的节点处理业务。

    

2.3.2 具体实现

    中心节点和各业务1节点互连,定时心跳,中心节点会定时轮询,获取各服务进程的各种状态,如:当前业务量,平均处理速度,网络状况等。中心节点负责维护节点的当前的状态和分配最优节点给所请求的业务。

 

2.3.3 方法

网上很多负载均衡的方法。这里就不介绍了。

 

2.4 集群管理

     这里说的管理,是指中心节点对服务进程进行的其中几个方法。退休机制,黑白名单等。

 

2.4.1 退休机制

     终于说到标题中的退休机制了。

 

2.4.1.1 为什么会有退休机制

退休机制,实际上就是指对某个服务进程,不再对外做其他业务,所以停止处理外部的业务。对中心节点来说,就是不再给此服务进程分配业务。

退休的目的:

1. 如果此服务有问题,停止对外业务;

2. 如果此类服务需要更新,可以退休停止进程后,更新,再启动。

3. 为了对外无感知7*24小时服务。

4. 对更新后的退休进程,设置白名单,可用来测试问题。

 

比如:脚本写的程序,可采用热更的方式,而退休,则是非脚本(c/c++等),采取的无感知的更新方式。

(注:脚本更新是比较危险的,虽然可以时时更,但出问题概率比较高,版本也很难控制,如果不小心写错逻辑,更上去,那么如果数据很重要,在内存中的东西,就可能被修改了,对于游戏来说,可能影响不大,比竟只是游戏,挂了,可以新启。但对于涉及金钱,或重要数据的服务。还是全部测好,停服更新比较高安全)

 

所以为什么会有退休机制。其实就是对非脚本,无热更方式的程度,进行无感知,不停服的一种更新方式。

 

2.4.1.2 退休的实现方法

退休,就是告诉中心节点,非白名单的用户,不能进入此服务。中心节点把此服务不分发给新的业务。当退休服务完成所有处理后,即可停些服更新并测试。

 

好处:当然多多,比如我新加了更新的服务,然后退休掉老的服务。那么用户就立刻切换到新的服务去处理了。更重要的是,对客户来说,是7*24小时不停服工作。

 

2.4.2 白名单

这里的白名单,是指集群中的白名单,可以指定用户进入到某个服务进程当中,无论此进程是正常状态,还是退休状态。

 

 

     代码实现,这里就不说了,花点时间和心思就写出来了。

 

2.5 实例

     听了一大堆理论,可以大家心里不太明白,当然我说的是不懂的人。明白的人可能一眼就能看出我说的是啥。最后还是举个例子吧。很简单的例子。

 

2.5.1 最常见的网关 + nginx

 

背景:网关可以无限多个,定时上报状态到nginx进行维护。

 

流程:

1. 客户端在cdn上拉取所连接的网关ip和端口

2. 中心节点nginx 返回客户端一个或多个网关列表(正常两个够了,一主一备)

3. 客户端对所返回列表进行尝试,连到服务端网关。

 

2.5.2 登陆验证服务

 

 背景:

登陆服一般会做群集,当人少时,开一两个服务,当高峰期时,可以开上十个服。网关可以当然登陆服的中心服。

 

流程:

1. 用户连到网关后,请求登陆

2. 网关会找到最优的一个登陆服进行登陆处理

3. 处理完后转发网关,再进行后继的操作。

 

2.5.3 其他例子

集群的例子太多了,基本上服务端任何服务都可以做成集群。上面只是介了两个比较简单的。业务类的,集群会更多。数据代理等。

 

 

分布式和集群,太重要了,对于扩展业务,可以用分布式,对于容灾可以用分布式集群,对于分担单个服压力,可以用分布式集群。对于某一高峰时刻,可以在多台机提前部署好集群服务。

 

扩展业务:新加一服务角色即可,不影响原来业务。

容灾:集群服务,部署到不同地域,不同地区,减少风险。

高峰前:提前部署,防范于未然。

单服抗不住了:不够就用两个服,三个服,无限个服。

 

 

 

---------------------------------------------------------------------------------------------------------------------

 

这篇文章其实是昨天开始写的,写了一半,今天写完了。可能很多不足的地方,喜欢大家指正给建议。共同学习。分享也是一种快乐。

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值