-
Notifications
You must be signed in to change notification settings - Fork 17
Overview
- 兼顾简单与性能,而且跨语言的传输层。
- 契约式编程,Java First IDL,无代码生成,贴近SpringBoot RESTful的开发体验。
- 比Spring Cloud 更好的服务路由与治理能力。
简单通用的HTTP/HTTPS,支持多路复用与头压缩的HTTP/2。
Netty4.1对HTTP2的封装较为低级,观摩了一下gRPC的代码后,为了快速投入生产,使用Jetty。
为性能考虑,不直接使用Servlet/Spring MVC体系,而是实现Jetty的Handler。
简单通用的JSON,二进制的Protocol Buffers。
为了达成 Java First无生成代码的设计原则,均使用Jackson实现(暂只支持PB v2)
其他语言只作为客户端,不作为服务端。
HTTP/HTTP2/JSON/ProtoBuf均有跨语言实现。
其他语言需要按文档拼装相应的JSON负载,并放入协议规定的HTTP Headers。
(未来可考虑https://github.com/swagger-api/swagger-codegen来生成其他语言的客户端SDK,以及Jackson输出PB IDL)
支持同步接口,同时支持基于Future的异步接口,基于Callback的异步接口。
(未来可考虑支持基于Quasar的协程实现)
客户端通过服务方提供的SDK,使用接口类直接调用服务。
在Java接口上使用定制扩展的Swagger Annotation定义服务.
Swagger提供在线测试与文档中心。
无代码生成过程,通过Java Proxy/CGLib快速反射/Jackson ProtocolBuf等技术实现框架。
同时Swagger也有Java版的CodeGen作为备选。
深度集成SpringBoot,应用里可继续基于嵌入式的Jetty与Spring MVC,运行传统RESTful,Web页面,运维API。
- 基于ZooKeeper/Etcd3的服务注册与发现
- 带权重的负载均衡策略:支持随机,轮询,一致性哈希。
- 自定义规则路由:可根据来源地址,来源应用,请求方法,Cookie值等进行路由。
- 跨机房路由:同机房优先,机房间短距离优先。
- 超时,重试
- 熔断: 粗粒度(针对整个服务)/细粒度(针对单台服务器/单个方法)
- 限流: 客户端并行度限流/服务端漏桶算法限流
- 降级: 拒绝服务/服务端降级函数
- 健康度检查: 容器健康度/服务自定义健康度
Java客户端中自带服务路由/服务治理模块。
而其他语言,必须通过包含相同模块的Proxy(基于Jetty,与Netty相比在异步多路复用上稍差)
如果路由治理功能升级频繁,且客户端众多,则Java客户端也同样建议使用本地Proxy。
可简单使用中央Proxy集群;
也可以使用本地Proxy实现去中心化,提高性能,但需要实现本地Proxy与中央Proxy集群间的切换保证高可用性。
未来考虑做一个跨RPC框架的通用代理。无论RESTful还是某种RPC方案,只要在代理上做好适配器,代理就都可以提供服务路由,服务治理的能力。
- DashBoard
- 服务配置(针对服务的配置如路由,超时等)
- 文档中心
- 配置中心(针对业务的配置和开关)
- 分布式调用链监控系统
- 安全中心
框架必须对整个生命周期提供支持,充分利用IDL提供各种能力,包括MockServer,压测客户端等。