分布式开发

ZooKeeper的作用、应用场景和替代品

狂风中的少年 提交于 2020-03-09 07:39:33
ZooKeeper 我想大家应该都略有耳闻,可能你在开发中没有直接使用过,但常用的 Hadoop、HBase、Kafka、Dubbo 等都有使用到 ZooKeeper。那 ZooKeeper 到底起到了什么样的作用,为什么这些框架、系统需要使用 ZooKeeper呢,我们在开发过程中应该如何使用 ZooKeeper,又是否有 ZooKeeper的替代品呢。本文将围绕以上问题,从以下三方面说起: 来源与作用; 经典应用场景; 替代品。 1. 来源与作用 ZooKeeper 的设计初衷是什么?这要从雅虎的一个研究小组说起。当时,研究人员发现雅虎内部的很多分布式系统都需要依赖一个组件进行分布式协调,但是这些组件往往都存在分布式单点问题。所以雅虎便组织开发了 一个通用的无单点问题的分布式协调框架 ,那就是 ZooKeeper,一方面解决 单点问题 ,另一方面,将 分布式协调 从分布式系统中 抽离 出来,让开发者更专注于业务逻辑。 下面分别对 “单点问题” 和 “分布式协调” 进行讲述。 1.1 单点问题 单点问题(又叫单点故障,Single Point of Failure,SPOF)是指在系统中一旦失效就会让整个系统无法运作的部件。举个例子,将系统只部署在机器 A 一台机器上,如果机器 A 失效,则整个系统将无法运作。而为了解决该问题,一般采用冗余的方式,增加多台机器

Dubbo 入门-细说分布式与集群

走远了吗. 提交于 2020-03-08 00:29:57
什么是Dubbo Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。 什么是RPC RPC全称(Remote Procedure Call)远程过程调用 过程指的是某个代码片段的执行,远程调用则意味着我们可以在其他进程,甚至其他机器上去调用这段代码,当然也能获取到其执行后的返回值,按照这个定义,我们请求某个http地址得到相应数据其实也算一次RPC,但是这样的方式太过麻烦,(数据要先打包成http请求格式,在调用相关的请求库,拿到的结果也是文本格式的需要在进行转换),执行效率,和开发效率相比RPC则低一些; 我们需要一种更简单的方式来完成分布式开发中的RPC环节,这也是Dubbo的核心所在,有多简单呢? 调用远程服务器上的某个服务时就像是调用本地的某个方法一样简单,就像下面这样 为什么需要rpc RPC是用来实现分布式构架的基石,分布式构架将同一个系统中的不同模块拆分到不同的子系统中,而子系统又分布在不同的服务器上,这时就需要RPC在来完成子系统之间的相互访问; 可以这么说分布式少不了RPC,RPC也要在分布式系统中才能发挥其核心价值; rpc的实现原理 毫无以为底层肯定是要通过socket来进行网络通讯的,但是如何能够直接调用另一个机器上的方法呢? 服务消费方(client

GitHub上整理的一些工具

拥有回忆 提交于 2020-03-06 00:52:13
GitHub上整理的一些工具 GitHub 2015-11-19 10:10:47 发布 您的评价: 0.0 收藏 5收藏 技术站点 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

用Redis构建分布式锁

烂漫一生 提交于 2020-03-01 17:09:47
原文地址 原文链接 译者: yy-leo 校对:方腾飞(红体标记重点) 用Redis构建分布式锁 在不同进程需要互斥地访问共享资源时,分布式锁是一种非常有用的技术手段。 有很多三方库和文章描述如何用Redis实现一个分布式锁管理器,但是这些库实现的方式差别很大,而且很多简单的实现其实只需采用稍微增加一点复杂的设计就可以获得更好的可靠性。 这篇文章的目的就是尝试提出一种官方权威的用Redis实现分布式锁管理器的算法,我们把这个算法称为RedLock ,我们相信这个算法会比一般的普通方法更加安全可靠。我们也希望社区能一起分析这个算法,提供一些反馈,然后我们以此为基础,来设计出更加复杂可靠的算法,或者更好的新算法。 实现 在描述具体的算法之前,下面是已经实现了的项目可以作为参考: Redlock-rb (Ruby实现)。还有一个Redlock-rb的分支,添加了一些特性使得实现分布式锁更简单 Redlock-py (Python 实现). Redlock-php (PHP 实现). PHPRedisMutex (PHP 更完整的实现) Redsync.go (Go 实现). Redisson (Java 实现). Redis::DistLock (Perl 实现). Redlock-cpp (C++ 实现). Redlock-cs (C#/.NET 实现). node-redlock

Zookeeper(一)简介

老子叫甜甜 提交于 2020-03-01 16:04:34
个人认为,zookeeper,总就会被nacos取代,就像已经被抛弃的eureka一样。 无奈,面试造飞机。 Zookeeper两大作用: 1、服务注册与发现,类似于Eureka,nacos。 2、用作分布式锁,也就是分布式协调 Zookeeper简介: ZooKeeper 是一种分布式协调服务,用于管理大型主机。 在分布式环境中协调和管理服务是一个复杂的过程。 ZooKeeper 通过其简单的架构和 API 解决了这个问题。 ZooKeeper 允许开发人员专注于核心应用程序逻辑,而不必担心应用程序的分布式特性。 来源: CSDN 作者: 子 ★ 诚 链接: https://blog.csdn.net/qq_40634246/article/details/104591738

GitHub上整理的一些工具

我与影子孤独终老i 提交于 2020-02-29 09:19:37
技术站点 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系统,还没来得及研究)

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

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

浅谈分布式锁

a 夏天 提交于 2020-02-27 02:00:27
一、为什么要使用分布式锁? 我们在开发应用的时候,如果需要对某一个共享变量进行多线程同步访问的时候,可以使用我们学到的Java多线程的18般武艺进行处理,并且可以完美的运行,毫无Bug! 注意这是单机应用,也就是所有的请求都会分配到当前服务器的JVM内部,然后映射为操作系统的线程进行处理!而这个共享变量只是在这个JVM内部的一块内存空间! 后来业务发展,需要做集群,一个应用需要部署到几台机器上然后做负载均衡,大致如下图: 上图可以看到,变量A存在JVM1、JVM2、JVM3三个JVM内存中(这个变量A主要体现是在一个类中的一个成员变量,是一个有状态的对象,例如:UserController控制器中的一个整形类型的成员变量),如果不加任何控制的话,变量A同时都会在JVM分配一块内存,三个请求发过来同时对这个变量操作,显然结果是不对的!即使不是同时发过来,三个请求分别操作三个不同JVM内存区域的数据,变量A之间不存在共享,也不具有可见性,处理的结果也是不对的! 如果我们业务中确实存在这个场景的话,我们就需要一种方法解决这个问题! 为了保证一个方法或属性在高并发情况下的同一时间只能被同一线程执行,在传统单体应用单机部署的情况下,可以使用java并发处理相关的API(如 ReentrantLock或Synchronized )进行互斥控制。但是,随着业务发展的需要

分布式流式处理平台Kafka-简介与体系结构(一)

丶灬走出姿态 提交于 2020-02-26 17:13:34
来源 在技术的发展过程中,与人类世界是一样的一样的。现在的人都非常看重出身,当然这里不是否定出身差的就不能成功,成材。只是概率相对低。这也是现在社会的基本情况,社会阶级的固化,对于一般人只能出现意外才可以打破阶级的壁垒,而且只能是一点一点的打破,一个暴发户短时间内,甚至一代人都不能成为上层阶级。 技术领域也是这种现象,Kafka 起初是LinkedIn公司采用Scala语言开发的一个多分区,多副本且基于Zookeeper协调的分布式消息系统,现已捐献给Apache基金会,成为顶级项目。目前的Kafka已经是一个分布式流式处理平台,因具备高吞吐,可以持久化,可水平扩展,支持流数据处理等多种特性而广泛使用。 从Kafka的背景可以看出,Kafka 出生名门,后又进入最顶级的研究所培育,最终成为当下最热门的分布式流式处理工具。 Kafka 能有当下的地位,出身是一部分,自身又具备那些特点呢? 消息系统 :Kafka 与传统的消息系统(ActiveMQ,RabbitMQ)都具备解耦功能,存储,扩展性,削峰,可恢复性,缓冲,异步通信。Kafka 还具备一些一般消息系统不具备的消息顺序性及快照回溯消费的功能。 存储系统 :Kafka把消息持久化到硬盘,相比于基于内存存储的系统更加可靠,降低数据丢失的风险。Kafka 的持久化和多副本机制,可以把Kafka当作长期存储系统使用。 流式处理平台

构建 MariaDB Galera Cluster 分布式数据库集群(一)

核能气质少年 提交于 2020-02-26 02:34:31
MariaDB Galera Cluster 介绍 简介 MariaDB集群是MariaDB同步多主机集群,仅支持XtraDB(详见本文结尾注释)/InnoDB存储引擎(虽然有对MyISAM实验支持 - 看wsrep_replicate_myisam系统变量) 主要功能 同步复制 --- Galera主从复制是同步的,底层依赖rsync; 真正的multi-master,即所有节点可以同时读写数据库; 自动的节点成员控制,失效节点自动被清除; 新节点加入数据自动复制; 真正的并行复制,行级; 用户可以直接连接集群,使用感受上与MySQL完全一致; 优势 因为是多主,所以不存在Slavelag(延迟) 不存在丢失事务的情况 同时具有读和写的扩展能力 更小的客户端延迟 节点间数据是同步的,而Master/Slave模式是异步的,不同slave上的binlog可能是不同的 说明 Galera集群的复制功能基于Galeralibrary实现,为了让MySQL与Galera library通讯,特别针对MySQL开发了wsrep API。 以下内容摘自于 https://mariadb.com/kb/en/mariadb/getting-started-with-mariadb-galera-cluster/,是在发布 MariaDB 10.1版本时摘录的 MariaDB Galera