大白话告你什么是分布式,史上最全详解!​-程序员宅基地

技术标签: java  编程语言  数据库  分布式  大数据  

点击上方蓝色“终端研发部”,选择“设为星标”

学最好的别人,做最好的我们 

大家好,我是为你们操碎了心的小于哥,最后在后台有人经常问我分布式相关的问题。那么到底什么是分布式?

要理解分布式系统,主要需要明白一下2个方面:

1.分布式系统一定是由多个节点组成的系统。其中,节点指的是计算机服务器,而且这些节点一般不是孤立的,而是互通的。

2.这些连通的节点上部署了我们的节点,并且相互的操作会有协同。

不同的业务模块部署在不同的服务器上或者同一个业务模块分拆多个子业务,部署在不同的服务器上,解决高并发的问题,提供可扩展性以及高可用性,业务中使用分布式的场景主要有分布式存储以及分布式计算。分布式存储中可以将数据分片到多个节点上,不仅可以提高性能(可扩展性),同时也可以使用多个节点对同一份数据进行备份。

分布式环境的特点

  1. 分布性:服务部署空间具有多样性

  2. 并发性:程序运行过程中,并发性操作是很常见的。比如同一个分布式系统中的多个节点,同时访问一个共享资源。数据库、分布式存储

  3. 无序性:进程之间的消息通信,会出现顺序不一致问题

分布式环境下面临的问题

  1. 网络通信:网络本身的不可靠性,因此会涉及到一些网络通信问题

  2. 网络分区(脑裂):当网络发生异常导致分布式系统中部分节点之间的网络延时不断增大,最终导致组成分布式架构的所有节点,只有部分节点能够正常通信

  3. 三态:在分布式架构里面多了个状态:超时,所以有三态:成功、失败、超时

  4. 分布式事务:ACID(原子性、一致性、隔离性、持久性)

  5. 中心化和去中心化:冷备或者热备

分布式架构里面,很多的架构思想采用的是:当集群发生故障的时候,集群中的人群会自动“选举”出一个新的领导。

最典型的是:zookeeper / etcd

经典的CAP/BASE理论

CAP理论

1998年,加州大学的计算机科学家 Eric Brewer 提出,分布式系统有三个指标。

  • Consistency

  • Availability

  • Partition tolerance

它们的第一个字母分别是 C、A、P。

Eric Brewer 说,这三个指标不可能同时做到。这个结论就叫做 CAP 定理。

1、分区容错 (Partition-tolerance)

先看 Partition tolerance,中文叫做”分区容错”。

大多数分布式系统都分布在多个子网络。每个子网络就叫做一个区(partition)。分区容错的意思是,区间通信可能失败。比如,一台服务器放在中国,另一台服务器放在美国,这就是两个区,它们之间可能无法通信。

上图中,G1 和 G2 是两台跨区的服务器。G1 向 G2 发送一条消息,G2 可能无法收到。系统设计的时候,必须考虑到这种情况。

一般来说,分区容错无法避免,因此可以认为 CAP 的 P 总是成立。CAP 定理告诉我们,剩下的 C 和 A 无法同时做到。

2、一致性(Consistency)

Consistency 中文叫做”一致性”。意思是,写操作之后的读操作,必须返回该值。举例来说,某条记录是 v0,用户向 G1 发起一个写操作,将其改为 v1。

接下来,用户的读操作就会得到 v1。这就叫一致性。

问题是,用户有可能向 G2 发起读操作,由于 G2 的值没有发生变化,因此返回的是 v0。G1 和 G2 读操作的结果不一致,这就不满足一致性了。

为了让 G2 也能变为 v1,就要在 G1 写操作的时候,让 G1 向 G2 发送一条消息,要求 G2 也改成 v1。

这样的话,用户向 G2 发起读操作,也能得到 v1。

3、可用性(Availability)

Availability 中文叫做”可用性”,意思是只要收到用户的请求,服务器就必须给出回应。

用户可以选择向 G1 或 G2 发起读操作。不管是哪台服务器,只要收到请求,就必须告诉用户,到底是 v0 还是 v1,否则就不满足可用性。

4、Consistency 和 Availability 的矛盾

一致性和可用性,为什么不可能同时成立?答案很简单,因为可能通信失败(即出现分区容错)。

如果保证 G2 的一致性,那么 G1 必须在写操作时,锁定 G2 的读操作和写操作。只有数据同步后,才能重新开放读写。锁定期间,G2 不能读写,没有可用性不。

如果保证 G2 的可用性,那么势必不能锁定 G2,所以一致性不成立。

综上所述,G2 无法同时做到一致性和可用性。系统设计时只能选择一个目标。如果追求一致性,那么无法保证所有节点的可用性;如果追求所有节点的可用性,那就没法做到一致性。

BASE

基于CAP理论,CAP理论并不适用于数据库事务(因为更新一些错误的数据而导致数据出现紊乱,无论什么样的数据库高可用方案都是徒劳) ,虽然XA事务可以保证数据库在分布式系统下的ACID特性,但是会带来性能方面的影响;

eBay尝试了一种完全不同的套路,放宽了对事务ACID的要求。提出了BASE理论

Basically available :数据库采用分片模式, 把100W的用户数据分布在5个实例上。如果破坏了其中一个实例,仍然可以保证

80%的用户可用

soft-state:在基于client-server模式的系统中,server端是否有状态,决定了系统是否具备良好的水平扩展、负载均衡、故障恢复等特性。

Server端承诺会维护client端状态数据,这个状态仅仅维持一小段时间, 这段时间以后,server端就会丢弃这个状态,恢复正常状态

Eventually consistent:数据的最终一致性

作者:yanyunliu
参考:https://www.yuque.com/yanyunliu/zzy3p8/gs1e2n

补充

集群与分布式区别

集群:复制模式,每台机器做一样的事。

分布式:两台机器分工合作,每台机器做的不一样。

常见的分布式系统


BAT等大厂Java面试经验总结 想获取 Java大厂面试题学习资料扫下方二维码回复「BAT」就好了回复 【加群】获取github掘金交流群回复 【电子书】获取2020电子书教程回复 【C】获取全套C语言学习知识手册回复 【Java】获取java相关的视频教程和资料回复 【爬虫】获取SpringCloud相关多的学习资料回复 【Python】即可获得Python基础到进阶的学习教程回复 【idea破解】即可获得intellij idea相关的破解教程关注我gitHub掘金,每天发掘一篇好项目,学习技术不迷路!



回复 【idea激活】即可获得idea的激活方式
回复 【Java】获取java相关的视频教程和资料
回复 【SpringCloud】获取SpringCloud相关多的学习资料
回复 【python】获取全套0基础Python知识手册
回复 【2020】获取2020java相关面试题教程
回复 【加群】即可加入终端研发部相关的技术交流群
阅读更多
为什么HTTPS是安全的
因为BitMap,白白搭进去8台服务器...
《某厂内部SQL大全 》.PDF
字节跳动一面:i++ 是线程安全的吗?
大家好,欢迎加我微信,很高兴认识你!
在华为鸿蒙 OS 上尝鲜,我的第一个“hello world”,起飞!

相信自己,没有做不到的,只有想不到的在这里获得的不仅仅是技术!



喜欢就给个“在看”
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/androidstarjack/article/details/118347050

智能推荐

PostgreSQL学习资源_postgres培训材料 csdn-程序员宅基地

文章浏览阅读225次。官方文中文档http://www.postgres.cn/v2/document菜鸟教程https://www.runoob.com/postgresql/postgresql-tutorial.htmlw3cschoolhttps://www.w3cschool.cn/qysrc/qysrc-jwxg3758.html【Java学习资源】整理推荐MongoDB学习资源 Redis学习资源 Mysql学习资源 Tomcat学习资源 PostgreSQL学习资源 Java常见类._postgres培训材料 csdn

使用matlab实现Gabor滤波器_matlab gabor滤波器-程序员宅基地

文章浏览阅读3.9k次,点赞7次,收藏51次。1、spatialgabor.m% SPATIALGABOR - applies single oriented gabor filter to an image%% Usage:% [Eim, Oim, Aim] = ?spatialgabor(im, wavelength, angle, kx, ky, showfilter)%% Arguments:%im - Image ..._matlab gabor滤波器

IO(Java)-程序员宅基地

文章浏览阅读99次。IO一、IO分类1.1、总的分类1.2、按流向分类输入流​ 数据源到程序(InputStream、Reader读进来)输出流​ 程序到目的地(OutPutStream、Writer写出去)1.3、按功能分类节点流​ 可以直接从数据源或目的地读写数据。处理流​ 不直接连接到数据源或目的地,是处理流的流。通过对其他流的处理提高程序的性能。1.4、按处理的数据单元字节流按照字节读取数据(InputStream、OutputStream)​ 字节流能够处理一切的内容,包括文本和非

API —— 这是一个新的战场-程序员宅基地

文章浏览阅读88次。API 已经是服务交付、能力复制、数据输出的最佳载体 IT基础架构在全球范围内向云的方向过渡。近几年新崛起的初创企业,天生就长在云上;带有互联网属性的成熟企业,都在向云上迁移;而传统企业也在摸索上云的方案。硬件之间的交互,变成了云服务之间的交互,这使得 API 的调用更加便利,使得 API 的可取被突显出来。 尤其是有了智能手机之后,..._api市场是什么

vscode显示页面_宇宙最强vscode教程(基础篇)-程序员宅基地

文章浏览阅读1.5k次。本文主要介绍vscode在工作中常用的快捷键及插件,目标在于提高工作效率本文的快捷键是基于mac的,windows下的快捷键放在括号里 Cmd+Shift+P(win Ctrl+Shift+P)[TOC]零、快速入门有经验的可以跳过快速入门或者大致浏览一遍1. 命令面板命令面板是vscode快捷键的主要交互界面,可以使用f1或者Cmd+Shift+P(win Ctrl+Shift+P)打开。在命令..._vs code如何拉出页面

ModelSim使用技巧总结(入门向)_modelsim怎么改背景颜色-程序员宅基地

文章浏览阅读948次,点赞3次,收藏12次。ModelSim使用技巧总结_modelsim怎么改背景颜色

随便推点

ubuntu16.04编译android6.0 make: *** [out/host/linux-x86/obj32/lib/libartd.so] Error 1错误_make: *** [out/host/linux-x86/lib/libart.so] 错误 1-程序员宅基地

文章浏览阅读6.4k次,点赞2次,收藏6次。出现编译失败现象:trip: libpagemap_32 (out/target/product/xx/obj_arm/lib/libpagemap.so)target Strip: librilutils_32 (out/target/product/xx/obj_arm/lib/librilutils.so)target Strip: libtinyxml_32 (out/targ_make: *** [out/host/linux-x86/lib/libart.so] 错误 1

maven 默认安装路径-小白实操记录_maven默认安装路径-程序员宅基地

文章浏览阅读1.6k次。使用命令安装路径如下: /usr/bin/mvn /usr/share/maven2/ /etc/maven2 maven配置信息在 /etc/maven2_maven默认安装路径

前端工具宝库,帮你解决99%的业务需求难题_@vueuse/motion-程序员宅基地

文章浏览阅读4k次,点赞10次,收藏112次。【代码】前端工具宝库,帮你解决99%的业务需求难题。_@vueuse/motion

ImageView宽度填满屏幕,高度自适应_imageview 高度自适应-程序员宅基地

文章浏览阅读2w次,点赞9次,收藏14次。在CSS中轻松设置width=100%就可以使得图片宽度充满屏幕,高度自适应,那么在Android里面怎样才能实现这种效果呢?首先试一下默认的ImageView的效果,布局文件如下activity_main_2.xml:

使用AspectJ完成AOP切面_aspect对私有方法-程序员宅基地

文章浏览阅读354次。面向切面的程序设计:通过横切关注点与业务主体进行一步分离,以提高程序代码的模块程度。举例来说,比如超级会员、会员、普通用户登录一个系统,那么他们都要使用到登录业务,这时就可以利用横向切面将整个业务分割出来,并植入一些代码,达到统一管理的效果。在Android开发中,可以使用AspectJ框架来实现。ASpectJ有2个重要的概念:PointCut(切入点)、JointPoint(连接点)切入点..._aspect对私有方法

mac上win10装linux虚拟机的这些坑(装linux详细指南)_苹果win10虚拟机有什么缺点-程序员宅基地

文章浏览阅读826次,点赞3次,收藏5次。MAC双系统win10用Vmware配置linux虚拟机详细指南_苹果win10虚拟机有什么缺点