一、基本描述 OF.DistributeService 是一个基于Web服务的框架,基于接口方式进行服务声明,使用zookeeper进行服务的注册和订阅。调 用方采用 ILEmit 方式生成服务接口的代理类实现对服务的访问,中间过程对客户方透明。
主要核心部件: 动态服务代理: 根据服务接口生成调用的代理类,支持负载均衡、容灾、集群、实时扩容和下线以及服务可用状态探测等 Registry: 用于服务的注册和服务事件发布和订阅 网络通信:基于Http进行请求(POST/GET/DELETE/PUT),可以使用 MVC 或者 Webapi 来进行服务的开发,POST请求在 传输格式上支持 JSON 或者 MSGPack
工作原理 Provider
暴露服务方称之为“服务提供者”。 Consumer 调用远程服务方称之为“服务消费者”。 Registry 服务注册与发现的中心目录服务称之为“服务注册中心”,服务注册中心使用Zookeeper 完成
(1) 连通性:
注册中心负责服务地址的注册与查找,相当于目录服务,服务提供者和消费者只在启动和注销时与注册中心交互,注册中心不转
发请求,压力较小
服务提供者向注册中心注册其提供的服务 服务消费者向注册中心获取服务提供者地址列表,并根据负载算法直接调用提供者 注册中心和服务提供者之间为长连接,服务消费者和注册中心之间也为长连接,服务消费者和服务提供者之间采用短连接。
(.Net 底层相同的地址还是会使用相同的物理连接,所以对于大量请求并不会有连接方面的消耗)
注册中心通过长连接感知服务提供者的存在,服务提供者宕机或者重启,注册中心将立即推送事件通知消费者 注册中心宕机,不影响已运行的提供者和消费者,消费者在本地缓存了提供者列表
(2) 健状性: Zookeeper 注册中心对等集群,任意一台宕掉后,将自动切换到另一台
注册中心全部宕掉后,服务提供者和服务消费者仍能通过本地缓存通讯 服务提供者无状态,任意一台宕掉后,不影响使用 服务提供者全部宕掉后,服务消费者应用将无法使用,此时消费者的调用将抛出没有可用服务的异常。
(3) 伸缩性:
注册中心为对等集群,可动态增加机器部署zookeeper实例,所有客户端将自动发现新的注册中心 服务提供者无状态,可动态增加机器部署实例,注册中心将推送新的服务提供者信息给消费者
二、示例说明 1、项目构成:
本项目分为 4部分,其中 OF.DistributeService.Core 是服务消费者和服务提供者用到的公共库。
OF.DistributeService.Server 是服务注册的库
OF.DistributeService 是WebAPI示例项目,可以参考这个项目构建服务端,也可以直接在项目里面添加服务。
TestOpenRestClient 是服务消费者的测试项目,构建服务消费者可以参考此项目进行
2、测试项目运行步骤:
1)、启动 Zookeeper 服务,待启动完成后进行第二步
2)、修改 OF.DistributeService 项目的配置文件中 ZookeeperHostPort 字段,将正确 zookeeper的ip和端口填入 (默认是本机2188端口),然后启动 OF.DistributeService 项目。
3)、同上修改 TestOpenRestClient 项目的配置文件中 ZookeeperHostPort 字段,然后启动 TestOpenRestClient 项目。
4)、如上述步骤有异常,会在运行目录的App_Logs子目录下记录错误信息。如果所有步骤正常,可以看到测试项目的窗体, 点击窗体上的按钮会调用服务端方法,并且在下面的文本框中输出结果。
上述步骤中 2、3 步骤可以顺序可以互换,如果先启动消费者项目,点击按钮会提示无法找到可用的服务,待启动服务提供者项 目后马上点击按钮又可以正常调用。
部署运行多个服务提供者项目,客户端无需重启即可动态感知到,并且调用的时候会进行负载均衡。服务端下线后,客户端也 会感知到,并且后续调用不会定位到下线的服务。