Spider 是一款基於 Java、Spring IoC 容器、TCP/IP 協議的高性能 RPC 框架,專為 SaaS 多租戶、高可用、分布式部署場景設計。採用 JSON 序列化(未來支持 Protobuf),基於 Sun JDK 1.8 編譯,兼容 Tomcat/JBoss 等主流應用服務器。
需啟用服務中心,適合數十節點大規模集群。節點變更(增減/拆分)只需在服務中心配置,路由信息自動推送至上游節點。提供全局健康狀態、TPS、響應時間監控大盤。
無需服務中心,適合節點 ≤ 10 的小規模部署。通過 RESTful API 查看單節點運行狀態,配置更輕量。
@Retention(RetentionPolicy.RUNTIME)
public @interface ServiceModule {
String subSystemId() default "0";
}
標識接口為 Spider 服務接口,subSystemId 用於子系統劃分。
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Service {
String serviceId(); // 8 位 ASCII,00000000-00000099 內部保留,00000100-00000199 服務中心保留
String desc(); // 服務描述
int timeout() default 0; // 超時時間(毫秒),默認取 spider.xml 配置,否則 300s
boolean needLog() default false;
int broadcast() default 0; // 0 不廣播,1 廣播無需響應,2 廣播並響應(返回值需包裝在 BroadcastResult.data 中)
}
SPIDER_LOG:日誌目錄,默認 /tmp/spider/stat/${nodeName}SPIDER_HOME:工作目錄,默認 /usr/local/spider/${nodeName}SPIDER_CONFIG:啟動配置文件,默認 classpath:spider.xml服務端發布: 在 spider.localService 插件的 serviceExportPackage 配置包路徑,自動對外暴露服務。
客戶端代理: Java 客戶端配置 serviceProxyPackage,即可像調用本地 Spring Bean 一樣 @Autowired 遠程服務。非 Java 客戶端需使用對應 SDK。
注意: 發布服務與代理服務包路徑不能交叉;作為 NB(網關/路由)節點時,除廣播服務外,避免在 serviceExportPackage 配置本地實現,防止路由解析到本地而不再轉發。
除 byte[] 外,支持幾乎所有類型(含泛型對象)。
建議統一採用「請求/響應對象模式」(參考 gRPC、ICE):
public class ServiceReq extends SpiderBizHead { /* 業務字段 */ }
public class ServiceResp { /* 業務字段 */ }
@ServiceModule
public interface DemoService {
@Service(serviceId = "00000101", desc = "新增服務器")
ServiceResp addServer(ServiceReq req);
}
SpiderBizHead 內含動態路由等元數據字段。此模式利於跨語言(C++、C#)動態代理實現。
Spider RPC 以靈活的部署模式、豐富的治理功能、跨語言互通能力,成為分布式系統中服務化治理的有力選擇。