# java
| 🐉 完整开源 web 项目 | 🐉 实用工具 |
|---|---|
| Apache | Alibaba |
| SpringBoot | |
| 开源系统助力 java 学习 | Dromara 开源组织 |
| 支持多种协议的单点登录认证系统 MaxKey | 缩略图生成工具 |
# yapi
yapi
YApi 是高效、易用、功能强大的 api 管理平台,旨在为开发、产品、测试人员提供更优雅的接口管理服务。
可以帮助开发者轻松创建、发布、维护 API,YApi 还为用户提供了优秀的交互体验,开发人员只需利用平台提供的接口数据写入工具以及简单的点击操作就可以实现接口的管理。
# smart-doc
smart-do
是一个 java restful api 文档生成工具,smart-doc 颠覆了传统类似 swagger 这种大量采用注解侵入来生成文档的实现方法。 smart-doc 完全基于接口源码分析来生成接口文档,完全做到零注解侵入,你只需要按照 java 标准注释的写,smart-doc 就能帮你生成一个简易明了的 Markdown、Html、AsciiDoc 文档。
# smart-doc 快速入门
- Getting started
git clone https://gitee.com/sunyurepository/api-doc-test.git
你可以启动这个 Spring Boot 的项目,然后访问http://localhost:8080/doc/api.html来浏览 smart-doc 生成的接口文档
# 添加依赖
<!-- https://mvnrepository.com/artifact/com.github.shalousun/smart-doc -->
<dependency>
<groupId>com.github.shalousun</groupId>
<artifactId>smart-doc</artifactId>
<version>1.7.7</version>
</dependency>
2
3
4
5
6
7
# 开发框架——JFinal 4.8 发布,迭代 9 年依然极简、极速]
back to top | gitee | Doc
jfinal 总体性能一直数倍领先于传统开发框架,早在 3.3 版本发布时已介绍过 jfinal 天下武功唯快不破的强憾性能
伴随着 Enjoy 4.8
# getty 发布,一个完全基于 java 实现的 aio 框架
# getty 的特点
- 1、完全基于 java aio,整个工程只依赖 slf4j(一个日志的门面框架),对工程几乎没有入侵性。
- 2、借鉴了 netty 和其他框架的部分优秀设计思想,如责任链、内存池化、零拷贝等优秀的设计模式。
- 3、简洁的代码,清晰的注释,以及提供了直接可用的多个插件,只要用过 netty,那么学习成本基本为零。
- 4、可直接在安卓上使用,服务与客户端使用几乎一致(api 26+或 android 8.0+)
# getty 的性能和稳定性
硬件条件:cpu:i7-7700 | 内存:16G | 网络:局域网 | 操作系统:win10 家庭版 | jdk 8
经过本人简单的测试,整体的性能 和稳定性还是不错的:
- 1、单连接发送一百万条文本消息耗时 277 毫秒,这个性能总体上还过得去。
- 2、开启了 SSL 以后发送一百万条文本消息大概耗时 3.8 秒,这个性能也算乐观,因为毕竟 SSL 本身对消息的加密和解密是非常消耗性能的。
- 3、同时开启 10 条连接,每条连接发送一百万条文本消息,每条连接平均耗时是比较均衡的,平均三百多毫秒。性能非常可观
- 4、服务器启动时的内存消耗,启动时内存消耗非常小,占用还不到 40m
- 5、连续发送一百万条消息时的内存消耗,大概消耗 160m 左右,而且内存回收也非常迅速
# GitHub Star 3.2K Java 图片缩略图生成库-Thumbnailator
back to top | Thumbnailator-github
<dependency>
<groupId>net.coobird</groupId>
<artifactId>thumbnailator</artifactId>
<version>[0.4, 0.5)</version>
</dependency>
2
3
4
5
version
The above dependency definition will fetch the newest available version of Thumbnailator in the 0.4.x version range.
If a specific version of Thumbnailator is required, replace [0.4, 0.5) with a specific version number, such as 0.4.3.
Thumbnails.of(new File("path/to/directory").listFiles())
.size(640, 480)
.outputFormat("jpg")
.toFiles(Rename.PREFIX_DOT_THUMBNAIL);
2
3
4
# diboot
back to top | 官网 | github
Diboot 2.0.3 正式版终于来了,他支持基于 SpringBoot 的单体应用、微服务等,支持常用的五大数据库,支持您对于 lombok 的使用以及对于 swagger 的使用等
Diboot 整合了SpringBoot、Mybatis以及Mybatis-plus等,同时提供了开发过程中常用的基础配置,以及常用的工具类 API,其中 diboot-devtools 在整合这些工作的过程中提供了自动化的助理类功能。在此次的 2.0.3 正式版发布中,提升软件稳定性的同时,也提供了以下这些主要更新:
- 依赖的各组件版本升级
- BaseCrudRestController 引入 Entity,VO 泛型
- BindEntity、BindEntityList 注解支持非 Entity 类型的对象属性绑定
- 数据校验 BindingResult 转由 DefaultExceptionHandler 中统一处理
- diboot-component-*组件包装成 starter 并移至 diboot-v2-starter 项目下
- 优化官网帮助文档
- 添加了 devtools 开发助理:随项目启动的 devtools 数据库以及关联关系管理/配置页面基础代码与数据接口代码等的自动生成与数据结构的联动能力,数据结构与代码的同步更新支持数据结构的关联关系的图形化展示支持 Lombok、SwaggerUI 等项目配置和代码生成/更新上的支持 devtools 初始化时自动生成各层 Base 父类、DictionaryController 类、ExceptionHandler 类等表关联设置新增/更新时,devtools 自动创建/更新索引,并记录索引 SQL 支持字段关联,实体关联,实体列表关联等代码的生成与更新支持数据字段改名也自动检索并更改与其有关联关系的其他实体关联字段字段名是否为该数据库关键字的检查及提示等
# diboot 便捷的启动模式
对于基于 SpringBoot 的项目,您只需要引入 diboot-core-spring-boot-starter 与 diboot-devtools-spring-boot-starter 并在项目配置文件中增加对应配置即可开始使用。
# diboot 简便的数据结构配置
点击控制台的上述链接后,进入到数据结构配置页面,这里的数据结构配置可能与常用的一些数据库管理工具的数据结构设计在界面上差异不大,但我们在这里将数据库的字段类型替换为了 Java 代码中的数据类型,也增加了样例数据和关联关系等的配置。
# diboot 数据关联的支持
不仅支持数据字典的关联支持,也支持表的一对一关联,一对多/多对一,以及多对多的中间表关联,还支持一对一、一对多/多对一的字段和实体等属性的关联以及反向的实体列表的关联等。
而这些关联中,在基础框架中,我们就做到了仅仅用一个注解就可以轻松实现这些关联,在自动化助理中,我们更是做到了只需要您在数据结构配置中轻松点一点,代码就生成(或更新),业务就完成,让您畅享程序人生。
# Gubernator
# Gubernator 的特性
- Gubernator 在整个集群中均匀地分布速率限制请求,这样用户就可以添加更多的节点来扩展系统。
- Gubernator 不依赖于 Memcache 或 Redis 等外部缓存,因此部署时不存在服务依赖。这使得在诸如 kubernetes 或 nomad 的编排系统中能动态增长或缩小集群。
- Gubernator 在磁盘上不保存状态,它的配置是由客户机根据每个请求传递给它的。
- Gubernator 提供了对其 API 的 GRPC 和 HTTP 访问。可以根据需要限制速率的陪伴服务运行,也可以作为独立的服务运行。
- 可以用作库来实现特定领域的限速服务。
- 支持对高吞吐量环境进行定制化的一致速率限制服务。
- Gubernator 是 俄语中 governor 的英文发音 ,听起来也很酷。
Gubernator 作为微服务的主要特性是,它为进入系统的许多请求创建了一个同步点。在几微秒内接收到的请求可以被优化并协调成批,从而减少服务在重载下使用的总带宽和往返延迟。多个服务都运行在单个主机上,并且所有服务都在各自的进程中运行相同的库,但它们没有此功能。
# 为什么 Gubernator 是无状态的
Gubernator 是无状态的,因为它不需要磁盘空间来操作。不需要任何配置或缓存数据同步到磁盘,这是因为对 Gubernator 的每个请求都包含速率限制的配置。
首先,你可能认为这对每个请求都是不必要的开销。然而,实际上,速率限制配置仅由 4 个 64 位整数组成。配置由限制、持续时间、算法和行为组成 (有关工作原理的详细信息,请参阅下面)。正是由于这种简单的配置,Gubernator 可以用来提供客户端可以使用的各种速率限制用例。其中一些用例如下:
- 入口限制:典型的基于 HTTP 的 402 多请求类型限制。
- 流量减少:当 API 处于不佳状态时,只拒绝新的或未经身份验证的请求。
- 出口限制:用数百万条消息轰炸外部 SMTP 服务器并非易事。
- 队列处理:知道何时可以立即处理请求,或者应该按照接收请求的顺序排队和处理请求。
- API 容量管理:对一个集合 API 系统能够处理的请求总数设置全局限制。拒绝或对违反系统正常操作能力的请求进行排队。
除了上面提到的用例,无配置设计对微服务的设计和部署有重要的影响:
- 部署时不用配置同步。当使用 Gubernator 的服务被部署时,不用预先部署到 Gubernator 的速率限制配置。
- 使用 Gubernator 的服务拥有其问题空间的速率极限域模型。这使得 Gubernator 无法获得领域特定的知识,因此 Gubernator 可以专注于它最擅长的事情——速率限制!
# Gubernator 的工作原理
Gubernator 被设计成一个分布式的对等点集群,它利用了内存中所有当前活动速率限制的缓存,因为不用将数据同步到磁盘。由于大多数基于网络的速率限制持续时间只有几秒钟,因此在重启或计划停机期间丢失内存缓存并不是什么大问题。对于 Gubernator,我们选择性能而不是精度,因为在缓存丢失的情况下,一小部分流量在短时间内 (通常是几秒钟) 超过请求是可以接受的。
# Gubernator 操作
当客户机或服务向 Gubernator 发出请求时,客户机将为每个请求提供速率限制配置。然后,速率限制配置与当前速率限制状态一起存储在速率限制所有者的本地缓存中。存储在本地缓存中的速率限制及其配置仅在速率限制配置的指定持续时间内存在。
在持续时间过期之后,如果在此期间没有再次请求速率限制,则从缓存中删除它。对相同名称和 unique_key 对的后续请求将在缓存中重新创建配置和速率限制,这个循环将重复。另一方面,具有不同配置的后续请求将覆盖以前的配置并立即应用新配置。
# Flower
Flower 是一个构建在 Akka 上的反应式微服务框架,开发者只需要针对每一个细粒度的业务功能开发一个 Service 服务,并将这些 Service 按照业务流程进行可视化编排,即可得到一个反应式系统。
- 即时响应:服务流程的调用者可以得到即时响应,无需等待整个 Service 流程执行完毕;Service 之间无调用阻塞,即时响应。
- 回弹性:当 Service 失效、服务器失效,系统能够进行自修复,依然保持响应,不会出现系统崩溃。
- 弹性:能够对调用负载压力做出响应,能够自动进行资源伸缩适应负载压力,能够根据系统负载能力控制请求的进入速度(回压)。
- 消息驱动:Service 之间通过消息驱动,完成服务流程,Service 之间没有任何调用耦合,唯一的耦合就是消息,前一个 Service 的返回值,必须是后一个 Service 的输入参数,Flower 框架负责将前一个 Service 的返回值封装成一个消息,发送给后一个 Service。
Flower 既是一个反应式编程框架,又是一个分布式微服务框架。
Flower 框架使得开发者无需关注反应式编程细节,即可得到一个反应式系统。
# Flower 快速上手
Flower 框架的主要元素包括:Flower Service(服务)、Flower 流程和 Flow 容器。Service 实现一个细粒度的服务功能,Service 之间通过 Message 关联,前一个 Service 的返回值(Message),必须是后一个 Service 的输入参数(Message),Service 按照业务逻辑编辑成一个 Flow(流程),Flower 容器负责将前一个 Service 的返回消息,传递给后一个 Service。
<dependency>
<groupId>com.ly.train</groupId>
<artifactId>flower.core</artifactId>
<version>A.B.C</version>
</dependency>
2
3
4
5
# Showdoc
# 分布式任务调度引擎 DolphinScheduler
# APISIX
APISIX 是一个云原生、高性能、可扩展的微服务 API 网关。它是基于 OpenResty 和 etcd 来实现,和传统 API 网关相比,APISIX 具备动态路由和插件热加载,特别适合微服务体系下的 API 管理
# APISIX 功能
云原生: 平台无关,没有供应商锁定,无论裸机还是 Kubernetes,APISIX 都可以运行。热更新和热插件: 无需重启服务,就可以持续更新配置和插件。动态负载均衡:动态支持有权重的 round-robin 负载平衡。支持一致性 hash 的负载均衡:动态支持一致性 hash 的负载均衡。SSL:动态加载 SSL 证书。HTTP(S) 反向代理健康检查:启用上游节点的健康检查,将在负载均衡期间自动过滤不健康的节点,以确保系统稳定性。熔断器: 智能跟踪不健康上游服务。身份认证: key-auth, JWT。限制速率限制请求数限制并发代理请求重写: 支持重写请求上游的 host、uri、schema、enable_websocket、headers 信息。OpenTracing: 支持 Apache Skywalking 和 Zipkin监控和指标: PrometheusgRPC 协议转换:支持协议的转换,这样客户端可以通过 HTTP/JSON 来访问你的 gRPC API。Serverless: 在 APISIX 的每一个阶段,你都可以添加并调用自己编写的函数。自定义插件: 允许挂载常见阶段,例如 rewrite,access,header filer,body filter 和 log,还允许挂载 balancer 阶段。控制台: 内置控制台来操作 APISIX 集群。版本控制:支持操作的多次回滚。CLI: 使用命令行来启动、关闭和重启 APISIX。REST APIWebsocket 代理- IPv6:支持使用 IPv6 格式匹配路由。
- 集群:APISIX 节点是无状态的,创建配置中心集群请参考 etcd Clustering Guide。
- 可扩展:简单易用的插件机制方便扩展。
- 高性能:在单核上 QPS 可以达到 24k,同时延迟只有 0.6 毫秒。
- 防御 ReDoS(正则表达式拒绝服务)
- IP 黑名单
- IdP 支持: 支持外部的身份认证服务,比如 Auth0,okta 等,用户可以借此来对接 Oauth2.0 等认证方式。
- 单机模式: 支持从本地配置文件中加载路由规则,在 kubernetes(k8s) 等环境下更友好。
- 全局规则:允许对所有请求执行插件,比如黑白名单、限流限速等。
- TCP/UDP 代理: 动态 TCP/UDP 代理。
- 动态 MQTT 代理: 支持用 client_id 对 MQTT 进行负载均衡,同时支持 MQTT 3.1.* 和 5.0 两个协议标准。
# Elastic
Elastic APM 是基于 Elastic Stack 构建的应用性能监控系统。通过 Elastic APM 可以监控应用程序,收集有关请求的响应时间、数据库查询、高速缓存调用、外部 HTTP 请求等的详细性能信息,这样可以更快地查明并修复性能问题。
Elastic APM 还会自动收集未处理的错误和异常,错误主要基于堆栈跟踪进行分组,因此可以识别出现的新错误,并密切关注特定错误发生的次数
# Elastic APM 包含四个组件
- APM agent
APM agent 是使用与服务相同的语言编写的开源库,可以像安装其他库一样将它们安装到服务中,agent 将检测服务的代码并在运行时收集性能数据和错误,这些数据缓冲一小段时间并发送到 APM server。 - APM server
APM Server 是用 Go 编写的开源应用程序,通常运行在专用服务器上,默认监听端口 8200 ,并通过 JSON HTTP API 从 agent 接收数据,然后根据该数据创建文档并将其存储在 Elasticsearch 中。 - Elasticsearch
Elasticsearch 是高可扩展的开源全文搜索和分析引擎,用于快速、近实时地存储、搜索和分析大量数据。此处用于存储 APM 性能指标并利用其聚合。 - Kibana
Kibana 是开源的分析和可视化平台,旨在与 Elasticsearch 协同工作,可以通过 Kibana 搜索、查看 Elasticsearch 中存储的数据,此处用于可视化 Elasticsearch 中存储的 APM 数据。
# Micrometer
Micrometer 为最流行的监控系统提供了一个简单的仪表客户端外观,允许仪表化 JVM 应用,而无需关心是哪个供应商提供的指标。它的作用和 SLF4J 类似,只不过它关注的不是 Logging(日志),而是 application metrics(应用指标)。简而言之,
它就是应用监控界的SLF4J。
支持的监控系统:
AppOptics , Azure Monitor , Netflix Atlas , CloudWatch , Datadog , Dynatrace , Elastic , Ganglia , Graphite , Humio , Influx/Telegraf , JMX , KairosDB , New Relic , Prometheus , SignalFx , Google Stackdriver , StatsD , Wavefront
# Micrometer 安装
为了使用 Micrometer,首先要添加你所选择的监视系统的依赖。以 Prometheus 为例:
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
<version>${micrometer.version}</version>
</dependency>
2
3
4
5