分布式基础知识

参考 https://github.com/CyC2018/Interview-Notebook/blob/master/notes/

基本概念

(1)异常:

  • 1. 服务器宕机

  内存错误、服务器停电等都会导致服务器宕机,此时节点无法正常工作,称为不可用。

  服务器宕机会导致节点失去所有内存信息,因此需要将内存信息保存到持久化介质上。

  • 2. 网络异常

  有一种特殊的网络异常称为 网络分区 ,即集群的所有节点被划分为多个区域,每个区域内部可以通信,但是区域之间无法通信。

  • 3. 磁盘故障

  磁盘故障是一种发生概率很高的异常。

  使用冗余机制,将数据存储到多台服务器。

 

(2)超时:
  可以将服务器的操作设计为具有 幂等性 ,即执行多次的结果与执行一次的结果相同。如果使用这种方式,当出现超时的时候,可以不断地重新请求直到成功。

 

(3)衡量指标

  • 1. 性能

  常见的性能指标有:吞吐量、响应时间。这两个指标往往是矛盾的,追求高吞吐的系统,往往很难做到低响应时间。

  高吞吐意味并发系统,高并发提高 CPU 资源的利用率,但是请求不能马上被处理,需要和其它请求一起进行并发处理,响应时间增高。

  • 2. 可用性:指系统在面对各种异常时可以提供正常服务的能力
  • 3. 一致性:见之前的文章
  • 4. 可扩展性:指系统通过扩展集群服务器规模来提高性能的能力。

---------------------------------------------------------------------------------------------------------------------

数据分布

(1)哈希分布

  将数据计算哈希值之后,按照哈希值分配到不同的节点上。例如有 N 个节点,数据的主键为 key,则将该数据分配的节点序号为:hash(key)%N。

  传统的此类算法存在问题:当节点数量变化时,也就是 N 值变化,那么几乎所有的数据都需要重新分布,将导致大量的数据迁移。

然后提出了一致性哈希

  Distributed Hash Table(DHT):对于哈希空间 0~2n,将该哈希空间看成一个哈希环,将每个节点都配置到哈希环上。每个数据对象通过哈希取模得到哈希值之后,存放到哈希环中顺时针方向第一个大于等于该哈希值的节点上。

 

  一致性哈希的优点是在加入或者删除节点时只会影响到哈希环中相邻的节点。

(2)顺序分布

  哈希分布式破坏了数据的有序性,顺序分布则不会。

  顺序分布的数据划分为多个连续的部分,按一定策略分布到不同节点上。例如下图中,User 表的主键范围为 1 ~ 7000,使用顺序分布可以将其划分成多个子表,对应的主键范围为 1 ~ 1000,1001 ~ 2000,...,6001 ~ 7000。

  引入 Meta 表是为了支持更大的集群规模,它将原来的一层索引结分成两层,Meta 维护着 User 子表所在的节点,从而减轻 Root 节点的负担。

---------------------------------------------------------------------------------------------------------------

负载均衡

  衡量负载的因素很多,如 CPU、内存、磁盘等资源使用情况、读写请求数等。分布式系统应当能够自动负载均衡,当某个节点的负载较高,将它的部分数据迁移到其它节点。

  每个集群都有一个总控节点,其它节点为工作节点,由总控节点根据全局负载信息进行整体调度,工作节点定时发送心跳包(Heartbeat)将节点负载相关的信息发送给总控节点。

  一个新上线的工作节点,由于其负载较低,如果不加控制,总控节点会将大量数据同时迁移到该节点上,造成该节点一段时间内无法工作。因此负载均衡操作需要平滑进行,新加入的节点需要较长的一段时间来达到比较均衡的状态。

--------------------------------------------------------------

复制

  复制是保证分布式系统高可用的基础,让一个数据存储多个副本,当某个副本所在的节点出现故障时,能够自动切换到其它副本上,从而实现故障恢复。

  多个副本通常有一个为主副本,其它为备副本。主副本用来处理写请求,备副本主要用来处理读请求,实现读写分离。主副本将同步操作日志发送给备副本,备副本通过回放操作日志获取最新修改。

  两种:强同步复制协议,一种是异步复制协议。(分别在可用性和一致性有不同的表现,即CA不能共同满足)

---------------------------------------------------------------------------

CAP理论:在之前的文章中有讲过(分区容错需要保证,CA之间权衡)

BASE:基本可用、软状态、最终一致性:由CAP演化而来,在一致性上妥协

即使无法做到强一致性,但每个应用都可以根据自身业务特点,采用适当的方式来使系统达到最终一致性。

  ACID 是传统数据库系统常用的设计理论,追求强一致性模型。BASE 常用于大型分布式系统,只需要保证最终一致性。在实际的分布式场景中,不同业务单元和组件对一致性的要求是不同的,因此 ACID 和 BASE 往往会结合在一起使用。

-------------------------------------------------------------------

容错:(自动化容错)

故障检测:可以通过租约机制 来对故障进行检测

故障恢复:当某个节点故障时,就将它上面的服务迁移到其它节点。可也有主动恢复机制

--------------------------------------------------------------------

CDN架构

  通过将内容发布到靠近用户的边缘节点,使不同地域的用户在访问相同网页时可以就近获取。不仅可以减轻服务器的负担,也可以提高用户的访问速度。

  从下图可以看出,DNS 在对域名解析时不再向用户返回源服务器的 IP 地址,而是返回边缘节点的 IP 地址,所以用户最终访问的是边缘节点。边缘节点会先从源服务器中获取用户所需的数据,如果请求成功,边缘节点会将页面缓存下来,下次用户访问时可以直接读取。

  • 1
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

<p> <span style="color:#24292E;"><span style="color:#333333;">Ceph是一个<span style="color:#0070C0;">可靠的、数据自动重均衡、自动恢复的SDS</span>(软件定义存储)分布式存储系统,功能主要有三大块:<span style="color:#0070C0;">块存储</span>、<span style="color:#0070C0;">对象存储</span>、<span style="color:#0070C0;">文件系统</span>。</span></span> </p> <p> <br /></p> <p> <span style="color:#333333;">Ceph不但是提供了统一存储,并且同时还充分利用了客户端的计算能力,在存储每一个数据时,都会通过计算得出该数据存储的位置,尽量将数据分布均衡,同时由于Ceph的设计,采用了CRUSH算法、HASH环等方法,使得它不存在传统的单点故障的问题,且<span style="color:#0070C0;">随着规模的扩大性能并不会受到影响</span>。</span> </p> <p> <span style="color:#24292E;"><br /></span> </p> <p> <span style="color:#24292E;">不管是私有云还是公有云,随着云架构的发展,</span><span>Ceph </span><span style="color:#24292E;">成为了</span><span>OpenStack</span><span style="color:#24292E;">、</span><span>Proxmox</span><span style="color:#24292E;">标配的后端存储,不光如此,就连目前最火的容器编排</span><span> </span><span style="color:#0070C0;"><span>Kubernetes </span><span>持久存储</span></span><span style="color:#24292E;">也都支持</span><span> Ceph </span><span style="color:#24292E;">,让</span><span> Ceph </span><span style="color:#24292E;">成为当前主流的存储系统,而对</span><span> Ceph </span><span style="color:#24292E;">存储的学习也就变的刻不容缓。</span> </p> <p>   </p> <p> 该课程属于比较基础的 Ceph 存储课程,旨在让大家能快速上手对 Ceph 集群的部署以及操作,主要讲解以下几个方面: </p> <p>   </p> <p> <strong>1.<span style="font-size:9px;">     </span>架构的介绍</strong> </p> <p> <strong>2.<span style="font-size:9px;">     </span>集群的多种部署方式</strong> </p> <p> <strong>3.<span style="font-size:9px;">     </span>块存储部署,客户端使用及快照、克隆和镜像</strong> </p> <p> <strong>4.<span style="font-size:9px;">     </span>对象存储的部署及简单使用</strong> </p> <p> <strong>5.<span style="font-size:9px;">     </span>Ceph FS 文件系统的部署、客户端使用及导出为NFS</strong> </p> <p> <strong>6.<span style="font-size:9px;">     </span>集群的操作和管理,包括服务,集群扩展,缩减和集群维护</strong> </p> <p> <strong>7.<span style="font-size:9px;">     </span>Ceph 基础知识的介绍,包括集群map,PG和身份验证</strong> </p> <p> <strong>8.<span style="font-size:9px;">     </span>Ceph 集群的监控</strong> </p> <p> <strong><br /></strong> </p> <p> <strong><img src="https://img-bss.csdn.net/201905100226073434.png" alt="" /><br /></strong> </p> <p> <strong><br /></strong> </p> <p> <strong><img src="https://img-bss.csdn.net/201905100226266034.png" alt="" /><br /></strong> </p> <p> <strong><br /></strong> </p> <p> <strong><br /></strong> </p> <p> <strong><br /></strong> </p> <p> <strong><br /></strong> </p>
<p style="font-size:14px;color:#333333;"> <span style="color:#000000;">1、课程简介</span> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;">Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。</span> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#FF0000;">       <span style="color:#000000;">在本套课程中,我们将全面的讲解Spring Cloud技术栈, 从环境的部署到技术的应用,再到项目实战,让我们不仅是学习框架技术的使用,而且可以学习到使用Spring Cloud如何解决实际的问题。</span></span> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;">Spring Cloud各个组件相互配合,合作支持了一套完整的微服务架构。</span> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;">- 注册中心负责服务的注册与发现,很好将各服务连接起来</span> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;">- 断路器负责监控服务之间的调用情况,连续多次失败进行熔断保护。</span> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;">- API网关负责转发所有对外的请求和服务</span> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;">- 配置中心提供了统一的配置信息管理服务,可以实时的通知各个服务获取最新的配置信息</span> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;">- 链路追踪技术可以将所有的请求数据记录下来,方便我们进行后续分析</span> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;">- 各个组件又提供了功能完善的dashboard监控平台,可以方便的监控各组件的运行状况</span> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;">2、适应人群</span> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;">有一定的Java基础,并且要有一定的web开发基础。</span> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;">3、课程亮点</span> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;">       系统的学习Spring Cloud技术栈,由浅入深的讲解微服务技术。涵盖了基础知识,原理剖析,组件使用,源码分析,优劣分析,替换方案等,以案例的形式讲解微服务中的种种问题和解决方案</span> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;"><span>l<span style="font-size:9px;">  </span></span><span>微服务的基础知识</span></span> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;"><span>n<span style="font-size:9px;">  </span></span><span>软件架构的发展史</span></span> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;"><span>n<span style="font-size:9px;">  </span></span><span>微服务的核心知识(CAP,RPC等)</span></span> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;"><span>l<span style="font-size:9px;">  </span></span><span>注册中心</span></span> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;"><span>n<span style="font-size:9px;">  </span></span><span>Eureka搭建配置服务注册</span></span> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;"><span>n<span style="font-size:9px;">  </span></span><span>Eureka服务端高可用集群</span></span> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;"><span>n<span style="font-size:9px;">  </span></span><span>Eureka的原理和源码导读</span></span> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;"><span>n<span style="font-size:9px;">  </span></span><span>Eureka替换方案Consul</span></span> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;"><span>n<span style="font-size:9px;">  </span></span><span>Consul下载安装&服务注册&高可用</span></span> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;"><span>l<span style="font-size:9px;">  </span></span><span>服务发现与服务调用</span></span> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;"><span>n<span style="font-size:9px;">  </span></span><span>Ribbon负载均衡基本使用&源码分析</span></span> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;"><span>n<span style="font-size:9px;">  </span></span><span>Feign的使用与源码分析</span></span> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;"><span>n<span style="font-size:9px;">  </span></span><span>Hystrix熔断(雪崩效应,Hystrix使用与原理分析)</span></span> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;"><span>n<span style="font-size:9px;">  </span></span><span>Hystrix替换方案Sentinel</span></span> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;"><span>l<span style="font-size:9px;">  </span></span><span>微服务网关</span></span> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;"><span>n<span style="font-size:9px;">  </span></span><span>Zuul网关使用&原理分析&源码分析</span></span> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;"><span>n<span style="font-size:9px;">  </span></span><span>Zuul 1.x 版本的不足与替换方案</span></span> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;"><span>n<span style="font-size:9px;">  </span></span><span>SpringCloud Gateway深入剖析</span></span> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;"><span>l<span style="font-size:9px;">  </span></span><span>链路追踪</span></span> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;"><span>n<span style="font-size:9px;">  </span></span><span>链路追踪的基础知识</span></span> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;"><span>n<span style="font-size:9px;">  </span></span><span>Sleuth的介绍与使用</span></span> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;"><span>n<span style="font-size:9px;">  </span></span><span>Sleuth与Zipkin的整合开发</span></span> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;"><span>l<span style="font-size:9px;">  </span></span><span>配置中心</span></span> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;"><span>n<span style="font-size:9px;">  </span></span><span>SpringClond Config与bus 开发配置中心</span></span> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;"><span>n<span style="font-size:9px;">  </span></span><span>开源配置中心Apollo</span></span> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;">4、主讲内容</span> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;">章节一:</span> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;">1.<span style="font-size:9px;">     </span>微服务基础知识</span> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;">2.<span style="font-size:9px;">     </span>SpringCloud概述</span> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;">3.<span style="font-size:9px;">     </span>服务注册中心Eureka</span> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;">4.<span style="font-size:9px;">     </span>Eureka的替换方案Consul</span> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;">章节二:</span> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;">1.<span style="font-size:9px;">     </span>Ribbon实现客户端负载均衡</span> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;">2.<span style="font-size:9px;">     </span>基于Feign的微服务调用</span> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;">3.<span style="font-size:9px;">     </span>微服务熔断技术Hystrix</span> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;">4.<span style="font-size:9px;">     </span>Hystrix的替换方案Sentinel</span> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;">章节三:</span> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;">1.<span style="font-size:9px;">     </span>微服务网关Zuul的基本使用</span> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;">2.<span style="font-size:9px;">     </span>Zuul1.x 版本的不足和替换方案</span> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;">3.<span style="font-size:9px;">     </span>深入SpringCloud Gateway</span> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;">4.<span style="font-size:9px;">     </span>链路追踪Sleuth与Zipkin</span> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;">章节四:</span> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;">1.<span style="font-size:9px;">     </span>SpringCloud Config的使用</span> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;">2.<span style="font-size:9px;">     </span>SpringCloud Config结合SpringCloud Bus完成动态配置更新</span> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;">3.<span style="font-size:9px;">     </span>开源配置中心Apollo</span> </p>
相关推荐
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值