阿里P8架构师告诉你什么是分布式架构

一、前言

我们都知道,当今无论在BAT这样的大公司,还是各种各样的小公司,甚至是传统行业刚转互联网的企业都开始使用分布式架构,那么什么叫分布式架构呢?分布式架构有什么好处呢?分布式架构经过了怎样的发展呢?是哪家企业开启了分布式架构的时代呢?读完本文,你就会得到这些答案,下面让我们一起来开启分布式概述的奇妙之旅吧!

二、分布式架构的发展历史

1946年2.14日,那是一个浪漫的情人节 , 世界上第一台电子数字计算机在美国宾夕法尼亚大学诞生了,她的名字叫ENIAC。这台计算机占地170平米、重达 30 吨,每秒可以进行 5000 次加法运算。

第一台电子计算机诞生以后,就意味着一个日新月异的 IT 时代到来了。单台计算机的性能不断得到提升,从最早的 8 位 CPU 到现在的 64 位 CPU;从早期的 MB 级内存到现在的 GB 级别内存;从慢速的机械存储到现在的固态 SSD 硬盘存储。

ENIAC 之后,电子计算机就进入了 IBM 主导的大型机时代。1964 年 4 月 7 日,在吉恩.阿姆达尔(IBM 大型机之父, 被认为是有史以来最伟大的计算机设计师之一)的带领下,耗费 50 亿美元,历时三年,第一台 IBM 大型机 SYSTEM/360 诞生了。这使得 IBM 在 20 世纪 50~60 年代统治着整个大型计算机工业,奠定了 IBM 计算机帝国的基础。IBM 大型机曾支撑美国航天登月计划,IBM 主机一直服务于金融等核心行业的关键领域。由于超强的计算能力和高可靠性,即使在 X86 和云计算高速发展的背景下,IBM 的大型机依然牢牢占据着一定的高端市场份额。

20 世纪 80 年代,在大型机霸权的时代下,计算机的架构同时向两个方向发展:

1、以 CISC (微处理器执行的计算机语言指令集) CPU 为架构的面向个人、价格便宜的PC。
2、以 RISC (精简指令集计算机) CPU 为架构的面向企业、价格昂贵的小型 UNIX 服务器。

三、分布式架构发展的里程碑

大型主机凭借着大型机超强的计算和 I/O 处理能力、安全性、 稳定性等,在很长一段时间内,大型机引领着计算机行业及商业计算领域的发展。而集中式的计算机系统架构也渐渐成为了主流。但是随着社会的发展,这种架构越来越难以适应企业的需求,比如说:

1.大型主机复杂性高,培养一个能够熟练运维大型主机的人成本很高。
2.大型主机很贵,一般只有土豪机构(政府、电信、金融)才能用得起。
3.会有单点问题,一旦大型主机出现故障,那整个系统就将处于不可用的状态。而对于大型机的使用机构来说,这种不可用导致的损失是非常具大的。
4.由于科技的进步、技术的发展,PC 机性能得到了不断提升,所以很多企业放弃大型机改用小型机及普通 PC 来搭建系统架构。
阿里巴巴发起的"去 IOE"运动开启新时代
IOE 指的是 IBM 小型机、Oracle 数据库、EMC 的高端存储。阿里巴巴2009 年“去 IOE”战略技术总监透露,截止到 2013 年 5 月 17 日阿里巴巴最后一台 IBM 小型机在支付宝下线。

为什么要去 IOE?

随着业务的快速发展,阿里巴巴业务量和数据量呈爆发性增长,传统集中式 Oracle 数据库架构在系统的扩展性方面遭遇到了瓶颈。 传统的商业数据库软件(Oracle,DB2)多以集中式架构为主, 那么这些传统数据库软件的最大特点就是将所有的数据都集中在 一个数据库中,只能依靠大型高端设备来提供高处理能力和扩展性。 集中式数据库的扩展性主要采用向上扩展(Scale up)的方式, 通过增加 CPU、内存、磁盘等方式提高系统处理能力。这种集中式数据库的架构,使得数据库成为了整个系统的瓶颈,已经越来越不能适应海量数据对计算能力的要求。

四、分布式系统的意义

之所以要发展分布式系统架构,是因为单机系统存在着如下诸多缺点等待被解决:

升级单机处理能力的性价比越来越低,我们知道单机的处理能力主要依靠 CPU、内存、磁盘。通过升级硬件来这种垂直扩展的方式来提升性能,成本会越来越高。性价比会越来越低。
单机处理能力存在瓶颈,并且单机处理能力存在瓶颈,CPU、内存、磁盘都会有自己的性能瓶颈, 就算你是土豪不惜成本去提升硬件,但是硬件的发展速度和性能也还是有限制的。
稳定性和可用性这两个指标很难达到
最后就是单机系统存在可用性和稳定性的问题,这两个指标又是我们亟待要去解决的问题。

五、分布式架构的常见概念

1.集群

小张开了一家小饭店,刚开始的时候店里只有一个厨师,切菜洗菜备料炒菜全干。后来由于饭香甜可口,人流量越来越多了,一个厨师忙不过来了,小张又请了两个厨师,那么这时候三个厨师炒一样的菜,做相同的切菜洗菜备料炒菜等工作,那这三个厨师的关系是集群。也就意味着来一个顾客,只有其中的一个厨师会为这个顾客服务。

2.分布式

又经过一段时间,店里的生意更加火爆了,小张为了让厨师们能专心炒菜,把菜做到极致,又请了个配菜师负责切菜、备菜、备料,那么厨师和配菜师的关系是分布式,后来一个配菜师也忙不过来了,小张就又请了两个配菜师,三个配菜师关系也是集群。

3.节点

节点是指一个可以独立按照分布式协议完成一组逻辑的程序个体。在具体的项目中,一个节点表示的是一个操作系统上的进程。 那这里的每一个配菜师和厨师都是一个节点。

4.副本机制

副本(replica/copy)是指在分布式系统中为数据或服务提供的冗余。 数据副本指在不同的节点上持久化同一份数据,当某一个节点出现数据丢失时,可以从副本上恢复数据。数据副本是分布式系统中解决数据丢失问题的唯一手段。 服务副本表示多个节点提供相同的服务,通过主从关系来实现服务高可用的方案。

5.中间件

中间件位于操作系统提供的服务之外,但又不属于应用,他是位于应用和系统层之间的、为开发者方便的处理通信、输入输出的一类软件,能够让用户只关心自己应用的部分。

六、分布式领域中冯诺依曼模型的变化


上图是经典理论-冯.诺依曼体系,计算机硬件由运算器、 控制器、存储器、输入设备、输出设备五大部分组成。不管架构怎么变化,计算机仍没有跳出该体系的范畴。

输入设备的变化
分布式系统架构中,输入设备可以分两类:第一类是互相连接的多个节点,在接收其他节点传来的信息作为该节点的输入;另一种就是传统意义上的人机交互的输入设备了。

输出设备的变化
分布式系统架构中,输出也分两类,一种是系统中的节点向其他节点传输信息时,该节点可以看作是输出设备;另一种就是传统意义上的人际交互的输出设备,比如用户的终端。

控制器的变化
在单机中,控制器指的是 CPU 中的控制器,在分布式系统中,控制器主要的作用是协调或控制节点之间的动作和行为; 比如硬件负载均衡器;LVS 软负载;规则服务器等等。

运算器
分布式系统中,运算器是由多个节点来组成的。运用多个节点的计算能力来协同完成整个计算任务。

存储器
分布式系统中,我们需要把承担存储功能的多个节点组织在一起, 组成一个整体的存储器;比如数据库、redis(key-value 存储) 。

七、分布式系统的难点

毫无疑问,分布式系统对于集中式系统而言,在实现上会更加 复杂。分布式系统将会是更难理解、设计、构建 和管理的,同 时意味着应用程序的根源问题更难发现。

三态
在集中式架构中,调用一个接口返回的结果只有两种, 成功或失败。但是在分布式架构中,会出现“超时”这个状态。

分布式事务
这其实是一个老生常谈的问题,我们都知道事务就是一系列操作的原子性保证,在单机的情况下,我们能够依靠本机的数据库连接和组件很轻易的做到事务控制,但在分布式架构下,业务原子性操作很可能是跨服务的,这样就会导致分布式事务。比如 A 、B 操作分别是在不同服务下的同一个事务内的操作,A 调用 B,如果A可以清楚的知道 B 是否成功提交从而控制自身提交还是回滚,但我们知道在分布式系统调用中会出现一个新状 态就是超时,就是 A 并无法知道 B 是成功还是失败,这个时候 A 是提交本地事务还是执行回滚呢?这其实是一个很难的问题,如果要强行保证事务一致性,可以采取分布式锁,但那样会增加系统复杂度而且会增大系统的开销,而且事务跨越的服务越多, 消耗的资源越大,性能越低,那么最好的解决方案就是避免分布式事务。 还有一种解决方案就是重试机制,但是重试如果不是查询接口, 久必然涉及到数据库的变更,如果第一次调用成功但是没返回成功结果,那调用方第二次调用对调用方来说依然是重试,但是此时对于被调用方来说是重复调用,例如 A 向 B 转账,A-100,B + 100,这样会导致 A 扣了 100,而 B 增加 200。这样的结果并不是我们期望的,因此需在要写入的接口做幂等设计(多次调用和单次调用是一样的效果)。通常可以设置一个唯一键,在写入的时候查询是否已经存在,避免重复写入。但是幂等设计的一 个前提就是服务高可用,否则无论怎么重试都不能调用返回一个明确的结果,那调用方会一直等待,虽然可以限制重试的次数, 但是这已经进入异常状态了,甚至到了极端情况还需要人肉补偿处理。其实根据 CAP 和 BASE 理论,不可能在高可用分布式情况下做到一致性,一般都是最终一致性保证。

负载均衡

为了达到服务高可用,每个服务至少是部署两台机器,因为互联网公司一般使用可靠性不是很高的普通机器, 长期运行宕机概率很高,所以两台机器能够大大降低服务不可用的可能性,而大型项目往往会采用十几台甚至上百台来部署一 个服务,这不仅是保证服务的高可用,更是为了提升服务的 QPS, 但是这样又带来一个问题,一个请求过来到底路由到哪台机器呢? 路由算法很多,有 DNS 路由,如果 session 在本机,还会根据用户 id 或则 cookie 等信息路由到固定的机器,当然现在应用服务器为了扩展的方便都会设计为无状态的,session 会保存到专有的 session 服务器,所以一般不会涉及到拿不到 session 问 题。那路由规则是随机获取么?这是一个方法,但是据我所知, 实际情况肯定比这个复杂得多,在一定范围内随机,但是在大范围也会分为很多个域,比如如果为了保证异地多活的多机房, 夸机房调用的开销太大,肯定会优先选择同机房的服务,这个 要参考具体的机器分布来考虑。

一致性

数据被分散或者复制到不同的机器上,如何保证各台主机之间的数据一致性将成为一个难点。

故障的独立性

分布式系统由多个节点组成,整个分布式系统完全出问题的概率是存在的,但是在实践中出现更多的是某个节点出问题,其他节点都没问题。这种情况下我们实现分布式系统时需要考虑得更加全面些。

写在最后:欢迎留言讨论,加关注,持续更新!!!

原文地址:http://blog.51cto.com/13945245/2166761

时间: 2024-08-30 06:32:33

阿里P8架构师告诉你什么是分布式架构的相关文章

架构师素养及从小菜进阶架构(CTO)的书籍【转】

CTO要了解无线技术/搜索/大数据/数据库等. -- 通常定义架构有几个层次,这包括业务架构.产品架构.应用架构和技术架构: 1.业务架构:描述一个企业围绕一个行业做了哪些业务,例如支付行业的收单.退款.出款.充转提等能力,这与公司对外和对内定义的产品无关. 2.产品架构:描述对外和对内定义的可销售的产品,例如微信的条码支付.扫码支付.公众号支付等. 3.应用架构:描述提供了哪些系统和服务来实现对外和对内的产品架构,从而支持公司的业务架构,例如微信内部的订单系统.支付系统.账务系统和对账系统等等

直击架构本质:优秀架构师必须掌握的几种架构思维

介绍 架构的本质是管理复杂性,抽象.分层.分治和演化思维是我们工程师/架构师应对和管理复杂性的四种最基本武器. 最近团队来了一些新人,有些有一定工作经验,是以高级工程师/架构师身份进来的,但我发现他们大部分人思维偏应用和细节,抽象能力弱.所以作为团队技术培训的一部分,我整理了这篇文章,希望对他们树立正确的架构设计思维有帮助.我认为,对思维习惯和思考能力的培养,其重要性远远大于对实际技术工具的掌握. 由于文章内容较长,所以我把它分成两篇小文章,在第一篇<优秀架构师必须掌握的架构思维>中,我会先介

分享JAVA从初级程序员到架构师视频,文档,架构设计,大型网站架构分析,大数据分析资料

JAVA从初级程序员到架构师视频,文档,架构设计,大型网站架构分析,大数据分析资料, 搭建高并发.高可用电商架构设计资料需要的联系我.很多目录都没列出来(QQ空间相册里有很多目录的截图)加QQ:1927360914

十几位资深架构师,整理了2019最新架构师学习体系,分享给大家......

不管是开发.测试.运维,每个技术人员心里都有一个成为技术大牛的梦,毕竟"梦想总是要有的,万一实现了呢"!正是对技术梦的追求,促使我们不断地努力和提升自己. 然而"梦想是美好的,现实却是残酷的",很多同学在实际工作后就会发现,梦想是成为大牛,但做的事情看起来跟大牛都不沾边, 例如: 程序员说"天天写业务代码还加班,如何才能成为技术大牛" 测试说"每天都有执行不完的测试用例" 运维说"扛机器接网线敲shell命令,这不是

Java架构师成长之道之Java架构师技术栈

Java架构师成长之道之Java架构师技术栈 Java架构师成长之道 JavaSE篇 Java概述与开发环境搭建 Java数据存储 Java数据运算 Java程序流程控制 Java数组 Java面向对象程序设计(上) Java面向对象程序设计(中) Java面向对象程序设计(下) Java常用API 集合 泛型 异常处理 注解 IO/NIO/AIO AIO网络框架tio设计与实现 多线程 网络编程 反射和动态代理 日志 XML 正则表达式 Java语言新特性实战 数据库编程(JDBC+MySQL

优秀架构师需要培养的四种架构思维

一个优秀架构师必须要培养四种架构思维:抽象.分层.分治.演化. 架构的本质是管理复杂性,抽象.分层.分治和演化思维是架构师征服复杂性的四种根本性武器. 掌握了抽象.分层.分治和演化这四种基本的武器,你可以设计小到一个类,一个模块,一个子系统,或者一个中型的系统,也可以大到一个公司的基础平台架构,微服务架构,技术体系架构,甚至是组织架构,业务架构等等. 架构设计不是静态的,而是动态演化的.只有能够不断应对环境变化的系统,才是有生命力的系统.所以即使你掌握了抽象.分层和分治这三种基本思维,仍然需要演

阿里架构师告诉你最新Java架构师学习路线图

1.Java架构师是什么?要想往Java架构师的方向发展首先要知道Java架构师是什么?Java架构师是一个既需要掌控整体又需要洞悉局部瓶颈并依据具体的业务场景给出解决方案的团队领导型人物.一个Java架构师得需要足够的想像力,能把各种目标需求进行不同维度的扩展,为目标客户提供更为全面的需求清单.Java架构师在软件开发的整个过程中起着很重要的作用.说的详细一些,架构师就是确认和评估系统需求,给出开发规范,搭建系统实现的核心构架,并澄清技术细节.扫清主要难点的技术人员.主要着眼于系统的"技术实现

阿里P8架构专家带你透析分布式架构

什么是分布式系统 分布式系统是由一组通过网络进行通信.为了完成共同的任务而协调工作的计算机节点组成的系统.分布式系统的出现是为了用廉价的.普通的机器完成单个计算机无法完成的计算.存储任务.其目的是利用更多的机器,处理更多的数据. 首先需要明确的是,只有当单个节点的处理能力无法满足日益增长的计算.存储任务的时候,且硬件的提升(加内存.加磁盘.使用更好的CPU)高昂到得不偿失的时候,应用程序也不能进一步优化的时候,我们才需要考虑分布式系统.因为,分布式系统要解决的问题本身就是和单机系统一样的,而由于

看阿里首席架构师是如何选择并落地架构方案的

如何针对当前需求,选择合适的应用架构,如何面向未来,保证架构平滑过渡,这个是软件开发者,特别是架构师,都需要深入思考的问题. 无架构,不系统,架构是大型系统的关键.从形上看,架构是系统的骨架,支撑和链接各个部分:从神上看,架构是系统的灵魂,深刻体现业务本质. 架构可细分为业务架构.应用架构.技术架构,业务架构是战略,应用架构是战术,技术架构是装备.其中应用架构承上启下,一方面承接业务架构的落地,另一方面影响技术选型. 如何针对当前需求,选择合适的应用架构,如何面向未来,保证架构平滑过渡,这个是软