分布式处理

阿里巴巴消息中间件团队消息和分布式数据层负责人王晶昱:消息系统架构与变迁

筅森魡賤 提交于 2020-02-29 05:41:27
对于大型的互联网业务来说,消息系统是必不可少的基础服务。 子柳 在《淘宝技术这十年》中为大家展示了阿里消息系统架构的概貌,作为集团业务使用的核心基础服务,目前消息系统现在可以承受每天几百亿规模的请求,并在历年的双十一、双十二大促中承受住抗住了更加严峻的考验,消息系统背后的中间件团队还陆续开源了诸如 MetaQ 、 RocketMQ 等项目。近期,InfoQ 采访了阿里消息中间件团队消息和分布式数据层负责人王晶昱(花名:沈询),话题涉及案例中间件系统的选型、系统扩容与数据一致性、团队文化等内容。 InfoQ :对于阿里的消息中间件系统,大家所广泛了解的是 @ 子柳 在《淘宝技术这十年》中介绍的 Notify ,但是从最近的阿里的开源计划中,我们经常看到 MetaQ / RocketMQ ,在阿里内部 Notify 和 MetaQ 是怎样的关系?我看到早期的 MetaQ 是采用的 Kafaka 的设计思路,那么可能大家就比较好奇 “ 问什么要重复造轮子 ” ,能不能介绍这个方面的考虑以及所做的工作? 沈询: 要讲明白这个问题,就需要从产品的实际需求角度入手开始做个介绍了。Notify作为一个已经存在了5年多的消息产品,被广泛的应用在整个阿里巴巴集团的大部分消息通信领域。它的核心特性是: 提供事务支持、不保证消息顺序、消息可能会重复、推模型。 因为淘宝是个交易类网站

ZooKeeper的典型应用场景

☆樱花仙子☆ 提交于 2020-02-28 21:12:12
ZooKeeper是一个高可用的分布式数据管理与协调框架 ZAB算法的实现,很好的保证了分布式系统数据一致性 数据发布/订阅 数据发布/订阅系统,即所谓 配置中心 发布者发布数据到ZooKeeper的一系列节点上,供订阅者订阅,达到动态更新数据的目的 实现数据的集中式管理和动态更新 发布/订阅系统一般有 推(Push) 和 拉(Pull) 两种模式 推(Push): 服务端主动将数据推送给客户端 拉(Pull): 客户端主动去服务端拉取最新数据,一般客户端采取定时轮询的策略 ZooKeeper才去的是 推拉结合的策略 客户端向服务端注册需要关注的节点,服务端数据发生变化的时候向客户端 推送watcher事件通知 , 客户端再主动去服务端拉取数据 负载均衡 常见的计算机网络技术,对多台计算机、CPU、磁盘驱动器等分配负载; 达到优化资源使用、最小化响应时间、最大化吞吐率、避免过载的目的 分为软负载和硬负载;ZooKeeper属于软件负载 比较典型的是DNS 服务: DNS是(Domain Name System)域名系统的缩写 可以看做是一个超大规模的分布式映射表(域名-->IP),方便人们通过域名访问互联网站点 实际开发中通常采用本地host 绑定来实现域名解析 基于ZooKeeper实现的动态域名解析方案(DDNS :Dynamic DNS): 域名解析由每个应用自己解决;

简单了解分布式系统

别等时光非礼了梦想. 提交于 2020-02-28 12:05:04
随着大型网站的各种高并发访问、海量数据处理等场景越来越多,如何实现网站的高可用、易伸缩、可扩展、安全等目标就显得越来越重要。为了解决这样一系列问题,大型网站的架构也在不断发展。提高大型网站的高可用架构,不得不提的就是分布式。本文主要简单介绍了分布式系统的概念、分布式系统的特点、常用的分布式方案以及分布式和集群的区别等。 一、集中式系统 在学习分布式之前,先了解一下与之相对应的集中式系统是什么样的。 集中式系统用一句话概括就是:一个主机带多个终端。终端没有数据处理能力,仅负责数据的录入和输出。而运算、存储等全部在主机上进行。现在的银行系统,大部分都是这种集中式的系统,此外,在大型企业、科研单位、军队、政府等也有分布。集中式系统,主要流行于上个世纪。 集中式系统的最大的特点就是部署结构非常简单,底层一般采用从IBM、HP等厂商购买到的昂贵的大型主机。因此无需考虑如何对服务进行多节点的部署,也就不用考虑各节点之间的分布式协作问题。但是,由于采用单机部署。很可能带来系统大而复杂、难于维护、发生单点故障(单个点发生故障的时候会波及到整个系统或者网络,从而导致整个系统或者网络的瘫痪)、扩展性差等问题。 二、分布式系统(distributed system) 在《分布式系统概念与设计》一书中,对分布式系统做了如下定义: 分布式系统是一个硬件或软件组件分布在不同的网络计算机上

分布式集群架构学习笔记

为君一笑 提交于 2020-02-28 03:09:21
分布式和集群 分布式和集群是不⼀样的,分布式⼀定是集群,但是集群不⼀定是分布式(因为集群就是多个实例⼀起 ⼯作,分布式将⼀个系统拆分之后那就是多个实例;集群并不⼀定是分布式,因为复制型的集群不是拆 分⽽是复制) 第⼀部分 ⼀致性Hash算法 Hash算法,⽐如说在安全加密领域MD5、SHA等加密算法,在数据存储和查找⽅⾯有Hash表等, 以上 都应⽤到了Hash算法。 为什么需要使⽤Hash? Hash算法较多的应⽤在数据存储和查找领域,最经典的就是Hash表,它的查询效率⾮常之⾼,其中的 哈希算法如果设计的⽐较ok的话,那么Hash表的数据查询时间复杂度可以接近于O(1),示例 需求:提供⼀组数据 1,5,7,6,3,4,8,对这组数据进⾏存储,然后随便给定⼀个数n,请你判断n是否存在 于刚才的数据集中? list:List[1,5,7,6,3,4,8] // 通过循环判断来实现 for(int element: list) { if(element == n) { 如果相等,说明n存在于数据集中 } } 以上这种⽅法叫做顺序查找法 :这种⽅式我们是通过循环来完成,⽐较原始,效率也不⾼ ⼆分查找:排序之后折半查找,相对于顺序查找法会提⾼⼀些效率,但是效率也并不是特别好 我能否不循环!不⼆分!⽽是通过⼀次查询就把数据n从数据集中查询出来???可以! 定义⼀个数组,数组⻓度

Zookeeper知识梳理

丶灬走出姿态 提交于 2020-02-27 13:23:31
转载自: https://hadyang.github.io/interview/docs/architecture/distributed/zk/ 分布式应用 分布式应用可以在给定时间(同时)在网络中的多个系统上运行,通过协调它们以快速有效的方式完成特定任务。通常来说, 对于复杂而耗时的任务,非分布式应用(运行在单个系统中)需要几个小时才能完成,而分布式应用通过使用所有系统涉及的计算能力可以在几分钟内完成 。 通过将分布式应用配置为在更多系统上运行,可以进一步减少完成任务的时间。分布式应用正在运行的一组系统称为 集群 ,而在集群中运行的每台机器被称为 节点 。 分布式应用的优点 可靠性:单个或几个系统的故障不会使整个系统出现故障。 可扩展性:可以在需要时增加性能,通过添加更多机器,在应用程序配置中进行微小的更改,而不会有停机时间。 透明性:隐藏系统的复杂性,并将其显示为单个实体/应用程序。 分布式应用的挑战 竞争条件:两个或多个机器尝试执行特定任务,实际上只需在任意给定时间由单个机器完成。例如,共享资源只能在任意给定时间由单个机器修改。 死锁:两个或多个操作等待彼此无限期完成。 不一致:数据的部分失败。 ZooKeeper基础 Apache ZooKeeper是由集群(节点组)使用的一种服务,用于在自身之间协调,并通过稳健的同步技术维护共享数据

ZooKeeper | 安装部署、应用场景、开发对接API

早过忘川 提交于 2020-02-26 08:19:36
当设计一个分布式系统或微服务架构系统时,一般需要设计和开发一些协调服务。Apache ZooKeeper是一个分布式、开源的分布式应用协调服务,也可理解成一个为分布式应用提供一致性服务的应用程序,主要作用可简化分布式系统搭建及缩短开发周期。ZooKeeper是目前常用的开源解决方案之一。 本文主要针对ZooKeeper的安装部署、应用场景、开发对接API等,作简单入门级整理介绍,方便开发人员后续深入研究。 ZooKeeper是什么? ZooKeeper 作为一个分布式的服务框架,主要用来解决分布式集群中应用系统的一致性问题。提供基于类似于文件系统的目录节点树方式的数据存储,ZooKeeper的作用主要是用来维护和监控存储的数据的状态变化。通过监控这些数据状态的变化,从而可以达到基于数据的集群管理。 ZooKeeper 虽然是一个针对分布式系统的协调服务,但它本身也是一个分布式应用程序。ZooKeeper 遵循一个简单的客户端-服务器模型。 ▲ ZooKeeper 的客户端-服务器架构 ZooKeeper 有一个类似于文件系统的数据模型,由 znodes 组成。 每个 ZooKeeper 服务器还在磁盘上维护了一个事务日志,记录所有的写入请求。 在启动 ZooKeeper 服务时,集合体中的某个节点被选举为领导者;节点数量应该是奇数。 Zookeeper 从设计模式角度来看

GitHub上整理的一些工具

放肆的年华 提交于 2020-02-25 11:50:11
技术站点 Hacker News:非常棒的针对编程的链接聚合网站 Programming reddit:同上 MSDN:微软相关的官方技术集中地,主要是文档类 infoq:企业级应用,关注软件开发领域 OSChina:开源技术社区,开源方面做的不错哦 cnblogs,51cto,csdn:常见的技术社区,各有专长 stackoverflow:IT技术问答网站 GitHub:全球最大的源代码管理平台,很多知名开源项目都在上面,如Linux内核, OpenStack等免费的it电子书: http://it-ebooks.info/ DevStore:开发者服务商店 不错的书籍 人件 人月神话 代码大全2 计算机程序设计艺术 程序员的自我修养 程序员修炼之道 高效能程序员的修炼(成为一名杰出的程序员其实跟写代码没有太大关系) 深入理解计算机系统 软件随想录 算法导论(麻省理工学院出版社) 离线数学及其应用 设计模式 编程之美 黑客与画家 编程珠玑 C++ Prime Effective C++ TCP/IP详解 Unix 编程艺术 《精神分析引论》弗洛伊德 搞定:无压力工作的艺术 平台工具(都是开源的好东东哦) Redmine/Trac:项目管理平台 Jenkins/Jira(非开源):持续集成系统(Apache Continuum,这个是Apache下的CI系统,还没来得及研究)

分布式机器学习系统笔记(一)——模型并行,数据并行,参数平均,ASGD

℡╲_俬逩灬. 提交于 2020-02-24 15:48:10
欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld。 技术交流QQ群:433250724,欢迎对算法、技术、应用感兴趣的同学加入。 文章索引::”机器学习方法“,”深度学习方法”,“三十分钟理解”原创系列 2017年3 月,谷歌大脑负责人 Jeff Dean 在 UCSB 做了一场题为《通过大规模深度学习构建智能系统》的演讲[9]。Jeff Dean 在演讲中提到,当前的做法是: 解决方案 = 机器学习(算法)+ 数据 + 计算力 未来有没有可能变为: 解决方案 = 数据 + 100 倍的计算力? 由此可见,谷歌似乎认为,机器学习算法能被超强的计算力取代[9]。 [11]研究工作表明,任务表现与训练数据数量级呈线性增长关系。或许最令人震惊的发现是视觉任务的表现和用于表征学习的训练数据量级(对数尺度)之间的关系竟然是线性的!即使拥有 300M 的大规模训练图像,我们也并未观察到训练数据对所研究任务产生任何平顶效应(plateauing effect)。 上图说明预训练模型在 JFT-300M 不同子数据集中的目标检测性能。其中 x 轴代表数据集的大小,y 轴代表在 mAP@[.5,.95] 中 COCO-minival 子数据集上的检测性能。 要完成超大规模数据的训练,以及训练超大规模的神经网络,靠单GPU是行不通的(至少目前来看)

GitHub上整理的一些工具

守給你的承諾、 提交于 2020-02-21 14:29:20
GitHub上整理的一些工具 技术站点 Hacker News:非常棒的针对编程的链接聚合网站 Programming reddit:同上 MSDN:微软相关的官方技术集中地,主要是文档类 infoq:企业级应用,关注软件开发领域 OSChina:开源技术社区,开源方面做的不错哦 cnblogs,51cto,csdn:常见的技术社区,各有专长 stackoverflow:IT技术问答网站 GitHub:全球最大的源代码管理平台,很多知名开源项目都在上面,如Linux内核, OpenStack等免费的it电子书: http://it-ebooks.info/ DevStore:开发者服务商店 不错的书籍 人件 人月神话 代码大全2 计算机程序设计艺术 程序员的自我修养 程序员修炼之道 高效能程序员的修炼(成为一名杰出的程序员其实跟写代码没有太大关系) 深入理解计算机系统 软件随想录 算法导论(麻省理工学院出版社) 离线数学及其应用 设计模式 编程之美 黑客与画家 编程珠玑 C++ Prime Effective C++ TCP/IP详解 Unix 编程艺术 《精神分析引论》弗洛伊德 搞定:无压力工作的艺术 平台工具(都是开源的好东东哦) Redmine/Trac:项目管理平台 Jenkins/Jira(非开源):持续集成系统(Apache Continuum

浅析分布式系统中的一致性哈希算法

点点圈 提交于 2020-02-17 08:59:42
分布式系统与高并发高可用 浅析分布式系统中的一致性哈希算法 通过本文将了解到以下内容: 分布式系统的简单概念和基本作用 分布式系统常用负载均衡策略 普通哈希取模策略优缺点 一致性哈希算法的定义和思想 一致性哈希的基本过程 Redis集群中一致性哈希的实现 1.分布式系统的基本概念 分布式系统与高并发高可用 当今高并发和海量数据处理等场景越来越多,实现服务应用的高可用、易扩展、短延时等成为必然。 在此情况下分布式系统应运而生,互联网的场景无外乎存储和计算,因此分布式系统可以简单地分为: 分布式存储 分布式计算 所谓分布式系统就是一批计算机组合起来共同对外提供服务,对于用户来说具体有多少规模的计算机完成了这次请求,完全是无感知的。分布式系统中的计算机越多,意味着计算和存储资源等也就越多,能够处理的并发访问量也就越大,响应速度也越快。 如图为简单整体架构图: 大前端 主要实现了服务应用对应的所有流量的接入,比如xyz域名下可能有N个子服务,这一层涉及很多网络流量的处理,也很有挑战,像百度的BFE(百度统一前端)接入了百度的大部分流量,每日转发1万亿次,峰值QPS1000w。 中间层 完成了各个服务的调度和分发,粒度相比大前端接入层更细致一些,这一层实现了用户的无感知体验,可以简单理解为反向代理层。 业务层 完成了数据存储、数据计算、数据缓存等,各个业务环节高度解耦,并且基于集群化来实现。