Skip to content
This repository has been archived by the owner on Jun 6, 2018. It is now read-only.

Overview

Calvin Xiao edited this page Dec 21, 2016 · 30 revisions

1. 设计原则

  • 兼顾简单与高效,支持跨语言的传输层。
  • 契约式编程,使用Java定义IDL,无代码生成,贴近SpringBoot RESTful的开发体验。
  • 比Spring Cloud 更好的服务路由与治理能力。

2. 总体架构

总体架构

3. 传输层设计

3.1 传输协议

简单通用的HTTP/HTTPS,支持多路复用与头压缩的HTTP/2。

Netty的封装较为低级,为了快速投入生产,使用Jetty支持。

为性能考虑,不直接使用Servlet/Spring MVC体系,而是实现Jetty的Handler。

3.2 负载协议

简单通用的JSON,二进制的ProtocolBuf。

为了达成 Java First无生成代码的设计原则,均使用Jackson实现(Jackson暂只支持Protocolbuf v2)

3.3 跨语言实现

3.3.1 传输层

HTTP/HTTP2/JSON/ProtocolBuf均有跨语言实现。

其他语言需要按文档拼装相应的JSON负载,并放入规范需要的Http Headers。

也可以使用swagger来生成其他语言的JSON负载,以及Jackson输出PB IDL供其他语言使用。

3.3.2 服务治理

Java语言的服务路由功能在客户端实现。

而其他语言必须通过Proxy(基于Jetty,与Netty相比在异步多路复用上有不足)。可直接使用中央Proxy集群,也可以自行实现该语言的本地Proxy与中央Proxy集群间的高可用切换。

3.4 同步/异步

支持同步接口,同时支持基于Future的异步接口,基于Callback的异步接口。

可能会支持基于Quasar的协程实现。

4. Java First契约式编程 与 SpringBoot开发体验。

契约式编程,客户端通过服务方提供的SDK,使用接口类直接调用服务。

Java IDL,在接口上使用annotation定义服务,集成Swagger提供在线测试与文档中心功能。

同时,Swagger有代码生成机制,在真正需要时可考虑使用。

无代码生成过程,通过Java Proxy/CGLib反射/Jackson ProtocolBuf等技术实现框架。

深度集成SpringBoot,应用里可继续运行传统RESTful与Web页面。

5. 服务路由与治理能力

5.1 服务路由

  • 基于Zookeeper/etcd的服务注册与发现
  • 权重的负载均衡策略(随机,轮询,哈希)
  • 自定义规则路由,跨机房路由

5.2 高可用

  • 超时,重试

  • 熔断,限流,降级

  • 健康度检查

  • 配置中心集成

  • 分布式调用链监控系统集成

6. 开发周期

开发周期

Clone this wiki locally