当前位置: 首页 > 科技观察

阿里大牛详解分布式系统,大型网站分布式系统实战解析

时间:2023-03-20 01:59:49 科技观察

AliDaniel分布式系统详解,大型网站分布式系统实战分析系统,Scalaout/in水平横向扩展是分布式系统设计的一个特点,可靠性和容错性是两个质量指标。什么是分布式系统?大量的服务器组成一个集合,对于用户来说仍然是一个连贯的系统。A.Tanenbaum定义:分布式计算机网络中组件之间的协调动作通过消息进行通信。G.Coulouris定义:当您知道计算机崩溃时,但您的软件永远不会停止。LeslieLamport定义:分布式系统是一种旨在支持应用程序和服务开发的系统,这些应用程序和服务可以利用由多个自主处理元素组成的物理体系结构,这些元素不共享主内存但通过网络发送异步消息进行协作。与分层应用的区别:分层应用(比如3层)分为应用逻辑,是逻辑分层,不是物理分层,而分布式系统DS是物理分层,与实际部署有关。与传统的集中式系统相比:集中式系统是一种Scaleout/in,垂直扩展,或者将服务器升级为中大型机,或者升级多核,增加CPU核数,集中式垂直扩展是适用于计算程度比较高的聚合数据,而分布式适用于计算松散数据、非结构化或半结构化数据。无论采用哪种扩容伸缩方案,都需要根据业务数据的特点来确定。任何分布式系统总是需要完成两个任务:计算和存储。计算和存储分离是分布式系统的一个重要特征。通常,在集中式或单机系统中,两者可以结合使用。例如,SQL语句用于在查询后进行排序。查询是从存储中获取数据,排序属于计算。因此,这条SQL语句实际上是将计算和存储进行了转换。在处理大数据或大并发的情况下,这种方便的捆绑带来了性能问题,而分布式计算和分布式存储虽然带来了复杂性,但也为系统处理能力的提升和扩展打开了空间。分布式系统特点:并发:共享资源,采用ACID或Base原则,参见:CAP定理。分布式系统设计遵循CAP定理。CAP是:一致性(consistency)、可用性(availability)和分区容错(partitiontolerance)。种类。可伸缩性是一个重要的特性。通过扩展可以获得高性能、高吞吐量和低延迟。可靠性/可用性:故障检测和处理以及恢复容错。在正常运行的系统中,存在时间尺度条件。如果用户不能按比例访问系统,则认为它不可用。可用性公式:可用性=正常运行时间/(正常运行时间+停机时间)容错故障转移是指即使发生错误,系统仍能正常运行。表明系统是容错的。消息处理:具体产品包括:RabbitMQZeroMQNetty等。异构性:不同的操作系统、硬件、编程语言、开发人员、中间件是一种解决方案。安全:授权认证SSO单点登录Oauth等。定位命令:IdentifyresourcesURLsNamingservices定位查找Lookup主要看SOA中的服务查找。例如,Zookeeper实现了服务查找。透明性:访问透明性:对本地和远程资源使用相同的操作位置透明性:访问资源不需要了解其物理或网络位置并发透明性:多个进程可以同时运行以访问共享资源,而不会干扰阻止它们的进程复制透明弹性:可以复制资源的多个实例以提高可靠性和性能,但不需要用户为此进行特殊的应用程序编程。故障透明度:使用户和应用程序能够在出现软件和硬件故障时继续完成任务。移动透明度:允许系统中存在移动资源和客户端。性能透明性:允许系统重新配置以在负载变化时提高性能扩展透明性:能够在不改变应用程序结构的情况下向上或向下扩展系统以增加吞吐量。分布式系统的挑战分布式系统难以理解、设计、构建和管理,它们在设计中引入的变量比单台机器多得多,使得应用程序问题的根本原因更难找到。SLA(服务水平协议)是停机时间和/或性能下降的衡量标准,大多数现代应用程序都具有所需的弹性SLA水平,通常以“9”为增量(例如,每月99.9或99.99%的可用性)。每增加一个9就变得越来越难实现。更复杂的是,我们越来越多地看到分布式系统故障表现为间歇性错误或性能下降(通常称为断电)。这些故障模式需要更多时间来诊断。例如,Joyent运行一些分布式系统作为其云计算基础设施的一部分。在这样一个系统中,包括一个高度可用的分布式键/值存储,Joyent最近经历了短暂的应用程序超时。对于大多数用户来说,系统工作正常,其响应延迟也在SLA的范围内。但是,5%-10%的请求超过预定义的程序超时。此类故障不会在开发或测试环境中重现,它们通常会“消失”几分钟到几小时。解决此问题的基础是需要大量数据存储的系统分析。这些系统包括:数据存储API(node.js)、RDBMS(关系数据库管理系统)和系统内部使用的键/值系统(PostgreSQL),以及操作系统和最终用户应用程序所依赖的键/值系统。最终,导致越界的根本问题是应用程序中的语义锁定,但这需要大量的数据收集和关联工作才能被识别,包括工程师花费的时间和学习不同领域的专业知识。分布式系统受到两个物理因素的限制:节点的数量(可以增加所需的存储和计算能力)和节点之间的距离(信息的传输距离,最好是光速)。这两个约束导致以下挑战会发生什么:故障概率随着独立节点数量的增加而增加(降低可用性和增加管理成本)随着独立节点数量的增加,节点之间通信的消耗可能会增加(性能下降随着规模的增加)地理距离增加远程节点之间的通信延迟增加(降低某些操作的性能)如何构建分布式系统应用于分布式系统架构的最常见术语之一是SOA(面向服务的架构)。SOA可以避免令人不快的CORBA(CommonObjectRequestBrokerArchitecture),通过WS-*标准,一组松散耦合的Web服务完成独立的小功能,并且相互独立,它们是弹性分布式系统的基础。与上一代相比,服务是新流程,它们是系统中处于正确抽象级别的离散功能。构建面向服务的架构的第一步是确定每个功能能力如何构成整体业务目标,并将这些业务映射到具有独立故障边界、可扩展性和数据负载的离散服务。在为每个服务确定服务时,您必须考虑以下因素:地理。该系统将在全球或区域运行?数据隔离。该系统是否提供单租户或多租户模型?SLA。可用性延迟吞吐量一致性和冗余都必须定义。安全。可用性跟踪必须考虑IAAA(身份、认证、授权和审计)、数据机密性和隐私。了解系统使用情况是日常系统操作的一部分,例如容量规划。也可用于强制计费系统的使用和/或治理(配额/速度限制)。部署和配置管理。如何将更新部署到系统?分布式系统模型抽象系统模型(异步/同步)故障模型(崩溃故障、分区)一致性模型(强、最终)通常,我们最熟悉的模式(例如,实现共享内存抽象的分布式系统)过于昂贵.分布式系统越弱,其元素的行动自由度就越大,因此性能可能会更高——但它也可能难以管理。这就需要我们有大智慧,不能为了管理方便而牺牲业绩。因此,试图将分布式系统视为统一的单一系统会阻碍分布式系统的扩展。分布式系统遵循CAP法则,在高一致性、高可用性和分区容错之间二选一:CA(一致性高一致性+可用性高可用性)。2pc两阶段事务提交用于保证。它的缺点是无法实现分区容错。一旦某个操作失败,整个系统就会出错,这是不能容忍的(水至清则无鱼)。CP(consistency高一致性+partitiontolerance分区容错)。Paxos用于确保可用性降低。AP(availability高可用+partitiontolerance分区容错)。使用Gossip实现最终一致性,比如Dynamo。如何正确理解CAP理论?分布式系统的设计技巧:分区和复制有两种设计数据集的方法:分区:它可以拆分到多个节点以允许更多的并行处理。具有更好的性能,但容错性较低。复制:也可以复制或缓存在不同的节点上,以减少客户端和服务器之间的距离以获得更好的容错性,但复制会消耗性能。关键是复制数据之间的一致性。弱一致性提供了更低的延迟和更高的可用性。分布式系统设计技巧:时钟和时序分布式系统对于计算和存储有不同的策略。对于数据存储来说,主要是分区和复制,对于计算来说,主要是保证事件的顺序,因为分布式计算任务是由Event-driven来完成的,比如Storm等。那么事件的顺序就代表了业务逻辑的顺序。事件有时是树形嵌套事件。可靠性是指树形集合中的所有事件必须由网站执行才能成为原子事务。