7款Java 微服务框架

1.微服务的历史

微服务的概念源于 21 世纪初盛行的面向服务架构 (SOA)。然而,“微服务”一词本身直到 2012 年左右才出现,当时它开始在软件架构活动和软件架构博客上被讨论。

微服务的早期先驱包括 Netflix、Amazon 和 eBay 等公司。例如,2009 年,Netflix 开始从单体架构过渡到微服务架构,以更好地处理快速扩展的客户群。其他大公司也纷纷效仿,意识到单体架构模型在处理大规模复杂系统时存在局限性。

此后,微服务变得越来越流行,许多组织将其作为软件开发和部署实践的一部分。云计算的采用也是微服务发展的推动力,因为它提供了独立构建和部署单个服务所需的基础设施。

2.使用微服务的原因

  • 可扩展性:微服务最显著的优势之一是其能够独立扩展。在单片系统中,如果一项功能需要更多资源,则必须扩展整个系统。然而,在微服务架构中,只需要扩展必要的服务。

  • 弹性:如果单片架构中的一个组件发生故障,则可能导致整个系统崩溃。但是,使用微服务,如果一项服务发生故障,则不一定会导致整个系统崩溃,因此微服务是更具弹性的选择。

  • 更快的部署和更新:由于每个微服务都可以独立部署,因此可以更快、更安全地推出更新和新功能。如果新功能导致问题,则只有包含该功能的微服务会受到影响。

  • 技术栈的灵活性:每个微服务都可以使用最适合其需求的技术进行开发。这意味着团队可以选择最适合其特定任务的工具,而不受整个系统需求的限制。

  • 针对持续集成和交付(CI/CD)进行优化:微服务与 CI/CD 等现代开发实践完美契合,可实现高效、持续的代码集成、测试和部署。

  • 更容易维护和调试:与大型单片代码库相比,微服务更小、更集中,更容易理解和调试。

然而,需要注意的是,微服务并不是灵丹妙药。它们也面临着挑战,例如需要强大的服务协调、数据一致性和更高的复杂性。因此,在采用微服务架构之前,了解权衡利弊并确保它们适合您的特定环境至关重要。

Java 是用于构建微服务的最流行的语言之一,因为它具有强大的生态系统、强大的开发者社区以及与容器化和编排工具的兼容性。

3.微服务框架

3.1.Spring Boot

Spring Boot 是一个基于 Spring Framework 的项目。它提供了一种更简单、更快捷的方式来设置、配置和运行简单和基于 Web 的应用程序。它是用 Java 创建微服务的非常受欢迎的选择。

3.1.1.优点

  • 快速开发: Spring Boot 提供了一种应用程序开发的方法,重点是减少设置新项目所需的时间和精力。这使开发人员可以立即开始编码,而不必担心配置。流行的初始化工具包已成为其他项目中许多类似工具的基础。
  • 自动配置: Spring Boot 根据类路径上的库提供自动配置,这意味着需要更少的手动配置。
  • 嵌入式服务器:使用 Spring Boot,您不需要将应用程序部署到 Web 服务器,因为它附带了 Tomcat、Jetty 或 Undertow 等嵌入式服务器,从而简化了部署过程。
  • Spring 生态系统: Spring Boot 与更广泛的 Spring 生态系统(包括 Spring Data、Spring Security、Spring Integration 和 Spring Batch)顺利集成,从而更容易将这些功能包含在您的应用程序中。
  • 微服务组件:由Netflix微服务工作演变而来,包括API网关、服务发现、断路器。
  • 云原生:通过通用库和针对不同云提供商的特定支持,为构建云原生应用程序提供广泛支持。还可与 Kubernetes 编排接口。
  • 庞大而活跃的社区: Spring Boot 社区非常活跃且庞大,这意味着在需要时更容易找到帮助、资源和库。
  • 性能指标: Spring Boot Actuator 提供了开箱即用的基本生产就绪功能,无需您自己实现这些功能。
  • 可测试性:为测试提供了强大的支持,包括特定的测试注解和用于集成测试的TestRestTemplate。

3.1.2.缺点

  • 学习曲线: Spring Boot 虽然简化了很多,但需要相当多的 Spring 知识。如果您不熟悉 Spring 生态系统,学习曲线可能会很陡峭。
  • 内存消耗: Spring Boot 应用程序比使用其他一些轻量级框架或工具包构建的应用程序消耗更多的内存。
  • AoT 和原生镜像方面不够成熟:在这些领域不如 Quarkus 发达,但经过大量努力,正在迎头赶上。
  • 自动配置可能过于广泛:在某些情况下,Spring Boot 的自动配置可能不符合您的确切需求,并且可能难以覆盖。

总之,Spring Boot 是构建可“直接运行”的独立生产级应用程序的绝佳选择。其庞大的生态系统,加上约定优于配置的便利性,使其成为使用 Java 构建微服务的首选。

3.2.Quarkus

Quarkus 是一个全栈、Kubernetes 原生 Java 框架,专为 GraalVM 和 HotSpot 量身定制,并基于领先的 Java 库和标准精心打造。它的主要承诺是让 Java 成为 Kubernetes 和无服务器环境中的领先平台,为开发人员提供统一的反应式和命令式编程模型。

3.2.1.优点

  • 开发人员生产力: Quarkus 拥有一种开发模式,可提供实时编码和热重载功能,从而显著提高开发人员的生产力。对应用程序的更改会自动反映在正在运行的应用程序中,而无需重新启动。
  • 快速启动时间和低内存消耗: Quarkus 大量使用 Graal 技术进行 AoT 编译和原生镜像,以实现快速启动时间和低内存占用。这对于需要快速启动时间且在空闲时可以缩减为零的函数即服务执行环境尤其有用。
  • 基于标准: Quarkus 支持广泛的应用程序开发模型和功能,如 CDI、RESTEasy(JAX-RS)、Hibernate ORM(JPA)等。
  • Kubernetes-Native:作为 Kubernetes 原生框架,Quarkus 简化了在 Kubernetes 集群上部署和管理应用程序的过程。
  • 大型生态系统: Quarkus 通过其扩展模型支持广泛的库和框架,例如 Apache Kafka、GraphQL 等。
  • 反应式和命令式编程: Quarkus 支持反应式和命令式编程模型,为开发人员提供了根据其用例灵活选择最佳模型的能力。
  • 企业支持:由于 Quarkus 是 Red Hat 赞助的项目,因此它具有可靠的企业级支持,是企业的可靠选择。

3.2.2.缺点

  • 相对较新:与 Spring Boot 等成熟框架相比,Quarkus 相对较新,但它附带大量文档。
  • 有限的扩展:虽然 Quarkus 确实有一个扩展模型,但它可能不支持所有库和框架,尤其是一些小众或不太常用的库和框架。
  • 学习曲线:如果开发人员还不熟悉 Quarkus 使用的库和标准,则可能会有一个学习曲线。

3.3.Micronaut

Micronaut 是一个现代框架,自称是 Spring Boot 的替代品。首席开发人员参与了 Graal 的开发,Micronaut 利用这些知识提供了优于 Spring Boot 的性能。它使用提前编译,结合不基于反射的 IoC 方法,提供极低的内存使用率和快速的启动时间。

3.3.1.优点

  • 与 Spring 相比,内存消耗大大减少
  • 非常快的启动时间提高了开发/测试周期的效率
  • 提前编译在构建时检测 DI 错误
  • 支持多种语言,包括 Java、Groovy、Kotlin
  • 与 GraalVM 集成以进行提前编译

3.3.2.缺点

//TODO

3.4.Helidon

Helidon 是 Oracle 推出的一组用于编写微服务的 Java 库。它提供两种编程模型:Helidon SE(一种反应式、非阻塞 API 样式)和 Helidon MP(为熟悉 Java EE 的开发人员实现 MicroProfile)。

3.4.1.优点

  • 轻量快速: Helidon 设计简洁、轻量,占用内存小,与较为臃肿的框架相比,有助于缩短启动时间、提高性能。
  • 灵活的编程模型: Helidon 提供两种不同的编程模型:Helidon SE 用于函数式编程方法,Helidon MP 用于声明式、基于注释的方法。
  • 可观察性: Helidon 内置了对健康检查、指标和跟踪的支持,这对于观察微服务的状态至关重要。
  • 与 Oracle 云基础设施的本机集成:作为 Oracle 产品,Helidon 提供与 Oracle 云基础设施服务的无缝集成,如果您是 OCI 客户,这可能是一个很大的优势。
  • 易于部署: Helidon 应用程序只是独立的 Java 程序,这简化了部署。它们也可以打包在 Docker 容器中并部署到 Kubernetes。
  • 支持 GraalVM: Helidon 支持 GraalVM,可用于将 Java 应用程序编译为本机可执行文件,以缩短启动时间并降低运行时内存开销。

3.4.2.缺点

  • 社区和支持:作为该领域的一个相对较新的参与者,Helidon 的社区不如 Spring Boot 等更成熟的框架那么大。这可能意味着资源更少、第三方集成更少、寻求帮助的人更少。
  • 学习曲线:如果您还不熟悉反应式编程或 MicroProfile,那么可能需要学习 Helidon SE 或 Helidon MP。

总而言之,Helidon 是微服务框架领域一个很有前途的新产品,特别是对于那些喜欢响应式、非阻塞编程模型或基于 MicroProfile 的方法的人来说。

如果您已经使用或计划使用 Oracle 的云服务,它与 Oracle 云基础设施的紧密集成将使其成为一个绝佳的选择。

3.5.Chronicle

Chronicle Software 的微服务框架称为 Chronicle Services,是一个低延迟 Java 框架,旨在构建高性能分布式应用程序。

它们在性能、简单性和可靠性至关重要的金融和交易环境中尤其受到青睐。

3.5.1.优点

  • 低延迟: Chronicle Services 专为必须高速处理的场景而设计,例如金融交易系统。
  • 高性能:由于其高效的设计,Chronicle Services 每秒可以处理大量交易,使其适用于高吞吐量系统。
  • 分布式系统:它们为创建分布式系统提供内置支持,允许各个组件通过网络协同工作。
  • 简单易用且易于开发: Chronicle Services 的设计注重简单性,提供简洁直观的 API。再加上全面的文档,使开发过程更加顺畅和快捷。
  • 可测试性:通过内置对单元测试和集成测试的支持,Chronicle Services 可以更轻松地在软件发展过程中维护其可靠性和完整性。
  • 持久性和监控:它为数据持久性和系统监控提供了强大的工具,对于维护分布式系统的健康至关重要。
  • 开发人员灵活性:它们提供了很大的灵活性,允许开发人员根据他们的特定需求实施定制解决方案。

3.5.2.缺点

  • 缺乏社区和资源:与 Spring Boot 等其他更成熟的框架相比,Chronicle Services 的社区规模较小,可用的资源、教程和指南较少。
  • 兼容性有限:虽然它提供了相当大的灵活性,但它可能与某些流行的库和框架不具备开箱即用的兼容性,这可能会导致额外的开发。
  • 成本: Chronicle Software 是一个商业组织,虽然一些组件是开源的,但使用全套 Chronicle Services 将涉及许可费用。

它专注于高性能计算,是需要每秒处理大量事务的应用程序的绝佳选择。它提供了一套强大的工具来构建分布式系统,确保高效的数据持久性和系统监控。

尽管存在一些挑战,例如社区规模较小和学习曲线较陡,但它在性能关键型应用程序中提供的好处远远超过这些考虑因素。此外,Chronicle Software 的商业支持确保了专门的支持和持续改进。

对于需要高性能和管理迁移到微服务和云的复杂性的组织来说,Chronicle Services 是一个不错的选择。虽然传统上专注于交易系统,但 Chronicle Services 正在向其他市场扩展。这是一个绝佳的技术选择。

3.6.Vert.x

Vert.x 是一个事件驱动、非阻塞、响应式工具包,用于在 Java 虚拟机 (JVM) 上开发应用程序。它旨在轻松处理高并发性,非常适合微服务架构。

3.6.1.优点

  • 事件驱动和非阻塞:通过有效处理并发请求帮助创建可扩展的微服务。
  • 多语言:支持多种基于 JVM 的语言,如 Java、Kotlin、Groovy 和 Scala,为语言选择提供了灵活性。
  • 轻量级和高性能:提供传统 Java 框架的轻量级、高性能替代方案。
  • 分布式事件总线:通过简单的发布-订阅消息促进组件之间的通信。
  • 开发人员友好:提供实时编码和热重载等功能,带来愉快的开发体验。
  • 由 Eclipse 基金会支持:确保稳定性和持续改进。

使用 Java 创建微服务有很多种选择。评估性能、开发人员生产力、运营管理和生态系统兼容性等关键优先事项以找到最佳选择非常重要。

3.6.2.缺点

//TODO

3.7.Kalix.io

Lightbend 是市场上的新手。可以看作是其之前的微服务平台 Lagom 和 Web 应用程序平台 Play 的演变。基于 Akka 构建,Akka 是一种基于参与者的模型,用于处理单元之间的快速通信,该模型已在其他领域得到广泛应用。

Kalix 是一款商业产品,提供用于构建和运行云原生应用程序的 PaaS。其主要卖点是开发人员专注于业务逻辑,将其他一切交给 Kallix。它提供了少量相对高级的抽象:实体、动作、工作流和视图。

可以在本地构建和测试应用程序,然后将其部署到所选云提供商托管的运行时平台上。费用根据底层资源的使用情况计算,提供免费试用期,随后可以选择从按使用量付费到在 GCP 和 AWS 上基于安全沙盒的部署等定价计划。

Kalix 声称其性能数据非常吸引人:
读取延迟 6ms @ 1000 tps,12ms @ 15000 tps(99%ile)
写入延迟 8ms @ 1000 tps,20ms @ 15000 tps(99%ile)

3.7.1.优点

  • 从一开始就专注于云原生应用
  • 旨在缩短产品上市时间的开发环境
  • 基于常用的 Akka 方法的水平可扩展性
  • 内置安全性
  • 支持多种语言(Java、Javascript、Typescript、Scala)
  • 生产的托管平台,包括 SRE、DevOps 和 DB 管理员
  • 根据使用情况定价

3.7.2.缺点

  • 刚刚进入市场,尚未经过验证(尽管底层技术已被广泛使用)
  • 非开源,因此社区较为有限
  • 不太适合非云使用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/20491.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pytorch-Normalization

目录 1. 为什么Normalization2. Normalization2.1 image Normalization2.2 Batch Normalization 3. Normalization pytorch实现3.1 Normalization标准公式3.2 2d normalization3.3 normalize test 4. 使用normalization的好处 1. 为什么Normalization 下图使用sigmoid激活函数…

在线考试教学系统平台系统源码/视频教学系统PHP源码/在线考试系统PHP源码

源码介绍 在线考试教学系统平台系统源码,视频教学系统PHP源码,在线考试系统PHP源码。 安装 1、部署好网站环境:php5.6mysql 2、将源码传至网站根目录,php源码用二进制上传,或者上传压缩包在空间解压 3、将“zztuk…

【PPT】修改新建文本框默认字体

【PPT】修改新建文本框默认字体

物联边缘网关有哪些功能?物联边缘网关在工业方向的应用-天拓四方

随着物联网技术的快速发展,越来越多的设备和系统正在接入到网络中,形成了一个庞大的智能生态系统。在这个系统中,物联边缘网关扮演着至关重要的角色,它不仅是连接设备和云端的桥梁,更是推动智能应用落地的关键。在当今…

【题解】 AT_abl_e Replace Digits

祝大家六一儿童节快乐! 题目传送门 正文 看到区间查询区间修改,第一反应线段树。 线段树灵魂三问: 每个节点存什么? 当前这段区间表示的十进制数。 如何 p u s h _ u p push\_up push_up ? 左儿子 乘上 十的右儿…

【GD32】从零开始学GD32单片机高级篇——SDIO外设详解(GD32F470ZGT6)

目录 简介总线拓扑总线操作“无响应” 和 “无数据” 操作多块读写操作数据流读写操作 总线协议命令响应R1/R1b (普通命令响应)R2 (CID, CSD 寄存器)R3 (OCR 寄存器)R4 (Fast IO)R4b(Fast IO)R5 (中断请求)R5b(中断请求)R6 (发布的…

skywalking介绍及搭建

链路追踪框架比对: skywalking安装部署: 下载地址:Downloads | Apache SkyWalking 配置微服务与skywalking整合: copy agent/optional-plugins/apm-spring-cloud-getway-xx.jar到plugins,然后重启skywalking 监控界面…

会议管理系统(含源码+sql+视频导入教程)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 会议管理系统拥有两种角色 管理员:部门管理、员工管理、会议管理、会议室管理、预订会议、添加员工、注册员工审批等 用户:个人通知中心、预订会议、查看所有会议…

fastAPI的实例

好的,下面是一个简单的 FastAPI 示例,展示了如何创建一个基本的 API 应用程序。这个示例将包括一个简单的 GET 和 POST 请求。 首先,确保你已经安装了 FastAPI 和 Uvicorn: pip install fastapi uvicorn然后,创建一个 Python 文件(例如 main.py),在其中编写以下代码:…

网络研究观-20240601

新战争时代的商业风险 美国人已经将战争视为遥远战场上发生的事件。然而,网络空间打破了这种看法,让全球战争的真正影响来到了美国家门口。 攻击不再局限于遥远的战场,而是在最意想不到的时间和地点发动袭击。 谁将主宰第五次工业革命&…

FreeSWITCH 1.10.10 简单图形化界面21-录音相关

FreeSWITCH 1.10.10 简单图形化界面21-录音相关 FreeSWITCH GUI界面预览00、安装FreeSWITCH GUI先看使用手册1、录音相关的应用11、record用法:举例:注意: 12、record_session用法:举例: 2、录音相关的变量3、单腿录音…

使用matplotlib绘制折线条形复合图

使用matplotlib绘制折线条形复合图 介绍效果代码 介绍 在数据可视化中,复合图形是一种非常有用的工具,可以同时显示多种数据类型的关系。在本篇博客中,我们将探讨如何使用 matplotlib 库来绘制包含折线图和条形图的复合图。 效果 代码 imp…

联合和枚举(自定义类型)

1.枚举(关键字:enum) 1.1枚举类型的声明 把可能的值一一列举 赋的值是可能取值 1.2枚举类型的优点 1)增加代码的可读性和可维护性 2)和#define定义的标识符比较枚举有类型检查,更加严谨 3)便于调试&a…

vue:实现丝滑上传进度条

一、效果展示 缓若江海凝清光 . 二、代码 const uploadProgress ref(); //上传进度//进度丝滑更新 //进度,时常 const ProgressChange (targetPercent: number, duration: number) > {//performance.now() 是浏览器提供的一个高性能时间 API,它返…

docker参数大P与小p的区别

大P -P用于随机映射一个49000-49900之间的端口到容器内部的网络端口。 小p -p可以指定具体的主机端口映射到容器内部的网络端口。 示例 随机映射主机端口到容器的80端口 docker run -P -d nginx指定主机的8080端口映射到容器的80端口 docker run -p 8080:80 -d nginx

对等连接的作用(网络)

概述 对等连接(Peering Connection,PC)是一种大带宽、高质量的云上资源互通服务,可以帮助您打通腾讯云上的资源通信链路。 对等连接具有多区域、多账户、多种网络异构互通等特点,轻松实现云上两地三中心、游戏同服等复…

Linux系统编程(七)网络编程TCP、UDP

本文目录 一、基础知识点1. IP地址2. 端口3. 域名4. 网络协议类型5. IP协议类型6. 字节序7. socket套接字 二、常用API1. socket套接字描述符2. bind套接字绑定3. listen设置客户端连接个数4. accept接收客户端请求5. connect连接服务端 三、编程流程1.TCP编程 在学习本章之前&…

《mysql轻松学习·二》

1、创建数据表 contacts:数据表名 auto_increament:自动增长 primary key:主键 engineInnoDB default charsetutf8; 默认字符集utf8,不写就默认utf8 对数据表的操作: alter table 数据表名 add sex varchar(1); //添…

异常处理。

异常 是指程序运行中出现了错误。 捕获异常: 对bug进行提醒,使整个程序继续运行。 捕获所有异常: try:#可能出错的代码 except:如果出现异常执行的代码 可以输出异常的类型: try:a1bhuishprint(ab) except Exception as i:…

python的range() 函数

range() 函数 《红楼梦》,又名《石头记》,实际上是一颗神石在人间游历的故事。而这块石头,就是我们的主人公贾宝玉。神石在投胎成宝玉前,向茫茫大士和渺渺真人讲起了自己的故事: 女娲氏炼石补天之时,于大…