分布式与软件架构
文章平均质量分 87
分布式协议算法、分布式项目的软件架构
拾牙慧者
会点c++、python;
展开
-
System Design笔记:在线售票系统设计
电影票预订系统为其客户提供了在线购买影院座位的能力。Eticketing系统允许客户浏览当前正在播放的电影并预订座位,随时随地。功能要求:1、系统需要高度并发。在任何特定时间点,同一座位都会有多个预订请求。服务应该优雅而公平地处理这一问题。2、这项服务的核心是订票,即金融交易。这意味着系统应该是安全的,并且数据库符合ACID。1。为简单起见,假设我们的服务不需要任何用户身份验证。2、系统不处理部分客票订单。要么用户得到了他们想要的所有门票,要么什么也得不到。3、公平是制度的强制性要求。4、为了防止系统滥用,原创 2022-06-13 23:35:04 · 2264 阅读 · 0 评论 -
后台系统可扩展性学习笔记
整理了一下笔记目录,将以前学习的一些知识串联起来了,比如cdn、负载均衡、中间件,以前只是各自了解了一点,现在大概理清了后台系统设计中他们各自的作用。后台系统可扩展性学习笔记(一)概要后台系统可扩展性学习笔记(二)权衡取舍后台系统可扩展性学习笔记(三)DNS机制原理后台系统可扩展性学习笔记(四)CDN机制原理后台系统可扩展性学习笔记(五)负载均衡后台系统可扩展性学习笔记(六)反向代理后台系统可扩展性学习笔记(七)Service Discovery与微服务后台系统可扩展性学习笔记(八)Ser原创 2022-04-14 15:47:29 · 2766 阅读 · 0 评论 -
后台系统可扩展性学习笔记(十四)异步机制与MQ
对于 Web 服务而言,提升可扩展性的主要途径是将耗时的同步工作改成异步处理,从而允许将这些工作“外包”给多个 Worker 去做,或者提前完成能够预知的部分。异步机制与可扩展性之间的关系需要从(异步)并行处理的优势说起。串行、并发与并行可扩展性,意味着能通过向系统添加资源的方式应对不断增加的工作量。对于多个任务,一般有 3 种执行策略:串行:一个接一个地同步执行,总耗时为所有任务之和并发:多 CPU/多核并发执行,总耗时取决于最慢的任务耗时并行:异步并行执行,总耗时同样取决于最慢的任务耗时原创 2022-04-14 15:21:54 · 392 阅读 · 0 评论 -
CDN缓存替代算法
CDN缓存工作过程如下:用户发出一个请求,如果请求被命中,缓存将对用户的请求进行响应,返回其请求的数据;如果未被命中,缓存向上拉取用户需要的数据,并对其存储的数据进行替换。缓存算法的意义在于,根据用户的请求习惯,对于缓存种的数据进行更新,使得用户据请求的命中率提高,缩短整体响应用户请求延时,同时提高高峰时间网络所能承受的访问容量。现有的缓存替代算法主要思路有下面几种:1、基于访问频率,通过某段时间内对资源被访问的次数进行统计,以此判断该资源接下来是否被访问,典型算法:LFU、2Q、LIRS2、.原创 2021-10-07 12:43:08 · 651 阅读 · 0 评论 -
后台系统可扩展性学习笔记(十三)缓存
在哪儿加缓存缓存什么内容缓存原始查库结果缓存数据对象怎么查询缓存结果预留缓存模式直读模式直写模式回写式缓存绕写式缓存提前刷新模式缓存满了如何处理原创 2022-04-13 16:27:37 · 857 阅读 · 0 评论 -
后台系统可扩展性学习笔记(十二)NoSQL
文章目录NoSQL定义NoSQL种类键值存储文档存储宽列存储图形数据库NoSQL 意味着什么ACID vs. BASESQL or NoSQLNoSQL定义不同于关系型数据库,NoSQL 数据库(也叫非 SQL 或非关系型数据库)提供的数据存储、检索机制并不是基于表关系建模的。没有了数据表,自然就没有了多表连查(join操作)的性能顾虑,范式约束和反范式化的抉择也就不复存在了。对于 NOSQL,另一种有趣的理解是 Not Only SQL,在关系型数据库之外的广阔世界里,数据不一定非要打平存放到二维表原创 2022-04-13 14:15:59 · 471 阅读 · 0 评论 -
后台系统可扩展性学习笔记(十一)Database Denormalization
之前的两篇笔记中谈到了从单库扩展到多库以承载更多的请求量以及单库(表)拆分成多库(表),打破单库的性能瓶颈。这都是为了应对大数据量下的措施。然而,除却数据量外,还有一个极其影响单库性能的因素——数据的组织方式。对于关系型数据库,我们可以尝试在一定程度上改变数据的组织方式,即反范式化(Denormalization)关于范式可以参考以前做的笔记:《MySQL——数据表设计三大范式》设计范式相当于数据层的设计模式,对数据表进行解耦,使单表信息更加内聚,彼此边界分明,依赖关系更加清晰.试想,如果相原创 2022-04-12 16:28:13 · 244 阅读 · 0 评论 -
后台系统可扩展性学习笔记(十)Database Partitioning
为了提升数据库的处理能力,我们把单库扩展成多库,并通过更新同步机制(即Replication)来保证多份数据的一致性。然而,在 各种复制方案下,每个数据库都持有一份完整数据,基于全量数据提供增删改查服务,单库的性能瓶颈仍然存在,并将成为限制系统扩展性的关键因素。单库性能瓶颈单机的硬件资源是有限的,因此单库的处理能力也是有限的:容量有限:数据量可能大到单库无法容纳性能有限:单库的读写性能同样受数据量影响,查询/更新越来越慢单靠加机器/加库显然无法直接解决单机/单库的性能问题,除非进一步打破库的边原创 2022-04-12 16:03:13 · 300 阅读 · 0 评论 -
后台系统可扩展性学习笔记(九)Database Replication
文章目录数据库扩展一致性问题Replication (复制)异步复制同步复制半同步复制拓扑结构单主结构多主结构无主结构复制具体措施参考数据库扩展之前在第一章后台系统可扩展性学习笔记(一)概要谈到:理论上,有了可靠的负载均衡机制,我们就能将 1 台服务器轻松扩展到 n 台,然而,如果这 n 台机器仍然使用同一数据库的话,很快数据库就会成为系统的性能瓶颈和可靠性瓶颈,所以我们需要对于数据库进行扩展。纵向扩展:提升单机配置(硬盘、内存、CPU 等等),但同样会遭遇单机性能瓶颈横向扩展:增加机器,数量上从原创 2022-04-12 14:37:47 · 338 阅读 · 0 评论 -
后台系统可扩展性学习笔记(八)Service Mesh
文章目录网络传输可靠性将微服务控制下沉到网络栈?Sidecar从 Sidecar 到 Service MeshService Mesh + 部署平台参考网络传输可靠性从计网的学习过程中我们可以知道数据在网络传输中可能会出现一些异常状况:数据丢失:数据包可能会到达一个缓冲区已经被塞满的路由器,接着被丢掉顺序出错:一组数据包可能会途径闲忙程度不同的多个路由器,出现不同程度的延迟,最后到达顺序会与发出时的顺序不一致这些丢包重发、顺序重组等控制机制已经由网络协议栈帮我们实现好了,使开发人员更加关注业务原创 2022-04-11 18:11:01 · 919 阅读 · 0 评论 -
后台系统可扩展性学习笔记(七)Service Discovery与微服务
文章目录应用层参考应用层参考http://www.ayqy.net/blog/service-discovery/原创 2022-04-11 16:51:55 · 2698 阅读 · 0 评论 -
后台系统可扩展性学习笔记(六)反向代理
文章目录Web代理服务反向代理反向代理作用Web代理服务Web 代理服务指的是在客户端资源请求和提供这些资源的 Web 服务之间充当中介的角色,代理服务可以实现在客户端,或者从客户端到目标服务器中间的任意环节。例如,客户端不直接向提供目标资源的 Web 服务发起请求,而是带上目标资源的完整 URL 去请求代理服务:GET http://en.wikipedia.org/wiki/Proxy_server HTTP/1.1Accept: text/html代理服务收到之后,(由代理服务来)请求指原创 2022-04-10 15:04:08 · 428 阅读 · 0 评论 -
后台系统可扩展性学习笔记(五)负载均衡
文章目录Load balancer(负载均衡器)请求传输拆解DNS 负载均衡客户端负载均衡OSI 七层模型回顾2 层、3 层负载均衡3/4 层负载均衡7 层负载均衡在第一节谈到了系统的横向扩展在于从单机扩展到多机,那么面临的第一个问题就是这些机器如何协同工作,即如何调度请求?Load balancer(负载均衡器)多服务器下的请求调度机制称为负载均衡(Load balancing),调度器(Dispatcher)即负载均衡器(Load balancer):负载平衡器的基本功能是能够根据调度算法在原创 2022-04-10 14:14:08 · 871 阅读 · 0 评论 -
后台系统可扩展性学习笔记(四)CDN机制原理
文章目录概念梳理CDN拓扑结构架构原理工作原理实现原理概念梳理CDN(Content Delivery Network,内容分发网络)是由分布在不同地理位置的代理服务器及其数据中心组成的网络,希望在空间距离上为用户就近提供服务,以提高可用性和性能。(空间距离体现在网络传输上就是跳数(hop),从客户端到服务器所经过的跳数越多,距离越远,一般延迟也越大)CDN 一般用来托管 Web 资源(包括文本、图像和脚本),可供下载的资源(媒体文件、软件、文档等),应用程序(电子商务、门户网站等),以及流媒体和社交原创 2022-04-09 20:20:56 · 542 阅读 · 0 评论 -
后台系统可扩展性学习笔记(三)DNS机制原理
文章目录DNS概念梳理域名基本概念资源记录基本概念路由策略DNS 域空间结构DNS概念梳理DNS(Domain Name System)相当于互联网的通讯录,能够把域名翻译成 IP 地址。从技术角度来讲,DNS 是个层次型分布式数据库,加上一些既定协议,包括数据库的查询和更新机制、不同服务器间数据库信息的复制机制,以及数据库模式(Schema),除层次型数据库外,还有关系型数据库和网状数据库。DNS 源于互联网的早期,当时的互联网还是美国国防部(the United States Departmen原创 2022-04-09 15:42:18 · 1742 阅读 · 0 评论 -
后台系统可扩展性学习笔记(二)权衡取舍
文章目录性能与可扩展性延迟与吞吐量可用性与一致性一致性模式可用性模式可用性衡量参考系统设计中也面临许多权衡取舍:性能与可扩展性延迟与吞吐量可用性与一致性性能与可扩展性可扩展,意味着服务能以加资源的方式成比例地提升性能,性能提升体现在能够承担更多的工作量,但加资源也会引入多样性:一些节点可能比其它节点的处理能力更强大,另一些老旧节点可能弱一些,而系统又必须适应这种异质性(heterogeneity),那么依赖均匀性的算法就会对新节点利用不足,继而产生性能影响延迟与吞吐量延迟(Latency原创 2022-04-07 15:06:48 · 616 阅读 · 0 评论 -
后台系统可扩展性学习笔记(一)概要
文章目录系统大致架构可扩展性负载均衡器与会话保持引入冗余增强系统可用性缓存减轻数据库压力异步处理参考系统大致架构当一个用户请求从客户端出发,经过网络传输,达到 Web 服务层,接着进入应用层,最后抵达数据层,它所途径的过程如下:对应到系统设计的逻辑层:运作机制如下:1、客户端查DNS得到服务对应的IP地址,可能指向位于Web服务之前的负载均衡器,也可能是CDN,就近提供对象存储中的静态资源2、发向Web服务的请求被负载均衡器(如反向代理)按照既定策略分给相应的Web服务器,进入应用层3、请原创 2022-04-07 14:22:08 · 2909 阅读 · 0 评论 -
raft算法学习(一):角色概念以及选举过程
Raft算法是强领导模型,集群中只能有一个领导。下面是raft的视频讲解:raftraft的三种角色及其概念服务器节点状态一共有三种:领导者(Leader)、跟随着(Follower)、候选人(Candidate)跟随者:接受和处理来自领导者的消息,当等待领导者心跳信息超时时,推荐自己当候选人候选人:向其他节点发送请求投票的RPC消息,通知其他节点来投票,如果赢得了大多数选票,就晋升当领导者领导者:处理写请求、管理日志复制、不断发送心跳信息,表示自己还活着,不要发起新的选举选举领导者的过程原创 2021-10-17 14:24:12 · 2018 阅读 · 0 评论 -
单体、分布式、微服务、Serverless软件架构一览
目录软件架构单体架构分布式应用微服务架构Serverless架构总结Reference软件架构软件架构就是软件的基本结构,合适的架构是软件成功的最重要因素之一。这里列举了目前流行的4种软件架构。单体架构典型的三级架构:前端(web/手机端)+ 中间业务逻辑层 + 数据库。这是典型的Java Spring MVC 或者Python Django框架的应用。单体架构应用容易部署测试,但是随着需求不断增加,会变得十分臃肿,可维护性、灵活性会逐渐降低。复杂性高:一个百万行级别的单体应用,整个项目包含原创 2021-10-09 14:48:20 · 717 阅读 · 0 评论 -
缓存一致性解决方法
对于缓存 + 数据库读写,有个经典的Cache Aside Pattern:读取:先读取缓存,缓存里没有,读取数据库,然后返回响应,顺便保存缓存:更新:先更新数据库,然后删除缓存为什么是删除缓存而不是更新缓存?并发情况下更新缓存可能会带来更多问题,直接删除缓存更加稳妥缓存更新消耗更多资源,直接删除,用时再从数据库读取,写进缓存,更省性能一致性问题假设更新数据库成功,接下来还没来得及删除缓存,或者删除缓存失败,此时其他线程进来读的就是脏数据。既然删除缓存失败会导致脏数据,那么就得想办法能让它原创 2021-10-08 22:15:10 · 964 阅读 · 1 评论 -
13种负载均衡算法
目录(1)轮转调度(Round-Robin Scheduling)算法(2)加权轮转调度(Weighted Round-Robin Scheduling)算法(3)随机均衡调度(Random Scheduling)算法(4)加权随机均衡调度(Weighted Random Scheduling)算法(5)最小连接调度(Least-Connection Scheduling)算法(6)加权最小连接调度(Weighted Least-Connection Scheduling)算法(7)目标地址散列调度(De.原创 2021-10-02 11:14:52 · 6107 阅读 · 0 评论 -
Paxos算法(Basic Paxos 与 Multi-Paxos思想)
Paxos 算法包含 2 个部分:1、Basic Paxos : 描述多节点之间如何就某个值达成共识2、Multi-Paxos : 描述执行多个Basic Paxos实例,对一系列值达成共识Basic Paxos三个角色该算法中存在三个角色:提议者、接受者、学习者,关系如下:提议者:提议一个值,用于投票表决。在大多数场景中,往往是集群中收到客户端请求的节点时提议者。这样对于业务代码就没有侵入性,不需要再业务代码中实现算法逻辑。接受者:对每个提议的值进行投票,并存储接受的值。一般来说,集群中的原创 2021-09-18 16:06:29 · 1225 阅读 · 0 评论 -
BASE理论(基本可用策略+ 最终一致性实现)
目录实现基本可用的几个策略1、流量削峰(不同地区售票时间错峰出售)2、延迟响应,异步处理(买票排队,基于队列先收到用户买票请求,排队异步处理,延迟响应)3、体验降级(看到非实时数据,采用缓存数据提供服务)4、过载保护熔断/限流,直接拒绝掉一部分请求,或者当请求队列满了,移除一部分请求,保证整体系统可用)5、 故障隔离(出现故障,做到故障隔离,避免影响其他服务)6.、弹性扩容(基于Metric和Monitor实现系统态势感知,做到弹性伸缩)实现最终一致性的具体方式1、读时修复2、写时修复3、异步修复使用BA.原创 2021-09-17 15:49:20 · 3522 阅读 · 0 评论 -
什么是ACID理论(二阶段、三阶段提交、TCC)
ACID理论时对事务特性的抽象和总结,想要实现ACID需要掌握二阶段提交协议以及TCC二阶段提交协议:通过二阶段的协商来完成一个提交操作首先定义一个分布式事务操作,发起这个事务到分布式系统种的节点中。某一个节点收到消息后扮演协调者身份,与其他节点联系,发送网络消息,发起二阶段提交。然后协调者进入请求提交阶段(即投票阶段),其他节点进行评估,评估事务中需要操作的对象和对象状态是否准备好、是否提交新操作,然后回复协调者,协调者收到所有回复后,进入提交执行阶段(即完成阶段)。协调者先执行事务,然后通知其他原创 2021-09-16 22:56:47 · 706 阅读 · 0 评论 -
CAP理论
节点间地分区故障是必然发生地,也就是说分区容错性§是必须保证的前提。所以要么选择一致性,组成AP。要么选择可用性,保证服务可用。CP含义:一定会读到最新地数据,不会读到旧数据。但如果因为消息丢失、延迟过高发生了网络分区,那么此时,当集群节点接收到来自客户端地请求时,为了不破坏一致性,可能会因为无法相应最新数据,而返回出错信息。cp模型适合要求acid场景,比如银行转账。AP含义:系统将始终处理客户端地查询,返回特定信息,如果发生了网络分区,一些节点将无法返回最新地特定信息,它们将返回自己当前.原创 2021-09-16 20:20:12 · 299 阅读 · 0 评论