微服务项目搭建之技术选型

1、什么是微服务

Java微服务是一种架构风格,通过将单个Spring Boot应用程序拆分为一组小型、独立的Spring Boot服务来构建分布式系统。每个微服务都运行在自己的进程中,并使用轻量级通信机制(如HTTP或消息队列)来进行相互之间的通信。微服务的设计目标是提高系统的灵活性、可伸缩性和可维护性。通过将应用程序拆分为多个微服务,可以实现更好的团队协作和并行开发。每个微服务都可以由不同的开发团队负责开发和维护,因此可以快速迭代和部署,而不会对整个系统产生太大的影响。

拆分微服务的特点:

  • 独立部署:每个微服务都可以独立部署,因为它们是独立的进程。这意味着当某个微服务需要进行更改或调整时,只需重新部署该微服务,而不需要重新部署整个系统。

  • 松耦合:由于微服务之间使用轻量级通信机制进行通信,它们可以相对独立地演化和扩展。每个微服务都可以根据需要进行扩展,而不会对其他微服务造成影响。

  • 垂直划分:微服务架构鼓励将应用程序按业务领域划分为多个微服务。这种垂直划分使得每个微服务都可以专注于解决特定的业务问题,提高开发和维护的效率。

  • 弹性和容错:微服务架构使用一些弹性和容错机制来提高系统的稳定性。例如,可以使用负载均衡、熔断器和容错机制来处理异常情况,并保护系统免受单个微服务的故障影响。

  • 中心化治理:微服务架构通常使用一些中心化的工具和组件来处理服务注册和发现、负载均衡、监控和日志等功能。

微服务的弊端:

  • 分布式系统复杂性:拆分成多个微服务后,系统的复杂性得到加剧。需要考虑服务之间的通信、数据一致性、服务调用链的监控等问题。因此,微服务架构需要更高的开发和运维技术水平,同时也需要投入更多的成本和资源进行管理和维护。

  • 服务调用开销:由于微服务之间需要进行网络通信,会带来一定的性能开销。每个服务调用都需要经过网络传输,并可能受到网络延迟和故障的影响。因此,需要在设计和实现中考虑减少服务之间的调用次数,以提高性能和可靠性。

  • 数据管理复杂性:由于数据在不同的微服务中被分散存储,数据一致性和事务处理变得更加困难。需要采用一些分布式数据管理策略,如事件驱动架构或分布式事务,来确保数据的一致性和可靠性。

总体而言,Java微服务架构使得开发人员可以更好地构建、部署和维护分布式系统。通过拆分应用程序为多个小型服务,并使用适当的工具和模式来管理这些服务之间的通信和协调,提高系统的弹性、可伸缩性和可维护性。但是在决定将单体应用程序转换为微服务时,需要仔细评估和权衡成本和利益,确保有足够的资源和技术能力来应对微服务架构所带来的挑战。微服务架构带来的分布式系统的复杂性,包括服务发现、通信、数据一致性等方面的问题还是值得我们去谨慎考虑的。

2、微服务常见组件和功能

Spring Cloud是一个用于构建分布式系统的开发工具集合,基于Spring框架,提供了一系列的解决方案和工具,使得开发者能够更轻松地构建、部署和管理分布式系统中的微服务。一套完整的微服务架构需要以下相关组件:

  • 注册中心:服务的注册与发现,服务可以注册自己的信息到注册中心,并且可以从注册中心获取其他服务的信息,从而实现服务之间的通信和协作。

  • 配置中心:集中式的配置管理解决方案,可以实现对分布式系统中各个微服务的配置进行集中管理,实现配置的动态刷新。

  • 网关: 统一的接口访问路径,实现请求的转发、鉴权、限流、请求转换等功能。

  • 负载均衡: 使得服务能够根据负载情况自动分配流量,并提供了一些策略和配置选项来实现高效的负载均衡。

  • 远程调用:远程调用是微服务架构中的重要部分,它使得服务之间可以相互协作并提供复杂的业务功能。

  • 熔断器:熔断器可以防止分布式系统中的故障蔓延,通过快速失败和回退机制,保护调用方免受故障影响。

  • 链路追踪: 实现分布式系统中的链路追踪和请求跟踪。通过链路追踪,可以跟踪请求在分布式系统中的传递和处理路径,便于故障排查和性能优化。

  • 消息队列: 消息队列可以用于在微服务之间进行消息的传递和通信,实现解耦和异步通信。

  • 任务调度:对定时任务进行管理和调度的过程。任务调度涉及到确定任务的执行时间、执行频率、任务优先级以及任务间的依赖关系等。帮助我们管理和调度任务,提高系统的效率和可靠性。

  • 服务监控:用于监控微服务的性能指标、错误和故障信息。常用监控工具:Prometheus和Grafana 。

  • 容器化和编排:容器化和编排工具用于将微服务部署到容器中,并管理容器化应用程序的生命周期。Docker和Kubernetes是常见的容器化和编排工具。

以上就是微服务常见组件和功能,实际上,微服务技术栈可以根据特定的需求和技术栈进行灵活的组合和扩展。选择正确的微服务栈组件取决于应用程序的要求、团队的技术能力和可用的资源。

总的来说微服务分为服务核心组件和服务治理两个方面,架构图如下:

通过使用五大核心组件,微服务已经搭建成功了,但并不算是一个完整的微服务。如果没有服务治理方面的组件,很难确保系统稳定性、安全性和可扩展性的。

3、微服务技术栈

现在微服务有两套实现分别为Spring Cloud Netflix和Spring Cloud Alibaba两个大版本。Spring Cloud Netflix版一些重要组件如注册中心Euraka、Ribbon、Zuul、Feign已经不再迭代更新了,而Spring Cloud Alibaba已经慢慢的孵化出了一套自己的相关组件。

3.1、Spring Cloud Netflix相关组件说明

主要由:Eureka、Ribbon、Feign、Hystrix、Zuul|Gateway、Config等组件组成。还有一些补充组件Spring Cloud Config(分布式配置管理)、Spring Cloud Bus(消息总线)、Spring Cloud Security(安全管理)等。

  • Eureka:Eureka是一个服务注册和发现组件。服务提供者可以将自己注册到Eureka服务器,而服务消费者可以从Eureka服务器中获取可用的服务列表。Eureka提供了负载均衡和故障转移的能力。

  • Spring Cloud Config:配置中心,集中式的配置管理解决方案。

  • Feign:Feign是一个声明式的HTTP客户端。它简化了对其他微服务的调用,比如使用Feign可以轻松地定义RESTful接口并将其映射到实际的服务调用。Feign集成了Ribbon和Hystrix,提供了负载均衡和容错的能力。目前Feign已经不迭代更新,可以使用OpenFeign。

  • Ribbon:Ribbon是一个客户端负载均衡组件。它可以根据配置的负载均衡策略,从服务注册中心(如Eureka)获取可用服务列表,并将请求分发给这些服务实例。Ribbon支持多种负载均衡算法,并提供了灵活的配置选项。

  • Hystrix:Hystrix是一个容错和延迟容忍的库。它可以防止分布式系统中的故障导致级联故障。Hystrix通过使用断路器模式,可以在服务调用失败时提供回退机制,并提供了实时的监控和度量指标。

  • Zuul:Zuul是一个网关组件,可以实现请求的路由、过滤和负载均衡等功能。它可以作为一个单一入口点,代理客户端请求并将其路由到后端的微服务。同时,Zuul还支持动态路由配置和服务的自动发现。服务网关,多个服务提供唯一的访问接口。目前Zuul不迭代更新,可以使用Gateway。

总之,Spring Cloud Netflix提供了一套完整的、基于Netflix OSS的分布式系统解决方案。通过使用这些组件,可以更轻松地构建和管理微服务架构,并提供负载均衡、容错和服务发现等核心功能。但是由于许多组件已经不再迭代更新了,所以不推荐全部使用基于Netflix的一套微服务解决方案。需要通过别的组件配合使用。

3.2 Spring Cloud Alibaba相关组件说明

Spring Cloud Alibaba是Spring Cloud的一套拓展框架,它提供了一系列与阿里巴巴生态系统集成的组件,用于构建微服务架构。主要由:Nacos、Sentinel、Seata、RocketMQ、Dubbo等组件组成。目前RocketMQ、Dubbo和Seata这三个项目都已经捐赠给了Apache软件基金会(Apache Software Foundation)。

  • Nacos:Nacos是一个服务发现和配置管理的平台,可以实现服务注册、发现、配置和管理。Nacos可以作为一个类似于Eureka和Spring Cloud Config的解决方案,同时还提供了更丰富的配置管理能力。有图形化界面,简化了微服务架构的复杂度。

  • Sentinel:Sentinel是一个轻量级的流量控制和熔断降级框架。它可以实时监控应用的流量和系统状态,并提供实时的流量控制、熔断降级和系统负载保护等功能。多个维度保护服务的稳定性。

  • Seata:高性能微服务分布式事务解决方案。

  • RocketMQ:RocketMQ是阿里巴巴开源的分布式消息队列系统。它提供了低延时、高可靠性、高吞吐量的消息传递服务,适用于大规模分布式系统的消息通信。

  • Dubbo:高性能 RPC 框架。类似于OpenFeign。

  • Alibaba Cloud OSS(Object Storage Service):是阿里云提供的海量、安全、低成本、高可靠的云存储服务。Spring Cloud Alibaba支持将OSS作为文件存储和对象存储的解决方案,并提供了便利的API和工具,用于在微服务中使用OSS进行文件上传、下载和存储操作。

  • Alibaba Cloud SMS(Short Message Service):是阿里云提供的短信服务。Spring Cloud Alibaba提供了集成SMS的组件,可以轻松地发送短信通知和验证码等消息。覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道。

  • Alibaba Cloud SchedulerX:阿里中间件团队开发的一款分布式任务调度产品,提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。

OSS、SMS、SchedulerX等主要是阿里云的商业化产品,需要付费才能够使用。总之阿里巴巴生态系统的组件集成,为我们提供了更多的选择和功能。可以轻松地构建阿里巴巴风格的微服务应用,并利用阿里巴巴生态系统的资源进行扩展和集成。也是目前最流行的一套微服务架构解决方案。

4、微服务技术选择

通过上面我们了解到微服务使用的相关技术栈,我们可以通过结合Spring Cloud Netflix和Spring Cloud Alibaba相关组件。选择出一套基于自己想要搭建的微服务技术栈:

  • 注册中心和配置中心:使用Spring Cloud Alibaba Nacos

  • 负载均衡:使用LoadBalancer。Spring Cloud LoadBalancer是Spring Cloud官方推荐的负载均衡器,这是一个全新的负载均衡解决方案。它提供了多种负载均衡算法(如轮询、随机等),并支持与服务注册中心集成,以获取服务实例列表。

  • 服务调用:使用OpenFeign或者Dubbo,OpenFeign是声明式的HTTP客户端,Dubbo是RPC框架。

  • 熔断降级:使用Spring Cloud Alibaba Sentinel

  • 消息队列:使用RocketMQ

  • 分布式事务:使用Spring Cloud Alibaba Seata

  • API网关:使用Gateway。Spring Cloud Gateway是一个高性能、可扩展的API网关,用于路由、转发和过滤进入的HTTP请求。

  • 任务调度:使用xxl-job, xxl-job是一个功能丰富、易用的分布式任务调度平台,可以实现定时任务的调度和执行。它可以作为一个独立的服务集群,对任务进行统一的管理和调度,并支持任务的动态添加、修改和删除, 适用于各种定时任务的场景.

  • 链路追踪 : 使用Zipkin ,Zipkin是一个开源的分布式系统跟踪系统,用于收集、检索和展示微服务架构中的请求链路信息。它可以追踪和分析请求路径,识别性能问题和排查故障。

  • 服务监控:使用Prometheus和Grafana ,Prometheus和Grafana是两个常用的监控和可视化工具,常用于对系统和应用程序进行监控和数据可视化。

以上就是搭建微服务项目技术栈所需要的组件。另外也可以把注册中心替换为Eureka,配置中心使用携程开源的分布式配置中心Apollo,它们都是不错的选择,具体实现可以根据特定的需求进行灵活的组合和扩展。具体使用组件取决于应用程序的要求、团队的技术能力和可用的资源。通过这些以选择正确的微服务技术栈。

5、总结

总之,希望我们在搭建微服务的过程中,不要盲目的去使用任何一个组件,更不要因为那个组件比较流行就使用那个组件。每个微服务组件都有它们的使用场景,也有它们的利与弊。在使用之前一定要考虑它的使用成本以及是否有足够的资源支撑和团队的技术能力是否达标。如果满足所有条件,在考虑使用它。最后希望不管是企业使用也好还是个人自己使用,都可以正确的选择一套适用于自己或者企业的微服务技术实践方案。

文章转载自:sowler 

原文链接:https://www.cnblogs.com/sowler/p/18216528

体验地址:引迈 - JNPF快速开发平台_低代码开发平台_零代码开发平台_流程设计器_表单引擎_工作流引擎_软件架构

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

查询DQL

016条件查询之等量关系 条件查询语法格式 select ... from... where过滤条件;等于 select empno, ename from emp where sal3000;select job, sal from emp where enameFORD;select grade, losal, hisal from salgrade where grade 1;不等于 <> 或 ! selectempno,en…

你的手机是如何控制你的手表之广播篇

前言 要让手机能够控制手表&#xff0c;第一步当然要让手机能够“看见”手表&#xff0c;人类作为上帝视角&#xff0c;我们是能够通过眼睛直接看见手机和手表的&#xff0c;但要让手机“看见”手表&#xff0c;就需要一端把自己的信息通过电磁波的形式发往空中&#xff0c;另…

Echarts 实现将X轴放在图表顶部并且自动播放展示提示信息内容

文章目录 需求分析效果预览需求 如下图所示,实现柱状图中反转倒着绘制 分析 使用 ECharts 来实现对 Y 轴的倒序排序时,可以通过设置 yAxis 的 inverse 属性为 true 来实现。以下是一个简单的示例,演示了如何使用 ECharts 来创建一个柱状图,并将 Y 轴进行倒序排序:并且…

Node.js和npm常用命令

一、Node.js简介 Node.js是一个免费、开源、跨平台的JavaScript运行时环境&#xff0c;允许开发人员创建服务器、web应用程序、命令行工具和脚本。 点击查看node.js中文官网 点击查看node.js英文官网 二、npm简介 npm(Node Package Manager)是Node.js的软件包管理器&#xff0…

LangChain之链的应用(下)

LangChain之链的应用 Chain链的应用配置LLMChain&#xff1a;简单链create_stuff_documents_chain&#xff1a;文档链create_extraction_chain&#xff1a;提取信息链LLMMathChain&#xff1a;数学链create_sql_query_chain&#xff1a;SQL查询链连接数据库创建并使用链 Sequen…

linux--实时性优化

linux--实时性优化 1 介绍2 实时性需求3 代表性实时系统4 嵌入式系统嵌入式软件系统结构处理器时钟节拍多任务机制任务调度方式任务调度算法时间片调度算法优先级调度算法基于优先级的时间片调度算法 5 cyclictest 测试工具命令说明命令分析参数含义 6 linux 实时性改进某版本上…

MySQL用户管理操作

用户权限管理操作 DCL语句 一.用户管理操作 MySQL软件内部完整的用户格式&#xff1a; 用户名客户端地址 admin1.1.1.1这个用户只能从1.1.1.1的客服端来连接服务器 admin1.1.1.2这个用户只能从1.1.1.2的客服端来连接服务器 rootlocal host这个用户只能从服务器本地进行连…

从 0 开始实现一个网页聊天室 (小型项目)

实现功能 用户注册和登录好友列表展示会话列表展示: 显示当前正在进行哪些会话 (单聊 / 群聊) , 选中好友列表中的某个好友, 会生成对应的会话实时通信, A给B发送消息, B的聊天界面 / 会话界面能立刻显示新的消息 TODO: 添加好友功能用户头像显示传输图片 / 表情包历史消息搜…

数据结构(七)递归、快速排序

文章目录 一、递归&#xff08;一&#xff09;使用递归实现1~n求和1. 代码实现&#xff1a;2. 调用过程&#xff1a;3. 输出结果&#xff1a; &#xff08;二&#xff09;青蛙跳台阶问题1. 问题分析2. 代码实现3. 输出结果4. 代码效率优化5. 优化后的输出结果 二、快速排序&…

MySQL进阶之(九)数据库的设计规范

九、数据库的设计规范 9.1 范式的概念9.1.1 范式概述9.1.2 键和相关属性 9.2 常见的范式9.2.1 第一范式9.2.2 第二范式9.2.3 第三范式9.2.4 第四范式9.2.5 第五范式&#xff08;域键范式&#xff09; 9.3 反范式化9.3.1 概述9.3.2 举例9.3.3 反范式化新问题9.3.4 通用场景 9.4 …

互联网的利

在互联网没发明之前&#xff0c;人类说话要近距离的说&#xff0c;玩游戏要近距离的玩&#xff0c;十分麻烦。于是&#xff0c;互联网解决了这个问题。聊天可以在电脑上聊&#xff0c;玩游戏可以用游戏软件查找玩家来玩&#xff0c;实现了时时可聊&#xff0c;时时可玩的生活。…

K210 数字识别 笔记

一、烧写固件 连接k210开发板&#xff0c;点开烧录固件工具&#xff0c;选中固件&#xff0c;并下载 二、模型训练 网站&#xff1a;MaixHub 1、上传文件 2、开始标记数据 添加9个标签&#xff0c;命名为1~9&#xff0c;按键盘w开始标记&#xff0c;键盘D可以下一张图片&…

NLP技术发展和相关书籍分享

自然语言处理&#xff08;Natural Language Processing&#xff0c;NLP&#xff09;是计算机科学领域和人工智能领域的重要研究方向之一&#xff0c;旨在探索实现人与计算机之间用自然语言进行有效交流的理论与方法。它融合了语言学、计算机科学、机器学习、数学、认知心理学等…

装机必备——Bandizip7.33安装教程

装机必备——Bandizip7.33安装教程 软件下载 软件名称&#xff1a;Bandizip7.33 软件语言&#xff1a;简体中文 软件大小&#xff1a;8.42M 系统要求&#xff1a;Windows7或更高&#xff0c; 64位操作系统 硬件要求&#xff1a;CPU2GHz &#xff0c;RAM4G或更高 下载通道①迅…

Nature Communications 南京大学开发智能隐形眼镜用于人机交互

近日&#xff0c;南京大学的研究人员研制了一种微型、难以察觉且生物相容的智能隐形眼镜&#xff08;smart contact lenses &#xff0c;SCL&#xff09;&#xff0c;可用于原位眼球追踪和无线眼机交互。采用频率编码策略&#xff0c;无芯片、无电池的镜头成功地检测眼球运动和…

机器学习之聚类学习

聚类算法 概念 根据样本之间相似性&#xff0c;将样本划分到不同类别种&#xff0c;不同相似度计算方法&#xff0c;会得到不同聚类结果&#xff0c;常用相似度计算方法为&#xff1a;欧氏距离 目的是在没有先验知识情况下&#xff0c;自动发现数据集种内在结构和模式 无监督…

告别裸奔,聊聊主流消息队列的认证和鉴权!

大家好&#xff0c;我是君哥。 我们在使用消息队列时&#xff0c;经常关注的是消息队列收发消息的功能。但好多时候需要对客户端有一定的限制&#xff0c;比如只有持有令牌的客户端才能访问集权&#xff0c;不允许 Producer 发送消息到某一个 Topic&#xff0c;或者某一个 Top…

Spring源码编译常见问题解决方案

Spring源码编译常见问题 gradle下载太慢 使用镜像下载。 在gradle-wrappert.prtopertties文件中&#xff0c;将distributionUrl的值修改为镜像地址&#xff0c;这里使用了腾讯的gtrale镜像。 distributionUrlhttps\://mirrors.cloud.tencent.com/gradle/gradle-7.5.1-bin.zi…

H4022 12V24V36V40V4A同步降压芯片 Buck-DCDC 高效率95%

H4022 40V4A同步降压芯片是一款Buck-DCDC转换器&#xff0c;其高效率、高稳定性。以下是对该产品的详细分析&#xff1a; 一、产品优势 高效率&#xff1a;H4022的转换效率高达95%&#xff0c;这主要得益于其同步降压技术。同步降压技术相较于传统的异步降压技术&#xff0c;能…

区块链系统开发测试----链码部署开发、系统开发验证

一.检查配置环境 检查虚拟机环境&#xff0c;确保有正在运行的Hyperledger Fabric区块链&#xff0c;并且其中chaincode_basic、credit_chaincode链码可以正常调用 查看chaincode_basic、credit_chaincode链码调用 二.开发征信链码代码 基于现有征信链码&#xff0c;开发征信…