第六篇:微服务框架(SpringBoot、SpringCloud)

article/2025/8/27 10:15:31

目录

一. 微服务框架

1. 微服务架构概念

2. 微服务的利与弊(为什么要用微服务)

二. SpringBoot

1. SpringBoot是什么?

2. SpringBoot核心注解是什么?

3. 什么是SpringBoot的自动配置?原理是什么?

4. springboot监视器了解吗?

5. SpringBoot怎么保证程序安全性?

6. 微服务如何实现session共享?

7. springboot如何实现定时任务?

三. SpringCloud 和 SpringCloud Alibaba

1. SpringCloud是什么?

2. Spring、SpringBoot、SpringCloud 区别?

3. SpringCloud 和 SpringCloud Alibaba (前五行 微服务五大件)

(一)Spring Cloud

1. Eureka(服务注册与发现)

2. Ribbon(客户端负载均衡)

3. Feign(http服务调用)

4.Hystrix(服务容错)

5. Zuul(网关)

(二)Spring Cloud Alibaba

1. Nacos(服务注册发现)

2. Dubbo(rpc服务调用)

3. Ribbon(客户端负载均衡)

4. Sentinel(服务容错)

5. Zuul、Getway(网关)

6. SchedulerX(分布式调度)

7. Diamond(配置中心)


一. 微服务框架

1. 微服务架构概念

单体架构 ——> 集群 ——> 垂直化 ——> 服务化(SOA:面向服务的架构) ——> 微服务化(SOA的细粒度化)

SOA和微服务的区别?

  • SOA是面向服务的架构:解耦,解决信息孤岛问题,数据之间要互联互通
  • 微服务是SOA的细粒度化:比如把用户服务拆成账户服务、积分服务等

服务注册中心的作用?

  • 服务的动态感知:服务上线下线
  • 服务地址的高效管理:不需要每个客户端都去管理服务地址,而是可以通过服务名直接调用服务

注:服务注册中心有Zookeeper、Eureka、Nacos、consul

网关的作用?

        路由、权限认证、日志记录、限流、熔断

限流、降级、熔断?

  • 限流:限流算法有令牌桶、漏桶、滑动窗口,限流框架有阿里的sentinel(滑动窗口)、springcloud的hystrix(信号量)
  • 降级:关闭某些服务接口或者页面,以保证核心服务可用。被动降级是限流或熔断导致的降级,主动降级指的是关闭评论、广告等不重要功能保证核心服务可用。
  • 熔断:当某些服务异常,则及时熔断此微服务的调用,快速返回错误响应信息。防止雪崩的发生。(Hystrix默认5秒内20次错误调用,会启动熔断机制)

2. 微服务的利与弊(为什么要用微服务)

利:

        高度模块化,边界清晰。高内聚、低耦合。

        可独立部署,互不影响

弊:

        分布式带来的高度复杂性,比较难看清楚整个大系统是如何运作的

        数据一致性问题

        运维复杂,可靠性、稳定性、监控、容量规划方面都有很高的要求

二. SpringBoot

1. SpringBoot是什么?

SpringBoot是Spring组件一站式使用框架,简化了spring的使用,提供了各种start,让开发者能快速上手。

2. SpringBoot核心注解是什么?

@SpringBootApplication。主要包含三个注解:

  • @SpringBootConfiguration:该注解表明这SpringBoot的一个配置类
  • @EnableAutoConfiguration:开启自动配置功能
  • @ComponentScan:Spring组件扫描

3. 什么是SpringBoot的自动配置?原理是什么?

SpringBoot采用 “约定大于配置” 的思想,把所有可能需要的配置提前写好,写在自动配置的jar包中。基本每个start都有对应的自动配置。

原理就是把spring.factory里的xxxAutoConfiguration都加载到Spring容器中。

xxxAutoConfiguration:自动配置类

xxxProperties:封装配置文件中的相关属性

配置文件的加载顺序?

xxx.properties、yaml

SpringBoot核心配置文件是什么?

application(.yml或.properties) 或 bootstrap(.yml或.properties)。application常用于springboot项目,bootstrap常用于springcloud项目加载远程配置文件。

4. springboot监视器了解吗?

springboot actuator用于服务监测和管理。可以通过 http://localhost:8080/actuator/{端点} 的方式访问端点。常见的端点有:

  • /health:检查应用健康状况。健康为UP,不健康为DOWN;
  • /info:应用基础信息。比如名字,jdk版本,编码规则等;
  • /metrics:应用各类度量指标。比如内存信息,线程信息,垃圾回收信息,数据库连接池;
  • /threaddump:线程信息。比如线程id,线程状态,线程堆栈,是否等待锁资源等;
  • /heapdump:会自动生成JVM堆文件;
  • /beans:Spring容器中所有的bean;
  • /loggers:应用程序配置的日志信息。比如日志级别,也可以修改日志级别;
  • /shutdown:关闭SpringBoot应用。

5. SpringBoot怎么保证程序安全性?

使用spring-boot-starter-security依赖项,security主要核心功能有:

  • 认证(你是谁)
  • 授权(你能干什么)
  • 攻击防护(防止伪造身份)

6. 微服务如何实现session共享?

一个完整的项目被拆分成微服务后,session就被物理隔离开了。这时候可以使用Spring Session + redis的方案,操作redis上的session,就能解决这个问题。

7. springboot如何实现定时任务?

使用Spring的@scheduled注解,或者使用第三方框架quartz或者xxl-job。

三. SpringCloud 和 SpringCloud Alibaba

1. SpringCloud是什么?

Springcloud是一个微服务全家桶,是基于SpringBoot提供的一整套微服务解决方案

2. Spring、SpringBoot、SpringCloud 区别?

  • Spring是以 Bean(对象)为中心 ,提供IOC、AOP等功能
  • Spring是以 Application(单个微服务应用)为中心,提供各种start,提供自动配置、监控等功能
  • SpringCloud是以 Service(整个微服务治理框架)为中心,提供 服务注册与发现、服务调用、负载均衡、服务容错、网关等功能

3. SpringCloud 和 SpringCloud Alibaba (前五行 微服务五大件)

服务治理Spring Cloud落地技术Spring Cloud Alibaba落地技术
服务注册与发现Eureka、ZookeeperNacos
服务调用Feign、OpenFeignDubbo(HSF)
负载均衡RibbonRibbon
服务容错HystrixSentinel
网关SpringCloud ZuulGetway
分布式调度--(替代方案:xxl-job)ScheduleX
配置中心Spring Cloud ConfigDiamond
消息--(替代方案:RabbitMQ、Kafka)RocketMQ
服务总线BusNacos
服务部署Docker、Kubernetes、OpenStackDocker
分布式事务--(替代方案:2pc)Senta
服务监控待补充AliMonitor(应用监控)、Arthas(在线诊断)
链路追踪

Spring Cloud Sleuth

待补充

总结目前市面上的技术使用,可以看到SpringCloudNetflix(Eureka、Feign、Ribbon、Hystix、Zuul) 的技术基本被SpringCloudAlibaba替代了:

 

(一)Spring Cloud

1. Eureka(服务注册与发现)

        服务启动的时候,服务上的Eureka客户端会把自身注册到Eureka服务端,并且可以通过Eureka服务端的注册表知道其他注册的服务

2. Ribbon(客户端负载均衡)

        服务间发起请求的时候,服务消费者方基于Ribbon服务做到负载均衡,从服务提供者的多台机器中选择一台。常见的负载均衡算法:轮询、随机、权重。

3. Feign(http服务调用)

        Feign使用的时候会集成Ribbon,Ribbon去Eureka服务端找到服务提供者所在的服务器信息(比如服务名、ip、端口等),然后根据负载均衡策略选择一个,拼接url后发出清楚

4.Hystrix(服务容错)

        发起的请求是通过Hystrix的线程池去访问服务,不同的服务通过不同的线程池,实现不同的服务调度隔离。如果服务出现故障,通过服务熔断,避免服务雪崩问题;并且通过服务降级,保证服务核心功能正常提供。

  • 隔离:服务之间请求用线程池隔离,防止所有线程都卡在某一个异常的下游节点
  • 熔断:服务异常及时熔断,返回错误响应信息,防止服务雪崩(下游节点异常从而超时影响到上游节点,从而影响到整个链路),Hystrix默认5秒20次异常请求则熔断。
  • 降级:需要有降级逻辑,请求走熔断器过程中,需要把该请求记录到故障数据库,方便后续回补数据

5. Zuul(网关)

        前端调用后端的时候,统一走Zull网关进入,通过Zull网关转发请求给对应的服务。公有域名转ip,鉴权。

服务启动和请求全过程:
1. 服务启动的时候Eureka客户端会把自身注册到Eureka服务端,并且也能通过Eureka服务端发现其他服务。
2. 当前端发起请求时,先进入Zuul网关,网关通过Eureka服务端拿到服务提供者信息,通过路由策略转发请求给相应的服务,服务收到请求会先过Hystrix做服务容错(限流、熔断、降级),然后再根据业务逻辑处理请求。
3. 当后端服务之间相互请求时,Feign每5秒会从Eureka服务端同步一次服务器信息缓存到本服务器,ribbon直接从缓存中的服务器信息中选择一个,转发请求到相应服务器,依然是先到Hystrix,再做业务逻辑处理。使用Eureka有服务安全下线问题
Eureka会跟服务器之间保持心跳,三次心跳失败,就会把服务器节点拿掉。但是就有一个问题,服务下线和Eureka知晓之间的时间请求都会失败。
如何解决这个问题?
这个需要服务提供方来保证。Eureka服务端提供了一个接口,可以调用接口把服务器节点信息拿掉,服务下线前有一个回调钩子,可以在这个回调里边调用Eureka,先把节点信息拿到再shutdown服务,就可以保证服务安全下线。

(二)Spring Cloud Alibaba

1. Nacos(服务注册发现)

Nacos是注册中心+配置中心的组合(Nacos = Eureka + Config),就不用多部署一套配置中心的集群

2. Dubbo(rpc服务调用)

        Dubbo是分布式系统中常用的RPC框架,可以帮我们做服务地址的管理、服务的注册与发现、服务监控等。Dubbo一般配合Zookeeper使用。

Dubbo工作流程:

角色:Container-容器、Provider-服务提供方、Consumer-服务消费方、Register-注册中心、Monitor-监控器

  • Provider在Container上启动服务;
  • Provider在Register上注册服务,Dubbo一般使用Zookeeper作为注册中心;
  • Consumer在Register上订阅服务,注册中心返回服务器列表,如果列表有变更就通知Consumer;
  • Conusmer根据负载均衡算法调用Provider;
  • Monitor实时监控服务调用次数和时间。

3. Ribbon(客户端负载均衡)

        服务间发起请求的时候,服务消费者方基于Ribbon服务做到负载均衡,从服务提供者的多台机器中选择一台。常见的负载均衡算法:轮询、随机、权重。

4. Sentinel(服务容错)

        Sentinel是阿里开源的高可用流量管理框架,提供了 限流、熔断、降级、系统负载保护等多个维度来保障服务稳定性。

降级策略:

  • 平均响应时间超过阈值
  • 每秒异常比例超过阈值
  • 一分钟内异常数目超过阈值

5. Zuul、Getway(网关)

6. SchedulerX(分布式调度)

xxl-job 是一个分布式调度平台,有调度中心和执行器两大部分组成。

  • 调度中心:负责管理调度信息,按照调度配置发出调度请求,自身不承担业务代码。支持可视化界面,可以在调度中心对人任务进行新增、修改、删除,可以查看日志,失败告警等。
  • 执行器:负责接受调度请求,执行业务逻辑。接收调度中心发出的执行请求,终止请求,日志请求等。

xxl-job工作原理:

  • 任务执行器根据配置的调度中心地址,自动注册到调度中心
  • 达到任务触发条件,调度中心下发任务
  • 执行器基于线程池执行任务,并把执行结果放入内存队列,执行日志写入日志文件
  • 执行器回调线程消费内存队列里的执行结果,并主动上报给调度中心
  • 当用户在调度中心查看任务日志,调度中心请求任务执行器,查询日志结果并返回

7. Diamond(配置中心)


http://chatgpt.dhexx.cn/article/aQSQNgpO.shtml

相关文章

DLL文件的创建和调用

文章目录 前言一、DLL的优势二、使用步骤1.创建DLL文件2.调用DLL文件 总结 前言 动态数据库 (DLL) 是作为共享函数库的可执行文件。动态数据库提供了一种方法,使进程可以调用不属于其可执行代码的函数。本文将对DLL的创建和调用步骤进行保姆级讲解。 一、DLL的优势…

C# 调用 dll 文件

一、先使用C来创建一个 .dll 文件 1、创建新项目:CreateDll01 2、选择 “动态链接库(.dll)” 文件 3、在 CreateDll01.cpp 源文件中添加如下代码 // CreateDll01.cpp : 定义 DLL 应用程序的导出函数。 //#include "stdafx.h"extern "C" __decl…

dll是什么呢?dll丢失如何解决?

DLL的概念 DLL(Dynamic Link Library)文件为动态链接库文件,又称“应用程序拓展”,是软件文件类型。在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件&#xff0…

C++ 制作动态链接库.dll及.dll使用

声明:IDE是Visual studio -version 2022 其制作的动态链接库dll里面实现简单的加减法,提供给其他项目调用。 一、动态链接库(DLL)创建 1、创建DLL工程 流程:文件 -> 新建 -> 项目 -> 动态链接库&#xf…

.dll、.lib、.dll.a 的区别

我们已 ffmpeg 的动态链接库为例,描述一下这三个文件的作用: 目录整体结构: 分析 bin 目录: ffmpeg、ffplay、ffprobe 之所以这么小,是因为他们运行的时候会调用 .dll 文件当中的代码。dll:真正存放函数…

Java调用dll文件

目录 1 C创建dll 1.1 项目与工具 1.2 步骤与代码 2 Java使用JNA调用dll 2.1 项目与工具 2.2 步骤与代码 3 实际效果 4 参考链接 1 C创建dll 1.1 项目与工具 Visual Studio 2019 1.2 步骤与代码 ①使用VS创建动态链接库(DLL)项目 ②设置项目名与…

什么是dll文件

动态链接库(Dynamic Link Library 或者 Dynamic-link Library,缩写为 DLL),是微软公司在微软Windows操作系统中,实现共享函数库概念的一种方式。这些库函数的扩展名是 ”.dll"、".ocx"(包含…

什么是dll

DLL的概念 DLL(Dynamic Link Library)文件为动态链接库文件,又称“应用程序拓展”,是软件文件类型。在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件&#xff0c…

XWiKi 部分汉化

一、进入XWiki首页,用管理员进行登陆 账号:superadmin 密码:system 登陆后点击右上角,如下图所示 二、点开管理页面 如下图所示: 三、搜索localization 四、按照图中进行修改 然后部分汉化就完成了 当然,如…

XWiKi 汉化

进入XWiKi主页,然后点击菜单栏,进入管理,汉化前图片显示: 汉化后图片显示 一、进入安装目录/xwiki/WEB-INF/lib/下找到xwiki-platform-legacy-oldcore-10.7.jar 二、用zip解压软件进入xwiki-platform-legacy-oldcore-10.7.jar不要…

xwiki开发指南1-使用XWiki创建FAQ应用

本文是按照XWiki官网开发指南-FAQ应用创建,自己翻译总结的版本。 此篇含有大量图片,关于XWiki的开发,将在下一篇讲解。 关于XWiki的部署也会单独写一篇基于docker的部署文。 使用XWiki创建FAQ应用 1.首先下载并部署XWiki(之后会…

【Wiki】XWiki安装教程_War包版本

目录 0、XWiki说明1、war包安装说明1.1、环境说明1.2、如果懒得下载可以使用这边准备好的物料包汇总 2、war包安装2.1、Tomcat安装2.2、java安装(需要root权限)2.3 、使用 source /etc/profile 刷新linux配置2.4、数据库安装2.5、解压war包与xip2.6、修改配置文件2.6.1、修改WE…

xwiki搭建

一、Xwiki简介 XWiki是一个由Java编写的基于LGPL协议发布的开源wiki和应用平台。XWiki是一款基于java所编写的wiki,它可以运行在如Tomcat,Jetty,JBoss,WebLogic,WebSphere等Servlet容器上并利用关系型数据库(HS…

XWiki在Windows上部署

简单介绍 XWiki是一款Java开发的开源文档管理系统,它简单易用,拥有强大的权限管理功能。 部署条件 JDK11(需要注意:14版本之后需要JDK11以上)、Tomcat9,XWiki 部署过程 JDK和Tomcat的部署我就贴个参考链…

开源框架XWIKI搭建介绍

原文地址:http://john88wang.blog.51cto.com/2165294/1605787 一 应用背景描述 在平时的运维工作中,把常规工作进行文档整理非常重要,无论是平时工作处理或是工作交接,实时的维护文档资料可以提高工作效率。如果采用传统的TXT文档…

xwiki安装使用以及问题解决

环境要求: jdk1.8 安装步骤: xwiki的war包下载地址:https://www.xwiki.org/xwiki/bin/view/Download/DownloadVersion/?projectVersion10.11.2 第一步:在tomcat的webapps文件下创建xwiki文件夹,将war包上传至xwik…

CentOS 7安装XWiki

目录 前言 安装步骤 安装JDK 11 安装Tomcat 9 安装xwiki 13.10.10 安装Postgres 13 设置xwiki数据路径 参考 前言 本文介绍如何在CentOS 7安装xwiki。JDK 11 Tomcat 9 xwiki 13 Postgres 13。CentOS用vagrant虚拟化的。本文代码已开源 安装步骤 安装xwiki有四个主…

XWiki开发指南3-自定义扩展jar包

简介 本文将介绍如何编写一个提供给后台接口并使用脚本在前端页面调用。 使用maven下载XWiki提供的模板项目 保证你的maven已经安装,然后执行命令 mvn archetype:generate \-DarchetypeArtifactIdxwiki-commons-component-archetype \-DarchetypeGroupIdorg.xwi…

xwiki部署_开源Wiki应用平台---XWiki的部署

部署所需要做的工作: 1.安装好MySQL(这里使用的是MySQL5.6.23),修改MySQL的my.ini配置文件(我的是手动安装版,所以在MySQL的安装目录 下),在[mysqld]下添加以下配置: max_allowed_packet32M 这里是为了增大mysql serve…

XWIKI的搭建

原文地址:https://my.oschina.net/gywbest/blog/780569 一 应用背景描述 在平时的运维工作中,把常规工作进行文档整理非常重要,无论是平时工作处理或是工作交接,实时的维护文档资料可以提高工作效率。如果采用传统的TXT文档或者Wo…