SmartRoute零配置零安装实现分布式负载应用
随着应用规模的增长服务则需要扩展集群休部署,在集群化部署过程首先要考虑服务负载处理的问题,在实现应用场中有很多集群化的负载方式,如网络通讯层面的LVS,HTTP应用协议层面的nginx.然而这些负载都依赖于中心化服务,而SmartRoute的设计理念是去除中心化来实现应用层集群负载处理;而SmartRoute的服务定义和应用调用都不需要明确服务地址和端口,这样使用服务设计实现更灵活。接下来介绍一下如何通过SmartRoute简单实现一个服务集群负载应用。
定义节点
SmartRoute的设计其实服务和client一说,所有实例都是一个节点,所有实例节点即充当服务的同时也是客户端。在应用中开启一个节点实例是一件非常简单的事情。
Route.DefaultNode.Open();
只需要一句话就可以打开一个节点,定义者不需要设置服务的地址和端,因为SmartRoute的设计原则是零配置的通讯服务原则。
添加订阅
SmartRoute通讯不存在服务和客户端一说,只有订阅和向订阅生产消息。只要在一个节点上添加订阅,那相关订阅会自动同步到不同服务的节点上。
mSwitch = new SubscribeSwitch(); mSwitch.GetServiceSubscribe(Service.REGISTER).RegisterProcess<Register>((o, e) => { e.Data.Completed = true; e.Data.RegisterTime = DateTime.Now; e.Reply(e.Data); });
以上是注册一个REGISTER的订阅,并注册一个处理Register消息的处理过程,并返回相应的处理结果。
生产请求
Register reg = new Register { Name = "henry", EMail = "henryfan@msn.com", PassWord = "123456" }; reg = mSwitch.Send<Register>(Service.REGISTER, reg);
请求处理并不需要关心具体的服务通讯地址,只需要明确具体的服务名称即可以完成,在整个过程中开发者都不需要关心服务通讯方面的东西,只需要关注订阅服务名即可以进行通讯。
运行结果
只要运行相关程序,那就会自动构建节点进行相关通讯处理。
集群负载处理
无配置集群是smartroute的主要功能点,不过是订阅都或生产运行多份就会组成集群负载通讯交互。
只要运行多个订阅实例,那相关节点就会自动发现,生产者也会自动地把请求负载到不同的订阅者中。
总结
smartroute是采用自动发现服务机制进行设计,所以在整个通讯环节中开发者并不需要关心服务的定义和运行。在设计通讯交互过程只需要关注订阅者的名称即可,这可以让开发者在编写通讯应用的进修变更简单和灵活。