微服务之分布式理论概述

news2025/1/1 23:52:24

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

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, KazooState

def 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.coloradmin.cn/o/1627441.html

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

相关文章

7天入门Android开发之第1天——初识Android

一、Android系统 1.Linux内核层: 这是安卓系统的底层,它提供了基本的系统功能,如内存管理、进程管理、驱动程序模型等。安卓系统构建在Linux内核之上,借助于Linux的稳定性和安全性。 2.系统运行库层: 这一层包括了安卓…

Python用于高级异常检测和聚类的工具库之BanditPAM使用详解

概要 Python BanditPAM库是一个用于高级异常检测和聚类的工具,具有强大的特性和灵活的功能,可以发现数据中的异常点并进行有效的聚类分析。本文将详细介绍Python BanditPAM库的安装、特性、基本功能、高级功能以及总结。 安装 首先,需要安装Python BanditPAM库。 可以使用…

Hadoop之路

hadoop更适合在liunx环境下运行,会节省后期很多麻烦,而用虚拟器就太占主机内存了,因此后面我们将把hadoop安装到wsl后进行学习,后续学习的环境是Ubuntu-16.04 (windows上如何安装wsl) 千万强调,有的命令一…

Python-VBA函数之旅-list函数

目录 一、list函数的常见应用场景: 二、list函数使用注意事项: 三、如何用好list函数? 1、list函数: 1-1、Python: 1-2、VBA: 2、推荐阅读: 个人主页:https://blog.csdn.net…

2015-2023年上市公司商道融绿ESG评级数据

2015-2023年上市公司商道融绿ESG评级数据 1、时间:2015-2023年 2、来源:整理自WIND 3、指标:代码、名称、商道融绿ESG评级 4、范围:上市公司 5、指标解释: 商道融绿ESG评级体系是一种全新的评级体系,…

Restful API 具体设计规范(概述)

协议 https 域名 https://www.baidu.com/api 版本 https://www.baidu.com/v1 路径 https://www.baidu.com/v1/blogs 方法 数据过滤 状态码返回结果 返回的数据格式 尽量使用 JSON,避免使用 XML。 总结: 看 url 就知道要什么看 http method 就知道干…

【网络技术】【Kali Linux】Wireshark嗅探(十一)以太网Ethernet协议报文捕获及分析

往期 Kali Linux 上的 Wireshark 嗅探实验见博客: 【网络技术】【Kali Linux】Wireshark嗅探(一)ping 和 ICMP 【网络技术】【Kali Linux】Wireshark嗅探(二)TCP 协议 【网络技术】【Kali Linux】Wireshark嗅探&…

BUUCTF--web(2)

1、[HCTF 2018]admin1 打开题目后发现有注册和登录两个页面,因为题目提示admin,尝试用admin进行爆破 爆破得到密码为123 登录得到flag 2、[护网杯 2018]easy_tornado1 打开题目后有三个文件,分别打开查看 在url地址栏中发现包含两个参数&a…

DBSCAB算法介绍(Python3实现)

一、DBSCAB算法简介 1、DBSCAN算法 基于密度的空间聚类的应用(Density-based spatial clustering of applications with noise,DBSCAN)算法是由Martin Ester, Hans-Peter Kriegel, Jrg Sander和Xiaowei Xu于1996年提出的一种聚类分析算法。 其原始论文是在1996年的…

ASP.NET某企业信息管理系统的设计与实现

摘 要 信息管理系统就是我们常说的MIS(Management Information System),它是一个计算机软硬件资源以及数据库的人-机系统。经过对题目和内容的分析,选用了Microsoft公司的ASP.NET开发工具,由于它提供了用于从数据库中访问数据的强大工具集,使用它可以建立开发比较完善的数据库…

untiy avpro播放超过8K视频的解决方案

安转LAV Filters解码器,然后指定Avpro使用这个解码器播放即可 第一步 安装解码器 下载链接 第二步 AVPro设置 MediaPlayer脚本中一共两处

计算完美数

一、概要 完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。 它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。 例如&#xf…

排序算法-计数排序

一、计数排序 这种排序算法 是利用数组下标来确定元素的正确位置的。 如果数组中有20个随机整数,取值范围为0~10,要求用最快的速度把这20个整数从小到大进行排序。 很大的情况下,它的性能甚至快过那些时间复杂度为O(nlogn)的排序。…

API和微服务设计的优化方式有哪些?

在构建响应迅速、用户体验良好的应用程序中,API性能的优化至关重要。在构建高性能的API时,采取综合策略是至关重要的。通过采用一系列策略,我们可以确保API在处理请求时高效运行,提供流畅的服务。 一、API和微服务设计的优化可以…

Linux系统安全及应用(1)

目录 一.账号安全控制 系统账号清理 二.密码安全控制 密码安全控制 三.命令历史限制 命令历史限制 四.限制su切换用户 1)将信任的用户加入到wheel组中 2)修改su的PAM认证配置文件 ​编辑五.PAM认证的构成 六.使用sudo机制提升权限…

机器人系统ros2-开发实践03-监听节点的参数变化(C++)

背景: 通常,节点需要响应其自身参数或另一个节点参数的更改。 ParameterEventHandler 类可以轻松侦听参数更改,以便您的代码可以响应它们。本教程将向您展示如何使用 ParameterEventHandler 类的 C 版本来监视节点自身参数的更改以及另一个节…

深入了解Semaphore、CountDownLatch等实用工具的用法

哈喽,各位小伙伴们,你们好呀,我是喵手。 今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。 我是一名后…

Android使用ProtoBuf 适配 gradle7.5 gradle8.0

ProtoBuf 适配 Gradle7.5 gradle-wrapper.properties 配置 distributionUrlhttps\://services.gradle.org/distributions/gradle-7.5-bin.zipProject:build.gradle: plugins {id com.android.application version 7.4.2 apply falseid com.android.library versio…

【智能算法】囊状虫群算法(TSA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2020年,S Kaur等人受到囊状虫群自然行为启发,提出了囊状虫群算法(Tunicate Swarm Algorithm, TSA)。 2.算法原理 2.1算法思想 TSA模拟了囊状虫群在导…

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

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