惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

雷峰网
雷峰网
Y
Y Combinator Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
The Cloudflare Blog
博客园_首页
J
Java Code Geeks
A
About on SuperTechFans
人人都是产品经理
人人都是产品经理
量子位
C
Check Point Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 三生石上(FineUI控件)
L
LangChain Blog
N
Netflix TechBlog - Medium
Hugging Face - Blog
Hugging Face - Blog
B
Blog
美团技术团队
Microsoft Security Blog
Microsoft Security Blog
P
Proofpoint News Feed
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
宝玉的分享
宝玉的分享
罗磊的独立博客
MongoDB | Blog
MongoDB | Blog
Last Week in AI
Last Week in AI

博客园 - 白菜园

低代码 + AI = 对话方式生成UI AppBox拖拽设计增删改查用户界面 换个方式用C#开发微信小程序 开源高性能结构化日志模块NanoLog AppBox快速开发框架(开源)开发流程介绍 用Roslyn玩转代码之一: 解析与执行字符串表达式 不生成DOM的非主流Blazor UI开源啦! 给我一块画布,我可以造一个全新的跨端UI 拖拽方式生成Vue用户界面 终于可以愉快的撸Java异步代码了! 这么优雅的Java ORM没见过吧! AppBoxFuture: Web在线报表设计与PDF生成 AppBoxFuture实战: 如何同步开发与生产环境的模型 一个浏览器搞定前后端开发的低代码框架正式开放源码啦! AppBoxFuture实战: 如何实现一对多表单的增删改查 AppBoxFuture: Sql存储的ORM查询示例 AppBoxFuture: 集成第三方Sql数据库 AppBoxFuture: 服务模型的在线调试与性能监测 AppBoxFuture: Raft快照及日志截断回收
Java“微服务”还能这么玩!
白菜园 · 2020-12-24 · via 博客园 - 白菜园

  "微服务"加个引号是因为这不是传统定义的微服务架构,顶多算是"小服务"架构,因为服务实例由集群节点统一加载,非独立部署。下面以图说明一下服务调用流程。

一、服务调用流程

  • 节点主进程:类似于Istio的SideCar,负责对外网络及集群内节点间的通信,另外提供内置分布式的存储引擎(目前元数据均存储于此);
  • 节点子进程:负责加载服务实例与服务调用,支持服务实例的热更新。

1.2. 客户端调用服务请求经由负载均衡转发至主进程的WebHost内;

3.4. 主进程根据服务标识将请求通过共享内存队列发给子进程;

5.6. 子进程的服务管理器如果找不到服务实例,则向主进程请求加载已编译的服务字节码;

7.8. 主进程从内置存储引擎读取服务模型编译的字节码返回,子进程通过ClassLoader加载并缓存服务实例;

9.10. 服务实例调用指定的服务方法返回给主进程的WebHost;

10.11. WebHost返回服务调用结果给客户端。

以上步骤均为异步,数据序列化均为类似于webpack的自定义格式。

二、开发流程演示

  为了小伙伴们有个直观的认识,下面演示一个简单的开发流程。

1. 创建数据结构

  通过IDE新建如下图所示的数据结构,后台自动生成相关的实体代码。

实体模型可映射至不同数据库(Sql, NoSql或内置数据库)

2. 创建业务服务

  通过IDE新建如下图所示的查询实体的服务,注意服务方法必须返回CompletableFuture,因为整个架构是全异步的。

3. 创建用户界面

  通过IDE新建如下图所示的视图模型(基于TypeScript的Vue组件),调用后端服务的代理方法后台自动生成,且同样为异步(返回Promise)。

整个过程一个浏览器搞定,不需要写一行配置代码。

三、并发性能测试

  跟同样是异步的Spring WebFlux简单对比测试一下并发呑吐与响应,测试配置为Mac主机(压测)->4核I7虚拟机(服务)。

  • WebFlux:
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操作系统.

  1. 从Git clone打包好的运行时(注意是java分支):
git clone -b java https://github.com/enjoycode/appbox.deploy.git
  1. 安装第三方依赖包
cd 克隆目录
sudo ./install-dependencies.sh
  1. 启动运行
  • 首次初始化运行(替换以下节点地址为本机地址):
./appbox --init=10.10.10.10:9000 --peer=1.1.1
  • 重启
./appbox
  1. 打开浏览器访问IDE
    http://地址:8000/dev/index.html, 用户名: Admin 密码:760wb

五、本篇小结

  整个java实现从7月底开始历时5个月,中间还绕了1个月的弯路,争取1至2个月内达到基本可用的状态,在此欢迎感兴趣的小伙伴加入我们!