分布式处理

微服务实践:分布式锁

久未见 提交于 2019-11-30 06:24:34
微服务实践:分布式锁 分布式锁   单体应用下,使用锁机制可以解决多线程同步问题。而在, 集群环境下,单个服务有多个实例,每个实例都在自身JVM内做了同步,却不能保证整体服务的同步,这个服务依然是紊乱的 。    分布式与集群   下图来自知乎作者(大闲人柴毛毛),      单机处理到达瓶颈的时候,你就把单机复制几份,这样就构成了一个“集群”。集群中每台服务器就叫做这个集群的一个“节点”,所有节点构成了一个集群。每个节点都提供相同的服务,那么这样系统的处理能力就相当于提升了好几倍(有几个节点就相当于提升了这么多倍)。   但问题是用户的请求究竟由哪个节点来处理呢?最好能够让此时此刻负载较小的节点来处理,这样使得每个节点的压力都比较平均。要实现这个功能,就需要 在所有节点之前增加一个“调度者”的角色,用户的所有请求都先交给它,然后它根据当前所有节点的负载情况,决定将这个请求交给哪个节点处理。这个“调度者”有个牛逼了名字——负载均衡服务器 。   分布式结构就是将一个完整的系统,按照业务功能,拆分成一个个独立的子系统,在分布式结构中,每个子系统就被称为“服务”。这些子系统能够独立运行在web容器中,它们之间通过RPC方式通信。 可重入锁   举例说明可重入锁: public class UnReentrant{ Lock lock = new Lock(); public void

Hadoop生态圈

徘徊边缘 提交于 2019-11-30 05:49:40
一:基本构成:HDFS(Hadoop分布式文件系统);Mapreduce(分布式计算框架);HBASE(分布式列存数据库); Zookeeper(分布式协作服务); HIVE(数据仓库);Pig(ad-hoc脚本)等。 二:详细了解一下其特性: Hadoop是一个由Apache基金会所开发的分布式系统基础架构。 用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。 具有可靠、高效、可伸缩的特点。 Hadoop的核心是YARN,HDFS和Mapreduce 下图是hadoop生态系统,集成spark生态圈。在未来一段时间内,hadoop将于spark共存,hadoop与spark 都能部署在yarn、mesos的资源管理系统之上 组件简介: 1.HDFS(Hadoop分布式文件系统) 源自于Google的GFS论文,发表于2003年10月,HDFS是GFS克隆版。 HDFS是Hadoop体系中数据存储管理的基础。它是一个高度容错的系统,能检测和应对硬件故障,用于在低成本的通用硬件上运行。 HDFS简化了文件的一致性模型,通过流式数据访问,提供高吞吐量应用程序数据访问功能,适合带有大型数据集的应用程序。 它提供了一次写入多次读取的机制,数据以块的形式,同时分布在集群不同物理机器上。 2.Mapreduce (分布式计算框架)

分布式集群

て烟熏妆下的殇ゞ 提交于 2019-11-30 04:25:30
集中式(centralization): 是指由一台主计算机组成中心节点,数据集中存储在这个中心节点中,并且整个系统的所有业务单元都集中部署在这个中心节点上,系统所有功能均有其集中处理。 集中式系统最大特点就是部署结构简单,集中式系统往往基于底层性能卓越的大型主机,因此无需考虑如何对服务进行多个节点的部署,也就不用考虑多个节点之间的分布式协作问题。 集群(cluster): 是指在多台不同的服务器中部署相同应用或服务模块,构成一个集群,通过负载均衡设备对外提供服务。 分布式(distributed): 是指在多台不同的服务器中部署不同的服务模块,通过远程调用协同工作,对外提供服务。 阿里Dubbo/HSF 京东JSF 新浪微博Motan 当当网DubboX dubbo+zookeeper RPC cloud:eureke+zuul+feign RESTFul SOA:面向服务(WebService 微服务) Springcloud: restful风格 Eureka:服务注册发现 Ribbon:客户端RestTemplate负载均衡,默认轮询 Feign:面向接口(类似WebService),客户端负载均衡 Hystrix:服务器熔断、降级 Hystrixdashboard:服务监控(先要访问下被监控服务) Admin:监控 Zuul:网关 Config:配置中心 我们到一家小饭店

浅谈分布式锁

蹲街弑〆低调 提交于 2019-11-29 23:42:01
张岩 张岩,2016年加入京东,熟悉大型分布式系统设计及开发,有丰富的web开发实战经验,对spring等开源框架有源码级了解,目前主要负责京麦插件市场及交易平台的研发工作。 前言 随着互联网技术的不断发展,数据量的不断增加,业务逻辑日趋复杂,在这种背景下,传统的集中式系统已经无法满足我们的业务需求,分布式系统被应用在更多的场景,而在分布式系统中访问共享资源就需要一种互斥机制,来防止彼此之间的互相干扰,以保证一致性,在这种情况下,我们就需要用到分布式锁。 分布式一致性问题 首先我们先来看一个小例子: 假设某商城有一个商品库存剩10个,用户A想要买6个,用户B想要买5个,在理想状态下,用户A先买走了6了,库存减少6个还剩4个,此时用户B应该无法购买5个,给出数量不足的提示;而在真实情况下,用户A和B同时获取到商品剩10个,A买走6个,在A更新库存之前,B又买走了5个,此时B更新库存,商品还剩5个,这就是典型的电商“秒杀”活动。 从上述例子不难看出,在高并发情况下,如果不做处理将会出现各种不可预知的后果。那么在这种高并发多线程的情况下,解决问题最有效最普遍的方法就是给共享资源或对共享资源的操作加一把锁,来保证对资源的访问互斥。在Java JDK已经为我们提供了这样的锁,利用ReentrantLcok或者synchronized,即可达到资源互斥访问的目的。但是在分布式系统中

分布式、微服务服务架构剖析

為{幸葍}努か 提交于 2019-11-29 23:38:54
一、RPC RPC(Remote Process Call),即远程服务调用,被广泛地应用在很多企业应用中,是早期主要的服务治理方案,其流程较为简单,客户端consumer携带参数发送RPC请求到服务提供方provider,provider根据参数路由到具体函数,方法,并将执行获得的结果返回,至此一次RPC调用完成。   随着业务的发展,大数据时代的到来,服务提供方的压力也日益增大,单机应用的处理能力无论在软件,硬件上都受到限制,provider也不可能一直无限扩容,即使扩容,也存在着很多问题,即服务的路由,和Consumer的负载均衡问题。因此,分布式服务架构应运而生,RPC发展到一定阶段思考的变革,成为了分布式服务,云计算的计算机基础。 二、SOA 由于简单的RPC调用已经不能随着时代发展满足需求,因此复杂的业务逻辑对于分布式应用架构体系的需求愈发强烈,业务希望自己的服务是分布式部署的,请求是分流的,对数据的操作是能读写分离的,同时能屏蔽许多复杂需要自己编写的底层服务,借助已有的公共服务,去快速的构建自己的应用,降低人力开发维护的成本和提高应用交付的效率,基因此,基于分布式服务思想的SOA(Service-Oriented Architecture)成了新的受追捧的架构。常见的SOA服务调用流程图如下:  三、业界服务治理方案 业界的互联网巨头公司,都有属于自己的分布式服务框架

分布式架构理论篇

拟墨画扇 提交于 2019-11-29 23:11:25
大型分布式系统原理概述 分布式系统三要素 ​ CPU:处理器 ​ Memory:内存 ​ IO:外存 ​ MultiCore:多核心 ​ LocalDisk:本地磁盘 ​ Networker:网络,网络存储 ​ RDMA:远程内存直接访问 ​ NUMA:分布式系统CPU和内存进行整合,对内存进行捆绑,是硬件层级的,(相似与ThreadLocal,将数据和实时运行线程绑定到一起),网卡直接绕过CPU共享内存,速度非常快 ​ 分布式系统三要素的进化 ​ 桌面级八核心十六线程CPU于2014年诞生,2015年Intel预计发布18核心桌面级CPU ​ NUMA在大中型系统上一直非常盛行,NUMA能很好提升系统吞吐能力,特别对于Java以及数据这样占用大内存的系统,但一直以来没有得到 DBA 们足够的重视、 Java领域也很少有人研究 ​ RDMA(远程内存直接访问,网络传输协议,类似TCP,更低延迟)是超高性能计算UHPC的重要基础之一,而Direct Socket Protocol (SDP)作为RDMA的传输协议已经在很多关键领域取代了TCP,Java7也正式开始支持SDP,跨入了UHPC的领地。 ​ IO方面,万兆网正在崛起,万兆网的ISCSI存储, 单通道可达到500MB/s, 每秒500,000个IO能力,而目前主流的SSD硬盘的速度是400-550MB/s。 ​ ===

【分布式事务】概述

隐身守侯 提交于 2019-11-29 23:02:13
【背景】 随着单体应用的缺陷日益明显,越多越多的公司都从传统的单体应用模式向新型的分布式应用模式转变。 实际上,在分布式应用带来巨大优势的同时,也伴随着各种挑战。例如,系统容错、网络延迟和分布式事务等。 本篇博客开始,将会对分布式事务做一系列学习总结。从本篇博客,我们可以了解到什么是分布式事务,关于分布式事务的相关理论以及处理分布式事务的解决方案。 【本地事务】 在没有接触分布式应用前,我们接触到的事务一般都是本地事务,即在单个数据库并且限制在单个进程内的事务。本地事务不涉及多个数据源。 若我们的系统使用了spring,一般加上@Transition注解即可保证事务正常运行。但如果是分布式系统应用下,若操作涉及不同的数据库,这样本地事务就失效了,从而就涉及到了分布式事务。 【分布式事务】 1. 什么是分布式事务 分布式事务是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。 简单的说,就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。本质上来说,分布式事务就是为了保证不同数据库的数据一致性。 2. 分布式事务的产生原因 从原来的单体应用到分布式应用的转变,便意味着从以前的一个系统到多个服务共同组成一个系统的转变。 如一个电商系统,拆分为订单

分布式事务

拜拜、爱过 提交于 2019-11-29 21:59:02
分布式事务 分布式理论 单个数据库的性能产生瓶颈的时候,我们可能对数据库进行分区,这里所说的分区是指物理分区,分区之后可能不同的库就处于不同的服务器上了,这个时候单个数据库的ACID已经不能适应这种情况了,而在这种ACID的集群环境下,再想保证集群的ACID会导致我们的系统变得很差,这个时候我们需要引入CAP原则。 一致性(Consistency) : 客户端知道一系列的操作都会同时发生(生效) 可用性(Availability) : 每个操作都必须以可预期的响应结束 分区容错性(Partition tolerance) : 即使出现单个组件无法可用,操作依然可以完成 具体地讲在分布式系统中,在任何数据库设计中,一个Web应用至多只能同时支持上面的两个属性。显然,任何横向扩展策略都要依赖于数据分区。因此,设计人员必须在一致性与可用性之间做出选择。 [了解] 数据库支持2PC,又叫XA Transactions,MySQL5.5、SQL Server2005、Oracle7开始支持。 其中,XA是一个两阶段提交协议,该协议分为以下两个阶段: ·第一阶段:事务协调器要求每个涉及到事务的数据库预提交(precommit)此操作,并反映是否可以提交。 ·第二阶段:事务协调器要求每个数据库提交数据。 如果任何一个数据库否决此次提交,那么所有数据库都会被要求回滚它们在次数据库中的那部分信息

大数据核心技术

北城以北 提交于 2019-11-29 20:49:16
原地址:http://bigdata.idcquan.com/dsjjs/159544.shtml 大数据 技术的体系庞大且复杂,基础的技术包含数据的采集、数据预处理、分布式存储、NoSQL数据库、数据仓库、机器学习、并行计算、可视化等各种技术范畴和不同的技术层面。首先给出一个通用化的大数据处理框架,主要分为下面几个方面:数据采集与预处理、数据存储、数据清洗、数据查询分析和数据可视化。 一、数据采集与预处理 对于各种来源的数据,包括移动互联网数据、社交网络的数据等,这些结构化和非结构化的海量数据是零散的,也就是所谓的数据孤岛,此时的这些数据并没有什么意义,数据采集就是将这些数据写入数据仓库中,把零散的数据整合在一起,对这些数据综合起来进行分析。数据采集包括文件日志的采集、数据库日志的采集、关系型数据库的接入和应用程序的接入等。在数据量比较小的时候,可以写个定时的脚本将日志写入存储系统,但随着数据量的增长,这些方法无法提供数据安全保障,并且运维困难,需要更强壮的解决方案。 Flume NG作为实时日志收集系统,支持在日志系统中定制各类数据发送方,用于收集数据,同时,对数据进行简单处理,并写到各种数据接收方(比如文本,HDFS,Hbase等)。Flume NG采用的是三层架构:Agent层,Collector层和Store层,每一层均可水平拓展。其中Agent包含Source

Hadoop系列之六:分布式文件系统HDFS

夙愿已清 提交于 2019-11-29 17:16:49
1、MapReduce与分布式文件系统 前面的讨论中,我们已经得知, Hadoop 中实现的 MapReduce 是一个编程模型和运行框架,它能够通过 JobTracker 接收客户提交的作业而后将其分割为多个任务后并行运行在多个 TaskTracker 上。而问题是,这些 TaskTracker 如何高效获取所要处理的数据? 在传统的高性能集群中,计算节点和存储节点是各自独立的,它们之间通过高速网络完成互联,然而,在面临海量数据处理的问题时,网络必然会成为整个系统的性能瓶颈,这就需要引入超高速的网络如万兆以太网或 Infiniband 。然而,对大数场景来讲它们属于“奢侈品”,且昂贵的投入并不能带来网络性能的线性提升,因此性价比不高。面对这种问题, MapReduce 采取了将计算节点与存储节点合二为一的集群模型,它利用分布式文件系统将数据存储于多个节点上,而后让处理过程在各数据节点本地直接进行,从而极大地降低了数据通过网络传送的需求。不过,这里仍然需要说明的是, MapReduce 并非依赖于分布式文件系统,只不过运行在非分布式文件系统的 MapReduce 的诸多高级特性将无用武之地。 事实上,分布式文件系统并非 MapReduce 带来的新生事物,只不过, MapReduce 站在前人的基础上将分布式文件系统进行了改造以使得它更能够适用于在 MapReduce