微服务之分布式理论概述

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

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镜像

实现服务注册

实现服务发现代码

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

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

相关文章

【STM32F407+CUBEMX+FreeRTOS+lwIP之TCP记录】

STM32F407CUBEMXFreeRTOSlwIP之TCP记录 注意TCP client(socket)示例 TCP_server(socket)效果 注意 如果连接失败,建议关一下代理软件。 配置方面可以参考一下上一篇UDP的文章 STM32F407CUBEMXFreeRTOSlwIP之UDP记录 TCP client(socket) #define LWIP_DEMO_PORT 8…

【介绍下如何使用CocoaPods】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…

chrome浏览器安装elasticsearch的head可视化插件

head插件简介 elasticsearch-head被称为是弹性搜索集群的web前端,head插件主要是用来和elastic Cluster交互的Web前端 head插件历史 elasticsearch-head插件在0.x-2.x版本的时候是集成在elasticsearch内的,由elasticsearch的bin/elasticsearch-plugin…

ChatGPT/GLM API使用

模型幻觉问题 在自然语言处理领域,幻觉(Hallucination)被定义为生成的内容与提供的源内容无关或不忠实,具体而言,是一种虚假的感知,但在表面上却似乎是真实的。产生背景 检索增强生成(RAG&…

LT9611UXC双端口 MIPI DSI/CSI 转 HDMI2.0,带音频

1. 说明 LT9611UXC 是一款高性能 MIPI DSI/CSI 至 HDMI2.0 转换器。MIPI DSI/CSI 输入具有可配置的单端口或双端口,具有 1 个高速时钟通道和 1~4 个高速数据通道,工作速率最高为 2Gbps/通道,可支持高达 16Gbps 的总带宽。 LT9611UXC 支持突发…

MemFire解决方案-物联网数据平台解决方案

方案背景 随着各种通讯、传感技术发展,数据通讯成本的急剧下降,数以万亿计的智能设备(智能手环、智能电表、智能手机、各种传感器设备等)接入网络,并源源不断的产生海量的实时数据。这些海量数据的价值挖掘&#xff0…

美国言语听力学会(ASHA)关于非处方 (OTC) 助听器的媒体声明(翻译稿)

美国国会于 2021 年 4 月 13 日批准美国听力学会积极提供建议,并一直积极参与制定FDA关于非处方助听器销售的拟议法规。根据2017年通过的立法授权。学院积极参与帮助塑造授权立法,并就即将出台的条例分享了建议。 根据美国卫生与公众服务部NIH / NIDCD的…

软件工程的介绍

软件工程 这一章的内容其实还是蛮多的,大概一共有10个章节,分别是下面的一些内容,但是呢,这一章的内容其实是比较偏向文科类的,也就是说,记忆的内容其实占有很大的篇幅,在该考试科目当中呢,其实也是主要影响上午题部分的选择题的考察,基本的分值呢,在10分左右,分值占…

采购数据分析驾驶舱分享,照着它抄作业

今天我们来看一张采购管理驾驶舱。这是一张充分运用了多种数据可视化图表、智能分析功能,从物料和供应商的角度全面分析采购情况的BI数据可视化报表,主要分为三个部分,接下来就分部分来了解一下。 第一部分:关键指标计算及颜色预…

【linux高性能服务器编程】项目实战——仿QQ聊天程序源码剖析

hello !大家好呀! 欢迎大家来到我的Linux高性能服务器编程系列之项目实战——仿QQ聊天程序源码剖析,在这篇文章中,你将会学习到如何利用Linux网络编程技术来实现一个简单的聊天程序,并且我会给出源码进行剖析&#xff…

goroutinue和channel

goroutinue和channel 需求传统方式实现goroutinue进程和线程说明并发和并行go协程和go主线程MPG设置Go运行的cpu数 channel(管道)-看个需求使用互斥锁、写锁channel 实现 使用select可以解决从管道取数据的阻塞问题(无需手动关闭channel了)goroutinue中使…

【网络原理】TCP协议的连接管理机制(三次握手和四次挥手)

系列文章目录 【网络通信基础】网络中的常见基本概念 【网络编程】网络编程中的基本概念及Java实现UDP、TCP客户端服务器程序(万字博文) 【网络原理】UDP协议的报文结构 及 校验和字段的错误检测机制(CRC算法、MD5算法) 【网络…

SkyWalking 自定义Span并接入告警

图容易被CSDN吞掉,我在掘金也发了:https://juejin.cn/post/7361821913398837248 我就是这么膨胀 最近在做 OpenAI API 套壳,当我使用 okhttp-sse 这个库进行流式内容转发的时候,我发现有些回调方法 SkyWalking 不能抓取到。这就…

JS面试题汇总(十)

JavaScript 的数据对象有那些属性值? writable:这个属性的值是否可以改。 configurable:这个属性的配置是否可以删除,修改。 enumerable:这个属性是否能在 for…in 循环中遍历出来或在 Object. keys 中列举出来。 …

小程序评分/关键词/UV优化助力小程序登顶

随着小程序市场的日益繁荣,小程序搜索排名优化成为了众多开发者关注的焦点。小程序搜索排名被很多因素影响着,关键词、评分还有uv(授权)等。在本文小柚和各位老板分享如何有效优化小程序搜索排名的经验。 一、关键词策略 关键词是…

[最新]CentOS7设置开机自启动Hadoop集群

安装好Hadoop后我们可以使用开机自启动的方式,节约敲命令的时间。注意是centOS7版本!!!和centOS6版本区别非常大!!! 1、切换到系统目录 [rootmaster ~]# cd /etc/systemd [rootmaster systemd]# ll total 32 -rw-r--r-- 1 root root 720 Jun 30 23:11 bootcha…

汽车新智能图谱里:理解腾讯的AI TO B路径

将自身的C2B产品和产业理解充分AI化,在自身内部场景率先验证跑通后,进而释放给产业伙伴,对应到具体的需求痛点,一起打磨对应的行业AI模型。 这也恰是腾讯“实用”标签背后的AI产业路径。 作者|皮爷 出品|产业家 成本、性价…

DS进阶:并查集

一、并查集的原理 在一些应用问题中,需要将n个不同的元素划分成一些不相交的集合。开始时,每个元素自成一个单元素集合,然后按一定的规律将归于同一组元素的集合合并。在此过程中要反复用到查询某一个元素归属于那个集合的运算。适合于描述这…

Taro +vue3 中实现全局颜色css变量的设置和使用

当我们现在需要弄一个随时修改的页面颜色主题色 我们可以随时修改 我使用的是 Taro 框架 一般有一个app.less 文件 我们在这个里面 设置一个root 全局样式 :root {--primary-color: #028fd4;--secondary-color: #028fd6;/* 添加其他颜色变量 */ } 这样在全局我们就可以使用这…

uniapp 微信小程序 分享海报的实现

主页面 <template><view class"page"><!-- 自定义导航栏--><Navbar title"我的海报"></Navbar><view class"container"><poster ref"poster" :imageUrl"image" :imageWidth"7…