【Spring Cloud一】微服务基本知识

news2024/9/24 13:14:35

系列文章目录


微服务基本知识

  • 系列文章目录
  • 前言
  • 一、系统架构的演变
    • 1.1单体架构
    • 1.2分层架构
    • 1.3分布式架构
    • 1.4微服务架构
    • 1.5分布式、SOA、微服务的异同点
  • 二、CAP原则
  • 三、RESTful
    • RESTful的核心概念:
  • 四、共识算法


前言

在实际项目开发过程中,目前负责开发的系统整体的架构采用的是微服务架构。对于微服务架构的认识只是停留在应用层面上,对于微服务的全貌并不是很清晰。最近想要对微服务的认知上更近一步,所以就重新梳理了一下微服务的基础知识。


一、系统架构的演变

1.1单体架构

什么是单体架构:

将一个完成的应用程序作为一个单一的、整体的单元来构建和部署。所有的功能和模块都集中在一个代码库中。共享同一个数据库,相应的也部署在同一个服务器上——单体架构。

在这里插入图片描述

单体架构出现的原因:
早期的Java应用程序一般采用单体架构,这是因为在用用程序刚刚开始开发的时候,规模小,并且单体架构简单易于部署。

单体架构的优缺点:

优点:开发简单、易于部署、单一数据库事物

缺点:随着业务增长会面临扩展性和维护性等问题。

1.2分层架构

什么是分层架构:
分层架构将应用程序划分为多个层次(表现层、应用层、数据访问层),每个层次负责不同的功能,用于实现代码的复用和职责的分离。
在这里插入图片描述
在这里插入图片描述

分层架构出现的原因:
为了解决单体架构的扩展性和维护性问题,演变为采用分层架构。分层架构将应用程序划分为多个层次(表现层、应用层、数据访问层),每个层次负责不同的功能,用于实现代码的复用和职责的分离。

分层架构的优缺点:
优点:代码复用、职责清晰、易于维护。
缺点:复杂性(在一些复杂的业务场景下,层与层之间的交互可能变得复杂)。大型系统中可能导致模块之间的耦合。

1.3分布式架构

什么是分布式架构:
分布式架构是一种设计模式,是将大型应用拆分成多个独立的子系统或服务,并将这些子系统部署在不同的服务器上。通过网络进行通信和协作。
在这里插入图片描述

分布式架构出现的原因:
随着互联网的发展和业务的增长,单体架构和分层架构在面对大规模用户和高并发访问时已经不够灵活和高效。因此,Java应用程序逐渐演变为分布式架构,将应用程序拆分成多个独立的服务。

分布式架构的目标:

提高系统的高性能、可伸缩性;高可用性和容错性,来提高系统的整体性能。

分布式架构的优缺点:
优点:横向扩展、高可用性、灵活部署

缺点:系统复杂、通信开销、分布式事务难以处理。

1.4微服务架构

在说微服务架构的时候先了解一下SOA(Service-Oriented Architecture)
SOA是一种软件架构风格,核心思想是将应用程序的功能划分为一组相对独立的服务,这些服务可以通过网络进行通信,并可以按需组成更大的应用系统。

SOA的目标:
强调松耦合和服务的重用,使系统更易于可扩充、可维护、可复用。SOA可以用于实现分布式系统,但并不限定于分布式系统。

了解了SOA架构之后我们再看看微服务架构。

什么是微服务架构:
微服务架构是一种特殊的SOA风格,它将应用程序划分为一组小型、独立的服务。每个服务都专注于一个特定的业务功能。
微服务架构强调将应用程序**差分成更小的、自治的、独立部署和松耦合服务。每个服务都有自己的数据库和业务逻辑。**与SOA相比微服务架构的粒度更小。
在这里插入图片描述

微服务架构的优缺点:
优点:

  1. 模块化和解耦合:将真个系统拆分为一组小型、独立的服务。每个服务都专注于一个特定的职责。
  2. 独立部署和伸缩性:每个服务都是独立的,可以单独部署也可以根据需求对服务进行水平扩展。
  3. 更好的团队协作:每个微服务都是独立的,可以由不同的团队开发和维护,提高团队的自治性和工作效率。
  4. 简化持续交付:由于每个服务都是独立的,可以更轻松的持续集成和交付,减少了系统的发布风险和交付时间。

缺点:

  1. 系统复杂性:每个服务都是独立的,需要通过网络进行通信。增加了系统的复杂性,包括网络通信、服务发现、负载均衡等方面。
  2. 部署和运维复杂性:微服务架构涉及多个服务的部署和运维,需要管理大量的服务。增加了部署和运维的复杂性。
  3. 数据一致性和分布式事物的问题:由于微服务架构中每个服务都有自己的数据存储。可能会导致数据一致性的问题。

1.5分布式、SOA、微服务的异同点

相同点:

他们都将应用程序拆分成多个组件或服务,并通过网络进行通信和协作。
都强调松耦合、可扩展、可维护、可复用。

不同点:
1.分布式架构是一种概念上的设计模式,用于解决系统的性能和可扩展问题,强调的是分担和资源的合理利用。

2.SOA是一种软件架构风格,核心思想是将应用程序划分为一组相对独立的服务,并通过标准化的协议进行通信,以实现松耦合和服务的重用。

3.微服务架构是SOA的一种实践方式,它强调将应用程序拆分为小型、独立的服务,每个服务都有自己的数据库和业务逻辑,来实现更高的自治和独立部署、松耦合。

二、CAP原则

cap是分布式系统中三个重要的属性。

一致性(Consistency):各个子系统看到的数据都是相同的。数据都是一致性。
可用性(Availability):分布式系统能够在任何时刻都能对外提供服务,保持持续的可工作状态,不因故障而中断服务。当一个子系统挂掉了,整个系统可以继续对外提供服务
分区容忍性(Partition Tolerance)
分区容忍性关注的是分布式系统在面对网络分区的情况下仍然能够正常运行,而不会因为分区而导致整个系统不可用。
由于网络或者分区等原因会导致各个子系统中的数据短暂不一致

一般来说,大多数分布式系统会优先考虑分区容忍性和可用性,因为网络分区是不可避免的,而一致性可以通过其他手段来解决

补充:zookeeper遵循CP、Eureka遵循AP

三、RESTful

RESTful(Representational State Transfer 表述性状态转移)是一种设计和构建网络应用程序的架构风格。是最初由Roy Fielding在他的博士论文中提出,并成为了HTTP协议的一种应用方式。

RESTful架构的设计目标是:使网络应用程序具有简介、可伸缩、可维护、可扩展和易于理解。

RESTful的核心概念:

  1. 资源(Resources):在RESTful中,所有事物都被看做为资源,例如用户、订单,并且每个资源都有一个唯一的标识符(通常是URL)用于访问资源和操作资源。
  2. 无状态性:RESTful架构要求每一个请求都应该包含足够的信息,使服务器能够理解和处理,不需要依赖之前的请求或者会话状态,服务器不保存客户端的状态信息,这使得系统更具伸缩性和简洁性。

可伸缩性示例:
假设有一个电子商务网站,它使用RESTful API来处理客户端的请求。由于RESTful架构是无状态的,服务器不会保存客户端的状态信息,每个请求都包含足够的信息来执行操作。这使得该网站可以轻松地水平扩展,即通过增加服务器节点来处理更多的请求负载。
如果服务器需要保存大量的客户端状态信息,例如会话信息、购物车内容等,那么在进行水平扩展时,需要确保所有服务器节点之间的状态同步,这增加了复杂性并降低了可伸缩性。而在RESTful架构下,无状态性消除了这种状态同步的需求,使得系统的扩展更加简单和高效。

简洁性示例:
考虑一个社交媒体应用程序,使用RESTful API来处理用户发布新帖子的请求。用户在每个请求中提供了必要的信息,例如帖子内容、标签等。服务器无需维护用户的会话状态,而是根据请求的信息处理每个帖子的发布。
在这种情况下,RESTful架构简化了服务器的逻辑和状态管理。服务器无需关心用户的上下文或会话状态,只需根据请求的内容处理每个帖子。这种简洁性使得服务器的代码更易于编写、测试和维护。

  1. 统一接口:RESTful架构使用统一的接口规范来定义资源的操作方式。这种统一性使得不同的客户端可以通过相同的接口与服务器进行通信。

RESTful API使用标准的HTTP方法(GET、POST、PUT、DELETE等)来对资源进行操作。客户端通过不同的HTTP方法来执行不同的操作,比如获取资源、创建新资源、更新资源或删除资源。
在这里插入图片描述

  1. 按需编码:服务器可以将资源在不同的表示形式(如JSON、XML等)之间进行转换,根据客户端需求返回不同的表现形式。客户端通过HTTP头部信息来指定期望的表示形式。

符合RESTful原则的架构方式就可以称为RESTful。

四、共识算法

共识算法常常被用于集群服务中的主从模式中。

什么是共识算法:让集群中的各个节点的数据保持一致性的一种策略。

Raft共识算法


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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AVX 贴片钽电容的频率特性分析

在介绍 AVX 钽电容的温度特性曲线前,我们必需对以下两个基本概念有所认识: 额定容量(CR) 这是额定 电容。对于钽OxICap?电容器的电容测量是在25 C 时等效串联电路使用测量电桥提供一个0.5V RMS120Hz 的正弦信号,谐波与2.2Vd.c. 电容公差 这是…

测试|性能测试相关理论

测试|性能测试相关理论(了解) 文章目录 测试|性能测试相关理论(了解)1.什么是性能测试生活中遇到的软件性能问题:性能测试定义:性能测试和功能测试有什么区别:性能好坏的评价指标影响一个软件性…

Stable Diffusion AI绘画学习指南【插件安装设置】

插件安装的方式 可用列表方式安装,点开Extensions 选项卡,找到如下图,找到Available选项卡,点load from加载可用插件,在可用插件列表中找到要装的插件按install 按扭按装,安装完后(Apply and restart UI)应…

第5章 最佳实践

过去的错误 不要怪罪JavaScript 游览器遇到不合法的html会想尽办法将他展现出来游览器遇到不合法的js将拒绝执行它们并报错写js要保障自己代码的健壮性 质疑一切 写js功能前一定要考虑这个功能的合理性,避免造成不可预见的后果写js功能前一定要考虑用户的游览器…

2023牛客暑期多校训练营5-B Circle of Mistery

2023牛客暑期多校训练营5-B Circle of Mistery https://ac.nowcoder.com/acm/contest/57359/B 文章目录 2023牛客暑期多校训练营5-B Circle of Mistery题意解题思路代码 题意 解题思路 感性地想一下,若已有一个环,则再出现其他环就显得多余&#xff0…

spring中怎么通过静态工厂和动态工厂获取对象以及怎么通过 FactoryBean 获取对象

😀前言 本章是spring基于XML 配置bean系类中第4篇讲解spring中怎么通过静态工厂和动态工厂获取对象以及怎么通过 FactoryBean 获取对象 🏠个人主页:尘觉主页 🧑个人简介:大家好,我是尘觉,希望…

【IMX6ULL驱动开发学习】21.Linux驱动之PWM子系统(以SG90舵机为例)

1.设备树部分 首先在 imx6ull.dtsi 文件中已经帮我们定义好了一些pwm的设备树节点&#xff0c;这里以pwm2为例 pwm2: pwm02084000 {compatible "fsl,imx6ul-pwm", "fsl,imx27-pwm";reg <0x02084000 0x4000>;interrupts <GIC_SPI 84 IRQ_TYP…

2023年第四届“华数杯”数学建模思路 - 案例:FPTree-频繁模式树算法

## 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 算法介绍 FP-Tree算法全称是FrequentPattern Tree算法&#xff0c;就是频繁模式树算法&#xff0c;他与Apriori算法一样也是用来挖掘频繁项集的&#xff0c…

Databend 开源周报第 104 期

Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。 从 Kafka 载入数…

内存“银行”

项目介绍 本项目实现的是一个内存银行&#xff0c;它的原型是Google的一个开源项目tcmalloc&#xff0c;tcmalloc全称Thread-Caching Malloc&#xff0c;即线程缓存的malloc&#xff0c;实现了高效的多线程内存管理&#xff0c;用于替换系统的内存分配相关函数malloc和free。 有…

Linux第四章之权限理解

一、Linux用户的概念 Linux下有两种用户&#xff1a;超级用户&#xff08;root&#xff09;、普通用户。 超级用户&#xff1a;可以再linux系统下做任何事情&#xff0c;不受限制普通用户&#xff1a;在linux下做有限的事情。 超级用户的命令提示符是“#”&#xff0c;普通用户…

2023年第四届“华数杯”数学建模思路 - 案例:最短时间生产计划安排

文章目录 0 赛题思路1 模型描述2 实例2.1 问题描述2.2 数学模型2.2.1 模型流程2.2.2 符号约定2.2.3 求解模型 2.3 相关代码2.4 模型求解结果 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; 最短时间生产计划模型 该模型出现在好几个竞赛赛题上&#x…

【React】搭建React项目

最近自己在尝试搭建react项目&#xff0c;其实react项目搭建没有想象中的那么复杂&#xff0c;我们只需要使用一个命令把React架子搭建好&#xff0c;其他的依赖可以根据具体的需求去安装&#xff0c;比如AntDesignMobile的UI框架&#xff0c;执行npm install antd-mobile --sa…

什么是注意力机制?注意力机制的计算规则

我们观察事物时&#xff0c;之所以能够快速判断一种事物(当然允许判断是错误的)&#xff0c;是因为我们大脑能够很快把注意力放在事物最具有辨识度的部分从而作出判断&#xff0c;而并非是从头到尾的观察一遍事物后&#xff0c;才能有判断结果&#xff0c;正是基于这样的理论&a…

Stable Diffusion VAE:改善图像质量的原理、选型与使用指南

VAE Stable Diffusion&#xff08;稳定扩散&#xff09;是一种用于生成模型的算法&#xff0c;结合了变分自编码器&#xff08;Variational Autoencoder&#xff0c;VAE&#xff09;和扩散生成网络&#xff08;Diffusion Generative Network&#xff09;的思想。它通过对变分自…

【贪心+01背包】Tower

这是个很经典的问题 Tower - 洛谷 题意&#xff1a; 思路&#xff1a; 首先可以确定是个背包而且肯定要排序&#xff0c;但是根据什么排序不确定 因为交换相邻两个箱子只有对自身产生影响&#xff0c;所以可以贪心地考虑这两个箱子如何摆最优&#xff0c;而又因为本身上面的…

无人机编队路径规划算法的Matlab实现

室内多智能体协同控制是指在密闭空间内的各个无人机及无人车在运动时能够相互之间保持一定的相对距离&#xff0c;并在速度及位置上按照预设路线或命令进行运动的过程。本平台的多智能体协同定位采用光学运动捕捉技术&#xff0c;并通过WiFi网络实现多机、多车间的通信&#xf…

13-1_Qt 5.9 C++开发指南_多线程及QThread 创建多线程程序_ThreadSignal

一个应用程序一般只有一个线程&#xff0c;一个线程内的操作是顺序执行的&#xff0c;如果有某个比较消耗时间的计算或操作&#xff0c;比如网络通信中的文件传输&#xff0c;在一个线程内操作时&#xff0c;用户界面就可能会冻结而不能及时响应。这种情况下&#xff0c;可以创…

2023年第四届“华数杯”数学建模思路 - 案例:感知机原理剖析及实现

# 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 一、感知机的直观理解 感知机应该属于机器学习算法中最简单的一种算法&#xff0c;其原理可以看下图&#xff1a; 比如说我们有一个坐标轴&#xff08;图中的…

火车头伪原创插件怎么用【php源码】

这篇文章主要介绍了儿童学python编程哪个学校好&#xff0c;具有一定借鉴价值&#xff0c;需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获&#xff0c;下面让小编带着大家一起了解一下。 1、python几岁学比较好 python建议8岁到10岁以上的孩子学习&#xff0c;详细介…