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

一、服务调用流程

  • 节点主进程:类似于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 密码:随意(暂未实现验证密码)

五、本篇小结

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

Java“微服务”还能这么玩!的更多相关文章

  1. 从成本角度看Java微服务

    近年来,微服务因其良好的灵活性和伸缩性等特点备受追捧,很多公司开始采用微服务架构或将已有的单体系统改造成微服务.IBM也于近日开源了轻量级Java微服务应用服务器 Open Liberty .但是采用 ...

  2. Java微服务框架一览

    引言:本文首先简单介绍了微服务的概念以及使用微服务所能带来的优势,然后结合实例介绍了几个常见的Java微服务框架. 微服务在开发领域的应用越来越广泛,因为开发人员致力于创建更大.更复杂的应用程序,而这 ...

  3. Java微服务(二):负载均衡、序列化、熔断

    本文接着上一篇写的<Java微服务(二):服务消费者与提供者搭建>,上一篇文章主要讲述了消费者与服务者的搭建与简单的实现.其中重点需要注意配置文件中的几个坑. 本章节介绍一些零散的内容:服 ...

  4. 现如今,最热门的13个Java微服务框架

    曾经的 服务器领域 有许多不同的芯片架构???有哪些芯片架构???和操作系统???,经过长期发展,Java的“一次编译,到处运行”使得它在服务器领域找到一席之地,成为程序员们的最爱. 本文,我们将和大 ...

  5. 多云架构下,JAVA微服务技术选型实例解析

    [摘要] 本文介绍了基于开源自建和适配云厂商开发框架两种构建多云架构的思路,以及这些思路的优缺点. 微服务生态 微服务生态本质上是一种微服务架构模式的实现,包括微服务开发SDK,以及微服务基础设施. ...

  6. Java微服务 vs Go微服务,究竟谁更强!?

    前言 Java微服务能像Go微服务一样快吗? 这是我最近一直在思索地一个问题. 去年8月份的the Oracle Groundbreakers Tour 2020 LATAM大会上,Mark Nels ...

  7. Java微服务对UTC时间格式的处理

    一.背景 先说一下为什么要使用UTC时间.开发一个全球化的系统,服务端(Java微服务)集中部署在同一个地方,用户在全球通过浏览器.手机客户端访问.不同地区的时区是不一样的,同一个时间戳,不同的用户看 ...

  8. Java微服务(二):服务消费者与提供者搭建

    本文接着上一篇写的<Java微服务(一):dubbo-admin控制台的使用>,上篇文章介绍了docker,zookeeper环境的安装,并参考dubbo官网演示了dubbo-admin控 ...

  9. 最热门的 10 个 Java 微服务框架

    1.Spring Boot Java 构建 Spring 应用程序已经有很长一段时间了,Spring Boot 是 Spring 的一个特定版本,它通过对配置细节的处理,使微服务构建更加简便.创建 S ...

随机推荐

  1. 蓝桥杯——四数平方(2016JavaB第7题)

    四数平方(16JavaB7) 四平方和定理,又称为拉格朗日定理: 每个正整数都可以表示为至多4个正整数的平方和. 如果把0包括进去,就正好可以表示为4个数的平方和. 比如: 5 = 0^2 + 0^2 ...

  2. 精尽MyBatis源码分析 - 文章导读

    该系列文档是本人在学习 Mybatis 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释(Mybatis源码分析 GitHub 地址.Mybatis-Spring 源码分析 GitHub ...

  3. 小米死磕硬核技术,将扩招5000名工程师,多个领域会使用到C++

    小米MIDC大会2020在北京小米科技园召开,小米集团创始人.集团董事长兼CEO雷军宣布:"重视人才队伍的建设.人才是创新之源,提升技术实力的第一步,就是聚拢最顶尖的人才.小米2021年将在 ...

  4. leetcode 练习--反转链表

    最近开始学习数据结构和算法的学习,也自然开始在 leetcode 上练习,所以每周大概会分享做过的leetcode 练习,尽量做到每天更新一道题目. 作为 leetcode 练习笔记的第一道题目,选择 ...

  5. 极简python教程:快速入门好方法

    大家好,我是测试奇谭的作者风风. 其实很久之前,就有身边的同事或者网友让我分享一些关于python编程语言的快速教程,他们的痛点同大多数自学编程语言的人一样,遇到了这些问题: 网络上的信息太多,良莠不 ...

  6. moviepy1.03音视频剪辑:使用manual_tracking和headblur实现追踪人脸打马赛克

    ☞ ░ 前往老猿Python博文目录 ░ 一.引言 在moviepy官网的案例<Tracking and blurring someone's face>和CSDN的moviepy大神uc ...

  7. 第4.8节 三目运算、del和pass语句

    一.三目运算 Python的三目运算与C语言的三目运算非常类似,具体语法如下: 条件为真的赋值表达式   if  条件   else 条件为假的表达式 三目运算实际上就是一种表达式计算,当对应if后面 ...

  8. 第15.29节 PyQt(Python+Qt)入门学习:containers容器类部件QScrollArea滚动区域详解

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.概述 Scroll Area提供了一个呈现在其他部件上的可滚动区域视图,滚动区域用于显示框架内的 ...

  9. 第12.1节 Python os模块导览

    os 模块提供了许多与操作系统交互的函数,一定要使用 import os 而不是 from os import * ,这将避免内建的 open() 函数被 os.open() 隐式替换掉,它们的使用方 ...

  10. Nday漏洞组合拳修改全校师生密码

    很久以前写的文章了,发一下:) 本文是我真实的挖洞经历.撰写本文时相关学校已修复漏洞,相关漏洞也提交给了教育漏洞平台.纯粹是挖洞经验的总结和技术分享,由于敏感信息比较多,所以文章里面很多图片已经面目全 ...