
分布式学习
分布式学习笔记 极客时间 左耳听风专栏
墨1024
抬头看路,低头做事,回头自省
展开
-
分布式系统学习:01 分布式系统优缺点与发展
为什么需要分布式系统使用分布式系统主要有两方面原因:增大系统容量越来越大的业务量,单一机器的性能无法满足,需要多台机器,需要能对对业务系统进行水平或垂直拆分加强系统可用关键业务需要高可用,系统中不能存在单点故障,不能因为一台机器出故障而导致整体不可用分布式系统还有一些其他优势模块化使得系统模块重用度更高软件服务模块被拆分,可以并行开发和发布系统的扩展性更高分布式系统在解决上...原创 2020-01-03 23:33:12 · 1378 阅读 · 0 评论 -
分布式系统学习:02 分布式系统的难点
亚马逊经验分布式服务化架构思想实践最早的公司应该是亚马逊。因为早在 2002 年的时候,亚马逊 CEO 杰夫·贝索斯(Jeff Bezos)就向全公司颁布了几条架构规定。STEVEY对AMAZON和GOOGLE平台的吐槽亚马逊这么多年的实践让其可以运维和管理极其复杂的分布式服务架构。1、分布式服务的架构需要分布式的团队架构。2、分布式服务查错不容易。 一旦出现比较严重的故障,需要整体查错。...原创 2020-01-24 11:22:14 · 4862 阅读 · 1 评论 -
分布式系统学习:03 分布式系统的技术栈
构建分布式系统的目的:增加系统容量;提高系统的可用性。也就是 大流量处理与关键业务保护。大流量处理 通过集群技术把大规模并发请求的负载分散到不同的机器上关键业务保护 提高后台服务的可用性,把故障隔离起来阻止多米诺骨牌效应(雪崩效应)。需要做的是:一是提高整体架构的吞吐量,服务更多的并发和流量,二是为了提高系统的稳定性,让系统的可用性更高。提高架构的性能提高架构的性能提高系统性...原创 2020-01-26 21:34:04 · 611 阅读 · 0 评论 -
分布式系统学习:04 分布式系统关键技术:全栈监控
全栈监控的重要性全栈系统监控,就像是我们的眼睛,没有它,我们就不知道系统到底发生了什么,我们将无法管理或是运维整个分布式系统。所以,这个系统是非常非常关键的。在分布式或 Cloud Native 的情况下,系统分层多,服务各种关联,相应的需要监控的东西也就特别多,那么这个监控系统需要完成的功能为:全栈监控;关联分析;跨系统调用的串联;实时报警和自动处置;系统性能分析。全栈监控的...原创 2020-02-03 12:15:42 · 374 阅读 · 0 评论 -
分布式系统学习:05 分布式系统关键技术:服务调度
总结一下今天的主要内容:我们从服务关键程度、服务依赖关系、整个架构的版本管理等多个方面,全面阐述了分布式系统架构五大关键技术之一——服务资源调度。服务调度上的一些关键技术,主要有以下几点服务关键程度服务依赖关系服务发现整个架构的版本管理服务应用生命周期全管理服务关键程度和服务的依赖关系服务关键程度: 梳理和定义服务的重要程度,这需要对业务的深入理解,才能定义出架构中各个服务的重...原创 2020-02-03 12:14:47 · 724 阅读 · 0 评论 -
分布式系统学习:06 分布式系统关键技术:流量与数据调度
流量调度与服务治理:一方面,服务治理是内部系统的事,而流量调度可以是内部的,更是外部接入层的事。另一方面,服务治理是数据中心的事,而流量调度要做得好,应该是数据中心之外的事,也就是我们常说的边缘计算,是应该在类似于 CDN 上完成的事。流量调度和服务治理是在不同层面上的,不应该混在一起,所以在系统架构上应该把它们分开。流量调度流量调度的主要功能主要功能是:(提高系统架构的稳定性和高可用...原创 2020-02-03 12:28:23 · 915 阅读 · 0 评论 -
分布式系统学习:07 分布式系统关键技术:洞悉PaaS平台的本质
软件工程能力分布式软件工程能力主要体现在:提高服务的 SLA、能力和资源重用或复用、过程自动化。这三个本质与分布式的技术点是高度一致的,也就是下面这三个方面的能力。分布式多层的系统架构服务化的能力供应自动化的运维能力提高服务的 SLA(服务级别协议)所谓服务的 SLA,也就是我们能提供多少个 9 的系统可用性。提高系统的 SLA 主要表现在两个方面:高可用的系统自动化的运维...原创 2020-02-10 17:00:43 · 1234 阅读 · 0 评论 -
分布式系统学习:08 弹力设计篇:认识故障和弹力设计
关键词总结:分布式系统中关键的设计模式、系统可用性评估、故障原因与分类(无计划宕机、有计划宕机)、故障不可避免。容错设计/弹力设计容错能力:服务隔离、异步调用、请求幂等性。可伸缩性:有状态服务、无状态服务。数据一致性:补偿事务、消息重试。高并发能力:熔断、降级。系统可用性评估可用性计算公式Availability = MTTF / (MTTF + MTTR)M...原创 2020-02-10 16:58:14 · 446 阅读 · 0 评论 -
分布式系统学习:09 弹力设计篇:隔离设计
关键词总结:隔离设计概念(Bulkheads/隔板)、按服务种类隔离、按用户请求隔离隔离设计概念隔离设计对应的单词是 Bulkheads,中文翻译为隔板。这个术语是用在造船上的,也就是船舱里防漏水的隔板。软件设计也存在“漏水”,为了不让“故障”蔓延开来,需要使用“隔板”技术,来将架构分隔成多个“船舱”来隔离故障。一般来说,对于系统的分离有两种方式,一种是以服务的种类来做分离,一种是以用户来做...原创 2020-02-11 18:05:57 · 414 阅读 · 0 评论 -
分布式系统学习:10 弹力设计篇:异步通讯设计
关键词总结:同步调用、异步调用、请求响应、直接订阅、中间人订阅、事件驱动设计同步调用同步调用让系统间只耦合于接口,而且实时性也会比异步调用要高,但同步调用会带来一些问题。同步调用问题调用链木桶效应整个同步调用链的性能会由最慢的那个服务所决定。调用链阻塞同步调用会导致调用方一直阻塞等待被调用方完成,调用链中所有的参与方会有相同的等待时间。同步调用一对一同步调用只能是一对一的,很难...原创 2020-02-11 19:53:29 · 610 阅读 · 0 评论 -
分布式系统学习:11 弹力设计篇:幂等性设计
关键词总结:幂等性设计、全局 ID、HTTP 的幂等性幂等性设计所谓幂等性设计,就是说,一次和多次请求某一个资源应该具有同样的副作用。(副作用相同而不是结果)用数学的语言来表达就是:f(x) = f(f(x))。为什么需要幂等性设计系统解耦隔离后,服务间的调用可能会有三个状态,一个是成功(Success),一个是失败(Failed),一个是超时(Timeout)。成功与失败是明确的状态,...原创 2020-02-12 15:01:47 · 352 阅读 · 0 评论 -
分布式系统学习:12 弹力设计篇:服务的状态
关键词总结:服务的状态、无状态的服务 Stateless、有状态的服务 Stateful服务的状态“状态”,就是为了保留程序的一些数据或是上下文。比如幂等性设计中所需要保留每一次请求的状态;用户登录时的 Session,需要这个 Session 来判断这个请求的合法性;业务流程中多个服务组合起来形成业务逻辑的运行上下文 Context。无状态的服务 Stateless无状态的服务是分布式服...原创 2020-02-12 19:55:19 · 972 阅读 · 0 评论 -
分布式系统学习:13 弹力设计篇:补偿事务
关键词总结:ACID、BASE、业务补偿ACID 和 BASEACID传统关系型数据库系统的事务都有 ACID 属性,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)。原子性整个事务中的所有操作,要么全部完成,要么全部失败,不会停滞在某个中间环节。事务执行发生错误 -> 回滚(Rollbac...原创 2020-02-12 20:47:23 · 290 阅读 · 0 评论 -
分布式系统学习:14 弹力设计篇:重试设计
关键词总结:重试的场景、重试的策略、Spring 的重试策略、重试设计的重点重试的场景重试的故障只是暂时的,而不是永久的适合重试的场景调用超时、被调用端反返回了某种可以重试的错误(如繁忙中、流控中、维护中、资源不足等)。不适合重试的场景业务级的错误(权限不足、非法数据)、技术上的错误重试的策略一般都需要一个重试的最大值,每次重试失败需要休息间隔一段时间再重试Exponential...原创 2020-02-13 11:48:46 · 477 阅读 · 0 评论 -
分布式系统学习:15 弹力设计篇:熔断设计
关键词总结:熔断设计、熔断设计的重点熔断设计分布式系统设计中,重试时如果错误太多,或是在短时间内得不到修复,应该开启熔断操作,尤其是后端太忙的时候,使用熔断设计可以保护后端不会过载。熔断器模式:1、可以防止应用程序不断地尝试执行可能会失败的操作,或者浪费 CPU 时间去等待长时间的超时产生。2、使应用程序能够诊断错误是否已经修正。如果已经修正,应用程序会再次尝试调用操作。熔断器可以使用状态...原创 2020-02-13 12:19:26 · 514 阅读 · 0 评论 -
分布式系统学习:16 弹力设计篇:限流设计
关键词总结:限流的策略、限流的实现方式、基于响应时间的动态限流、限流的设计要点限流的策略限流,是对并发访问进行限速,保护系统不会在过载的情况下出现问题一般来说,触发的限流行为如下拒绝服务一般的做法,是当流量暴增的时候,将同一时间内发起请求数最多的客户端请求全部丢弃。这种方法可以抵挡住恶意发起的高并发请求。服务降级关闭或是把后端服务做降级处理,腾出资源处理更多的请求。降级的方式有:...原创 2020-02-13 17:20:54 · 436 阅读 · 0 评论 -
分布式系统学习:17 弹力设计篇:降级设计
关键词总结:降低一致性、停止次要功能、简化功能、降级设计要点所谓的降级设计(Degradation),本质是为了解决资源不足和访问量过大的问题。当资源和访问量出现矛盾的时候,在有限的资源下,为了能够扛住大量的请求,需要对系统进行降级操作。暂时牺牲掉一些东西,以保障整个系统的平稳运行。牺牲哪些东西:降低一致性。从强一致性变成最终一致性。停止次要功能。停止访问不重要的功能,从而释放出更多的资...原创 2020-02-13 21:11:48 · 544 阅读 · 0 评论