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 22, 2016 · 30 revisions

1. 设计原则

  • 兼顾简单与性能,支持跨语言的传输层。
  • 契约式编程,Java First 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暂只支持PB v2)

3.3 跨语言实现

其他语言只作为客户端,不作为服务端。

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

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

(未来可考虑swagger来生成其他语言的客户端SDK,以及Jackson输出PB IDL)

3.4 同步/异步

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

(未来可考虑支持基于Quasar的协程实现)

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

4.1 契约式编程

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

4.2 Java First IDL

在Java接口上使用Swagger annotation定义服务.

Swagger提供在线测试与文档中心功能,Swagger有代码生成机制,在真正需要时可考虑使用。

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

4.3 SpringBoot集成

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

5. 服务路由与治理能力

5.1 服务路由

  • 基于Zookeeper/etcd的服务注册与发现
  • 带权重的负载均衡策略:支持随机,轮询,一致性哈希。
  • 自定义规则路由:可根据来源地址,来源应用,请求方法,Cookie值等进行路由。
  • 跨机房路由:同机房优先,机房间短距离优先。

5.2 高可用

  • 超时,重试
  • 熔断: 粗粒度(针对整个服务)/细粒度(针对单台服务器/单个方法)
  • 限流: 客户端并行度限流/服务端漏桶算法限流
  • 降级: 拒绝服务/服务端降级函数
  • 健康度检查: 容器健康度/服务自定义健康度

5.3 服务治理中心

  • DashBoard
  • 服务配置(针对服务的配置如路由,超时等)
  • 文档中心

5.4 体系集成

  • 配置中心(针对业务的配置和开关)
  • 分布式调用链监控系统
  • 安全中心

5.5 跨语言支持

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

而其他语言必须通过Proxy(基于Jetty,与Netty相比在异步多路复用上有不足)。

可直接使用中央Proxy集群,也可以使用本地Proxy实现去中心化,但需要自行实现本地Proxy与中央Proxy集群间的切换逻辑保证高可用性。

6. 开发生命周期

开发生命周期

框架必须对整个生命周期提供支持,充分利用IDL提供各种能力,包括MockServer,压测客户端等。

Clone this wiki locally