历史优质文章:

可能是最漂亮的Spring事务管理详解

面试中关于Java虚拟机(jvm)的问题看这篇就够了

Java NIO 概览

分布式系统设计理念

分布式系统架构的第一原则是不要分布!这句话看似矛盾实则揭露了分布式系统的很多特征。

分布式系统的目标与要素

分布式系统的目标是提升系统的整体性能和吞吐量另外还要尽量保证分布式系统的容错性(假如增加10台服务器才达到单机运行效果2倍左右的性能,那么这个分布式系统就根本没有存在的意义)。

即使采用了分布式系统,我们也要尽力运用并发编程、高性能网络框架等等手段提升单机上的程序性能。

分布式系统设计两大思路:中心化和去中心化

1)中心化设计:

  • 两个角色: 中心化的设计思想很简单,分布式集群中的节点机器按照角色分工,大体上分为两种角色: “领导”“干活的”
  • 角色职责: “领导”通常负责分发任务并监督“干活的”,发现谁太闲了,就想发设法地给其安排新任务,确保没有一个“干活的”能够偷懒,如果“领导”发现某个“干活的”因为劳累过度而病倒了,则是不会考虑先尝试“医治”他的,而是一脚踢出去,然后把他的任务分给其他人。其中微服务架构 Kubernetes 就恰好采用了这一设计思路。
  • 中心化设计的问题
    1. 中心化的设计存在的最大问题是“领导”的安危问题,如果“领导”出了问题,则群龙无首,整个集群就奔溃了。但我们难以同时安排两个“领导”以避免单点问题。
    2. 中心化设计还存在另外一个潜在的问题,既“领导”的能力问题:可以领导10个人高效工作并不意味着可以领导100个人高效工作,所以如果系统设计和实现得不好,问题就会卡在“领导”身上。
  • 领导安危问题的解决办法: 大多数中心化系统都采用了主备两个“领导”的设计方案,可以是热备或者冷备,也可以是自动切换或者手动切换,而且越来越多的新系统都开始具备自动选举切换“领导”的能力,以提升系统的可用性。

2)去中心化设计

  • 众生地位平等: 在去中心化的设计里,通常没有“领导”和“干活的”这两种角色的区分,大家的角色都是一样的,地位是平等的,全球互联网就是一个典型的去中心化的分布式系统,联网的任意节点设备宕机,都只会影响很小范围的功能。
  • “去中心化”不是不要中心,而是由节点来自由选择中心。 (集群的成员会自发的举行“会议”选举新的“领导”主持工作。最典型的案例就是ZooKeeper及Go语言实现的Etcd)
  • 去中心化设计的问题: 去中心化设计里最难解决的一个问题是 “脑裂”问题 ,这种情况的发声概率很低,但影响很大。脑裂问题,这种情况的发生概率很低,但影响很大。脑裂指一个集群由于网络的故障,被分为至少两个彼此无法通信的单独集群,此时如果两个集群都各自工作,则可能会产生严重的数据冲突和错误。一般的设计思路是,当集群判断发生了脑裂问题时,规模较小的集群就“自杀”或者拒绝服务。

分布式与集群的区别是什么?

  • 分布式: 一个业务分拆多个子业务,部署在不同的服务器上
  • 集群: 同一个业务,部署在多个服务器上。比如之前做电商网站搭的redis集群以及solr集群都是属于将redis服务器提供的缓存服务以及solr服务器提供的搜索服务部署在多个服务器上以提高系统性能、并发量解决海量存储问题。

CAP定理


在理论计算机科学中,CAP定理(CAP theorem),又被称作布鲁尔定理(Brewer’s theorem),它指出对于一个分布式计算系统来说,不可能同时满足以下三点:

  • 一致性(Consistence) :所有节点访问同一份最新的数据副本
  • 可用性(Availability):每次请求都能获取到非错的响应——但是不保证获取的数据为最新数据
  • 分区容错性(Partition tolerance) : 分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务。

CAP仅适用于原子读写的NOSQL场景中,并不适合数据库系统。现在的分布式系统具有更多特性比如扩展性、可用性等等,在进行系统设计和开发时,我们不应该仅仅局限在CAP问题上。

注意:不是所谓的3选2(不要被网上大多数文章误导了):

大部分人解释这一定律时,常常简单的表述为:“一致性、可用性、分区容忍性三者你只能同时达到其中两个,不可能同时达到”。实际上这是一个非常具有误导性质的说法,而且在CAP理论诞生12年之后,CAP之父也在2012年重写了之前的论文。

当发生网络分区的时候,如果我们要继续服务,那么强一致性和可用性只能2选1。也就是说当网络分区之后P是前提,决定了P之后才有C和A的选择。也就是说分区容错性(Partition tolerance)我们是必须要实现的。

我在网上找了很多文章想看一下有没有文章提到这个不是所谓的3选2,用百度半天没找到了一篇,用谷歌搜索找到一篇比较不错的,如果想深入学习一下CAP就看这篇文章把,我这里就不多BB了:《分布式系统之CAP理论》 : http://www.cnblogs.com/hxsyl/p/4381980.html

BASE理论

BASE理论由eBay架构师Dan Pritchett提出,在2008年上被分表为论文,并且eBay给出了他们在实践中总结的基于BASE理论的一套新的分布式事务解决方案。

BASEBasically Available(基本可用)Soft-state(软状态)Eventually Consistent(最终一致性) 三个短语的缩写。BASE理论是对CAP中一致性和可用性权衡的结果,其来源于对大规模互联网系统分布式实践的总结,是基于CAP定理逐步演化而来的,它大大降低了我们对系统的要求。

BASE理论的核心思想

即使无法做到强一致性,但每个应用都可以根据自身业务特点,采用适当的方式来使系统达到最终一致性。也就是牺牲数据的一致性来满足系统的高可用性,系统中一部分数据不可用或者不一致时,仍需要保持系统整体“主要可用”。

针对数据库领域,BASE思想的主要实现是对业务数据进行拆分,让不同的数据分布在不同的机器上,以提升系统的可用性,当前主要有以下两种做法:

  • 按功能划分数据库
  • 分片(如开源的Mycat、Amoeba等)。

由于拆分后会涉及分布式事务问题,所以eBay在该BASE论文中提到了如何用最终一致性的思路来实现高性能的分布式事务。

BASE理论三要素

1. 基本可用

基本可用是指分布式系统在出现不可预知故障的时候,允许损失部分可用性。但是,这绝不等价于系统不可用。

比如:

  • 响应时间上的损失:正常情况下,一个在线搜索引擎需要在0.5秒之内返回给用户相应的查询结果,但由于出现故障,查询结果的响应时间增加了1~2秒
  • 系统功能上的损失:正常情况下,在一个电子商务网站上进行购物的时候,消费者几乎能够顺利完成每一笔订单,但是在一些节日大促购物高峰的时候,由于消费者的购物行为激增,为了保护购物系统的稳定性,部分消费者可能会被引导到一个降级页面

2. 软状态

软状态指允许系统中的数据存在中间状态,并认为该中间状态的存在不会影响系统的整体可用性,即允许系统在不同节点的数据副本之间进行数据同步的过程存在延时

3. 最终一致性

最终一致性强调的是系统中所有的数据副本,在经过一段时间的同步后,最终能够达到一个一致的状态。因此,最终一致性的本质是需要系统保证最终数据能够达到一致,而不需要实时保证系统数据的强一致性。

总结

本文主要是简单的介绍了三个常见的概念: 分布式系统设计理念CAP定理BASE理论 ,关于分布式系统的还有很多很多东西。

我是Snailclimb,一个以架构师为5年之内目标的小小白。 欢迎关注我的微信公众号:“Java面试通关手册”(一个有温度的微信公众号,期待与你共同进步~~~坚持原创,分享美文,分享各种Java学习资源)

最后,就是使用阿里云服务器一段时间后,感觉阿里云真的很不错,就申请做了阿里云大使,然后这是我的优惠券地址.

分布式系统的经典基础理论相关推荐

  1. 分布式系统架构经典资料--左耳

    分布式系统架构经典资料 CAP定理 一致性(Consistency):在分布式系统中的所有数据备份,在同一时刻访问返回同样的值(就和一份数据一样) 可用性(Availability):在集群中一部分节 ...

  2. 干货丨浅析分布式系统(经典长文,值得收藏)

    导读 我们常常会听说,某个互联网应用的服务器端系统多么牛逼,比如QQ.微信.淘宝.那么,一个互联网应用的服务器端系统,到底牛逼在什么地方?为什么海量的用户访问,会让一个服务器端系统变得更复杂?本文就是 ...

  3. 分布式系统的一些基础理论

    前言 在一年前我曾经有做过一些 Zookeeper 的相关总结,现在我们再把它捡回来,重新的把一些前因后果都扯得更加明白. 一.分布式系统与 Zookeeper 的关系 1.1 集中式服务 我们先从服 ...

  4. 分布式系统领域经典论文翻译集

    分布式领域论文译序 sql&nosql年代记 SMAQ:海量数据的存储计算和查询 一.google论文系列 1.      google系列论文译序 2.      The anatomy o ...

  5. 深入理解建造者模式 ——组装复杂的实例

    历史文章回顾: 设计模式专栏 深入理解单例模式 深入理解工厂模式 历史优质文章推荐: 分布式系统的经典基础理论 可能是最漂亮的Spring事务管理详解 面试中关于Java虚拟机(jvm)的问题看这篇就 ...

  6. Java多线程学习(八)线程池与Executor 框架

    历史优质文章推荐: Java并发编程指南专栏 分布式系统的经典基础理论 可能是最漂亮的Spring事务管理详解 面试中关于Java虚拟机(jvm)的问题看这篇就够了 目录: [TOC] 本节思维导图: ...

  7. 面对互联网裁员潮,我们该怎么提升自己核心知识能力

    近日,互联网行业的裁员潮愈演愈烈,之前还是香饽饽的行业,突然来了一拨釜底抽薪,属实让人难以接受,很多人还处在一个懵逼的状态.就连曾经说不会开除任何一个兄弟的某东,也开始了一波裁员潮.在这样的大环境下, ...

  8. 经济的1000+篇文章总结

    经济的1000+篇文章总结 本文收集和总结了有关经济的1000+篇文章,由于篇幅有限只能总结近期的内容,想了解更多内容可以访问:http://www.ai2news.com/, 其分享了有关AI的论文 ...

  9. 架构解密:从分布式到微服务pdf

    下载地址:网盘下载 内容提要 编辑 分布式架构与微服务平台是当今IT界的关键技术,也是资深软件工程师和系统架构师必须掌握的核心技术.<架构解密:从分布式到微服务>以从传统分布式架构迁移到基 ...

  10. Java中高级核心知识

    前言: java是一门面向对象的编程语言,功能强大.简单易用,可以编写桌面应用程序.Web应用程序.分布式系统和嵌入式系统应用程序等. 在Java简单入门之后很多人不知道下一阶段该做什么,对自己的学习 ...

最新文章

  1. 安装yarn 心得分享
  2. Codeforces40E[Number Table]
  3. SCCM2012SP1---配置客户端发现方法和边界组
  4. Unity中使用WebView
  5. 循环机换变速箱油教程_水箱内全是油, 变速箱内全是水!看师傅怎么修...
  6. java基于文件的map实现_Mybatis中返回Map的实现
  7. 页面文字请使用css进行控制,css控制页面文字不能被选中user-select:none;
  8. Python爬虫 --- 2.2 Scrapy 选择器的介绍
  9. ef core mysql 生成迁移失败_EF Core 数据库迁移(Migration)
  10. android textwatcher 获取当前控件,TextWatcher如何找到调用它的EditText
  11. TPU是什么材料,tpu材料属于塑料吗?
  12. 做前端网页需要用网页框架吗
  13. lua fadeOut
  14. ebx 与 ebp的作用 ---- 总线接口部件
  15. 内存指令不能written
  16. 第 40 章 呼吸灯与 SPWM 波
  17. 《数字语音处理》- 实验4. 基于MATLAB与VQ的特定人孤立词语音识别研究(附代码)
  18. 2023基于微信小程序的校园第二课堂活动报名系统+后台管理系统(Springboot+mysql)-JAVA.VUE(论文+开题报告+运行)
  19. c语言设计温控系统,基于单片机的智能温控系统的设计与实现
  20. 生活就是这样充满一些小插曲的2020.11.21日记

热门文章

  1. php实现金币提现,PHP调用支付宝转账接口实现支付宝提现
  2. 降维算法原理篇:主成分分析PCA、奇异值分解SVD、因子分析法FA、独立成分分析ICA等原理详推
  3. 嵌入式系统开发的模式与流程
  4. 采集天眼查的10个经典方法
  5. oracle数据库alter table,oracle 数据库 alter table的用法(经典)
  6. Python全栈 MongoDB 数据库(聚合、二进制、GridFS、pymongo模块)
  7. android4k分辨率,4k手机有哪些 4k分辨率是多少【图文】
  8. 去掉百度地图api左下角百度logo标志或文字
  9. qq计算机丢失msvcp100,Win10无法运行QQ提示缺少MSVCR100.dll?解决方案
  10. PTA-寻找孪生素数