【SpringCloud】认识微服务


在这里插入图片描述

🐌个人主页: 🐌 叶落闲庭
💨我的专栏:💨
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.rhkb.cn/news/152149.html

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

相关文章

Linux 磁盘管理+实例

目录 一、文件系统 二、添加磁盘 三、查看磁盘信息(块设备) 四、分区 1、格式 1)MBR分区 2)GPT分区 2、管理分区 1)使用fdisk 2)使用gdisk 3)使用parted a.交互式 b.非交互式 3、…

2023年中国CEM-3型覆铜板市场供需现状、销售收入及行业趋势分析[图]

CEM-3指覆铜板的一种,以玻纤布半固化片与玻纤粘半固化片层压铜箔达到固化形成的板材,属于复合型基材,CEM-3由于其良好的加工性能主要用于FR-4中厚板的替代,有着良好的发展前景。 随着CEM-3覆铜板品质的不断改进和提高,…

Springboot知识点必知必会(一)

mvc设计模式 MVC设计模式是Model-View-Controller的缩写,它是一种用于设计用户界面的软件设计模式。Spring MVC是Spring框架的一个模块,它提供了一种基于Java的方式来实现MVC设计模式。 以下是Spring MVC中MVC设计模式的组成部分和工作原理: …

什么是智能档案柜?如何使用智能档案柜?

智能档案柜是一种具有智能化功能的文件存储设备,它通过应用现代科技,集成了电子锁、自动化控制、智能管理系统技术,具有自动识别、高效存储、安全可靠等特点,提高档案管理的效率和安全性。适用于企业单位、图书馆等需要储存文件资…

安卓端App页面狂刷问题记录

一、场景 App基于webview混合开发,业务主要为前端h5实现,其中有一个功能为消息中心,当从通知栏点击消息跳转到指定页面时,前端会不停地刷新页面,一遍又一遍地重复同一批请求。 二、问题分析 1、刚开始怀疑是否前端里…

机器学习必修课 - 编码分类变量 encoding categorical variables

1. 数据预处理和数据集分割 import pandas as pd from sklearn.model_selection import train_test_split导入所需的Python库 !git clone https://github.com/JeffereyWu/Housing-prices-data.git下载数据集 # Read the data X pd.read_csv(/content/Housing-prices-data/t…

Mysql 8手动终止某个事务并释放其持有的锁

示范数据表 age具有index普通索引 在mysql数据库里的information_schema.INNODB_TRX表中存储有innodb的所有事务,我们可以查看该表来查看正在进行的事务 现在我开启一个事务,执行第1、2行SQL,启动事务并持有id3的行锁 刷新事务表可以看到…

light client轻节点简介

1. 引言 前序博客: Helios——a16z crypto构建的去中心化以太坊轻节点 去中心化和自我主权对于Web3的未来至关重要,但是这些理想并不总适用于每个项目或应用程序。在非托管钱包和bridges等工具中严格优先考虑安全性而不是便利性的用户,可选…

C++ 01.学习C++的意义-狄泰软件学院

一些历史 UNIX操作系统诞生之初是用汇编语言编写的随着UNIX系统的发展,汇编语言的开发效率成为瓶颈,所以需要一个新的语言替代汇编语言1971年通过对B语言改良,使其能直接产生机器代码,C语言诞生UNIX使用C语言重写,同时…

基于Stable Diffusion的图像合成数据集

当前从文本输入生成合成图像的模型不仅能够生成非常逼真的照片,而且还能够处理大量不同的对象。 在论文“评估使用稳定扩散生成的合成图像数据集”中,我们使用“稳定扩散”模型来研究哪些对象和类型表现得如此逼真,以便后续图像分类正确地分配…

[尚硅谷React笔记]——第3章 React应用(基于React脚手架)

目录: react脚手架创建项目并启动react脚手架项目结构一个简单的Hello组件样式的模块化功能界面的组件化编码流程(通用)组件的组合使用-TodoList 1.react脚手架 xxx脚手架: 用来帮助程序员快速创建一个基于xxx库的模板项目 包含了所有需…

/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21‘ not found (required by

在某项目中遇到下面的错误, ./model2trt_v2: /lib64/libstdc.so.6: version GLIBCXX_3.4.21 not found (required by ./model2trt_v2) ./model2trt_v2: /lib64/libstdc.so.6: version GLIBCXX_3.4.21 not found (required by ../../../lib/linux_lib/libcuda_utils…

WPF中DataContext的绑定技巧

先看效果: 上面的绑定值都是我们自定义的属性,有了以上的提示,那么我们可以轻松绑定字段,再也不用担心错误了。附带源码。 目录 1.建立mvvm项目 2.cs后台使用DataContext绑定 3.xaml前台使用DataContext绑定 4.xaml前台使用Da…

浏览器自动化神器:Automa 轻松实现任务编排 | 开源日报 No.52

usememos/memos Stars: 13.8k License: MIT memos,一个轻量级的、自托管的备忘录中心。开源且永久免费。 开源且永久免费使用 Docker 可以在几秒钟内完成自我托管支持 Markdown 格式可定制和共享提供 RESTful API 用于自助服务 mamoe/mirai Stars: 12.6k Licen…

华为云云耀云服务器L实例评测 | 实例使用教学之高级使用:配置 Git SSH Key 进行自动识别拉代码

华为云云耀云服务器L实例评测 | 实例使用教学之高级使用:配置 Git SSH Key 进行自动识别拉代码 介绍华为云云耀云服务器 华为云云耀云服务器 (目前已经全新升级为 华为云云耀云服务器L实例) 华为云云耀云服务器是什么华为云云耀云…

Mac解压缩软件BetterZip免费版注册码下载

软件介绍 BetterZip免费版是一款适用于Mac系统的解压缩软件,软件具备了专业、实用、简单等特点,它可以让用户更快捷的向压缩文件中添加和删除文件,同时兼容性也十分优秀,支持ZIP , SIT , TAR、BZIP2 &…

30分钟快速搭建并部署一个免费的个人博客

1前言 现如今网上有许多完善的博客平台,如博客园、掘金、思否、知乎等。有人会说为什么现在网上有这么多成熟的博客平台,你还要浪费时间搭建一个自己的博客系统呢?首先我相信每一个程序员都会想要拥有一个属于自己的博客系统,其次…

微信小程序 table表格 固定表头和首列 右侧表格可以左右滚动

(一) 1.左侧一列固定不动 2.右侧表格内容可以左右滚动 3.单元格内容平均分配 4.每一行行高可以由内容撑开 通过 js 设置左侧一列行高与右侧表格内容行高保持一致 1.1 效果图 1.2 tabble.wxml <view classtable><!-- 左侧固定 --><view classtable_left_colum…

C++对象模型(2)-- 进程内存空间布局

在前面Base类的对象模型中&#xff0c;有base对象实例&#xff0c;虚函数表&#xff0c;静态变量和函数等&#xff0c;这些信息在内存中都有各自的保存位置。了解进程的内存空间布局&#xff0c;比如内存空间分成几大块&#xff0c;各种不同的数据分别保存在内存空间的哪个位置…

MyBatisPlus(十一)包含查询:in

说明 包含查询&#xff0c;对应SQL语句中的 in 语句&#xff0c;查询参数包含在入参列表之内的数据。 in Testvoid inNonEmptyList() {// 非空列表&#xff0c;作为参数List<Integer> ages Stream.of(18, 20, 22).collect(Collectors.toList());in(ages);}Testvoid in…