微服务之分布式理论概述

一、分布式技术相关的理论

CAP理论

CAP定理(CAP theorem),⼜被称作布鲁尔定理(Eric Brewer),1998年第⼀次提出. 
最初提出是指分布式数据存储不可能同时提供以下三种保证中的两种以上: 

(1) ⼀致性(Consistency): 每次读取收到的信息都是最新的; 
(2) 可⽤性(Availability): 每个请求都会收到(⾮错误)响应; 
(3) 分区容错性(Partition tolerance): 尽管节点之间的⽹络不通导致分区,系统仍继续运⾏.

事实上,不仅仅是分布式数据存储应⽤,所有分布式系统都必须在CAP这三点之间进⾏权衡. 

  分区容错性

在分布式系统中,分区容错性是指系统能够继续正常工作,即使网络分区(即网络中的一部分节点无法与其他节点通信)发生。分布式系统通常使用复制和容错技术来实现分区容错性。例如,在分布式数据库系统中,数据可以复制到多个节点上,当一个节点无法与其他节点通信时,系统仍然可以使用其他节点上的数据进行操作。

BAS理论

数据⼀致性模型

如果数据的读取、写⼊、更新的结果是可预测的,称之为遵循数据⼀致性模型.

(1) 严格⼀致性(Strict Consistency)(强) 
不论在哪个节点,看到的资源都是统⼀的结果; 
(2) 顺序⼀致性(Sequential Consistency)(弱) 
节点的数据变动和操作的顺序保持⼀致; 
(3) 最终⼀致性(Eventual Consistency)(弱) 
所有数据副本最终都会变得⼀致.

 ⼀致性算法

  • Paxos : Zookeeper 
  • Raft : ETCD

BASE理论

BASE是Basically Available(基本可⽤)、 Soft state(软状态)和Eventual Consistency(最终⼀致性)三个短语的缩写. 

(1) 基本可⽤: 可能是部分功能不可⽤或者是响应时间延⻓; 
(2) 软状态: 不同系统/节点之间,数据存在过渡状态; 
(3) 最终⼀致: 经过系统内部协调机制,最终所有的节点保持⼀致(分布式系统中的⼀致并不⼀定指数据保持⼀样).

两条系统设计的原则

墨菲定律

墨菲定律(Murphy's law)是⼀种⼼理学效应,由爱德华·墨菲(Edward A. Murphy)提出,亦称墨菲法则. 


墨菲定律: 如果有两种或两种以上的⽅式去做某件事情,⽽其中⼀种选择⽅式将导致灾难,则必定有⼈会做出这种选择. 


本质: 如果事情有变坏的可能,不管这种可能性有多⼩,它总会发⽣.

康威定律

“设计系统的架构受制于⽣产这些设计的组织的沟通结构

二、zookeeper

2.1概述

安装

import sys
from kazoo.client import KazooClient, KazooStatedef main():zk = KazooClient(hosts='118.25.185.49:3306',timeout=100)zk.start()data, stat = zk.get("/")print(data)print(stat)chilen = zk.get_children("/")print(chilen)zk.stop()zk.close()if __name__ == "__main__":main()

2.2应用案例

zookeeper的同类产品

  • Consul
  • ETCD
  • Doozer

 

ZooKeeper -server host:port cmd args# 连接到指定主机和端口的 ZooKeeper 服务器,并执行指定的命令和参数。stat path [watch]# 获取指定路径节点的状态,可以设置监视器以接收更改通知。set path data [version]# 将指定路径节点的数据设置为给定数据,可选进行版本检查。ls path [watch]# 列出指定路径节点的子节点,可以设置监视器以接收更改通知。delquota [-n|-b] path# 删除指定路径的配额,可以是命名空间(-n)或字节(-b)。ls2 path [watch]# 列出指定路径节点的子节点,可以设置监视器以接收更改通知。setAcl path acl# 为指定路径节点设置 ACL(访问控制列表)。setquota -n|-b val path# 为指定路径设置配额,可以是命名空间(-n)或字节(-b),并指定值。history# 显示命令历史记录。redo cmdno# 重做指定的命令编号。printwatches on|off# 打印监视器状态,可以开启或关闭。delete path [version]# 删除指定路径的节点,可以指定版本。sync path# 同步指定路径。listquota path# 列出指定路径的配额信息。rmr path# 递归删除指定路径。get path [watch]# 获取指定路径节点的数据,可以设置监视器。create [-s] [-e] path data acl# 创建具有指定数据和 ACL 的节点,可以选择顺序(-s)或临时(-e)。addauth scheme auth# 添加指定方案和凭证的认证信息。quit# 退出 ZooKeeper 客户端。getAcl path# 获取指定路径节点的 ACL。close# 关闭 ZooKeeper 客户端连接。connect host:port# 连接到指定主机和端口的 ZooKeeper 服务器。

2.3Zookeeper核⼼概念

  • Session会话
  • 数据模型
  • Watch

Session会话

  • ⼀个客户端连接⼀个会话,由Zookeeper分配唯⼀的会话ID; 
  • 客户端以特定的时间间隔发送⼼跳以保持会话有效,tickTime; 
  • 超过会话超时时间未收到客户端的⼼跳,则判定客户端“死”了,默认是两倍的tickTime; 
  • 会话中的请求按FIFO顺序执⾏.

数据模型

Znode命名规范 

Znode节点类型

顺序节点

Znode数据构成

Znode 元数据stat结构

ACL: 访问控制列表
create [-s] [-e] path data acl 
setAcl path acl 
getAcl path

Zookeeper中的时间

Watch监听机制

Watch重要特性

⼀次性触发

  • Watch触发后即被删除,要持续监控变化,则需要持续设置watch.

有序性

  • 客户端先得到watch通知,之后才会看到变化结果.
Watch注意事项
  • Watch是⼀次性触发器,如果你获得⼀个watch事件,并且希望得到关于未来更改的通知,则必须设置另⼀个watch;
  • 因为watch是⼀次性触发器,并且在获取事件和发送获取watch的新情求之间存在延迟,所以不能可靠地得到节点发⽣的每个更改;
  • ⼀个watch对象只会被特定的通知触发⼀次。如果⼀个watch对象同时注册了exists、getData,当节点被删除时,删除事件对exists、getData都有效,但只会调⽤watch⼀次.

Zookeeper特性

2.4Zookeeper集群

组⽹⽅式

三台虚拟机
192.168.31.241 
192.168.31.242 
192.168.31.243
通过映射到主机端
2181/2888/3888
容器⽹络⽅案: OpenVSwitch

docker run -d --rm -p 2181:2181 -p 2888:2888 -p 3888:3888 -e ZOO_MY_ID=1 -e ZOO_SERVERS="server.1=0.0.0.0:2888:3888 server.2=192.168.31.242:2888:3888 server.3=192.168.31.243:2888:3888" zookeeper:3.4.11
docker run -d --rm -p 2181:2181 -p 2888:2888 -p 3888:3888 -e ZOO_MY_ID=2 -e 
ZOO_SERVERS="server.1=192.168.31.241:2888:3888 server.2=0.0.0.0:2888:3888 server.3=192.168.31.243:2888:3888" 
zookeeper:3.4.11
docker run -d --rm -p 2181:2181 -p 2888:2888 -p 3888:3888 -e ZOO_MY_ID=3 -e 
ZOO_SERVERS="server.1=192.168.31.241:2888:3888 server.2=192.168.31.242:2888:3888 server.3=0.0.0.0:2888:3888" zookeeper:3.4.11 

三、RPC原理

3.1概述

Remote procedure call - RPC 
远程过程调⽤

过程是什么? 
过程就是业务处理、计算任务,更直⽩理解,就
是程序; 
像调⽤本地⽅法⼀样调⽤远程的过程.

熟悉的Webserveice、restful接⼜调⽤时都是RPC,仅消息的组织⽅式以及消息协议不同.

远程过程调⽤较本地调⽤有何不同? 

  • 速度相对慢; 
  • 可靠性减弱.

3.2RPC流程

3.3RPC协议

3.3RPC框架

封装好参数编组、消息解组、底层⽹络通信的RPC程序开发框架,带来的便捷是可以直接在其
基础上只专注过程代码编写

为什么要⽤RPC
  • 服务化;
  • 可重⽤;
  • 系统间交互调⽤.

3.4 RPC核⼼概念术语

3.5基于RPC的分布式服务注册与服务发现架构

流程图

步骤

1. 创建Zookeeper集群
2. 制作Kazoo镜像
3. 实现服务注册代码
4. 实现服务发现代码

创建Zookeeper集群

. 制作Kazoo镜像

实现服务注册

实现服务发现代码

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

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

相关文章

玩转手机在AidLux上安装宝塔面板

AidLux,手机不用刷机、不用root,直接在手机应用市场就能下载使用。 1.4G的应用包,看起来挺大的,那是因为内嵌了一套完整的AIoT应用开发和部署平台。 不仅Android手机可以玩,华为的Harmony系统也可以使用。 使用它最主…

【声网】实现web端与uniapp微信小程序端音视频互动

实现web端与uniapp微信小程序端音视频互动 利用声网实现音视频互动 开通声网服务 注册声网账号 进入Console 成功登录控制台后,按照以下步骤创建一个声网项目: 展开控制台左上角下拉框,点击创建项目按钮。 在弹出的对话框内,依…

python版的openCV使用及下载

一、下载OpenCV模块 截止目前:现在OpenCV使用环境还是python3.8的版本所以咱们下载时记得用3.8版本的 终端下载:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python 这是国内的镜像下载能快一些; 下载成功的标志&am…

Linux简单命令

目录 显示目录下的内容 ls 切换工作目录 cd 查看-当前工作目录pwd 创建-文件夹 mkdir 创建-文件 touch 查看-文件内容 cat 查看-分屏查看文件内容 more 删除-文件、文件夹 rm 复制-文件、文件夹 cp 移动-文件、文件夹 mv 查找-命令的程序文件存放处 which 查找-按文…

Linux平台Unity下RTMP|RTSP低延迟播放器技术实现

技术背景 国产操作系统对于确保信息安全、促进技术创新、满足特定需求以及推动经济发展等方面都具有重要意义,多以Linux为基础二次开发。2014年4月8日起,美国微软公司停止了对Windows XP SP3操作系统提供支持,这引起了社会和广大用户的广泛关…

SCI一区级 | Matlab实现BES-CNN-GRU-Mutilhead-Attention多变量时间序列预测

SCI一区级 | Matlab实现BES-CNN-GRU-Mutilhead-Attention秃鹰算法优化卷积门控循环单元融合多头注意力机制多变量时间序列预测 目录 SCI一区级 | Matlab实现BES-CNN-GRU-Mutilhead-Attention秃鹰算法优化卷积门控循环单元融合多头注意力机制多变量时间序列预测预测效果基本介绍…

Unreal Engine创建Plugin

打开UE工程,点击编辑,选择插件 点击“新插件”按钮,选择“空白选项”填入插件名字"MultiPlayerPlugin",填入插件作者、描述,点击“创建插件”按钮打开C工程,即可看到插件目录,编译C工…

Linux网络编程---多进/线程并发服务器

一、多进程并发服务器 实现一个服务器可以连接多个客户端,每当accept函数等待到客户端进行连接时 就创建一个子进程 思路分析: 核心思路:让accept循环阻塞等待客户端,每当有客户端连接时就fork子进程,让子进程去和客户…

2分钟自己写小游戏:使用js和css编写石头剪刀布小游戏、扫雷小游戏、五子棋小游戏。新手老手毕业论文都能用。

系列文章目录 【复制就能用1】2分钟玩转轮播图,unslider的详细用法 【复制就能用2】css实现转动的大风车,效果很不错。 【复制就能用3】2分钟自己写小游戏:剪刀石头布小游戏、扫雷游戏、五子棋小游戏 【复制就能用4】2024最新智慧医疗智慧医院大数据…

MySQL:ACCESS DENIED FOR USER‘ROOT‘@‘IP地址

起因是使用若依的环境连接数据库时报错:远程数据库连接异常,最终原因是密码错误,且看分解 07:12:06.895 [main] INFO c.r.RuoYiApplication - [logStartupProfileInfo,686] - The following 1 profile is active: "druid" 07:12:…

阿里巴巴瓴羊基于 Flink 实时计算的优化和实践

摘要:本⽂整理⾃阿里云智能集团技术专家王柳焮⽼师在 Flink Forward Asia 2023 中平台建设专场的分享。内容主要为以下四部分: 阿里巴巴瓴羊基于 Flink 实时计算的平台演进Flink 能力优化与建设基于 Flink 的最佳实践未来规划 1. 阿里巴巴瓴羊基于 Flink…

等保测评有那些流程?为什么要做等保

根据《网络安全法》规定,网络运营者应当按照国家的网络安全技术标准和要求,采取技术措施保障网络安全,避免网络安全事件的发生。而等保测评是国家对企事业单位进行信息系统安全等级评定的一项重要制度,通过等级测评,可…

macOS 一些系统图标的存放位置 icns

macOS 一些系统图标的存放位置 icns macOS 中有很多好看的图标,有时候就想用一下它,我来告诉你他们的具体位置。 系统图标位置,像各种通用文件类型的图标都在这里面,里面好多高清的系统图标 /System/Library/CoreServices/Core…

Android Studio的button点击事件

xml添加onClick调用方法 public class MainActivity extends AppCompatActivity {// 创建系统时间的文本控件TextView systemTimeTextView;Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activit…

精酿啤酒:酿造工艺的自动化与智能化发展

随着科技的不断进步,自动化与智能化已成为啤酒酿造工艺的重要发展方向。Fendi Club啤酒紧跟时代潮流,积极推动酿造工艺的自动化与智能化发展,旨在提高生产效率、确保产品品质和满足市场需求。 Fendi Club啤酒引入自动化生产设备。他们采用自动…

外观模式【结构型模式C++】

1.概述 外观模式是一种结构型设计模式, 能为程序库、 框架或其他复杂类提供一个简单的接口。 2.结构   外观角色(Facade):为多个子系统对外提供一个共同的接口,知道哪些子系统负责处理请求,将客户端的请…

Qt下使用OpenCV截取图像并在QtableWidget表格上显示

文章目录 前言一、在QLabel上显示图片并绘制矩形框二、保存矩形框数据为CSV文件三、保存截取图像四、将截取图像填充到表格五、图形视图框架显示图像六、示例完整代码总结 前言 本文主要讲述了在Qt下使用OpenCV截取绘制的矩形框图像,并将矩形框数据保存为CSV文件&a…

235 基于matlab的时频盲源分离(TFBSS)算法

基于matlab的时频盲源分离(TFBSS)算法,TFBSS用空间频率分布来分离非平稳信号,可以分离具有不同时频分布的源信号,也能够分离具有相同谱密度但时频分布不同的高斯源。同时,该算法在时频域上局域化源信号能量…

vue 3 —— 笔记(模板语法,响应式变量)

模板语法: Vue 使用一种基于 html 的模板语法,使我们能声明式将其组件实例绑定到呈现的 dom 上 文本插值 基础数据绑定形式 双大括号 会替换相应组件实例 msg 属性的值 原始html 双大括号会将数据解释为纯文本 不是html 想插入html 使用 v-html 指令 &…

【SpringCloud】CircuitBreaker断路器之Resilience4J快速入门

【SpringCloud】CircuitBreaker断路器之Resilience4J快速入门 文章目录 【SpringCloud】CircuitBreaker断路器之Resilience4J快速入门1. 概述2. 服务熔断服务降级(CircuitBreaker)2.1 案例说明2.1.1 基于计数的滑动窗口2.1.2 测试2.2.1 基于时间的滑动窗口2.2.2 测试 3. 隔离(B…