分布式架构

Python爬虫【五】Scrapy分布式原理笔记

旧巷老猫 提交于 2020-01-20 06:50:55
Scrapy单机架构 在这里scrapy的核心是scrapy引擎,它通过里面的一个调度器来调度一个request的队列,将request发给downloader,然后来执行request请求 但是这些request队列都是维持在本机上的,因此如果要多台主机协同爬取,需要一个request共享的机制——requests队列,在本机维护一个爬取队列,Scheduler进行调度,而要实现多态服务器共同爬取数据关键就是共享爬取队列。 单主机爬虫架构 调度器负责从队列中调度requests进行爬取,而每台主机分别维护requests队列 分布式爬虫架构 队列用什么维护? 这里一般我们通过Redis为维护,Redis,非关系型数据库,Key-Value形式存储,结构灵活。 是内存中的数据结构存储系统,处理速度快,性能好。提供队列、集合等多种存储结构,方便队列维护。 如何去重?—— Redis集合 redis提供集合数据结构,在redis集合中存储每个request的指纹。 在向request队列中加入Request前先验证这个Request的指纹是否已经加入集合中。 如果已经存在则不添加到request队列中,如果不存在,则将request加入到队列并将指纹加入集合。 如何防止中断?——启动判断 在每台slave的Scrapy启动的时候都会判断当前redis request队列是否为空

终于有人把“TCC分布式事务”实现原理讲明白了

*爱你&永不变心* 提交于 2020-01-20 03:24:49
之前网上看到很多写分布式事务的文章,不过大多都是将分布式事务各种技术方案简单介绍一下。很多朋友看了还是不知道分布式事务到底怎么回事,在项目里到底如何使用。 所以这篇文章,就用大白话+手工绘图,并结合一个电商系统的案例实践,来给大家讲清楚到底什么是 TCC 分布式事务 一、业务场景介绍 咱们先来看看业务场景,假设你现在有一个电商系统,里面有一个支付订单的场景。 那对一个订单支付之后,我们需要做下面的步骤: 更改订单的状态为“已支付” 扣减商品库存 给会员增加积分 创建销售出库单通知仓库发货 这是一系列比较真实的步骤,无论大家有没有做过电商系统,应该都能理解。 二、进一步思考 好,业务场景有了,现在我们要更进一步,实现一个 TCC 分布式事务的效果。 什么意思呢?也就是说,[1] 订单服务-修改订单状态,[2] 库存服务-扣减库存,[3] 积分服务-增加积分,[4] 仓储服务-创建销售出库单。 上述这几个步骤,要么一起成功,要么一起失败,必须是一个整体性的事务。 举个例子,现在订单的状态都修改为“已支付”了,结果库存服务扣减库存失败。那个商品的库存原来是 100 件,现在卖掉了 2 件,本来应该是 98 件了。 结果呢?由于库存服务操作数据库异常,导致库存数量还是 100。这不是在坑人么,当然不能允许这种情况发生了! 但是如果你不用 TCC 分布式事务方案的话,就用个 Spring

分布式事务

北战南征 提交于 2020-01-20 00:54:21
本地事务 事务Transaction由一组SQL组成,具有四个ACID特性 ACID Atomicity 原子性 构成事务的一组SQL,要么全部生效,要么全不生效,不会出现部分生效的情况 Consistency 一致性 数据库经过事务操作后从一种状态转变为另一个状态。可以说原子性是从行为上描述,而一致性是从结果上描述 isolation 隔离性 事务操作的数据对象 相对于 其他事务操作的数据对象相互隔离,互不影响 durability 持久性 事务提交后,其结果就是永久性的,即使发生宕机(非磁盘损坏) 事务实现 对于MySQL数据库(InnoDB存储引擎)而言,隔离性是通过不同粒度的锁机制来实现事务间的隔离;原子性、一致性和持久性通过redo log 重做日志和undo log回滚日志来保证的。 redo log 当数据库对数据做修改的时候,需要把数据页从磁盘读到buffer pool中,然后在buffer pool中进行修改,那么这个时候buffer pool中的数据页就与磁盘上的数据页内容不一致,称buffer pool的数据页为dirty page 脏数据,如果这个时候发生非正常的DB服务重启,那么这些数据还没在内存,并没有同步到磁盘文件中(注意,同步到磁盘文件是个随机IO),也就是会发生数据丢失,如果这个时候,能够在有一个文件,当buffer pool 中的data

15个nosql数据库

喜欢而已 提交于 2020-01-20 00:39:16
1、MongoDB 介绍 MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。主要解决的是海量数据的访问效率问题,为WEB应用提供可扩展的高性能数据存储解决方案。当数据量达到50GB以上的时候,MongoDB的数据库访问速度是MySQL的10倍以上。MongoDB的并发读写效率不是特别出色,根据官方提供的性能测试表明,大约每秒可以处理0.5万~1.5万次读写请求。MongoDB还自带了一个出色的分布式文件系统GridFS,可以支持海量的数据存储。 MongoDB也有一个Ruby的项目MongoMapper,是模仿Merb的DataMapper编写的MongoDB接口,使用起来非常简单,几乎和DataMapper一模一样,功能非常强大。 MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。 所谓“面向集合”(Collenction-Orented),意思是数据被分组存储在数据集中,被称为一个集合(Collenction)。每个 集合在数据库中都有一个唯一的标识名

系统架构的演变

爷,独闯天下 提交于 2020-01-19 17:39:32
单体应用架构 垂直应用架构 分布式之RPC架构 分布式之SOA架构 分布式之微服务架构 微服务架构: 微服务虽小,五脏俱全。 解决的问题:微服务与微服务之间的系统调用 来源: CSDN 作者: 树叶要走风怎么挽留 链接: https://blog.csdn.net/weixin_44993313/article/details/104041113

基于全业务统一数据中心的配电分析应用研究

橙三吉。 提交于 2020-01-19 01:05:04
转载自: http://dq.shejis.com/dqlw/201610/article_142755.html 国网电力科学研究院 张子仲   1 目标与架构   1.1 需求   随着信息系统应用的不断深入,加快构建全球能源互联网和全面建成“一强三优”现代公司的目标以及大数据、云计算等新技术的日趋成熟,同时在企业级数据资源管理应用方面也暴露出了不足。数据是信息化的核心,建设全业务统一数据中心是源端全业务融合、后端大数据分析的必然选择,对建设信息化企业具有重要意义。 图1   1.2 目标与原则   到“十三五”末,基本建成“数据干净透明、模型规范统一、分析灵活智能”的全业务统一数据中心,实现面向全业务范围、全数据类型、全时间维度数据的统一存储、管理与服务。 图2   全业务统一数据中心主要包括数据处理中心、数据分析中心和数据管理中心三部分 图3   ①数据处理中心   数据处理中心为公司各业务应用提供逻辑统一的数据访问支撑,是原有业务系统各个分散数据库的归并、发展与提升,主要包括业务处理数据库与统一数据访问服务两个部分。 图4   (1)实现跨专业数据统一访问,促进跨部门的信息共享与业务数据融合;   (2)改变业务集成方式,消除数据复制,促进跨部门业务协同;   (3)隔离应用与数据库的直接连接,为统一数据模型的应用与数据管控提供技术支撑。   ②数据分析中心  

大规模分布式存储系统原理解析与架构实战-读书笔记3-单机存储系统(2)

好久不见. 提交于 2020-01-18 04:53:34
大规模分布式存储系统原理解析与架构实战-读书笔记3-单机存储系统(2) 数据模型主要分为三类:文件,关系以及KV。 文件模型 文件系统以目录树的形式呈现。 对象模型和文件模型比较类似,用于存储视频,图片,文档等二进制数据块,典型的系统包括Amazon Simple Storage(S3),Taobao File System(TFS) 键值模型 Key-value模型简单,使用的场景有限,NoSQL中使用比较广泛的是表格模型,其弱化了关系模型中的多表关联,支持基于单表的简单操作,典型的是Google的BigTable和其Java实现的HBase SQL和NoSQL 事务:关系模型要求满足ACID,要么全部成功,要么全部失败。在分布式系统中,如果多个操作属于不同的服务器,满足原子性需要两阶段提交协议,而这个协议的性能很低,且不能容忍服务器故障,很难应用的海量数据场景。 并发控制 数据库锁:允许加多个读锁,但只能有一个写锁。解决死锁的办法有两个:一个是给事务加超时时间,另一个是死锁检测。 写时复制:因为读操作远远多于写操作,写时复制(Copy-On-Write)读操作不加锁,极大提高性能。 1 拷贝:将从叶子节点到根节点路径上的所有点拷贝出来 2 修改:对拷贝的节点执行修改。 3 提交:原子地切换根节点的指针,使之指向新的根节点。 多个写操作之间是互斥的,同一时刻只允许一个写操作

GFS分布式文件系统集群(理论)

核能气质少年 提交于 2020-01-18 03:39:08
GlusterFS概述 1、GlusterFS简介 (1)开源的分布式文件系统 (2)由存储服务器、客户端以及NFS/Samba存储网关组成 (3)无元数据服务器(数据传输组件RDMA) (4)GlusterFS特点:扩展性、高性能、高可用性 (5)全局统一命名空间 (6)弹性卷管理---->云的特性:水平(实例数)、垂直(硬件性能),包括ECS(虚拟)、OSS和RDS(裸金属) (7)基于标准协议 2、GlusterFS术语 (1)Brick(节点) (2)Volume(卷) (3)FUSE(用户端交互模块) (4)VFS(虚拟化文件系统) (5)Glusterd(服务) 3、模块化堆栈式架构 (1)模块化、堆栈式的架构 (2)通过对模块的组合,实现复杂的功能 GlusterFS工作原理 2、弹性HASH算法 (1)通过HASH算法得到一个32位的整数 (2)划分为N个连续的子空间,每个空间对应一个Brick (3)弹性HASH算法的优点: ☀保证数据平均分布在每一个Brick中 ☀解决了对元数据服务器的依赖,进而解决了单点故障以及访问瓶颈 GlusterFS的卷类型 1、分布式卷 ●没有对文件进行分块处理 ●通过扩展文件属性保存HASH值 ●支持的底层文件系统有ext3、ext4、 ZFS、 XFS等 (1)特点 ●数据被分割成更小块分布到块服务器群中的不同条带区

spring cloud 基础 - 【转载】

吃可爱长大的小学妹 提交于 2020-01-17 12:50:07
【转载】URL: http://www.cnblogs.com/ityouknow/p/6791221.html 研究了一段时间spring boot了准备向spirng cloud进发,公司架构和项目也全面拥抱了Spring Cloud。在使用了一段时间后发现Spring Cloud从技术架构上降低了对大型系统构建的要求,使我们以非常低的成本(技术或者硬件)搭建一套 高效、分布式、容错 的平台,但Spring Cloud也不是没有缺点, 小型独立的项目不适合使用,另外对分布式事物的支持暂时也没有。 Spring Cloud是什么鬼? Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等操作提供了一种简单的开发方式。 微服务是可以独立部署、水平扩展、独立访问(或者有独立的数据库)的服务单元,springcloud就是这些微服务的大管家,采用了微服务这种架构之后,项目的数量会非常多,springcloud做为大管家需要管理好这些微服务,自然需要很多小弟来帮忙。 主要的小弟有: Spring Cloud Config 、 Spring Cloud Netflix ( Eureka 、 Hystrix 、 Zuul 、

怎么理解分布式、高并发、多线程?

我怕爱的太早我们不能终老 提交于 2020-01-17 08:03:53
是不是很多人都认为分布式=高并发=多线程? 当面试官问到高并发系统可以采用哪些手段来解决,或者被问到分布式系统如何解决一致性的问题,是不是一脸懵逼? 一开始,不少人都会将三者混淆,误以为所谓的分布式高并发的系统就是能同时供海量用户访问,而采用多线程手段不就是可以提供系统的并发能力吗?实际上, 他们三个总是相伴而生,但侧重点又有不同。 什么是分布式? 分布式更多的一个概念, 是为了解决单个物理服务器容量和性能瓶颈问题而采用的优化手段 。该领域需要解决的问题极多,在不同的技术层面上,又包括:分布式文件系统、分布式缓存、分布式数据库、分布式计算等,一些名词如Hadoop、zookeeper、MQ等都跟分布式有关。从理念上讲,分布式的实现有两种形式: 水平扩展: 当一台机器扛不住流量时,就通过添加机器的方式,将流量平分到所有服务器上,所有机器都可以提供相当的服务; 垂直拆分: 前端有多种查询需求时,一台机器扛不住,可以将不同的需求分发到不同的机器上,比如A机器处理余票查询的请求,B机器处理支付的请求。 什么是高并发? 相对于分布式来讲,高并发在解决的问题上会集中一些,其反应的是同时有多少量 :比如在线直播服务,同时有上万人观看。 高并发可以通过分布式技术去解决,将并发流量分到不同的物理服务器上。但除此之外,还可以有很多其他优化手段:比如使用缓存系统,将所有的,静态内容放到CDN等