”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 使用 Java Spring Boot 构建可扩展的微服务:最佳实践和技术第 -1 部分

使用 Java Spring Boot 构建可扩展的微服务:最佳实践和技术第 -1 部分

发布于2024-08-18
浏览:325

整体架构

  • 如果我们在单个项目中开发所有功能,那么它被称为基于整体架构的应用程序。

  • 我们将应用程序打包为 jar/war 以部署到服务器中。

  • 由于整体应用程序包含了所有功能,它将成为 fat jar/war。

优点
1) 易于开发和管理。
2) 一切都在一处可用。
3) 只需配置一次。

缺点
1)维护困难
2) 单点故障
3) 如果我们执行任何更改,则整个项目将重新部署和测试。
4) 开发人员可能不了解整个模块,因此更难开始修复问题。
5) 如果某个模块负载过大,我们需要创建完整应用程序的多个实例,这样会占用大量空间,因为每个模块彼此紧密耦合。

Building Scalable Microservices with Java Spring Boot: Best Practices and Techniques part -1

为了克服单体式的问题,微服务架构应运而生

微服务架构

  • 微服务不是一种编程语言、框架或 API。微服务是一种架构设计模式。

  • 微服务建议开发具有松散耦合的应用程序功能。

  • 在微服务架构中,我们不会在单个项目中开发所有功能。我们将项目功能划分为多个 REST API。

  • 微服务不仅仅与java相关。任何特定于编程语言的项目都可以使用微服务架构。

微服务是我们开发小型服务的一种方法,每个服务都在自己的容器/进程/服务器上运行,服务应该是轻量级的并且可独立部署。这可以实现更快的开发、部署和可扩展性。

正如您所看到的,单体应用程序的员工模块、客户模块、地址模块和课程模块现在转换为小型服务,因此这里它们就像员工服务、客户服务、地址服务和课程服务。在单体应用程序中,使用单个数据库,但在微服务应用程序中,每个服务都有自己的数据库。他们现在相互依赖。每个服务都在相互通信,其余的调用。

Building Scalable Microservices with Java Spring Boot: Best Practices and Techniques part -1

优点

  • 技术独立(我们可以使用Python、Go等多种技术开发后端API)
  • 数据库独立性。

  • 每个服务都是相互独立的(松散耦合),因此我们可以独立部署每个服务。

  • 如果在任何服务中执行任何更改,则无需部署所有服务,只需部署一个服务即可。

  • 开发一项服务不需要了解整个应用程序。

  • 单个微服务的故障不会影响整个应用程序,增强整体弹性。

  • 更小的代码库和关注点分离使维护和调试更易于管理。

  • 由于其较小且独立的性质,各个微服务可以根据需求独立扩展,而无需扩展整个应用程序。

  • 每个服务可以进行不同的测试。

缺点

  • 如果我们想要在一个服务配置中执行更改,那么我们需要对每个服务配置执行更改,例如,我所有项目中的每个 application.properties 文件中都存在一个公共属性。
company.name=tier3Hub

因此,如果我们想更改公司名称,那么我们需要更改所有服务的名称。

  • 由于服务之间的相互依赖和交互,测试基于微服务的应用程序可能会更加复杂。

  • 每个服务都会处理一定数量的请求,之后如果我们发送的请求多于服务就会关闭,因此我们需要该服务的多个实例,并在我们需要的服务的不同实例中路由请求负载均衡器平衡来自客户端的请求和不同实例中的路由。但是用 Java 编写负载均衡器很困难。

为什么选择 Java 来实现微服务

Java提供了名为Spring-Boot的框架来开发Rest API,Spring-Boot提供了很多功能,例如自动配置、嵌入式服务器,如果我们正在开发服务,那么需要在服务器上部署sech服务而spring-Boot提供了tomcat服务器,因此每个服务都运行在tomcat的不同端口上。例如,员工服务在端口 8080 上运行,课程服务在端口 8081 上运行,并且每个服务都有自己的服务器。

Building Scalable Microservices with Java Spring Boot: Best Practices and Techniques part -1

在 spring-Boot 的帮助下,提供了快速开发、更少配置、生产就绪应用程序和 stater 项目的功能

Spring框架下有一个项目叫Spring Cloud,它提供了现成的微服务支持,Spring Cloud提供了一些通用的工具和技术来快速开发通用的微服务模式。

Spring Cloud 专注于为典型用例提供良好的开箱即用体验,并提供可扩展性机制以覆盖其他用例

  • 分布式/版本化配置
  • 服务注册和发现
  • 路由
  • 服务到服务调用
  • 负载均衡
  • 断路器
  • 分布式消息传递
  • 短暂的微服务(任务)
  • 消费者驱动和生产者驱动的合同测试。

微服务架构

我们没有固定的微服务架构,开发人员根据项目需求定制微服务架构,大多数项目将使用微服务架构中的以下组件。

1) 服务注册中心(Eureka Server)

2) 服务(REST API)

3) 服务间通信(FeginClient)

4) API网关

5) 管理服务器

6) 拉链

结论

Java 中的微服务改变了我们软件开发的方式,将灵活性、可扩展性和弹性提升到了一个新的水平。 Java 丰富的生态系统与 Spring Boot、Micronaut 等框架相结合,使其成为构建能够满足现代应用程序需求的微服务的绝佳选择。

当我们探索这种架构时,很明显为什么微服务比传统的整体应用程序更受欢迎。它们提供模块化和独立性,允许团队单独开发、部署和扩展服务。在云原生功能日益成为标准的世界中,这一点尤其有价值。然而,这一过程也暴露了一些挑战,例如确保数据一致性、管理服务间通信以及维护跨服务的强大安全性。

及时了解工具和实践的最新进展对于使用微服务的 Java 开发人员至关重要。环境在不断发展,那些适应的人将最有能力充分利用这种架构的潜力。 Java 微服务的未来看起来充满希望,框架和工具不断改进,并得到越来越多渴望分享知识和经验的开发人员社区的支持。

在 Java 中采用微服务意味着为创建更具弹性、可扩展性和可维护性的应用程序打开了大门。通过遵循最佳实践并致力于持续学习,开发人员可以释放软件开发的新可能性,从而带来更具创新性和更高效的解决方案。

版本声明 本文转载于:https://dev.to/ayushstwt/building-scalable-microservices-with-java-spring-boot-best-practices-and-techniques-part-1-1da3?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 如何检查对象是否具有Python中的特定属性?
    如何检查对象是否具有Python中的特定属性?
    方法来确定对象属性存在寻求一种方法来验证对象中特定属性的存在。考虑以下示例,其中尝试访问不确定属性会引起错误: >>> a = someClass() >>> A.property Trackback(最近的最新电话): 文件“ ”,第1行, AttributeError: SomeClass...
    编程 发布于2025-03-07
  • 为什么使用Firefox后退按钮时JavaScript执行停止?
    为什么使用Firefox后退按钮时JavaScript执行停止?
    导航历史记录问题:JavaScript使用Firefox Back Back 此行为是由浏览器缓存JavaScript资源引起的。要解决此问题并确保在后续页面访问中执行脚本,Firefox用户应设置一个空功能。 警报'); }; alert('inline Alert')...
    编程 发布于2025-03-07
  • 为什么我会收到MySQL错误#1089:错误的前缀密钥?
    为什么我会收到MySQL错误#1089:错误的前缀密钥?
    mySQL错误#1089:错误的前缀键错误descript [#1089-不正确的前缀键在尝试在表中创建一个prefix键时会出现。前缀键旨在索引字符串列的特定前缀长度长度,可以更快地搜索这些前缀。了解prefix keys `这将在整个Movie_ID列上创建标准主键。主密钥对于唯一识别...
    编程 发布于2025-03-07
  • 如何使用FormData()处理多个文件上传?
    如何使用FormData()处理多个文件上传?
    )处理多个文件输入时,通常需要处理多个文件上传时,通常是必要的。 The fd.append("fileToUpload[]", files[x]); method can be used for this purpose, allowing you to send multi...
    编程 发布于2025-03-07
  • 如何使用PHP将斑点(图像)正确插入MySQL?
    如何使用PHP将斑点(图像)正确插入MySQL?
    essue VALUES('$this->image_id','file_get_contents($tmp_image)')";This code builds a string in PHP, but the function call ...
    编程 发布于2025-03-07
  • 为什么我的CSS背景图像出现?
    为什么我的CSS背景图像出现?
    故障排除:CSS背景图像未出现 ,您的背景图像尽管遵循教程说明,但您的背景图像仍未加载。图像和样式表位于相同的目录中,但背景仍然是空白的白色帆布。而不是不弃用的,您已经使用了CSS样式: bockent {背景:封闭图像文件名:背景图:url(nickcage.jpg); 如果您的html,css...
    编程 发布于2025-03-07
  • 大批
    大批
    [2 数组是对象,因此它们在JS中也具有方法。 切片(开始):在新数组中提取部分数组,而无需突变原始数组。 令ARR = ['a','b','c','d','e']; // USECASE:提取直到索引作...
    编程 发布于2025-03-07
  • 如何在JavaScript对象中动态设置键?
    如何在JavaScript对象中动态设置键?
    在尝试为JavaScript对象创建动态键时,如何使用此Syntax jsObj['key' i] = 'example' 1;不工作。正确的方法采用方括号: jsobj ['key''i] ='example'1; 在JavaScript中,数组是一...
    编程 发布于2025-03-07
  • 如何使用替换指令在GO MOD中解析模块路径差异?
    如何使用替换指令在GO MOD中解析模块路径差异?
    在使用GO MOD时,在GO MOD 中克服模块路径差异时,可能会遇到冲突,其中可能会遇到一个冲突,其中3派对软件包将另一个带有导入套件的path package the Imptioned package the Imptioned package the Imported tocted pac...
    编程 发布于2025-03-07
  • 可以在纯CS中将多个粘性元素彼此堆叠在一起吗?
    可以在纯CS中将多个粘性元素彼此堆叠在一起吗?
    [2这里: https://webthemez.com/demo/sticky-multi-header-scroll/index.html </main> <section> { display:grid; grid-template-...
    编程 发布于2025-03-07
  • HTML格式标签
    HTML格式标签
    HTML 格式化元素 **HTML Formatting is a process of formatting text for better look and feel. HTML provides us ability to format text without us...
    编程 发布于2025-03-07
  • Java是否允许多种返回类型:仔细研究通用方法?
    Java是否允许多种返回类型:仔细研究通用方法?
    在Java中的多个返回类型:一种误解类型:在Java编程中揭示,在Java编程中,Peculiar方法签名可能会出现,可能会出现,使开发人员陷入困境,使开发人员陷入困境。 getResult(string s); ,其中foo是自定义类。该方法声明似乎拥有两种返回类型:列表和E。但这确实是如此吗...
    编程 发布于2025-03-07
  • 如何从Python中的字符串中删除表情符号:固定常见错误的初学者指南?
    如何从Python中的字符串中删除表情符号:固定常见错误的初学者指南?
    从python import codecs import codecs import codecs 导入 text = codecs.decode('这狗\ u0001f602'.encode('utf-8'),'utf-8') 印刷(文字)#带有...
    编程 发布于2025-03-07
  • 对象拟合:IE和Edge中的封面失败,如何修复?
    对象拟合:IE和Edge中的封面失败,如何修复?
    解决此问题,我们采用了一个巧妙的CSS解决方案来解决问题:左:50%; 高度:auto; 宽度:100%; //对于水平块 ,使用绝对定位将图像定位在中心,以object-fit:object-fit:cover in IE和edge消除了问题。现在,图像将按比例扩展,保持所需的效果而不会失真。...
    编程 发布于2025-03-07

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3