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

系列文章目录


微服务基本知识

  • 系列文章目录
  • 前言
  • 一、系统架构的演变
    • 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共识算法


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

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

相关文章

《向量数据库指南》——怎么做VectorDBBench能发展成为ClickBench一样的行业标准?

目录 设计目标 真实负载模拟 广泛采用 持续更新和维护 社区支持和参与 VectorDBBench要像ClickBench一样成为行业标准,需要从多个方面进行改进和完善。以下是一些可行的方法: 设计目标 VectorDBBench应该具有灵活、可扩展的模块化架构,支持多种向量数据库系统,以及自定…

【Jmeter】 Report Dashboard 生成html图形测试报告

目录 背景 生成图形报告的方式 1、直接使用一个已存在的 CSV文件生成 2、负载测试完成后自动生成 使用示例 报告内容详情 测试报告摘要图 响应时间随时间变化曲线 活跃线程随时间变化曲线 I/O(Bytes)随时间变化曲线(忽略事务控制器示例结果) …

将程序打包成单一一个可执行文件

最近做了一个界面交互渲染的小项目,项目主要的功能是通过TCP接收数据然后在界面中渲染出对应的状态。由于用户的最大需求是炫酷,于是为了方便实现特殊的交互逻辑,我选择用freeglut自行实现了界面的交互和渲染,又用OpenCV做了部分图…

[openCV]基于拟合中线的智能车巡线方案V1

import cv2 as cv import os import numpy as np# 遍历文件夹函数 def getFileList(dir, Filelist, extNone):"""获取文件夹及其子文件夹中文件列表输入 dir:文件夹根目录输入 ext: 扩展名返回: 文件路径列表"""newDir d…

hcip的mgre和ospf实验

题目 拓扑图 一、配置环回和IP地址 R1 < Huawei>sy Enter system view, return user view with CtrlZ. [Huawei]sysname r1 [r1]int g0/0/1 [r1-GigabitEthernet0/0/1]ip add 64.1.1.1 24 Aug 4 2023 18:56:07-08:00 r1 %%01IFNET/4/LINK_STATE(l)[0]:The line protocol…

DNS部署与安全详解(上)

文章目录 一、DNS二、域名组成1. 域名组成概述2. 域名组成 三、监听端口四、DNS解析种类1. 按照查询方式分类&#xff1a;2. 按照查询内容分类&#xff1a; 五、DNS服务器搭建过程1. 先确保服务器的IP地址是固定的2. 安装DNS软件 一、DNS DNS全称Domain Name Service&#xff0…

人工智能安全-3-噪声数据处理

0 提纲 噪声相关概述噪声处理的理论与方法基于数据清洗的噪声过滤主动式过滤噪声鲁棒模型1 噪声相关概述 噪声类型: 属性噪声:样本中某个属性的值存在噪声标签噪声:样本归属类别关于噪声分布的假设:均匀分布、高斯分布、泊松分布等。 标签噪声的产生原因: (1)特定类别…

【GEMM预备工作】行主序和列主序矩阵的内存中的连续性,解决理解问题

在内存存储中&#xff0c;默认矩阵是按照行优先储存的&#xff0c;即矩阵的每一列在内存中是连续的。行优先矩阵储存中行数据是不连续的。 而对于列主序的矩阵&#xff0c;是按照列优先储存的&#xff0c;即矩阵的每一行在内存中是连续的。列优先矩阵储存中列数据是不连续的&am…

ReentrantLock锁并发环境线程安全读写ArrayList,Kotlin

ReentrantLock锁并发环境线程安全读写ArrayList&#xff0c;Kotlin import kotlinx.coroutines.* import java.util.concurrent.locks.ReentrantLock import kotlin.collections.ArrayList/*** 假设这样一种场景&#xff1a;在多线程的并发环境中&#xff0c;不同的线程/协程对…

python在函数中更改外部变量值

目录 前言 列表、字典&#xff08;可变对象&#xff09; 元组&#xff08;不可变对象&#xff09; 全局变量 前言 今天在写LeetCode题时&#xff0c;发现一个问题我并没有掌握&#xff0c;那就是如何在Python的函数中更改变量值&#xff08;包括列表&#xff0c;字典&…

使用自适应去噪在线顺序极限学习机预测飞机发动机剩余使用寿命(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

如何在终端设置代理(设置jupyter notebook同理)

设置代理 在终端(我用的gitbash)下执行 set HTTP_PROXYhttp://<user>:<password><proxy server>:<proxy port> set HTTPS_PROXYhttp://<user>:<password><proxy server>:<proxy port>其中&#xff1a; user、password&#…

环球数科、BUFFALO面试(部分)

环球数科 系统复杂且需求迭代频繁&#xff0c;如何维护微服务之间的接口调用关系&#xff1f; API接口在设计的时候需要大量的需求文档&#xff0c;而且文档也需要不断维护。如何高效维护API文档就很重要了。以下是一些常见的API管理工具&#xff1a;Swagger&#xff1a;Swag…

python机器学习(七)决策树(下) 特征工程、字典特征、文本特征、决策树算法API、可视化、解决回归问题

决策树算法 特征工程-特征提取 特征提取就是将任意数据转换为可用于机器学习的数字特征。计算机无法直接识别字符串&#xff0c;将字符串转换为机器可以读懂的数字特征&#xff0c;才能让计算机理解该字符串(特征)表达的意义。 主要分为&#xff1a;字典特征提取(特征离散化)…

zabbix监控mysql容器主从同步状态并告警钉钉/企业微信

前言&#xff1a;被监控的主机已经安装和配置mysql主从同步&#xff0c;和zabbix-agent插件。 mysql创建主从同步&#xff1a;http://t.csdn.cn/P4MYq centos安装zabbix-agent2&#xff1a;http://t.csdn.cn/fx74i mysql主从同步&#xff0c;主要监控这2个参数指标&#xf…

JavaScript 中的隐式类型转换

一、什么情况会发生隐式类型转换&#xff1f; 1、加号&#xff08;&#xff09; 号比较特殊&#xff0c;既可以当做算数运算符做加法&#xff0c;又可以当做字符串连接符 ① 算数运算符 除了 string 类型以外的原始数据类型进行加法运算时&#xff0c;非数字类型会转换为数字…

unity制作FPS射击游戏

文章目录 介绍鼠标移动控制视角行走、奔跑、跳跃、下蹲射击、后坐力、射速、瞄准、弹痕、枪火、抛壳手臂摇摆手枪切枪效果动画状态机玩家血量新地图场景颜色渐变激光墙获取钥匙滑动门NPC属性攻击逻辑终点传送门 介绍 角色动作方面包括行走、奔跑、跳跃、武器切换、弹夹更换、武…

科技引领,教育革新|EasyV助力数字孪生智慧教育建设!

数字孪生校园是以物联网、大数据、云计算、人工智能、三维可视化等新型数字化技术为基础&#xff0c;构建的数智校园的“大脑”。对校园的人、车、资产设施、各业务系统进行全联接&#xff0c;实现数据全融合、状态全可视、业务全可管、事件全可控&#xff0c;使校园更安全、更…

elasticSearch常见的面试题

常见的面试问题 描述使用场景 es集群架构3个节点&#xff0c;根据不同的服务创建不同的索引&#xff0c;根据日期和环境&#xff0c;平均每天递增60*2&#xff0c;大约60Gb的数据。 调优技巧 原文参考&#xff1a;干货 | BAT等一线大厂 Elasticsearch面试题解读 - 掘金 设计阶…

【《快速构建AI应用——AWS无服务器AI应用实战》——基于云的解决方案快速完成人工智能项目的指南】

基于云的人工智能服务可以自动完成客户服务、数据分析和财务报告等领域的各种劳动密集型任务。其秘诀在于运用预先构建的工具&#xff0c;例如用于图像分析的Amazon Rekognition或用于自然语言处理的AWS Comprehend。这样&#xff0c;就无须创建昂贵的定制软件系统。 《快速构…