分布式开发

一、分布式锁的原理

怎甘沉沦 提交于 2019-11-29 21:38:05
前言:   随着互联网的快速发展,尤其是电商项目等大型项目越来越火,传统的单机项目已经不能满足业务的需求,在这种情况下出现了分布式、集群以及微服务的概念,随着这些新生的概念的出现同时伴随了一系列开发中的问题,下面来看一下这其中之一的分布式锁。 一、什么是分布式锁:   在这里为了引出分布式锁先来看一个案例,例如在一个大型的电商项目中传统的单击项目会对服务器造成超负荷的压力,而在这时我们往往会采用集群的方式来分担服务器的压力,比如我们搭建了二十多台负责用户支付下订单,同时每一台服务器都存在一个定时任务用来从队列中获取订单进行操作,那么这个时候问题就出现了。   例如A服务器在操作一条订单数据,还没有操作完没来得及修改订单状态,这时B服务器同样查询到了相同的数据进行了操作,这样就会出现严重的脏数据,导致数据的不准确性,这是在支付系统中严重不允许出现的。   而为了保证多台服务器原子性的执行任务,而为每台服务器加一个锁,以确保在某个服务器操作其中一条订单数据时,其他服务器处于阻塞的状态,这样的锁我理解为分布式锁。 二、为什么需要分布式锁:   通过上面的例子我们可以知道,再从在多台服务器集群的情况下会出现例如多线程一样的问题,而在传统的单机服务器的时候,出现线程安全问题我们都是通过加锁来保证代码的原子性操作,避免线程安全问题。   但我们都知道传统我们解决多线程问题加锁

scrapy分布式爬虫的流程

限于喜欢 提交于 2019-11-29 21:19:06
最近在爬取网站中一直使用 redis 来管理分发爬虫任务,让我对 scrapy-redis 有很深刻的理解,下面让我慢慢说来 。 首先说下scrapy 和scrapy-redis的关系 scrapy-redis 与 Scrapy的关系就像电脑与固态硬盘一样,是电脑中的一个插件,能让电脑更快的运行。 Scrapy 是一个爬虫框架,scrapy-redis 则是这个框架上可以选择的插件,它可以让爬虫跑的更快。 为什么使用 scrapy-redis 首先,在实际开发中,我们总会对爬虫速度表示不满,为啥这么慢,能不能跑快点。除了爬虫本身的优化,我们就要引入分布式爬虫的概念。Scrapy本身是不支持分布式的,因为它的任务管理和去重全部是在机器内存中实现的。 我自己对分布式爬虫的理解就是:多个爬虫执行同一个任务 在 Scrapy 中最出名的分布式插件就是scrapy-redis了,scrapy-redis的作用就是让你的爬虫快、更快、超级快。 那如何让你的爬虫变成分布式的呢? 那我给你门作具体介绍 1.redis 服务 2.确保scrapy-redis 环境已经安装 3.确定单机scrapy 能够正常运行 4.配置setting.py 文件 setting.py 配置代码如下 # url 指纹过滤器 'DUPEFILTER_CLASS' : "scrapy_redis.dupefilter

基于Redis实现分布式消息队列

孤者浪人 提交于 2019-11-29 18:50:38
基于Redis实现分布式消息队列 原文地址: http://blog.csdn.net/stationxp/article/details/45731497 ) 1、为什么需要消息队列? 当系统中出现“生产“和“消费“的速度或稳定性等因素不一致的时候,就需要消息队列,作为抽象层,弥合双方的差异。 举个例子:业务系统触发短信发送申请,但短信发送模块速度跟不上,需要将来不及处理的消息暂存一下,缓冲压力。 再举个例子:调远程系统下订单成本较高,且因为网络等因素,不稳定,攒一批一起发送。 再举个栗子,交互模块5:00到24:00和电商系统联通,和内部ERP断开。1:00到4:00和ERP联通,和电商系统断开。 再举个例子,服务员点菜快,厨师做菜慢。 再举个例子,到银行办事的人多,提供服务的窗口少。 乖乖排队吧。 2、使用消息队列有什么好处? 2.1、提高系统响应速度 使用了消息队列,生产者一方,把消息往队列里一扔,就可以立马返回,响应用户了。无需等待处理结果。 处理结果可以让用户稍后自己来取,如医院取化验单。也可以让生产者订阅(如:留下手机号码或让生产者实现listener接口、加入监听队列),有结果了通知。获得约定将结果放在某处,无需通知。 2.2、提高系统稳定性 考虑电商系统下订单,发送数据给生产系统的情况。 电商系统和生产系统之间的网络有可能掉线,生产系统可能会因维护等原因暂停服务。

Hadoop系列之九:Hadoop集群伪分布式模式的实现详解

倾然丶 夕夏残阳落幕 提交于 2019-11-29 17:17:22
1、Hadoop依赖软件 Hadoop基于Java语言开发,因此其运行严重依赖于JDK(Java Development Kit),并且Hadoop的许多功能依赖于Java 6及以后的版本才提供的特性。Hadoop可以良好地运行于经过测试的各JDK,如Sun JDK、OpenJDK、Oracle JRockit、IBM JDK各自实现的某些版本。但迄今为止,HotSpot JVM仍是性能最好且与Hadoop搭配运行最稳定的实现。http://wiki.apache.org/hadoop/HadoopJavaVersions页面给出了Hadoop目前几大著名企业实现的Hadoop集群中所使用的JDK版本,Hortonworks已经为 JDK 1.6.0_31 在RHEL5/CentOS5、RHEL6/CentOS6、SLES11运行Hadoop、HBase、Pig, Hive、HCatalog、Oozie、Sqoop等进行了认证。建议参考它们的测试结果进行选择。 在选择安装版本,Sun JDK有几种不同格式的安装包,其使用及功能上并没有区别;但如果在安装Hadoop使用CDH的RPM格式的包的话,它们依赖于RPM格式的JDK,不过,ASF提供的RPM包并没有定义任何外在的依赖关系,因此,其可以使用基于任何方式安装配置的JDK,但这也意味着得手动解决依赖关系。无论如何

python基于redis实现分布式锁

家住魔仙堡 提交于 2019-11-29 17:04:10
一、什么是分布式锁 我们在开发应用的时候,如果需要对某一个共享变量进行多线程同步访问的时候,可以使用我们学到的锁进行处理,并且可以完美的运行,毫无Bug! 注意这是单机应用,后来业务发展,需要做集群,一个应用需要部署到几台机器上然后做负载均衡,大致如下图: 上图可以看到,变量A存在三个服务器内存中(这个变量A主要体现是在一个类中的一个成员变量,是一个有状态的对象),如果不加任何控制的话,变量A同时都会在分配一块内存,三个请求发过来同时对这个变量操作,显然结果是不对的!即使不是同时发过来,三个请求分别操作三个不同内存区域的数据,变量A之间不存在共享,也不具有可见性,处理的结果也是不对的! 如果我们业务中确实存在这个场景的话,我们就需要一种方法解决这个问题! 为了保证一个方法或属性在高并发情况下的同一时间只能被同一个线程执行,在传统单体应用单机部署的情况下,可以使用并发处理相关的功能进行互斥控制。但是,随着业务发展的需要,原单体单机部署的系统被演化成分布式集群系统后,由于分布式系统多线程、多进程并且分布在不同机器上,这将使原单机部署情况下的并发控制锁策略失效,单纯的应用并不能提供分布式锁的能力。为了解决这个问题就需要一种跨机器的互斥机制来控制共享资源的访问,这就是分布式锁要解决的问题! 分布式锁应该具备哪些条件: 1、在分布式系统环境下,一个方法在同一时间只能被一个机器的一个线程执行;

一 分布式缓存redis概念

别来无恙 提交于 2019-11-29 08:42:00
什么是NOSQL NoSQL是不同于传统的关系数据库的数据库管理系统的统称。其两者最重要的区别是NoSQL不使用SQL作为查询语言。 NoSQL数据存储可以不需要固定的表格模式。NoSQL是基于键值对的,可以想象成表中的主键和值的对应关系。 NoSQL:redis、memcached、mongodb、guava(loadingCache) 什么是Redis Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings)、散列(hashes)、 列表(lists)、 集合(sets)、 有序集合(sorted sets)等。 从mysql出发来认识redis 概念 关系型数据库的一个常见用法是存储长期的报告数据,并将这些报告数据用作固定时间范围内的聚合数据。 收集聚合数据的常见做法是:先将各个行插入一个报告表里面, 之后再通过扫描这些行来收集聚合数据, 并更新聚合表中巳有的那些行。 图解redis为什么出现 详细图解 查询优化器:join,left join,子查询,依赖子查询进行复杂sql及排序的优化。 Redis和memcached和mysql之间的区别 redis和memcached各有什么优势 内存管理机制进行比较 Memcached默认使用Slab

Hadoop新手学习指导

北战南征 提交于 2019-11-29 08:24:08
对于我们新手入门学习hadoop大数据存储的朋友来说,首先了解一下云计算和云计算技术是有必要的。下面先是介绍云计算和云计算技术的: 云计算,是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需求提供给计算机和其他设备,主要是基于互联网的相关服务地增加、使用和交付模式,通常涉及通过互联网来提供动态易扩展且经常是虚拟化的资源。云是网络、互联网的一种比喻说法。过去在图中往往用云来表示电信网,后来也用来表示互联网和底层基础设施的抽象。狭义云计算指IT基础设施的交付和使用模式,指通过网络以按需、易扩展的方式获得所需资源;广义云计算指服务地交付和使用模式,指通过网络以按需、易扩展的方式获得所需服务。这种服务可以是IT和软件、互联网相关,也可是其他服务。它意味着计算也可作为一种商品通过互联网进行流通。 什么是云计算 ? 什么是云计算技术 ? 在世界上云计算已经大面流行,有很流行的 Google Drive、SkyDrive、Dropbox 、亚马逊云服务等等。在国内 百度云 存储、360云存储都是比较流行的。 我们就应该会想到大数据存储,目前开源市场上最流行的应该是hadoop分布式存储,已经有大部分互联网公司已经开始使用,例如百度、360、阿里巴巴,其中一部分公司已经把hadoop作为他们的核心产品例如英特尔、IBM并为部分工作提供过大数据的解决方案

memcache、redis原理对比

拟墨画扇 提交于 2019-11-29 08:06:39
一、问题: 数据库表数据量极大(千万条),要求让服务器更加快速地响应用户的需求。 二、解决方案: 1.通过高速服务器Cache缓存数据库数据 2.内存数据库 (这里仅从数据缓存方面考虑,当然,后期可以采用Hadoop+HBase+Hive等分布式存储分析平台) 三、主流解Cache和数据库对比: 上述技术基本上代表了当今在数据存储方面所有的实现方案,其中主要涉及到了普通关系型数据库(MySQL/PostgreSQL),NoSQL数据库(MongoDB),内存数据库(Redis),内存Cache(Memcached),我们现在需要的是对大数据表仍保持高效的查询速度,普通关系型数据库是无法满足的。而MongoDB其实只是一种非关系型数据库,其优势在于可以存储海量数据,具备强大的查询功能,因此不宜用于缓存数据的场景。 从以上各数据可知,对于我们产品最可行的技术方案有两种: 1.Memcached 内存Key-Value Cache 2.Redis 内存数据库 四、下面重点分析Memcached和Redis两种方案: 4.1 Memcached介绍 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度,现在已被LiveJournal、hatena、Facebook

memcache、redis原理对比

情到浓时终转凉″ 提交于 2019-11-29 08:06:13
一、问题: 数据库表数据量极大(千万条),要求让服务器更加快速地响应用户的需求。 二、解决方案: 1.通过高速服务器Cache缓存数据库数据 2.内存数据库 (这里仅从数据缓存方面考虑,当然,后期可以采用Hadoop+HBase+Hive等分布式存储分析平台) 三、主流解Cache和数据库对比: 上述技术基本上代表了当今在数据存储方面所有的实现方案,其中主要涉及到了普通关系型数据库(MySQL/PostgreSQL),NoSQL数据库(MongoDB),内存数据库(Redis),内存Cache(Memcached),我们现在需要的是对大数据表仍保持高效的查询速度,普通关系型数据库是无法满足的。而MongoDB其实只是一种非关系型数据库,其优势在于可以存储海量数据,具备强大的查询功能,因此不宜用于缓存数据的场景。 从以上各数据可知,对于我们产品最可行的技术方案有两种: 1.Memcached 内存Key-Value Cache 2.Redis 内存数据库 四、下面重点分析Memcached和Redis两种方案: 4.1 Memcached介绍 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度,现在已被LiveJournal、hatena、Facebook

ZooKeeper伪分布式集群安装及使用

拈花ヽ惹草 提交于 2019-11-29 06:21:29
ZooKeeper伪分布式集群安装及使用 让Hadoop跑在云端系列文章 ,介绍了如何整合虚拟化和Hadoop,让Hadoop集群跑在VPS虚拟主机上,通过云向用户提供存储和计算的服务。 现在硬件越来越便宜,一台非品牌服务器,2颗24核CPU,配48G内存,2T的硬盘,已经降到2万块人民币以下了。这种配置如果简单地放几个web应用,显然是奢侈的浪费。就算是用来实现单节点的hadoop,对计算资源浪费也是非常高的。对于这么高性能的计算机,如何有效利用计算资源,就成为成本控制的一项重要议题了。 通过虚拟化技术,我们可以将一台服务器,拆分成12台VPS,每台2核CPU,4G内存,40G硬盘,并且支持资源重新分配。多么伟大的技术啊!现在我们有了12个节点的hadoop集群, 让Hadoop跑在云端,让世界加速。 关于作者: 张丹(Conan), 程序员Java,R,PHP,Javascript weibo:@Conan_Z blog: http://blog.fens.me email: bsspirit @gmail.com 转载请注明出处: http://blog.fens.me/hadoop-zookeeper-intro/ 前言 ZooKeeper是Hadoop家族的一款高性能的分布式协作的产品。在单机中,系统协作大都是进程级的操作。分布式系统中,服务协作都是跨服务器才能完成的