spider RPC开发指南
请访问https://git.oschina.net/zhjh256/io-spider获取最新更新。
协议与兼容性
spider使用java语言开发,使用Spring作为IoC容器,采用TCP/IP协议,在此基础上,结合SaaS系统模式的特性进行针对性和重点设计,以更加灵活和高效的满足多租户系统、高可用、分布式部署的要求。
采用JSON作为序列化机制,后续版本可能会考虑支持protobuf(java/c++/c#均有类库支持)。
为了最大化性能以及稳定性,spider基于Sun JDK1.8进行编译并应避免使用deprecated特性。
为了尽可能的适应各环境以及互联网应用,spider应能至少运行于tomcat/jboss应用服务器下。
部署模式
任何时候,Spider可运行于中心化管理模式或独立管理模式之一。
中心化管理模式:中心化模式要求必须启用服务中心。对于有几十个运行节点的大规模部署而言,通常增加或者减少一个节点/拆分服务需要进行的配置文件数量会很多,通常位于新增节点上游的各节点都需要修改相应的路由和对应的服务器参数。采用中心化管理模式,只需要登录服务中心修改相关配置即可,节点的变化会自动推送给相应的上游节点。运行于中心化管理模式时,可在服务中心查看整个平台中所有节点的健康状态、各服务的TPS、响应时间等。
独立管理模式:独立管理模式无需启用服务中心。当节点数量较少,比如整个平台不超过十个节点时,采用独立模式通常会比中心化管理模式更简单。运行于独立管理模式时,可通过spider提供的restful api查看当前节点的运行状态。
服务标识
Spider支持两种服务发布注解。
spider定义了两个自定义注解用于标识spider服务。
服务模块
@Retention(RetentionPolicy.RUNTIME)
public @interface ServiceModule {
String subSystemId() default "0";
}
@ServiceModule只是一个类注解,具有该注解的接口将被认为是spider服务接口类,定义在该接口中是被标识为spider服务的必要条件。
服务接口
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface Service {
String serviceId(); // 服务编号,8位ASCII字符,其中00000000-00000099为spider内部保留,00000100-00000199为服务中心保留
String desc(); //服务描述
int timeout() default 0; //超时时间,单位毫秒
boolean needLog() default false; //设置是否记录日志
int broadcast() default 0; //设置该请求是否广播,0:不广播;1:广播但无需相应;2:广播并响应
}
@Service是一个方法注解,其包含三个属性,分别用于设置spider服务号,spider服务描述,spider服务超时时间。其中超时时间可选,默认为spider.xml中设置的超时时间,如果spider.xml中未定义,则默认为300秒。
只有定义在由@ServiceModule注解的接口中由@Service注解的方法才会被标识为spider服务,正确发布后,该接口可用于提供服务或者代理调用远程服务。
对于broadcast=2的服务,其返回值必须包装在com.ld.net.spider.pojo.BroadcastResult的data属性中,具体见该类的javadoc说明。
环境变量
spider有一些环境变量用于控制相关选项,目前有下列可设置的环境变量,如下所示:
l SPIDER_LOG,默认/tmp/spider/stat/${nodeName}
l SPIDER_HOME,默认/usr/local/spider/${nodeName}
l SPIDER_CONFIG,指定spider.xml启动文件,默认classpath:spider.xml,见配置文件一节。
配置文件
参考配置文件一节。
服务发布与代理
服务发布:spider.localService插件下的serviceExportPackage元素定义了spider节点作为服务器时自动对外发布的spider服务的包路径,以;或,分隔。只要服务端在该参数上设置了相关路径,java客户端只要在serviceProxyPackage参数上设置对应路径就可以直接通过@Autowired依赖注入方式调用远程服务端包下提供的相应服务。
服务代理:对于java客户端而言,spider提供了自动代理功能,开发者可像调用本地Spring服务一样调用远程服务器上的spider服务,开发者只需要在spider.localService插件下的serviceExportPackage元素上定义需要自动代理的spider服务的包路径,以;或,分隔。对于非java客户端比如C#或C++客户端而言,开发者需要调用对应的SDK Client。
发布的服务和代理的服务不能有交叉。如果一个服务既需要在本地处理,又需要spider代理转发给下游服务器,则配置在发布列表。此时这些服务无法通过用户编程来远程调用。通常这些服务是用于特殊目的,且被标记为broadcast。
PS:从技术上来说,只要客户端和服务端同一个服务的方法签名和服务号相同就能够调用(也就是方法名无关),不过不建议这么做,在将来的版本中也可能会要求完全匹配。
还需要注意的是,如果某个spider节点希望作为NB的角色,在serviceExportPackage配置了发布路径,同时又包含了某个服务的实现,如果该服务的路由条目被解析到本地处理,则该服务会在该NB节点被处理,而不会继续往后转发,这一点需要注意。所以,对于作为NB的角色,建议除了广播的服务,不要配置在serviceExportPackage下。
各种数据类型支持情况
spider当前版本支持除byte[]外基本上所有类型的数据类型,包括泛型对象。
服务接口定义要求
综合考虑灵活性,性能,开发效率,建议服务参数和返回值均采用对象(现有的RPC框架基本都采用这种模式,比如gRPC,ICE),同时参数继承SpiderBizHead类(其中包含了设置动态路由等相关信息)。如下所示:
入参DTO:
public class ServiceReq extends SpiderBizHead /*如果无需动态路由功能,则不必继承SpiderBizHead*/ {
}
服务签名:
@ServiceModule()
public interface DemoService {
@Service()
public ServiceResp addServer(ServerReq req);
}
还要考虑C++以及其他在用编程语言实现动态代理的简易性。
对于C#,可参考System.Runtime.Remoting.Proxies.RealProxy类实现。
spider RPC开发指南的更多相关文章
- spider RPC入门指南
本部分将介绍使用spider RPC开发分布式应用的客户端和服务端. spider RPC中间件基于J2SE 8开发,因此需要确保服务器上安装了JDK 8及以上版本,不依赖于任何额外需要独立安装和配置 ...
- spider RPC框架的需求来源与特性介绍(一)
spider RPC 特性介绍 spider RPC 性能测试 spider RPC 入门指南 spider RPC 配置文件参考 spider RPC 开发指南 spider RPC 安全性 spi ...
- spider RPC插件化体系
为了满足灵活扩展的需要,spider支持灵活的自定义插件扩展,从功能上来说,插件和过滤器的差别在于过滤器不会阻止请求的执行同时对于主程序不会有API上的影响(比如servlet 过滤器和监听器)(最多 ...
- axis1,xfire,jUnit 测试案列+开Web Service开发指南+axis1.jar下载 代码
axis1,xfire,jUnit 测试案列+Web Service开发指南(中).pdf+axis1.jar下载 代码 项目和资源文档+jar 下载:http://download.csdn. ...
- spider RPC更新至2.0.0-RELEASE
spider使用java语言开发,使用Spring作为IoC容器,采用TCP/IP协议,在此基础上,结合SaaS金融交易系统的特性进行针对性和重点设计,以更加灵活和高效的满足金融交易系统多租户.高可用 ...
- protocol buffer开发指南(官方)
欢迎来到protocol buffer的开发者指南文档,一种语言无关.平台无关.扩展性好的用于通信协议.数据存储的结构化数据序列化方法. 本文档是面向计划将protocol buffer使用的到自己的 ...
- jstorm开发指南-写个简单的jstorm应用
jstorm开发指南-写个简单的jstorm应用 发表于 2015-07-18 | 分类于 大数据 | 暂无评论 jstorm 是阿里巴巴开源的基于storm采用Java重写的一套分布 ...
- Android进程和线程(Android开发指南--译)
(转自:http://www.cnblogs.com/xitang/archive/2011/09/24/2189460.html) Processes and Threads 译者署名: 呆呆大虾 ...
- 基于第三方开源库的OPC服务器开发指南(3)——OPC客户端
本篇将讲解如何编写一个OPC客户端程序测试我们在前文<基于第三方开源库的OPC服务器开发指南(2)——LightOPC的编译及部署>一篇建立的服务器.本指南的目的是熟悉OPC服务器的开发流 ...
随机推荐
- android 事件分发机制详解(OnTouchListener,OnClick)
昨天做东西做到触摸事件冲突,以前也经常碰到事件冲突,想到要研究一下Android的事件冲突机制,于是从昨天开始到今天整整一天时间都要了解这方面的知识,这才懂了安卓的触摸和点击事件的机制.探究如下: 首 ...
- Android之Pull解析XML
一.Pull解析方法介绍 除了可以使用SAX和DOM解析XML文件,也可以使用Android内置的Pull解析器解析XML文件.Pull解析器的运行方式与SAX解析器相似.它也是事件触发的.Pull解 ...
- SSH免手动输入密码和设置代理
通过使用sshpass将密码写入命令里,直接执行,免去手动密码输入的步骤命令如下: sshpass -p password_abc ssh user_abc@ssh_host -p ssh_port ...
- Mono产品生命周期
软件生命周期 同任何事物一样,一个软件产品或软件系统也要经历孕育.诞生.成长.成熟.衰亡等阶段,一般称为软件生命周期(软件生存周期) .软件生命周期模型是指人们为开发更好的软件而归纳总结的软件生命周期 ...
- Membership三步曲之入门篇 - Membership基础示例
Membership 三步曲之入门篇 - Membership基础示例 Membership三步曲之入门篇 - Membership基础示例 Membership三步曲之进阶篇 - 深入剖析Pro ...
- .NET基础拾遗(1)类型语法基础和内存管理基础
Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开发基 ...
- 【完全开源】知乎日报UWP版:增加Live磁贴、Badge、以及Toast通知
目录 说明 实现方法 APP生命期 后台任务 说明 之前网上有人建议增加磁贴(tile).徽章(badge)功能.利用周末的时间,将这两个功能添加上去了.如果将磁贴固定到开始屏幕,磁贴就会循环播放首页 ...
- 详解this
this 虐我千百遍,看完此文效立见!不得不说,这篇文章的总结很地道很全面,适合收藏之用. 原文:all this 习惯了高级语言的你或许觉得JavaScript中的this跟Java这些面向对象语言 ...
- ABP框架 - 应用服务
文档目录 本节内容: IApplicationService 接口 ApplicationService 类 CrudAppService 和 AsyncCrudAppService 类 简单的CRU ...
- Java 8函数编程轻松入门(五)并行化(parallel)
1.并发与并行的区别 并发: 一个时间段内有几个程序都处于已启动到运行完毕之间,且这几个程序都是在同一个处理机上运行.但在任一个时刻点只有一个程序在处理机上运行 并行: 在同一个时刻,多核处理多个任务 ...