【SpringCloud】认识微服务

news/2025/1/30 23:58:10/

在这里插入图片描述

🐌个人主页: 🐌 叶落闲庭
💨我的专栏:💨
c语言
数据结构
javaEE
操作系统
Redis

石可破也,而不可夺坚;丹可磨也,而不可夺赤。


认识微服务

  • 一、 服务架构演变
    • 1.1 单体架构
    • 1.2 分布式架构
    • 1.3 微服务
  • 二、 微服务技术对比
  • 三、 SpringCloud
  • 四、服务拆分及远程调用
    • 4.1 服务拆分
    • 4.2 服务间调用

一、 服务架构演变

1.1 单体架构

  • 单体架构:将业务的所有功能集中在一个项目中开发,打成一个包部署
  • 优点:
    • 架构简单,部署成本低
  • 缺点:
  • 耦合度高

1.2 分布式架构

  • 分布式架构:根据业务功能对系统进行拆分,每个业务模块作为独立项目开发,称为一个服务。
  • 优点:
  • 降低耦合度,有利于服务升级拓展

分布式架构是将一个项目中的不同的需求拆分成了多个模块,每个模块都可以独立开发,互不影响,各个模块最终一起部署,降低了代码的耦合度,但如果项目的需求有很多个,就需要大量的模块,模块数量变多,最终部署的时候就会变得很复杂,再拆分的过程中也会有很多问题,由于拆分好的服务为了保证高可用,还需要集群,与单体架构相比,分布式架构中的某个模块需要另一个模块的提供的信息时不能像单体架构那样直接调用。
此外,采用分布式架构还要考虑很多问题:服务拆分粒度如何(就是指哪些功能可以单独拆分出来)、服务集群地址如何维护(每个拆分的模块都有自己的地址,在部署的时候如何获取这些地址,当地址发生变化该怎么办)、服务之间如何实现远程调用、服务的健康状态如何感知(模块1发生问题挂掉了,模块2去调用模块1也会出现问题)

1.3 微服务

  • 微服务是一种经过良好架构设计的分布式架构方案,微服务架构特征:
  • 单一职责:微服务拆分粒度更小,每一个服务都对应唯一的业务能力,做到单一职责,避免重复业务开发
  • 面向服务:微服务对外暴露业务接口
  • 自治:团队独立、技术独立、数据独立、部署独立
  • 隔离性强:服务调用做好隔离、容错、降级,避免出现级联问题

微服务的分布式架构方案将每个小的服务都拆分成单独的模块,使每个模块的功能更少,在开发时不会那么繁琐,每个模块对外都提供访问接口,可以实现对某个模块功能的调用,模块都是独立开发的,相当于一个完整的小的项目,有自己独立的数据库,有自己独立的数据,模块之间不能访问对方的数据,实现了数据解耦,避免了数据污染,模块之间进行调用时,当一个模块发生问题挂掉了,另一个模块需要调用,此时会有一个隔离性的措施,避免模块调用时出现问题

二、 微服务技术对比

  • 微服务这种方案需要技术框架来落地,全球的互联网公司都在积极尝试自己的微服务落地技术。在国内最知名的就SpringCloud和阿里巴巴的Dubbo。

不管是哪种微服务,他们都需要去做微服务的拆分,形成微服务集群,集群中的每个服务都需要遵循单一职责的原则,,并且由于要面向服务,所以每个服务都要对外暴露接口,用于服务之间的调用,不同技术去实现这些接口的方式可能会有所不同,由于这些接口之间的调用关系需要维护,并且这些调用关系错综复杂,而且量也是非常大,所以在微服务中都会有一个注册中心,用来维护微服务里面每个节点的信息,并且监控这些节点的状态,随着微服务越来越多,里面要是有一些配置需要去修改,此时会有一个配置中心,用来统一管理整个微服务群的配置,微服务部署完成后,为服务群会有一个统一的服务网关,用户访问这个网关,由网关把请求路由到微服务群,在路由过程中还可以做负载均衡。

在这里插入图片描述


微服务技术对比:

DubboSpringCloudSpringCloudAlibaba
注册中心zookeeper、redisEureka、ConsulNacos、Eureka
服务远程调用Dobbo协议Feign(http协议)Dubbo、Feign
配置中心SpringCloudConfigSpringCloudConfig、Nacos
服务网关SpringCloudGetway、ZuulSpringCloudGetway、Zuul
服务监控和保护dubbo-admin,功能弱HystrixSentinel

三、 SpringCloud

  • SpringCloud是目前国内使用最广泛的微服务框架,官网地址:https://spring.io/projects/spring-cloud
  • SpringCloud集成了各种微服务功能组件,并基于Spring Boot3实现了这些组件的自动装配,从而提供了良好的开
    箱即用体验
  • SpringCloud与SpringBoot的版本兼容关系:

在这里插入图片描述


四、服务拆分及远程调用

4.1 服务拆分

服务拆分就是一个单体架构按照功能模块进行拆分,变成多个服务
在进行微服务拆分时要注意不同的微服务,不要重复开发相同的业务,避免重复开发,要保证微服务数据的独立,不同的微服务不能访问彼此的数据库,如果一个微服务需要另一个微服务的数据,可以通过接口调用,因为每个微服务都要将自己的部分业务暴露作为接口供其它微服务调用

4.2 服务间调用

  • 注册RestTemplate
@MapperScan("order.mapper")
@SpringBootApplication
public class OrderApplication {public static void main(String[] args) {SpringApplication.run(OrderApplication.class,args);}@Beanpublic RestTemplate restTemplate() {return new RestTemplate();}
}
  • 服务远程调用RestTemplate
@Service
public class OrderService {@Autowiredprivate RestTemplate restTemplate;public Order queryOrderById(Long orderId) {//查询订单Order order = orderMapper.findById(orderId);//查询用户String url = "http://localhost:8081/user/" + order.getUserId();User user = restTemplate.getForObject(url,User.class);//封装user信息order.setUser(user);//返回return order;}
}

http://www.ppmy.cn/news/1144006.html

相关文章

基于ffmpeg给视频添加时间字幕

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序,我们可以基于ffmpeg对视频进行各种操作。本文主要介绍基于ffmpeg给视频添加字幕,字幕的内容为视频所播放的时间(故需要安装ffmpeg,具…

LeetCode-503-下一个更大元素Ⅱ

题目描述: 给定一个循环数组 nums ( nums[nums.length - 1] 的下一个元素是 nums[0] ),返回 nums 中每个元素的 下一个更大元素 。 数字 x 的 下一个更大的元素 是按数组遍历顺序,这个数字之后的第一个比它更大的数&am…

NAT模式和桥接模式的区别

NAT模式和桥接模式的区别 NAT模式和桥接模式都是虚拟机网络配置的两种方式,主要区别在于虚拟机与外部网络交互的方式不同。 NAT(Network Address Translation,网络地址转换)模式:在这种模式下,虚拟机和宿主…

PCL 添加自定义数据类型

文章目录 一、简介二、举个栗子三、实现效果参考资料一、简介 PCL带有各种预定义的点类型,从用于XYZ数据的sse对齐结构,到更复杂的n维直方图表示,如PFH(点特征直方图)。这些类型应该足以支持PCL中实现的所有算法和方法。然而,在某些情况下,用户仍然希望定义新的类型。 二、…

Godot 脚本外置参数设置

文章目录 添加脚本设置参数bulid 一下 Godot Engine 4.2 简体中文文档 C# exports 添加脚本 设置参数 Godot 添加脚本后,设置参数。两种形式都可以 [Export]public int Speed { get; set; } 10;[Export]public string Name ;bulid 一下 私有变量也可以

JVM命令行监控工具

JVM命令行监控工具 概述 性能诊断是软件工程师在日常工作中需要经常面对和解决的问题,在用户体验至上的今天,解决好应用的性能问题能带来非常大的收益。 Java作为最流行的编程语言之一,其应用性能诊断一直受到业界广泛关注,可能…

网络爬虫中的代理技术:socks5代理和HTTP代理

网络爬虫是一种非常重要的数据采集工具,但是在进行网络爬虫时,我们经常会遇到一些限制,比如IP封锁、反爬虫机制等,这些限制会影响我们的数据采集效果。为了解决这些问题,我们可以使用代理服务器,其中socks5…

Verilog HDL阻塞赋值和非阻塞赋值笔记

1. module test( input wire clk, input wire b, output reg a, output reg c ); always(posedge clk) begin ab; ca; end endmodule 上面的代码在vivado中综合后的电路为: 2. module test( input wire clk, input wire b, outp…