分布式系统关联查询_一文详解分布式系统 | 留言送书
分布式系统,顾名思义,就是让多台服务器、多计算单元,协同来完成整体的计算任务。它拥有多种组织方式。在分布式系统中,使用分层模型,路由和代理计算任务、存储任务,将不同的工作,划分到不同业务集群机器中,是常用的方法。一般来说,最基础的分布式系统,可以分为典型的三层结构:
接入层:用来对接客户连接的第一层,负责用户业务处理的分发,和用户连接的负载均衡。
逻辑层:处理系统不同业务的计算层,不同的业务可以划分到不同的计算集群当中,等待接入层分配任务,处理不同的业务单元。
数据层:通过离散化的存储方式,提高整体数据的写入、读取、检索的速度。
相关工作示例,如图1所示:
图1 分布式系统基本三层结构这是最基本的分布式系统,在实际业务中,根据需求的不同,系统的分散和划分方法也会又很大的不同,不同的的业务层中,特别在复杂的分布式系统中,还会定义专门的代理网关Proxy和路由进程Router处理消息的分发和负载均衡。在基本的分布式系统中,为了支持更为庞大的系统能力,解决特定的分布式问题,分布式系统又总结了一些典型的分布式模型和技术方案。并发模型
一个服务器在处理用户请求的时候,可能会同时接受到非常多的用户请求,并且还需要为其他用户返回数据输出。在处理过程中,服务器系统经常会有“等待”或者“阻塞”的问题存在。系统如果去等待一个请求到下一个请求,会极大的降低系统效率,降低吞吐量。这就是分布式系统中,经常遇到的“并发问题”。在分布式的并发模型中,常用的是两种方案:多线程方案和异步方案。在早期时间,多线程多进程方案是最常用的技术。但是多线程技术在处理以下问题拥有一些弊端:
多线程中,多个线程程序的执行顺序不可控制。
同步数据和对象,不同线程之间同步处理,会造成不可估计的错误,或者死锁问题。
多线程之间,不同CPU处理之间的数据来回拷贝,会造成CPU计算资源的浪费。
针对多线程方案的弊端,异步模型方案,逐步开始流行起来。异步模型方案,解决了多线程的死锁问题,也避免了数据拷贝之间的消耗。异步回调模型,就是最早的分布式计算中,并行计算的雏形。异步回调模型的实现,是基于非阻塞的I/O(网络和文件)模型,在函数读写的时候,不用等待当前函数调用的结果,立刻返回“空“或者”有“的结果。最常用的异步回调模型,是Linux的epoll模型,它使用底层内核,快速查找到数据,读写连接或者文件,当计算完成以后,再通过连接异步处理、并且返还结果。它的每个操作都是非阻塞的,一个进程就可以使用这种方式,处理大量的并发消息。另一方面,由于异步模型是单个进程的,它的数据和处理逻辑都是固定的,不会出现多线程的不可预知错误,也不需要加锁。它大大简化了并行模型的开发过程,是现阶段高吞吐、高并发系统的首选。它的运作模型,如图2所示:
图2 epoll并发模型除了并发模型,在后面我们还会再继续详细介绍分布式中的并行计算方案。分布式中的数据缓冲在互联系统和智能设备的分布式系统中,为了具有良好的用户体验,需要在秒的级别之内,返还结果。分布式系统,它的运算遍布在各个分布式集群当中,为了提高系统效率,数据缓冲就成为了它的常用技术方案。分布式缓冲技术,应用最广泛的是CDN(Content Delivery Network)内容分发网络,它大量运用在视频、图片、直播等应用领域。它的原理,是使用大量的缓存服务器,将缓存服务器分布到用户集中访问的地区网络中,用于提高当地的数据延迟。在用户进行使用的时候,使用全局的接入层和负载技术,将用户指向它最近、最适合的缓存服务器中,通过这个服务器响应用户的消息请求。它的部署原理,如图3所示:
图3 非CDN缓存的分布式和CDN缓存的分布式方案除了CDN缓存技术,还有很多其他的分布式换从技术,比如反向代理缓存、本地应用缓存、数据库缓存、分布式共享缓存、内存对象缓存等,大家可以自行学习这些技术。分布式存储技术在分布式系统的时代,数据如何存放更大的数据、承载更多的连接、支持更多的并发检索,成为了新时代技术的跳转。在传统的MySQL数据库,逐渐无法承载大互联网时代的系统需求,数据存储的方式变得更加多样化,比如使用文件、数据条切片等方式。在这种情况下,分布式数据库NoSQL应运而生,用于支持高并发的分布式业务,其中的佼佼者有MangoDB、Redis、RadonDB等。分布式数据库,可以承载更大的、更快的数据能力,不同的数据,可以存放在不同的服务器上,通过特定的检索和应用方式,将机器集群联合起来。这也是分布式系统的一种,数据系统的分布式系统。在分布式数据系统中,根据数据的拆分和管理方式,主要可以分为以下几类:
单数据库架构:不同的数据库服务器中,各自独立数据,相互不干预。
主从数据库架构:由一台服务器处理数据写入,一台服务器处理读取查询,相互之间进行数据同步,如图4所示:
图4 主从数据库架构
垂直数据库切分架构:将每个单独垂直的数据库模块,和服务器逻辑层的模块联合起来,形成一个相对垂直的业务-数据模型,各个数据之间的耦合,只在逻辑层进行联合处理。
水平数据切分架构:将大量的高段位的数据,进行水平的存储,并且进行拆分,拆分到不同表中,比如有个数据由10000条,我们可以切分为10条数据库,每个数据段存储1000条,再通过统一检索的方式,检索指向到不同的服务器数据库位置,其中大数据Hadoop中的HDFS是这种架构的佼佼者。
分布式系统管理
分布式系统,并不是简单的堆砌机器集群,如果没有良好的调度和管理方式,分布式系统可能还不如集中式系统,它的复杂性和容错性,可能还会降低效率。在分布式系统的管理上,我们可以关注以下几个主要指标:
硬件故障率:分布式集群,拥有很多太服务器,每个服务器都有一定的硬件故障几率,我们设定为x。分布式系统拥有n台服务机器,作为一个整体集群,它出现硬件的故障几率,可以使用如下计算方式:SER(System Error Rate)=1 –(1-x)^n,可以看出,随着机器规模的增加,故障率会逐步上升。有效的硬件监控和故障预测,是分布式系统管理的重要组成。
资源利用率:分布式系统在运作的时候,可能会出现这样一种情况:在某些时段,某些机器非常繁忙,而某些机器却出现闲置,甚至某些服务长期才会使用一次。这样造成了计算资源极大的浪费,也会让分布式系统产生了很多不必要的开销。一个高效的分布式系统管理,需要有高效和灵活的管理机制,既不会让某些机器高负载运转,也能在灵活调度计算资源的分配,让整个系统都能得到较好的使用效率,并且持续保持健康。另外,分布式系统集群的扩容、缩容,实时在线操作,都是需要非常复杂的技术处理,这也是分布式系统管理的重要研究对象。
分布式系统的更新和扩展:在一个大型的分布式系统中,多个系统相互协作,相互影响,在更新某个系统或者模块的时候,不免会影响到其他系统的工作。如果停止整个系统的运营,会对用户造成极大的伤害。所以在分布式系统的设计当中,系统的更新和扩展,也是极其重要的考核指标。在这个方面,诞生了不少优秀的分布式框架,比如微服务框架EJB、WebService等。
数据决策统计:在大型的分布式系统中,很多都伴随着大数据系统的运行,如何去使用分布式方案,进行数据的统计和决策,也是重要的技术方案。其中Google的MapReduce模型,如图5所示:
图5 MapReduce分词处理模型
针对分布式系统的各项需求,在长期的发展中,在工业界和学术界,诞生了许多针对性的系统或者组件,具体可以归类如下所示:目录服务和中控系统分布式系统是由许多系统和进程共同组成,如何去响应每个服务所需要的功能模块,监听服务模块的负载情况,调配系统集群资源,应急突发的错误情况、扩展和恢复系统组件,是分布式系统的痛点需求。其中Hadoop的Zookeeper是比较优秀的开源项目,它能帮助系统处理数据发布/订阅、负载均衡、服务名称管理、配置信息维护、命名处理、分布式协调、Master选举、数据同步、消息队列、分布式业务锁等。它的运作方式,如图6所示:
图6 ZooKeeper集群结构在Zopper集群种,采用Paxos算法,主要包含三种节点角色:
Leader节点:表示被选区的机器节点,提供读写的服务,需要被选举。
Follow节点:集群的其他节点,提供对外逻辑服务和同步功能,参与Leader节点的选举策略。
Observer节点:集群的其他节点,提供对外逻辑服务和同步功能,不参与Leader节点的选举策略。
消息队列在分布式系统中,不同服务之间,需要进行协调沟通,消息的一致性也是非常重要的。对此产生了一些非常优秀的消息队列组件,比如Kafka、ActiveMQ、ZeroMQ、Jgroups等。消息队列模型,将抽象进程间的交互为消息处理,形成一个“消息队列的管道”,进行存储。其他的进程可以对队列进行访问,读取消息或者处理消息,消息的路由存放的队列管道进行决策,这样就静态化了复杂的消息路由问题,形成了易用的消息模型。具体模型示例,如图7所示:
图7 消息通道组件工作消息队列组件,类似一个邮箱,消息队列服务是一个独立的进程,相关的其他服务,可以通过消息队列组件,向队列进程投放消息,队列再进行消息的一致性分发,将它分发到预定的目标服务,让消息的分发更加简便、运维更加清晰。事务协调系统事务协调是分布式系统中最为复杂的技术问题,一个完全的业务流程,它可能关联着不同的服务进程,不同的进程之间协调工作,是一个复杂的流程。业务过程中还会有故障产生,相关的备用解决方案,也是重要的问题。自动化部署分布式系统是一个分散化的、高度复杂性的大型系统,对于它的部署和运维,是一项艰难的任务,如果通过人力进行工作,将会耗费极大精力和时间。自动化的部署,就成为了分布式系统的重要辅助系统,其中容器化Docker、“池管理”、RPM打包,都是优秀的部署系统。下面是Docker的运作模式,如图8所示:
图8 Docker的容器组件模块分布式系统是一个复杂的、高度能力分散自治的系统能力,如何去面向未来群体智能的新时代技术体系,分布式系统是打开大门最关键的一把钥匙。福利
本文节选自《分布式人工智能:基于TensorFlow、RTOS与群体智能体系》,经出版社授权发布。本次联合机械工业出版社出版为大家带来6本书作为福利。欢迎大家在留言区谈谈对分布式的认识,截止2020年11月23日12时,精选留言点赞前6名,各送出此书一本!没中奖的同学可以点击下方链接购买。Kubernetes实战培训
Kubernetes实战培训将于2020年12月25日在深圳开课,3天时间带你系统掌握Kubernetes,学习效果不好可以继续学习。本次培训包括:云原生介绍、微服务;Docker基础、Docker工作原理、镜像、网络、存储、数据卷、安全;Kubernetes架构、核心组件、常用对象、网络、存储、认证、服务发现、调度和服务质量保证、日志、监控、告警、Helm、实践案例等,点击下方图片或者阅读原文链接查看详情。
分布式系统关联查询_一文详解分布式系统 | 留言送书相关推荐
- 没有执行此操作所需的足够可用空间。_一文详解 MySQL 高可用之 DRBD | 原力计划...
作者 | wzy0623责编 | 屠敏出品 | CSDN 博客大多数MySQL高可用解决方案都是基于MySQL自带的各种复制技术.本质上是将一个实例上的数据更新或事务,在其它实例上进行重放,从而完成数 ...
- mysql 不通过关联查询表_mysql中多表不关联查询的实现方法详解
下面小编就为大家带来一篇浅谈mysql中多表不关联查询的实现方法.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 大家在使用MySQL查询时正常是直接一个表的查询,要不然 ...
- Oracle/MySQL数据库的表间关联查询_多表关联查询的SQL语句详解
文章目录 内连接 inner join 示例 外连接 outer join left outer join 左外连接 示例 right outer join 右外连接 示例 full outer jo ...
- nacos 本地测试_一文详解 Nacos 高可用特性
简介:我今天介绍的 Nacos 高可用,是 Nacos 为了提升系统稳定性而采取的一系列手段.Nacos 的高可用不仅仅存在于服务端,同时也存在于客户端,以及一些与可用性相关的功能特性中,这些点组装起 ...
- b树与b+树的区别_一文详解 B-树,B+树,B*树
B-树 B-树是一种多路搜索树(并不一定是二叉的) 1970年,R.Bayer和E.mccreight提出了一种适用于外查找的树,它是一种平衡的多叉树,称为B树(或B-树.B_树). 一棵m阶B树(b ...
- Java 启动和停止界面_一文详解各种花里胡哨的Java调试技巧,多图预警,记得收藏...
欢迎关注专栏<Java架构筑基>--专注于Java技术的研究与分享! Java架构筑基zhuanlan.zhihu.com Java架构筑基--专注于Java技术的研究与分享! 后续文章 ...
- R 多变量数据预处理_超长文详解:C语言预处理命令
一 前言 预处理(或称预编译)是指在进行编译的第一遍扫描(词法扫描和语法分析)之前所作的工作.预处理指令指示在程序正式编译前就由编译器进行的操作,可放在程序中任何位置. 预处理是C语言的一个重要功能 ...
- 狄利克雷分布公式_一文详解隐含狄利克雷分布(LDA)
一.简介 隐含狄利克雷分布(LatentDirichletAllocation,简称LDA)是由DavidM.Blei.AndrewY.Ng.MichaelI.Jordan在2003年提出的,是一种词 ...
- l298n电机哪一端为正_一文详解电机倒顺开关接法!
现在的开关种类多种多样,接线原理虽然大同小异,但很多人依然不太会接.今天小编给大家分享的是倒顺开关的接法,希望对大家有所帮助. 一.倒顺开关作用 首先我们需要明白倒顺开关的作用,它的作用主要是连通.断 ...
最新文章
- ASP.NET MVC 学习1
- Visual Paradigm 教程[UML]:如何在序列图中使用持续时间约束?
- PHPcurl抓取AJAX异步内容(转载)
- zabbix网络发现主机
- LeetCode 189. 旋转数组(环形替换)
- Jquery mobile 新手问题总汇
- 【Flink】大数据分析常用去重算法分析『HyperLogLog 篇』
- 学习笔记——作业的知识点与注意事项
- 把路由器配置成DHCP服务器,并确保路由功能。
- QTP 9.2 下载破解
- VB获取窗体的位置和大小
- eclipse字体大小怎么设置
- 计算机电源再利用usb充电器,变废为宝,笔记本旧电源改造的8口USB充电器
- 疫情之下,从一座空城,到另一座空城,第一次看到这么寂寞的杭州
- 南海云课堂春季11(T)K1 拓展:单调队列
- linux 临时文件 锁,Linux上开启强制性记录锁
- win7系统计算机文件夹缓慢,windows7搜索文件非常慢的解决办法以及优化方法
- 如何将 Excel 单元格内容按换行符拆分为多列
- 常用进制数转换(二进制、八进制、十进制、十六进制)【数电笔记】
- openoffice.org3.4 源代码 编译
热门文章
- 联想 android 5.1 root权限,联想a520一键root权限获取教程(图文)
- AndroidUtilCode框架 fileutils学习总结
- java基本数据类型以及相关内容总结
- 程序员入门--两年养成之路
- 1)Java JDK和JRE
- Itemplate 自定义控件
- matlab相机标定畸变参数,相机标定的原理与意义及OpenCVMatlab实现差异小结.doc
- C++的掐拷贝、深拷贝【面向对象程序设计细节】
- 从零开始学前端:CSS复合选择器 --- 今天你学习了吗?(CSS:Day10)
- linux网卡绑定和漂移,LINUX修改、增加IP的方法,一张网卡绑定多个IP/漂移IP【转】...