"微服务"加个引号是由于这不是传统定义的微服务架构,顶多算是"小服务"架构,由于服务实例由集群节点统一加载,非独立部署。下面以图说明一下服务调用流程。html
1.2. 客户端调用服务请求经由负载均衡转发至主进程的WebHost内;java
3.4. 主进程根据服务标识将请求经过共享内存队列发给子进程;webpack
5.6. 子进程的服务管理器若是找不到服务实例,则向主进程请求加载已编译的服务字节码;git
7.8. 主进程从内置存储引擎读取服务模型编译的字节码返回,子进程经过ClassLoader加载并缓存服务实例;es6
9.10. 服务实例调用指定的服务方法返回给主进程的WebHost;github
10.11. WebHost返回服务调用结果给客户端。web
以上步骤均为异步,数据序列化均为相似于webpack的自定义格式。shell
为了小伙伴们有个直观的认识,下面演示一个简单的开发流程。数据库
经过IDE新建以下图所示的数据结构,后台自动生成相关的实体代码。
后端
实体模型可映射至不一样数据库(Sql, NoSql或内置数据库)
经过IDE新建以下图所示的查询实体的服务,注意服务方法必须返回CompletableFuture,由于整个架构是全异步的。
经过IDE新建以下图所示的视图模型(基于TypeScript的Vue组件),调用后端服务的代理方法后台自动生成,且一样为异步(返回Promise)。
整个过程一个浏览器搞定,不须要写一行配置代码。
跟一样是异步的Spring WebFlux简单对比测试一下并发呑吐与响应,测试配置为Mac主机(压测)->4核I7虚拟机(服务)。
wrk -t2 -c200 -d20s http://10.211.55.8:8080/hello Running 20s test @ http://10.211.55.8:8080/hello 2 threads and 200 connections Thread Stats Avg Stdev Max +/- Stdev Latency 12.46ms 1.51ms 47.08ms 75.10% Req/Sec 8.06k 293.27 8.52k 81.00% 320913 requests in 20.01s, 28.16MB read Requests/sec: 16039.85 Transfer/sec: 1.41MB
wrk -c200 -t2 -d20s -s post_bin.lua http://10.211.55.8:8000/api Running 20s test @ http://10.211.55.8:8000/api 2 threads and 200 connections Thread Stats Avg Stdev Max +/- Stdev Latency 2.86ms 5.19ms 121.99ms 98.55% Req/Sec 40.50k 2.11k 46.14k 69.00% 1611550 requests in 20.01s, 242.83MB read Requests/sec: 80546.35 Transfer/sec: 12.14MB
目前仅在Ubuntu20.04上开发测试,暂不许备支持其余非Linux操做系统.
git clone -b java https://github.com/enjoycode/appbox.deploy.git
cd 克隆目录 sudo ./install-dependencies.sh
./appbox --init=10.10.10.10:9000 --peer=1.1.1
./appbox
整个java实现从7月底开始历时5个月,中间还绕了1个月的弯路,争取1至2个月内达到基本可用的状态,在此欢迎感兴趣的小伙伴加入咱们!