分布式系统 订阅
分布式系统(distributed system)是建立在网络之上的软件系统。正是因为软件的特性,所以分布式系统具有高度的内聚性和透明性。因此,网络和分布式系统之间的区别更多的在于高层软件(特别是操作系统),而不是硬件。 [1] 展开全文
分布式系统(distributed system)是建立在网络之上的软件系统。正是因为软件的特性,所以分布式系统具有高度的内聚性和透明性。因此,网络和分布式系统之间的区别更多的在于高层软件(特别是操作系统),而不是硬件。 [1]
信息
类    型
软件系统
特    点
内聚性和透明性
中文名
分布式系统
外文名
distributed system
分布式系统简介
在一个分布式系统中,一组独立的计算机展现给用户的是一个统一的整体,就好像是一个系统似的。系统拥 有多种通用的物理和逻辑资源,可以动态的分配任务,分散的物理和逻辑资源通过计算机网络实现信息交换。系统中存在一个以全局的方式管理计算机资源的分布式操作系统。通常,对用户来说,分布式系统只有一个模型或范型。在操作系统之上有一层软件中间件(middleware)负责实现这个模型。一个著名的分布式系统的例子是万维网(World Wide Web),在万维网中,所有的一切看起来就好像是一个文档(Web页面)一样。 [1]  在计算机网络中,这种统一性、模型以及其中的软件都不存在。用户看到的是实际的机器,计算机网络并没有使这些机器看起来是统一的。如果这些机器有不同的硬件或者不同的操作系统,那么,这些差异对于用户来说都是完全可见的。如果一个用户希望在一台远程机器上运行一个程序,那么,他必须登陆到远程机器上,然后在那台机器上运行该程序。 [1]  分布式系统和计算机网络系统的共同点是:多数分布式系统是建立在计算机网络之上的,所以分布式系统与计算机网络在物理结构上是基本相同的。 [1]  他们的区别在于:分布式操作系统的设计思想和网络操作系统是不同的,这决定了他们在结构、工作方式和功能上也不同。网络操作系统要求网络用户在使用网络资源时首先必须了解网络资源,网络用户必须知道网络中各个计算机的功能与配置、软件资源、网络文件结构等情况,在网络中如果用户要读一个共享文件时,用户必须知道这个文件放在哪一台计算机的哪一个目录下;分布式操作系统是以全局方式管理系统资源的,它可以为用户任意调度网络资源,并且调度过程是“透明”的。当用户提交一个作业时,分布式操作系统能够根据需要在系统中选择最合适的处理器,将用户的作业提交到该处理程序,在处理器完成作业后,将结果传给用户。在这个过程中,用户并不会意识到有多个处理器的存在,这个系统就像是一个处理器一样。 [1]  内聚性是指每一个数据库分布节点高度自治,有本地的数据库管理系统。透明性是指每一个数据库分布节点对用户的应用来说都是透明的,看不出是本地还是远程。在分布式数据库系统中,用户感觉不到数据是分布的,即用户不须知道关系是否分割、有无副本、数据存于哪个站点以及事务在哪个站点上执行等。 [1] 
收起全文
精华内容
参与话题
问答
  • 而众所周知,作为一款知名以及相当流行的分布式服务调度中间件,dubbo现如今已经晋升为Apache顶级的开源项目,未来也仍将成为“分布式系统”开发实战的一大利器,如下图所示为dubbo底层核心系统架构图(右键可以在新...
  • 分布式系统概念

    万次阅读 多人点赞 2018-11-15 16:25:36
    分布式系统 分布式系统的由来: 国内来讲,移动互联网的爆发伴随着分布式系统的突现,移动互联网最大的特点是2(to)c的o2o产品越来越多,这跟传统2B的系统最大区别就是用户量的不同,2C系统的用户量远远要高于2b...

    一 分布式系统

    分布式系统的由来:
    国内来讲,移动互联网的爆发伴随着分布式系统的突现,移动互联网最大的特点是2(to)c的o2o产品越来越多,这跟传统2B的系统最大区别就是用户量的不同,2C系统的用户量远远要高于2b系统,这就对系统提出了各种各样的高标准,响应时间,性能,灾备,吞吐量等等,各种分布式技术也是为了这些标准而服务。
    分布式架构的应用:
    分布式文件系统
    分布式缓存系统
    分布式数据库
    分布式WebService
    分布式计算

    举例说明:
    分布式文件系统: 出名的有 Hadoop 的HDFS ,还有 google的 GFS , 淘宝的 TFS 等

    分布式缓存系统:memcache , hbase , mongdb 等

    分布式数据库 : MySQL , Mariadb, PostgreSQL 等

    以分布式MySQL数据库中间件MyCat 为例子,MySQL 在现在电商以及互联网公司的应用非常多,一个是因为他的免费开源,另外一个原因是因为分布式系统的水平可扩展性,随着移动互联网用户的暴增,互联网公司,像淘宝,天猫,唯品会等电商都采用分布式系统应对用户的高并发量以及大数据量的存储。
    而在Mycat的商业案例中,有对中国移动的账单结算项目中,应用实时处理高峰期每天2亿的数据量,在对物联网的项目中,实现处理高达26亿的数据量,并提供实时查询的接口。
    在这里插入图片描述

    二 大型分布式网站系统的性能要求

    1.响应时间(Response time)

      2-5-8原则:(据统计当网站慢一秒就会流失十分之一的客户)
    
      当用户再2-5秒之间得到响应时,会感觉系统的响应速度还可以;
    
      当用户再5-8秒内得到响应时,感觉蛮,但是还可以接受;
    
      当用户大于8秒内得到响应时,感觉无法接受;
    

    2.吞吐量(Throughput)

     指的是在单位时间内客户端和服务器成功传送数据的数量;
    

    3.资源使用率(Resource utilization)

      常见的有:cpu占用率、内存使用率、磁盘I/O、网络I/O;
    

    4.每秒点击数(Hits per Second)

      客户端每秒向服务器提交的请求数量,如果客户端发出的请求数量越多,与之相对的平均吞吐量也应该越大;
    

    5.并发用户数(Concurrent users)

      客户端的同一批用户同时执行一个操作的数量。
    

    三 Java后台技术

    在这里插入图片描述

    四 技术名词解释

    1. 分布式和集群

      分布式和集群在通常情况下不做严格区分,正如同并发和并行一样,应用情况下很少会去考究它的区别,许多大公司面试也直接问分布式集群怎样怎样,一般都拿等同来讲了。在这里只在概念上做一下区别,使大家更合理的去理解,没有对错之分。

      分布式:一个电商系统,用户模块部署在server1, 订单模块部署在server2, 促销模块部署在server3, 商品模块部署在server4,他们之间通过远程rpc实现服务调用,这就叫分布式。强调的是不同功能模块,单独部署在不同的server上,所有server加起来是一个完整的系统。

      集群:更多强调的是灾备,一个电商系统,完整的部署在server1上一个,完成的部署在server2上一个,server1宕机后,server2仍然可以正常提供请求服务,这叫集群。同样对于某一功能模块,比如用户模块部署在server1上,同样部署在server2上,也叫做集群。分布式系统的每个功能模块节点,都可以用多机做成集群。

      抽象问题具体化:拿做菜示例,假如一个厨师做菜要经历切菜,炒菜两个功能,饭店为了提高速度招了两个厨师,每个厨师的工作一样,都是切菜,炒菜,这是集群。还有另一种方法提高效率,饭店招了一个切菜师傅,配合厨师,厨师不管切菜,只管炒菜了,和切菜师傅共同配合把菜做好,这叫分布式。

    2. Nginx

      作用是反向代理和负载均衡。

      反向代理是指请求真实是到server1的,但是系统中为了统一或者做比如单点登录,会在server2服务器上安装一个nginx,里面配置到server1的反向代理,那么之后请求url就可以写server2的地址,发出后到server2, server2会转发到server1上,类似一种代理的模式。

      负载均衡是指如果一个系统的请求很多,我们可以把请求转发到不同的服务器上,用来分流。就类似于接了一个水管放水,水流量很大时候,水压大很可能会让一个水管爆炸,这时候接三个水管,就没问题了(这三个水管就是一个集群)。类似的在nginx服务器中配了3个tomcat服务器,每个tomcat服务器上都部署了整个系统,那么当请求数大的时候,可以分发到不同的tomcat。(其实这里每个tomcat上部署同一个功能模块也叫集群)

    3. Java在分布式下的通信
      在这里插入图片描述
      RPC(远程过程调用)
      对于分布式系统来讲,tomcat1上部署了用户模块,tomcat2上部署了订单模块,当用户下单时,请求到tomcat2,这时候可能要判断这个用户是否是vip,或者是否有优惠券,这些方法是在tomcat1用户模块上的,那么tomcat2调用tomcat1的服务获取这些信息,就叫rpc调用。

      常见的rpc框架:轻量级的hessian, 阿里dubbo(当当dubbox), 新浪Motan, apache的Thrift,google的grpc, 百度的brpc, 腾讯的tars。

      rpc调用底层涉及到对象的序列化,反序列化,http/tcp传输,网络异步传输netty。

    4. 消息中间件(MQ)

      mq消息中间件在分布式系统中的作用有很多,但是经常用到的还是异步解耦。

      比如天猫下单流程,当用户支付后,后台接口执行的操作可能包括:1 验签,2 支付密码校验,3 扣库存,4 用户积分增加等等操作,其实我们希望的是2操作执行成功后立即给用户结果提示,而不是等到后续各个操作完成后才去提示,因为后续的操作往往大部分是rpc调用,方法执行时间相对较长。另外对于下单支付这个操作,3和4是后续业务的需要,在设计上不能和下单支付本身出现强耦合度。所以这里我们可以引入mq解决,也就是说1和2执行完成后,生产者只需要通知下3和4,把后续的操作扔给消息队列,立即返回。这里的mq起到的作用一个是异步调用,一个是解耦。

    5. NoSQL(非关系型数据库)

      NoSQL是所有非关系型数据库的统称,在分布式系统中用到很多,主要用来提高QPS(query per second)。

      Redis: 我们讲缓存,或者内存数据库,小巧强大,什么数据适合放在redis也就是缓存中,一个是经常查询的,需要频繁磁盘io的,例如有个快件系统,有个需求是当快件状态为异常时候,需要发送邮件提醒给系统管理员。接口入参是快件id,通常做法我们需要拿到id,去数据库查状态,然后发送,但是快件基数很大时候每天的问题件也可能会很多,接口调用频繁时候就需要改进做法,这时我们可以把快件状态信息放在redis里面,key是快件id, value是快进状态,每次进入接口时候直接redis里面取status就可以,速度很快。另一个是查询数据缓慢的,可以放在缓存中。

      MongoDB: 可称为分布式文件数据库,可用来存储海量数据,它是NoSQL里面最像关系型数据库的,它的数据的存储形式可以就理解为json格式。之前曾经两次用到过mongoDB,一次是系统里面有个实时监控设备电流电压的功能,硬件设备实时会把数据同步到数据库里面,我们系统2-3s需要去拉次列表。另一个系统是一个轻型的行业IM工具,每天会有很大的聊天数据存储,我们直接用了mongoDB存储,后来系统相当稳定,从来没有出现过性能瓶颈。

    展开全文
  • 【分布式】分布式系统概述

    千次阅读 2018-07-03 23:01:05
    关键词:分布式系统、TCP/IP、NIO模型 一、基本概念 分布式系统:多个节点(一般来说一个节点即一台计算机),且节点间互相连通(网络&消息传递) -> 在这些连通的节点上部署了组件并且组件之间的操作互相...

    关键词:分布式系统、TCP/IP、NIO模型

    一、基本概念

        分布式系统:多个节点(一般来说一个节点即一台计算机),且节点间互相连通(网络&消息传递) -> 在这些连通的节点上部署了组件并且组件之间的操作互相连通,,,这样的一个系统可以认为是一个分布式系统

        冯诺依曼模型:输入设备、存储器(内存&外存)、控制器、运算器、输出设备

            分布式系统~~超级计算机,也同样符合冯诺依曼模型

        多线程交互模式:

    • 互不通信的多线程模式:不处理共享数据,也不进行动作协调情况
    • 基于共享容器协同的多线程模式 - 并发访问:多个线程对共享的数据(存储数据的容器或数据对象,如java中的容器类)队列进行处理,注意线程不安全问题
    • 基于事件协同的多线程模式-线程间协调:如B线程需要等到某个状态或事件发生后才能继续执行,而这个状态改变或事件产生食欲A线程相关的,注意死锁问题(一般地,能够原子性地获取需要的多个锁或者注意调整对多个锁的获取顺序,就会比较好地避免死锁)

        阿姆达尔定律(Amdahl's law):    (=> {\displaystyle p\to \infty }p\to \infty时,上式的极限是{\displaystyle {\frac {W}{W_{s}}}}\frac{W}{W_s}),,也就是说增加处理器总核心数p所能带来速度提升的上限是\frac{W}{W_s}(->上限的值则是决定于程序中可串行serial和可并行parallel部分程序的占比,因此可并行部分程序占比越大上限值越大)

        多进程模式:进程间的内存是独立的,因此多进程之间的数据共享、通信与多线程是不一样的(线程是属于进程的,多线程间是共享内存的)

    =>单线程和单进程多线程(机器故障、OS问题、进程问题会导致整个功能不可用)

    =>多进程系统(机器故障、OS问题会导致整个功能不可用,单个进程问题则可能系统部分功能仍然是正常)

    =>多机分布式系统(某些机器故障、OS问题或某些机器的进程问题,仍然可以保证整体功能大体可用)

     

    二、网络通信协议

        OSI七层网络模型:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层

        TCP/IP模型:网络接口层、网络互联层、传输层、应用层

        以太网:一种计算机局域网技术,包括物理层的连线、电子信号和介质访问层协议的内容

        =>实践中主要是以太网及TCP/IP协议栈,使用Socket套接字进行网络通信开发,共有三种方式:BIO、NIO和AIO

        BIO方式:Blocking IO,采用阻塞方式实现,也即一个Socket套接字对应一个线程处理(发生建立连接、读数据、写数据操作时都可能会阻塞,优点是简单,缺点是一个线程只能处理一个socket导致在支持并发连接时需要很多的线程)

        NIO方式:Nonblocking IO,非阻塞方式,基于事件驱动思想采用Reactor模式(优势是可以在一个线程中处理多个socket套接字),即统一通过Reactor对所有客户端的Socket套接字的事件(hander)做处理并派发到不同的线程中

        AIO方式:AsynchronousIO,异步IO,采用Proactor模式(NIO在有通知时可以进行相关的操作,而AIO在有通知时则表示相关操作已经完成)

     

    三、分布式系统 - 超级计算机

    输入设备:互相连接的多个节点(通信时互为输入)+传统人机交互的输入设备

    存储器:代理方式的多机Key-Value服务、名称服务的多机Key-Value服务、规则服务的多机Key-Value服务、Master控制的多机Key-Value服务

    控制器:协调或控制节点之间的动作和行为,如透明代理(硬件负载均衡设备、软件负责均衡系统,不足是网络开销(流量和延迟)和单点故障)、名称服务的直连方式(与请求处理的机器是交互的,不足是升级较复杂)、规则服务器控制路由的请求直连方式(与请求处理的机器是不交互的,不足是升级较复杂)、Master+Worker方式(任务的分配和管理)

    运算器:DNS服务器进行调度和控制、负责均衡、规则服务器、Master+Worker

    输出设备:互相连接的多个节点(通信时互为输出)+传统人机交互的输出设备

     

    四、分布式系统的难点

        缺乏全局时钟、如何应对和解决故障独立性、单点故障问题SPoF(Single Point of Failure)、分布式事务问题

     

    【读书系列】

        《大型网站系统与Java中间件实践》,曾宪杰,电子工业出版社

     

        【持续更新,请移步至https://zorkelvll.cn/blogs/zorkelvll/articles/2018/11/18/1542544441910

    展开全文
  • 分布式系统简介

    2019-06-22 17:09:55
    1.分布式系统发展历史 2.为什么需要分布式 3.分布系统的优劣势

    1.分布式系统发展历史

    2.为什么需要分布式

    3.分布系统的优劣势

     

     

    展开全文
  • 分布式系统设计

    千次下载 热门讨论 2007-07-12 15:59:47
    对于分布式系统,我们使用以下定义:一个分布式系统是一个对用户看起来像普通系统,然而运行在一系列自治处理单元(PE)上的系统,每个处理单元有各自的物理内存空间并且消息的传输延迟不能忽略不计。在这些处理单元...
  • 分布式系统

    千次阅读 2016-07-10 20:56:02
    原文参考:前Google工程师谈分布式系统的特点以及设计理念 和 从0到1,中间件的研发运维之路 两篇文章分布式系统并不是什么新鲜词,在上个世纪七八十年代就已经有各种分布式系统出现。只是在互联网时代,分布式系统才...

    原文参考:前Google工程师谈分布式系统的特点以及设计理念从0到1,中间件的研发运维之路 两篇文章

    分布式系统并不是什么新鲜词,在上个世纪七八十年代就已经有各种分布式系统出现。只是在互联网时代,分布式系统才大放异彩,尤其是Google更是把分布式系统运用到了极致。Google整个的软件构架都是基于各种各样的分布式系统,诸如Borg、MapReduce、BigTable等。正是这些分布式系统,使得Google可以处理高并发请求响应以及海量数据处理等。Apache旗下的Hadoop、Spark、Mesos等分布式系统,把大数据处理相关技术变得非常亲民,让更多企业客户体会到了分布式系统的便利。

    分布式系统的特点

    • 可扩展性

      分布式系统最大的特点是可扩展性,它能够适应需求变化而扩展。企业级应用需求经常随时间而不断变化,这也对企业级应用平台提出了很高的要求。企业级应用平台必须要能适应需求的变化,即具有可扩展性。布式系统的核心理念是让多台服务器协同工作,完成单台服务器无法处理的任务,尤其是高并发或者大数据量的任务。分布式系统由独立的服务器通过网络松散耦合组成的。每个服务器都是一台独立的PC机,服务器之间通过内部网络连接,内部网络速度一般比较快。因为分布式集群里的服务器是通过内部网络松散耦合,各节点之间的通讯有一定的网络开销,因此分布式系统在设计上尽可能减少节点间通讯。
      此外,因为网络传输瓶颈,单个节点的性能高低对分布式系统整体性能影响不大。比如,对分布式应用来说,采用不同编程语言开发带来的单个应用服务的性能差异,跟网络开销比起来都可以忽略不计。因此,分布式系统每个节点一般不采用高性能的服务器,而是性能相对一般的普通PC服务器。提升分布式系统的整体性能是要通过横向扩展(增加更多的服务器),而不是纵向扩展(提升每个节点的服务器性能)。

    • 廉价高效性

      分布式系统最大的特点是廉价高效:由成本低廉的PC服务器组成的集群,在性能方面能够达到或超越大型机的处理性能,在成本上远低于大型机。成本低廉的PC服务器在硬件可靠性方面比大型机相去甚远,于是分布式系统由软件来对硬件进行容错,通过软件来保证整体系统的高可靠性。

    • 弹性扩展

      分布式系统最大的好处是实现企业应用服务层面的弹性扩展。应用服务层面的弹性扩展是相对计算资源层面的弹性扩展而言的。一般公有云服务(IaaS)厂商都会提供计算资源层面的弹性扩展,比如可以很方便地增加或删除虚拟主机、提升或降低虚拟主机的性能配置等等。但是企业客户真正需要的是应用服务层面的弹性扩展,即随着业务量的涨落,后台应用服务的实例能动态变化,这是IaaS厂商还做不到的。

    分布式系统设计理念

    1. 分布式系统对服务器硬件要求很低

      对服务器硬件可靠性不做要求,允许服务器硬件发生故障,硬件的故障由软件来容错。所以分布式系统的高可靠性是由软件来保证。对服务器的性能不做要求,不要求使用高频CPU、大容量内存、高性能存储等等。因为分布式系统的性能瓶颈在于节点间通讯带来的网络开销,单台服务器硬件性能再好,也要等待网络IO。一般而言,互联网公司的大型数据中心都是选用大量廉价的PC服务器而不是用几台高性能服务器搭建分布式集群,以此来降低数据中心成本。比如,Google对于数据中心的成本控制做到了极致:所有服务器一律不要机箱;主板完全定制,只要最基本的组件,早期的定制主板连电源开关和USB接口都不要;在主板上加装隔离带把CPU单独隔出来,让冷风只吹CPU,不吹内存、硬盘等不需要降温的组件,最大限度降低冷却电力消耗。

    2. 统强调横向可扩展性

      横向可扩展性(Scale Out)是指通过增加服务器数量来提升集群整体性能。纵向可扩展性(Scale Up)是指提升每台服务器性能进而提升集群整体性能。纵向可扩展性的上限非常明显,单台服务器的性能不可能无限提升,而且跟服务器性能相比,网络开销才是分布式系统最大的瓶颈。横向可扩展性的上限空间比较大,集群总能很方便地增加服务器。而且分布式系统会尽可能保证横向扩展带来集群整体性能的(准)线性提升。比如有10台服务器组成的集群,横向扩展为100台同样服务器的集群,那么整体分布式系统性能会提升为接近原来的10倍。
      互联网公司的数据中心,一般一个分布式系统横向扩展的上限在万台服务器左右。Google数据中心的基本单元,CELL,由两万台左右服务器组成,每个CELL由一套分布式管理系统,BORG,统一管理,每个数据中心都由多个CELL组成。

    3. 分布式系统不允许单点失效(No Single Point Failure)

      单点失效是指,某个应用服务只有一份实例运行在某一台服务器上,这台服务器一旦挂掉,那么这个应用服务必然也受影响而挂掉,导致整个服务不可用。例如,某网站后台如果只在某一台服务器上运行一份,那这台服务器一旦宕机,该网站服务必然受影响而不可用。再比如,如果所有数据都存在某一台服务器上,那一旦这台服务器坏了,所有数据都不可访问。
      因为分布式系统的服务器都是廉价的PC服务器,硬件不能保证100%可靠,所以分布式系统默认每台服务器随时都可能发生故障挂掉。同时分布式系统必须要提供高可靠服务,不允许出现单点失效,因此分布式系统里运行的每个应用服务都有多个运行实例跑在多个节点上,每个数据点都有多个备份存在不同的节点上。这样一来,多个节点同时发生故障,导致某个应用服务的所有实例都挂掉、或某个数据点的多个备份都不可读的概率大大降低,进而有效防止单点失效。
      通常情况,不要让服务器满负荷运行,服务器长时间满负荷运行的话,出故障的概率显著升高。所以分布式系统采用一大堆中低性能的PC服务器,尽可能把负载均摊到所有服务器上,让每台服务器的负载都不高,保证集群整体稳定性。

    4. 分布式系统尽可能减少节点间通讯开销

      如前所述,分布式系统的整体性能瓶颈在于内部网络开销。目前网络传输的速度还赶不上CPU读取内存或硬盘的速度,所以减少网络通讯开销,让CPU尽可能处理内存的数据或本地硬盘的数据,能显著提高分布式系统的性能。典型的例子就是Hadoop MapReduce,把计算任务分配到要处理的数据所在的节点上运行,从而避免在网络上传输数据。

    5. 分布式系统应用服务最好做成无状态的

      应用服务的状态是指运行时程序因为处理服务请求而存在内存的数据。分布式应用服务最好是设计成无状态。因为如果应用程序是有状态的,那么一旦服务器宕机就会使得应用服务程序受影响而挂掉,那存在内存的数据也就丢失了,这显然不是高可靠的服务。把应用服务设计成无状态的,让程序把需要保存的数据都保存在专门的存储上,这样应用服务程序可以任意重启而不丢失数据,方便分布式系统在服务器宕机后恢复应用服务。
      比如,在设计网站后台的时候,对于用户登陆请求,可以把登陆用户的session相关信息保存在Redis或Memcached等缓存服务中,这样每个网站的后台实例不保存用户登录状态,这样即使重启网站后台程序也不丢失用户的登录状态信息;如果把用户的session相关信息保存在网站后台程序的内存里,那一旦受理用户登录的网站后台程序实例挂掉,必然有用户的登录状态信息会丢失。
      总而言之,分布式系统是大数据时代企业级应用的首选平台,它有良好的可扩展性,尤其是横向可扩展性(Scale Out),使得分布式系统非常灵活,能应对千变万化的企业级需求,而且降低了企业客户对服务器硬件的要求,真正能做到应用服务层面的弹性扩展(auto-scaling)。

    分布式系统中间件

    由廉价pc构建的分布式集群是不可靠的,在集群上搭载的分布式系统,通过软件来保证可靠性,分布式系统追求高性能、高可用、高并发、可扩展

    1. 高性能: 系统中资源的利用率要高。
    2. 高可用: 通过软件来实现。
    3. 高并发: 分布式系统是解决高并发的最好的解决方案
    4. 可扩展:上文已经介绍过了。

    以下为最基本的分布式软件。

    1. RPC远程过程调用框架

      初期是一个比较简单的框架,后期改进成现在的HSF框架支撑了生产环境所有系统的服务化调用。目前阿里云HSF服务框架采用了去“中心化”的系统架构,服务的提供者和调用者都直接相连,不仅去除了中心单点的风险,还能大大提高调用效率。峰值时,每分钟调用次数可以达到25亿次。

    2. MQ消息中间件

      在传统的拓扑结构中,系统不同业务之间的依赖性过强过多。举例说明:如交易拍照、发旺旺消息等业务,依赖于下订单这个业务;数据处理流需要经过不同的业务模块,一旦其中某个模块出现问题,就会有整个网站下不了单的风险。加入消息中间件后,处理流程发生了改变:不同模块之间无直接关联,通过消息订阅的方式获取信息。交易中心只负责下订单写数据库操作,其他中心则只需订阅交易中心的消息。这很大程度上提升了分布式系统的健壮性。

    3. 分布式数据库

      分布式系统中会有很多很小的数据库。为了减少上层应用开发难度,需要屏蔽底层数据库的形态,使得应用系统开发人员无需额外留意这些细节。设计分布式数据库需要注意三点:
      业务拆分:根据系统的业务特性,拆分业务核心表数据,其中Partition Key的选择很重要。需要找到最适合自己的拆分方案。
      拆分数量: 如何确定数据库和表的拆分个数?一方面需要判断业务能力的现状,这需要基于当前单个分库的业务处理能力;另一方面需要预估将来的业务,为扩展做准备。
      存储方式:对数据库类型的选择,是常见关系型数据库(如MySQL),还是NoSQL非关系型数据库(如HBase)?数据是否可以采用高压缩存储以降低存储成本?(如日志数据、历史数据、物联网数据等,便可以采用高压缩存储)。根据不同的业务场景,选择不同的数据存储。如果业务场景于存储产品的技术特性非常契合,那么系统就可以发挥出最好的特性。

    4. 全链路跟踪

      构建一个更大规模的分布式系统,必须就进行数据化运营。目前大家都在讲业务如何数据化运营,其实分布式系统也需要数据化运营。第一种层次那种简单的分布式系统,近乎一个黑盒子:我们不知道它是怎么运行的,一旦出现问题,就是黑暗世界的降临。早期时,阿里的数据化运营很基础很粗糙,比如会做一个产品统计各个主要接口的访问量或者交易数据,然后与前一天的数据进行对比判断系统有没有出现问题;后期我们又将它做为实时的。数据化的好处是你可以清晰地感知变化,这对于淘宝这样大体量的公司来讲很重要,轻微的数字浮动就是很大的影响。实现了全链路跟踪系统:实现所有服务各个模块端到端的数据采集,为各个产品建立全链路的监控。
      全链路跟踪,即从入口处开始到流经的所有系统的所有节点,都通过可视化的方式串起来。这样可以快速定位系统出现了哪些问题。关于系统高 效运维,这里再拿消息中间件的消息轨迹追踪举例:从消息的发送开始,它发到哪些topic,有哪些订阅方,订阅方有哪些机器,被哪些机器消 费,最终是消费成功还是失败。如果有机器消费失败,需要再次投递到所在集群中的另外一个机器上去,直到集群中至少一台机器消费成功,才 会停止投递。如果一直投递失败,就会按照一定的策略进行不断地降级投递服务。

    5. 自助式的在线压测系统

      不过,对于企业级互联网架构,只有全链路跟踪系统是不够的,还需要一个自助式的在线压测系统。如果在开发的时候做压测,得到的结果数据不是真实的,因为这个和实际的生产环境是不一样的。我们需要压测平台与中间件基础设施相结合,自动去导流量,用它去推测每个接口每个节点到底能够实现多大的业务能力,最后再清晰地算出来结果:以这个科学数字的方式合理分布资源,告知各个业务线当前业务量是多少,是否需要对一些应用进行扩容或者缩容。

    6. 应用管理和监控

      应用集群变大之后,如果一个应用有成百上千台机器的时候,连一个简单的发布都是个问题。快速发布、快速回滚,有可能需要半天或者一天,这是一个非常现实的问题。如果想发布应用,那就必须把应用的所有管理和监控都做出来。
      产品功能开发出来就需要运维,不能丢给别人去运维;其对应的运维工具本来是一个产品不可或缺的部分。打个比方,这好比生孩子容易,养孩子难。通常在开发团队在自己维护的过程中,遇到一次什么样的故障,知道整个系统中有哪里需要补,这里是不是需要加一个端对端的全天候监控,那里是不是需要补一个权限漏洞:就这样一点点地形成一个更加丰富完整的体系。真正把一个系统给运维好是需要很深厚的功力,开发运维那些周边工具所花的时间精力,很可能比研发中间件核心花的时间还要多很多。

    展开全文
  • 一、单块系统面临的四大问题   二、分布式系统的基本特征和五大技术挑战
  • 分布式系统设计.pdf

    热门讨论 2010-02-02 11:16:12
    分布式系统可以有不同的物理组成:一组通过通信网络互连的个人计算机,一系列不仅共 享文件系统和数据库系统而且共享C P U周期的工作站(而且在大部分情况下本地进程比远程进 程有更高的优先级,其中一个进程就是一...
  • 大规模分布式系统架构与设计实战

    热门讨论 2014-11-13 11:13:28
    《大规模分布式系统架构与设计实战》从作者的实战经验出发,深入浅出地讲解了如何建立一个Hadoop那样的分布式系统,实现对多台计算机CPU、内存、硬盘的统一利用,从而获取强大计算能力去解决复杂问题。一般互联网...
  • 如何在springcloud分布式系统中实现分布式锁?

    万次阅读 多人点赞 2017-04-03 11:01:42
    最近在看分布式锁的资料,看了 Josial L的《Redis in Action》的分布式锁的章节。实现思路是利用springcloud结合redis实现分布式锁。一、简介一般来说,对数据进行加锁时,程序先通过acquire获取锁来对数据进行排他...
  • 现在的架构很多,各种各样的...那什么是分布式系统分布式系统是支持分布式处理的软件系统,是由通信网络互联的多处理机体系结构上执行任务的系统。包括分布式操作系统、分布式程序设计语言及其编译系统、分布式文...
  • 分布式系统设计(经典书籍)

    热门讨论 2009-06-17 00:15:49
    本书较为全面地介绍了分布式系统领域的一些基本概念,提出了分布式系统的各种问题,如互斥问题、死锁的预防和检测、处理机间的通信机制、可靠性问题、负载分配问题、数据管理问题及其可能的解决方案,并讨论了分布式...
  • 分布式系统CAP理论的理解

    万次阅读 2018-12-25 18:03:25
    CAP关注的是多节点互联场景下进行数据的读写操作,相互连接并且共享数据的多节点集合构成的分布式系统是CAP理论的前提。 C指的是Consistency(一致性),A指的是Availability(可用性),P指的是Partition ...
  • 这里提供的是《分布式系统概念与设计》(Distributed Systems: Concepts and Design)一书中文第三版的PDG格式电子书下载,清晰度很好。 【内容简介】  本书旨在提供深入的分布式系统设计原理和实践方面的知识,读者...
  • 分布式系统与分布式锁简析

    万次阅读 2019-04-19 09:44:09
    分布式系统涉及到很多的技术、理论与协议,很多人也说,分布式系统是“入门容易,深入难”,有一些人简历上写着熟悉分布式系统,但是其实只能算是管中窥豹,只见得其中一斑。 回到顶部 那么究竟什么是分布式系统...
  • [分布式系统]全面介绍分布式系统

    千次阅读 2019-08-23 09:25:23
    [分布式系统]全面介绍分布式系统 [声明:本篇文章翻译转载自Stanislav Kozlovski] :A Thorough Introduction to Distributed Systems。 很感谢原作者这么通俗易懂介绍分布式系统。考虑在国内访问不到该作者的...
  • 目录 什么是分布式系统 分布式系统挑战分布式系统特性与衡量标准 组件、理论、协议 用一个请求串起来一个简化的架构图概念与实现正文 虽然本人在前面也写过好几篇分布式系统相关的文章,主要包括CAP理论、分布式...
  •   现在的架构很多,如高并发架构、异地多活架构、容器化架构、微服务架构、高可用架构、弹性化架构等,还有和这些架构相关的管理型的技术方法,如 DevOps、应用监控、自动化...分布式系统是支持分布式处理的软...
  • 分布式系统(一)分布式系统介绍

    千次阅读 2016-06-23 21:27:41
    本文简单介绍什么是分布式系统,我们为什么需要分布式系统分布式系统应该关注的特性有哪些,谷歌文件系统( GFS)的一些简单介绍系列文章的内容整理自清华大学分布式课程主页,课程网站...目录 什么是分布式系统 ...
  • 分布式系统原理

    千次阅读 2017-01-20 16:00:16
    分布式系统原理 一、分布式系统基础重要要点:  对外提供无状态节点,内部实现具体有状态或者无状态节点逻辑,节点即可以是提供服务,也可以是存储数据。 拜占庭问题,在分布式系统中的使用,目的是保证服务...

空空如也

1 2 3 4 5 ... 20
收藏数 158,818
精华内容 63,527
关键字:

分布式系统