当前位置: 首页 > news >正文

gulimall-002 分布式基础概念

1、微服务概念

微服务是一种非常流行的架构风格。

拒绝大型单体应用,基于业务边界进行服务微化拆分,各个服务独立部署运行。

  • 每个服务运行在自己的单个进程
  • 使用轻量级机制通信
  • 可以使用不同的编程语言编写以及不同的数据存储技术

2、集群&分布式&节点

2.1 集群概念

集群是个物理形态,只要是一堆机器就可以叫集群。它们是不是一起协作干活,还是各自干各自的,这个谁也不知道。

2.2 分布式概念

分布式是个工作方式,分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像是单个相关系统,比如京东商城。

  • 分布式是指将不同的业务分布在不同的地方
  • 集群是指将几台服务器集中在一起,实现同一业务

通俗来说,可以将分布式和集群比作一群人在搬家的例子:

  • 集群:一群人在一起搬家,他们可以共同完成同一个任务。如果其中一个人出了问题,其他人可以继续完成这个任务,所以整个任务可以更快地完成。同样,如果需要搬到更大的房子,只需增加更多的人即可。这里每个人扮演的角色是相同的,即每个人都是负责搬家的工人。
  • 分布式:一群人分成几组,分别搬不同的东西,例如有一组负责家具,一组负责装饰品等。每个组都有自己的领导,并且他们必须同步完成各自的任务,以便整个搬家过程能够成功。同样,如果需要搬到更大的房子,可能需要增加更多的组,而不是增加更多的人。这里每个人扮演的角色是不同的,即每个人都有自己的职责和任务。

因此,集群通常用于处理同一任务的场景,例如 Web 服务器集群,而分布式则更适用于处理不同任务的场景,例如大规模的数据处理。

总之,尽管分布式和集群都可以提高系统的可靠性、扩展性和性能,但它们之间有一些细微的区别,需要根据具体的情况来选择最合适的技术。

总结:

节点:集群中的一个服务器

  • 分布式中的每一个节点都可以做集群
  • 而集群不一定就是分布式的

3、远程调用

在分布式系统中,各个服务可能分布在不同的主机,但是服务之间不可避免地要需要互相调用,我们称为远程调用。

比如 订单模块 去 商品模块 查询商品信息。

4、负载均衡 

分布式系统中,A服务需要调用B服务(如订单模块调用商品模块),B服务在多台机器中都存在,A服务调用任意一台B服务都可以完成功能。

  • 负载均衡的思想:不让某个机器太忙,也不要让某个机器太闲。
  • 负载均衡的好处:提高系统的健壮性和性能。

常用的负载均衡算法:

  • 轮询
    • 按顺序往后依次选择,直到选择最后一个,依次循环。
  • 最小连接
    • 优先选择连接数最小的机器,也就是压力最小的后端服务器(在会话较长的情况下,优先考虑这种情况)

5、服务注册/发现&注册中心 

A服务调用B服务,A服务并不知道B服务在哪几台机器上面,哪些是正常的,哪些服务已经下线,解决这些问题可以引入服务注册。避免调用不可用的服务。

6、配置中心

每个服务最终都有大量的配置,并且每个服务都可能部署在多个机器上面,我们经常需要变更某个服务的配置,设想一下假如我们有几百台服务器,难道要进入每一台进行改动配置并重新部署吗?显然不合理。所以就有了配置中心的存在了。

配置中心用于集中管理微服务的配置信息,一处配置,改动都会改。

7、服务熔断&服务降级 

在微服务架构中,微服务之间通过网络进行通信,存在相互依赖,当1台服务器不可用,有可能造成雪崩效应,要避免这种情况,必须要有容错机制保护服务。

  •  服务熔断

设置服务超时,当调用的服务达到某个阀值,我们可以开启断路保护机制,后来的服务不再调用这个服务,而是本地直接返回默认的数据。

  • 服务降级

当系统处于资源紧张时期,我们可以让非核心业务降级运行,降级:某些服务不处理,或则简单处理(返回异常,返回null,调用Mock数据)

8、API网关

APIGateway可以理解成生活中的安检系统。

在微服务架构中,API Gateway作为整体架构的重要组件,它抽象了微服务中都需要的公共功能,同时提供了:

  • 客户端的负载均衡
  • 服务自动熔断
  • 灰度发布
  • 统一认证
  • 限流流控
  • 日志统计

等功能。帮我们解决了很多API管理难题。

相关文章:

gulimall-002 分布式基础概念

1、微服务概念 微服务是一种非常流行的架构风格。 拒绝大型单体应用,基于业务边界进行服务微化拆分,各个服务独立部署运行。 每个服务运行在自己的单个进程使用轻量级机制通信可以使用不同的编程语言编写以及不同的数据存储技术 2、集群&分布式&…...

K8s之声明式APIs

大家好,我是升仔 引言 Kubernetes(K8s)是一个开源的容器编排系统,用于自动化部署、扩展和管理容器化应用。在K8s中,声明式APIs(Application Programming Interfaces)是一种核心概念&#xff0…...

Hive执行计划

Hive提供了explain命令来展示一个查询的执行计划,这个执行计划对于我们了解底层原理,Hive 调优,排查数据倾斜等很有帮助。 使用语法如下: explain query;在 hive cli 中输入以下命令(hive 2.3.7): explain select s…...

Leetcode—62.不同路径【中等】

2023每日刷题&#xff08;七十二&#xff09; Leetcode—62.不同路径 超时dfs代码 class Solution { public:int uniquePaths(int m, int n) {int starti 1, startj 1;int ans 0;function<void(int, int)> dfs [&](int i, int j) {if(i m && j n) {a…...

【汇编笔记】初识汇编-内存读写

汇编语言的由来&#xff1a; CPU是计算机的核心&#xff0c;由于计算机只认识二进制&#xff0c;所以CPU执行的指令是二进制。 我们要想让CPU工作&#xff0c;就得给他提供它认识的指令&#xff0c;这一系列的指令的集合&#xff0c;称之为指令集。 指令集&#xff1a; 不同的体…...

Shell脚本通过渗透测试检测服务器安全!

以下是一个简单的 Shell 脚本通过渗透测试来发现服务器漏洞的例子&#xff1a; #!/bin/bash # 设置变量 server_url"http://example.com" server_port"80" script_path"/path/to/script.脚本" # 创建并打开 Web 服务器 web_server$(curl -s $se…...

数据结构--查找

目录 1. 查找的基本概念 2. 线性表的查找 3. 树表的查找 3.1 二叉排序树 3.1.1 定义: 3.1.2 存储结构&#xff1a; 3.1.3 二叉排序树的查找 3.1.4 二叉排序树的插入 3.1.5 二叉排序树删除 3.2 平衡二叉树&#xff08;AVL 3.2.1 为什么要有平衡二叉树 3.2.2 定义 3.3 B-树 3.3.1…...

IntelliJ IDEA Apache Dubbo,IDEA 官方插件正式发布!

作者&#xff1a;刘军 最受欢迎的 Java 集成开发环境 IntelliJ IDEA 与开源微服务框架 Apache Dubbo 社区强强合作&#xff0c;给广大微服务开发者带来了福音。与 IntelliJ IDEA 2023.2 版本一起&#xff0c;Jetbrains 官方发布了一款全新插件 - Apache Dubbo in Spring Frame…...

使用Visual Studio 2022 winform项目打包成安装程序.exe

winform项目打包 1.安装扩展插件 Microsoft Visual Studio Installer Projects 20222.在解决方案上新建一个setup project 项目3.新建成功如下图&#xff0c;之后添加你的winform程序生成之后的debug下的文件4.在Application Folder上点击右键->Add->项目输出->主输出…...

报错-idea pom.xml 有一条灰色横线

1. 背景 打开 idea 更新代码&#xff0c;发现有个 module 的 pom.xml 有一条灰色横线&#xff0c;导致这个 module 没有加载成功。 2. 原因 1&#xff09; 可能本地 Remove 了这个 module 2&#xff09;本地删除了这个 module &#xff0c;又从远端拉取了回来 3&#xff09…...

openmediavault(OMV) (19)云相册(3)mt-photos

简介 MT Photos是一款为Nas用户量身打造的照片管理系统。通过AI技术,自动将您的照片整理、分类,包括但不限于时间、地点、人物、照片类型。可以在任何支持Docker的系统中运行它。详情可查看mtmt.tech官网,mt-photos是付费订阅使用的,也可以一次性付费永久使用,具体使用mt…...

基于openGauss5.0.0全密态数据库等值查询小案例

基于openGauss5.0.0全密态数据库等值查询小案例 一、全密态数据库简介二、环境说明三、测试步骤四、使用约束 一、全密态数据库简介 价值体现&#xff1a; 密态数据库意在解决数据全生命周期的隐私保护问题&#xff0c;使得系统无论在何种业务场景和环境下&#xff0c;数据在传…...

Oracle中varchar2和nvarchar2的区别

Oracle中的varchar2和nvarchar2都是可变长度的字符数据类型&#xff0c;这意味着它们能够根据实际存储的数据长度来动态调整占用的空间。但它们之间有以下主要区别&#xff1a; 1. 字符编码和存储&#xff1a; - VARCHAR2&#xff1a;存储的是字节字符串&#xff0c;对字符…...

linux环境下从一个服务器复制文件到另一个服务器

在Linux中使用scp命令可以将文件或目录从一台服务器复制到另外一台服务器。 # 从源服务器复制文件到目标服务器 scp /path/to/source_file usernamedestination:/path/to/destination_directory # 从源服务器复制目录及其内容到目标服务器 scp -r /path/to/source_directory us…...

JSoup 爬虫遇到的 404 错误解决方案

在网络爬虫开发中&#xff0c;使用JSoup进行数据抓取是一种常见的方式。然而&#xff0c;当我们尝试使用JSoup来爬虫抓取腾讯新闻网站时&#xff0c;可能会遇到404错误。这种情况可能是由于网站的反面爬虫机制检测到了我们的爬虫行为&#xff0c;从而拒绝了我们的请求。 假设我…...

Vue.set 方法原理

function set(target, key, value) {// 判断是否是数组&#xff0c;并且 key 是一个有效的索引值if (Array.isArray(target) && isValidArrayIndex(key)) {target.length Math.max(target.length, key)target.splice(key, 1, value)return value}// 判断 key 是否已经…...

CentOS 7的新特性

CentOS 7在发布时相较于CentOS 6引入了许多重要的变化和优化。以下是一些主要的改进和新特性&#xff1a; 系统初始化程序&#xff1a;CentOS 7使用了systemd作为其初始化系统&#xff0c;取代了之前版本的init系统。systemd提供了更快的启动时间和更好的管理服务。 内核更新&…...

Vue 模板编译原理

Vue 模板编译原理是指将 Vue 的模板转换为渲染函数的过程。在 Vue 中&#xff0c;模板被定义为 HTML 代码片段或者在 .vue 单文件组件中定义。当 Vue 实例化时&#xff0c;会将模板编译为渲染函数&#xff0c;该函数可以根据组件的状态生成虚拟 DOM 并更新视图。 Vue 的模板编…...

ElementUI的Table组件行合并上手指南

ElementUI的Table组件行合并 &#xff0c;示例用官网vue3版的文档 <el-table :data"tableData" :span-method"objectSpanMethod" border style"width: 100%; margin-top: 20px"><el-table-column prop"id" label"ID&qu…...

【ES6】Class继承-super关键字

目录 一、前言二、ES6与ES5继承机制区别三、super作为函数1、构造函数this1&#xff09;、首先要明确this指向①、普通函数②、箭头函数③、注意事项 2&#xff09;、其次要明确new操作符做了哪些事情 2、super()的用法及注意点1&#xff09;、用法2&#xff09;、注意点 四、s…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性&#xff0c;不同版本的Docker对内核版本有不同要求。例如&#xff0c;Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本&#xff0c;Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅&#xff08;Pub/Sub&#xff09;模式与专业的 MQ&#xff08;Message Queue&#xff09;如 Kafka、RabbitMQ 进行比较&#xff0c;核心的权衡点在于&#xff1a;简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

恶补电源:1.电桥

一、元器件的选择 搜索并选择电桥&#xff0c;再multisim中选择FWB&#xff0c;就有各种型号的电桥: 电桥是用来干嘛的呢&#xff1f; 它是一个由四个二极管搭成的“桥梁”形状的电路&#xff0c;用来把交流电&#xff08;AC&#xff09;变成直流电&#xff08;DC&#xff09;。…...

基于单片机的宠物屋智能系统设计与实现(论文+源码)

本设计基于单片机的宠物屋智能系统核心是实现对宠物生活环境及状态的智能管理。系统以单片机为中枢&#xff0c;连接红外测温传感器&#xff0c;可实时精准捕捉宠物体温变化&#xff0c;以便及时发现健康异常&#xff1b;水位检测传感器时刻监测饮用水余量&#xff0c;防止宠物…...

电脑桌面太单调,用Python写一个桌面小宠物应用。

下面是一个使用Python创建的简单桌面小宠物应用。这个小宠物会在桌面上游荡&#xff0c;可以响应鼠标点击&#xff0c;并且有简单的动画效果。 import tkinter as tk import random import time from PIL import Image, ImageTk import os import sysclass DesktopPet:def __i…...