#整理了一些博文作为分布式相关理论的学习笔记,同时加上了一些个人的理解,尊重原创者,文章属性就设为转载吧,参考博文的链接已附在最后。

分布式

  • 概要,与集群的区别
  • 分布式系统的设计
  • CAP 和 BASE 理论

一、分布式系统

在计算机领域,当单机性能达到瓶颈时,一般有两种方式解决性能问题:

  • 堆硬件,进一步提升配置;
  • 分布式设计,如水平拆分、垂直拆分。
    分布式系统有很多种:分布式文件系统、分布式数据库、分布式 WebService、分布式计算等等,面向的情景不同,但分布式的思路大致相同,万法归一。

而分布式系统的设计说白了就是: 如何合理将一个系统拆分成多个子系统部署到不同机器上。
讲设计方法前,先介绍分布式系统的特性:

1. 分布式系统的特性

(1)分布性

空间中随机分布。这些计算机可以分布在不同的机房,不同的城市,甚至不同的国家。

(2)对等性

分布式系统中的计算机没有主/从之分,组成分布式系统的所有节点都是对等的。在分布式系统最常见的概念之一是副本–数据副本和服务副本。数据副本是指在不同的节点上持久化同一份数据,当某一个节点上存储的 数据丢失时,可以从副本上读取到该数据,这是解决分布式系统数据丢失问题最为有效的手段。服务副本,指多个节点提供同样的服务,每个节点都有 能力接收来自外部的请求并进行相应的处理。

(3)并发性

同一个分布式系统的多个节点,可能会并发地操作一些共享的资源,诸如数据库或分布式存储。

(4)缺乏全局时钟

既然各个计算机之间是依赖于交换信息来进行相互通信,很难定义两件事件的先后顺序,缺乏全局始终控制序列。

(5)故障总会发生

组成分布式的计算机,都有可能在某一时刻突然间崩掉。分的计算机越多,可能崩掉一个的几率就越大。如果再考虑到设计程序时的异常故障,也会加大故障的概率。

(6)处理单点故障

单点 SPoF(Single Point of Failure):某个角色或者功能只有某一台计算机在支撑,在这台计算机上出现的故障是单点故障。当然处理方式可以是采用上面所讲的:集群。

2. 分布式系统的设计

将系统拆分成多个子系统,这就意味着拆分后的系统必然需要通过网络进行互相通信联系。所以通信中的稳定和安全也显得尤为重要。随着业务慢慢的增长,扩展性、可靠性、数据一致性都需要进行考虑。

(1)系统拆分成子系统。这个需要设计师好好设计,将一个大系统拆分成多个小系统,分层次来维护。

(2)设计系统间的通信。在这儿我们可以使用消息中间件,开源框架帮我们解决了这个问题。如Apache ActiveMQ、RabbitMQ、Apache RocketMQ、Apache Kafka等。

(3)设计分布式计算。开源框架有 apReduce、Apache Hadoop、Apache Spark 等。

(4)大数据和分布式存储。有 Apache HBase、Apache Cassandra、Memcached、Redis、MongoDB等。

(5)分布式监控控制。常用的技术包括Nagios、Zabbix、Consul、ZooKeeper等。

2.1 水平拆分和垂直拆分

水平拆分:

以购物平台为例:
水平拆分是指按照 业务 对系统进行划分 。比如原来的系统中包括了交易,运营两大类,按照水平拆分的原则进行拆分,系统可以拆分成 交易系统 和 运营系统。
优点:不同业务,往往性能要求,以及请求量是不一样的。拆分后保证业务之间的可用性影响最小化。
缺点:拆分过程中,多个系统中可能存在重复的轮子,难于维护。

假设我们有一台服务器,它可以承担 1 百万/秒的请求,这个请求可以的是:通过 http 访问网页、通过 tcp 下载文件、jdbc 执行 sql、RPC 调用接口等等方式,现在我们有一条数据的请求是 2 百万/秒,很显然服务器很难hold 住,会各种拒绝访问,甚至宕机,怎么办呢?

一台机器解决不了的问题,那就两台。所以我们加一台机器,每台承担 1 百万。如果请求继续增加呢,两台解决不了的问题,那就三台呗。这种方式我们称之为水平拆分,如果实现请求的平均分配便是负载均衡了。

垂直拆分:

垂而直拆分是将同样的系统按照应用场景(调用方)进行拆分
比如交易系统的支付模块,上游有用户支付和商家支付两个调用流程。按照垂直拆分的规则就可以将支付模块拆分为用户支付和商家支付。
优点:按需配给(预估调用方的流量,配置对应的机器数),各个垂直调用之间相互不影响,通过配置可以进行上游调用降级。
缺点:几乎完全重复的轮子。

在如,我们现在有两个数据请求,数据1有 190 万,数据2有 280 万,上面那台机器也 hold 不住,我们加一台机器来负载均衡一下,每台机器处理 45 万数据1和 40 万数据2,但是平分太麻烦,不如一台处理数据1,一台处理数据2,同样能解决问题,这种方式我们称之为垂直拆分。

垂直拆分更多是用在数据库的拆分,如将某一张列很多的数据表拆分成多张数据表。

水平拆分和垂直拆分是分布式架构的两种思路,但并不是一个二选一的问题,更多的是兼并合用。

注意:要将分布式设计中的水平拆分、垂直拆分与高并发中的水平扩展、垂直扩展区分开来。

2.2 负载均衡

前面我们谈到了分布式来解决性能问题,但其附带的问题是怎么分布,即如何负载均衡。这里要解决的问题是当客户端发出请求时,应该让哪一台服务器对该请求进行处理,通常的做法是通过一台中间服务器来给客户端分配目标服务器。
常见如 zookeeper 是分布式系统中一个负载均衡框架,它是 google 的 chubby 的一个开源实现,是 Hadoop 和 Hbase 的重要组件。
同样的在 http 中,常听说的 nginx 也是一个负载均衡服务器,它面向的是分布式 web 服务器。

2.3 同步问题

分布式系统中,解决了负载均衡的问题后,另外一个问题就是数据的一致性了,这个就需要通过同步来保障。根据不同的场景和需求,同步的方式也是有选择的。

在分布式文件系统中,比如商品页面的图片,如果进行了修改,同步要求并不高,就算有数秒甚至数分钟的延迟都是可以接受的,因为一般不会产生损失性的影响,因此可以简单的通过文件修改的时间戳,隔一定时间扫描同步一次,可以牺牲一致性来提高效率。

但银行中的分布式数据库就不一样了,一丁点不同步就是无法接受的,甚至可以通过加锁等牺牲性能的方式来保障完全的一致。

在一致性算法中 paxos 算法是公认的最好的算法,chubby、zookeeper 中 paxos 是它保证一致性的核心。

二、分布式架构下的高可用设计

  1. 避免单点故障
    ○ 负载均衡技术(failover ,选址,硬件负载,软件负载,去中心化负载(gossip(redis-cluster));
    ○ 热备 linux HA;
    ○ 多机房(同城灾备,异地灾备);

  2. 应用的高可用
    ○ 故障监控(系统监控(cpu,内存)、链路监控、日志监控)自动预警;
    ○ 应用的容错设计 (服务降级,限流) 自我保护能力;
    ○ 数据量 (数据分片,读写分离)。
    (待补充)

————————————————
参考链接:
https://blog.csdn.net/cutesource/article/details/5811914
https://blog.csdn.net/mcb520wf/article/details/82456456
https://my.oschina.net/niepanLs/blog/875578
https://blog.csdn.net/yuhaiyang_1/article/details/80892492

分布式:分布式系统的设计相关推荐

  1. 【大型分布式网站】抗住千万流量的大型分布式系统架构设计

    一.大型分布式网站架构技术 1.1 大型网站的特点 用户多,分布广泛 大流量,高并发 海量数据,服务高可用 安全环境恶劣,易受网络攻击 功能多,变更快,频繁发布 从小到大,渐进发展 以用户为中心 免费 ...

  2. 从Elasticsearch来看分布式系统架构设计,真是666~

    欢迎关注方志朋的博客,回复"666"获面试宝典 分布式系统类型多,涉及面非常广,不同类型的系统有不同的特点,批量计算和实时计算就差别非常大.这篇文章中,重点会讨论下分布式数据系统的 ...

  3. 分布式 - 分布式系统的特点

    20世纪60年代,IBM研发了System 360架构大型机,与同时期的波音707.福特汽车誉为商业三大成就,凭借其卓越的性能和良好的稳定性,开启了大型机的时代,诞生了非常多的集中式系统,采用单机架构 ...

  4. 分布式事务架构设计原理

    随着业务需求的复杂化,企业应用规模不断扩大,在后端开发中经常会遇到以下问题: 业务的并发要求非常高,对应的业务需要通过微服务拆分,甚至分库分表等架构设计才能满足并发需求,此时业务操作无法在同一个数据库 ...

  5. 金融级分布式数据库架构设计要点

    行业背景 银行业从最初的手工记账到会计电算化,到金融电子化,再到现在的金融科技,可以看到金融与科技的结合越来越紧密,人工智能.大数据.物联网.区块链等新兴技术改变了金融的交易方式,为金融行业的创新前行 ...

  6. 从 Elasticsearch 来看分布式系统架构设计

    云栖君导读: 分布式系统类型多,涉及面非常广,不同类型的系统有不同的特点,批量计算和实时计算就差别非常大.这篇文章中,重点会讨论下分布式数据系统的设计,比如分布式存储系统,分布式搜索系统,分布式分析系 ...

  7. 26.分布式限流设计

    艾编程架构课程第五十五节笔记未完待续 分布式限流设计 1. 分布式限流概述 2. 分布式限流的几种纬度 2.1. QPS和连接数控制 2.2. 传输速率 2.3. 黑白名单 2.4. 分布式环境 3. ...

  8. 分布式系统架构设计三十六式之服务治理 - 第一式 - 隔板模式

    导读 日拱一卒,功不唐捐,分享是最好的学习,一个知识领域里的 "道 法 术 器" 这四个境界需要从 微观.中观以及宏观 三个角度来把握.微观是实践,中观讲套路,宏观靠领悟.本系列文 ...

  9. 分布式系统架构设计36式 – 第0式 - 设计总决

    动机 在"不易.简易.变易"这三个范畴里,技术是属于"变易"范畴的,其千变万化:"方法论"是属于"简易"范畴的,其具有领 ...

  10. 论大规模分布式系统缓存设计策略

      声明:本文为本人在软考系统架构设计师备考期间的练手写作,不保证内容的原创性与正确性,仅供参考,请勿照抄和用于学术论文等正规场合,因不当使用产生后果一律自负. 摘要   2019年3月,我单位联合某 ...

最新文章

  1. ICLR20 | GraphZoom:可缩放图嵌入
  2. cout不明确什么意思_劈腿什么意思?原来出轨和劈腿不一样!原来如此!
  3. AliOS Things全链路优化-CoAP FOTA
  4. Xilinx PLL IP核功能仿真
  5. 【高并发】掌握JUC中的阻塞队列
  6. 别整那些花里胡哨的,女孩子喜欢简单直接的男生
  7. 3层b+树索引访问磁盘次数_深入理解MySQL索引底层实现原理丨技术干货
  8. 使用MSHTML解析HTML页面
  9. 数学建模学习(57):K-Means聚类原理分析讲解与应用
  10. lamp一键安装包不安装mysql_LAMP一键安装包-CentOS 5/6下自动编译安装Apache、MySQL、PHP...
  11. USB 3.0 高清音视频采集芯片——MS2130
  12. android代码 发警报音,Android设置多个警报
  13. c51编译器+linux,C51 开源编译器SDCC学习笔记-安装
  14. 《奏爱》彩虹韩漫画风超甜第二话完整版
  15. app上传到安卓各大市场
  16. 计算机主机配件及图解,电脑主机有哪些配件组成
  17. 利用python爬取网易云歌手top50歌曲歌词
  18. Elasticsearch的使用RestHighLevelClient
  19. 王牌英雄(Awesomenauts)研究报告
  20. 浅谈SAP FICO—总账科目

热门文章

  1. base64 img图片按父div等比例显示
  2. 甘肃暴雨强度公式_我国若干城暴雨强度公式列表.doc
  3. html 滑动门效果,js实现简洁的滑动门菜单(选项卡)效果代码
  4. window下的批处理命令学习
  5. 动易CMS - 模板的一些常用标签
  6. 如何安装黑苹果双系统
  7. python爬取金庸小说全集
  8. 如何将两段音乐合并成一段?
  9. eplan和西门子plc的对接_基于EPLAN的西门子电路图高效设计
  10. 基于python管理系统论文_基于Python的学生信息管理系统