分布式技术

分布式锁

孤者浪人 提交于 2019-11-28 01:29:36
单点故障问题 一个服务阻塞或者挂机导致其余服务都不可用的情况就是单点故障。 分布式系统中的单点故障,分布式系统通常采用主从模式,一个主控机连接多个处理节点,当主节点出现问题导致整个系统出现瘫痪。 解决单点故障需要用到分布式锁来解决,zookeeper是一种分布式锁的解决方案 Zookeper 既是一个服务注册于发现框架也是分布式协调技术; 为啥需要分布式锁 防止分布式系统中多个进程相互干扰;需要通过分布式协调技术进行调度,其核心就是实现一个分布式锁; Master 选举 这些主节点首先向zookeeper注册,首先进行编号,编号最小的成为主节点;主节点挂了,所注册的节点自动从zookeeper中删除,剩下编号最小的自动成为主节点;“多主问题” “ 什么是zookeeper” zookeeper是服务注册与发现中心,主要用来解决分布式锁的问题,解释一下单点故障问题,分布式系统中本来有一个主服务器下面有若干个从服务器,主服务器出现问题,从服务器因为主服务器无法工作;分布式锁就是用来解决单点故障问题;传统解决方案是一个主节点一个备用节点,备用节点定时会ping主节点,ping不通取代主节点,但网络震荡容易造成丢包,出现双主问题;为了解决这个问题我们引入了分布式锁技术而zookeeper就是为了解决分布式锁问题; 即所有的服务启动的时候都要向zookeeper注册

Leaf:美团分布式ID生成服务开源

雨燕双飞 提交于 2019-11-28 01:20:33
文章目录 引言 1. Leaf特性 2. Leaf诞生 3. Leaf双Buffer优化 4. Leaf动态调整Step 5. MySQL高可用 6. Leaf Snowflake 7. 未来规划 8. 关于开源 引言 Leaf是美团基础研发平台推出的一个分布式ID生成服务,名字取自德国哲学家、数学家莱布尼茨的一句话“There are no two identical leaves in the world”。Leaf具备高可靠、低延迟、全局唯一等特点。目前已经广泛应用于美团金融、美团外卖、美团酒旅等多个部门。具体的技术细节,可参考此前美团技术博客的一篇文章:《Leaf美团分布式ID生成服务》。近日,Leaf项目已经在Github上开源: https://github.com/Meituan-Dianping/Leaf,希望能和更多的技术同行一起交流、共建。 1. Leaf特性 Leaf在设计之初就秉承着几点要求: 全局唯一,绝对不会出现重复的ID,且ID整体趋势递增。 高可用,服务完全基于分布式架构,即使MySQL宕机,也能容忍一段时间的数据库不可用。 高并发低延时,在CentOS 4C8G的虚拟机上,远程调用QPS可达5W+,TP99在1ms内。 接入简单,直接通过公司RPC服务或者HTTP调用即可接入。 2. Leaf诞生 Leaf第一个版本采用了预分发的方式生成ID

Leaf——美团点评分布式ID生成系统

强颜欢笑 提交于 2019-11-28 01:19:58
2019独角兽企业重金招聘Python工程师标准>>> 背景 在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识。如在美团点评的金融、支付、餐饮、酒店、猫眼电影等产品的系统中,数据日渐增长,对数据分库分表后需要有一个唯一ID来标识一条数据或消息,数据库的自增ID显然不能满足需求;特别一点的如订单、骑手、优惠券也都需要有唯一ID做标识。此时一个能够生成全局唯一ID的系统是非常必要的。概括下来,那业务系统对ID号的要求有哪些呢? 全局唯一性:不能出现重复的ID号,既然是唯一标识,这是最基本的要求。 趋势递增:在MySQL InnoDB引擎中使用的是聚集索引,由于多数RDBMS使用B-tree的数据结构来存储索引数据,在主键的选择上面我们应该尽量使用有序的主键保证写入性能。 单调递增:保证下一个ID一定大于上一个ID,例如事务版本号、IM增量消息、排序等特殊需求。 信息安全:如果ID是连续的,恶意用户的扒取工作就非常容易做了,直接按照顺序下载指定URL即可;如果是订单号就更危险了,竞对可以直接知道我们一天的单量。所以在一些应用场景下,会需要ID无规则、不规则。 上述123对应三类不同的场景,3和4需求还是互斥的,无法使用同一个方案满足。 同时除了对ID号码自身的要求,业务还对ID号生成系统的可用性要求极高,想象一下,如果ID生成系统瘫痪,整个美团点评支付、优惠券发券

MVCC/分布式事务简介

自作多情 提交于 2019-11-28 01:03:14
之前我们学习了 RocksDB ,但这还只是一个最基础的存储引擎。如果想把它在生产环境中用起来,还需要解决很多问题: 如何从单机扩展到分布式? 如何实现事务,并对事务进行并发控制? 用户接口能不能高级一点?不要只有get/set? 这次我们就来解决这三个问题。 如何从单机扩展到分布式 分布式的一大意义就是把单机放不下的数据分散到多个节点上。我们不妨按照key将不同范围的key分成多个region:比如[a-c]是region1,[d-f]是region2。然后用这种方法存储: 这样实现了一个基本的load balancing。一个Region里所有的数据分散存储在多个replica上,每个tikv实例只会存一部分的region。 当然分布式之后我们是要支持节点的动态增减的,具体细节暂时忽略 如何实现事务,并对事务进行并发控制? 事务是数据库系统中一个很重要的概念。比如我们的数据库要拿给银行去用,然后银行要把账户A的100块钱转给账户B,就需要执行如下操作: if (A.balance>=100){ A.balance-=100; B.balance+=100; return(DB_OK); } else{ return(DB_ERROR); } 当然在数据库系统中事务是用SQL实现的。 在事务的执行过程中,整段事务需要保证要么全都不执行,要么全都执行完

Hadoop大数据平台基础

本秂侑毒 提交于 2019-11-28 00:49:44
官网:http://hadoop.apache.org/ 文章目录 Hadoop简介 核心架构 HDFS NameNode DataNode 文件操作 Linux 集群 Hadoop和高效能计算、网格计算的区别 发展现状 MapReduce与Hadoop之比较 Hadoop生态圈 概况 HDFS(Hadoop分布式文件系统) Mapreduce(分布式计算框架) HBASE(分布式列存数据库) Zookeeper(分布式协作服务) HIVE(数据仓库) Pig(ad-hoc脚本) Sqoop(数据ETL/同步工具) Flume(日志收集工具) Mahout(数据挖掘算法库) Oozie(工作流调度器) Yarn(分布式资源管理器) Mesos(分布式资源管理器) Tachyon(分布式内存文件系统) Tez(DAG计算模型) Spark(内存DAG计算模型) Giraph(图计算模型) GraphX(图计算模型) MLib(机器学习库) Streaming(流计算模型) Kafka(分布式消息队列) Phoenix(hbase sql接口) ranger(安全管理工具) knox(hadoop安全网关) falcon(数据生命周期管理工具) Ambari(安装部署配置管理工具) Hadoop简介 Hadoop实现了一个 分布式文件系统(Hadoop Distributed File

分布式与集群,以及负载均衡

萝らか妹 提交于 2019-11-27 22:57:57
新浪微博 分布式的集群服务 集群:集群就是一组部署有 相同应用 的服务器 集群是一组独立的计算机系统构成一个松耦合的多处理器系统,它们之间通过网络实现进程间的通信。 应用程序通过网络共享内存进行消息传送,实现分布式计算。 集群可分纵向集群(一台计算机部署多个应用)和横向集群(多台计算机部署多个应用)。 负载均衡:一种服务的提供访问策略。用来在多台计算机(计算机集群)、网络连接、CPU、磁盘驱动器或其他资源中分配负载的一种计算机网络技术。 负载均衡能把任务比较均衡地分布到集群环境下的计算和网络资源。 可以达到最大化资源使用、最大化吞吐率、最小化响应时间、同时避免过载的目的。 分布式是一个大型的互联网应用的架构设计的理念。多个集群,多个负载均衡策略组成的非常庞大的 分布式与集群区别: 一句话:分布式是并联工作的,集群是串联工作的。 1.分布式是指将不同的业务分布在不同的地方。 而集群指的是将几台服务器集中在一起,实现同一业务。 分布式中的每一个节点,都可以做集群。 而集群并不一定就是分布式的。 举例:就比如新浪网,访问的人多了,他可以做一个群集,前面放一个响应服务器,后面几台服务器完成同一业务,如果有业务访问的时候,响应服务器看哪台服务器的负载不是很重,就将给哪一台去完成。 而分布式,从窄意上理解,也跟集群差不多, 但是它的组织比较松散,不像集群,有一个组织性,一台服务器垮了

聊聊分布式应用中负载均衡技术和Session一致性

自闭症网瘾萝莉.ら 提交于 2019-11-27 22:56:35
【1】负载均衡技术 F5 HAProxy LVS Nginx/Apache 硬件设备 功能十分强大 工作在第四/七层 Session保持 并发处理极佳 负载均衡算法多 工作第四层 工作稳定 应用范围广 配置简单 不能做动静分离 安装配置简单 占有内存少 并发处理能力强3W+ 优化下10W+ 功能强大 动静分离 反向代理 Lua 工作在第七层(支持的应用少) 不能保持session F5主要功能 不仅包含负载均衡还包括应用交换、会话交换、状态监控、智能网络地址转换、通用持续性、响应错误处理、IPv6网关、高级路由、智能端口镜像、SSL加速、智能HTTP压缩、TCP优化、第7层速率整形、内容缓冲、内容转换、连接加速、高速缓存、Cookie加密、选择性内容加密、应用攻击过滤、拒绝服务(DoS)攻击和SYN Flood保护、防火墙过滤等功能 OSI网络七层模型 常见的负载均衡算法 轮询(加权轮询):平均分配;加权轮询如权重大的轮询两次; 随机算法(加权随机):随机分发请求,但是从概率上而言访问基数足够大的情况下,基本等同轮询。 最小连接数:在多个服务器中,与处理连接数(会话数)最少的服务器进行通信的算法。 IP哈希算法:根据客户端IP,哈希取模,得到的结果便是要访问的服务器的序号。 URL散列:同一URL发往同一服务器。 【2】负载均衡下session不一致情况 如下图所示:

一篇读懂分布式架构下的负载均衡

房东的猫 提交于 2019-11-27 22:54:42
微信公众号: IT一刻钟 大型现实非严肃主义现场 一刻钟与你分享优质技术架构与见闻,做一个有剧情的程序员 关注可了解更多精彩内容,定期有福利相送哟 文章目录 什么是负载均衡? 负载均衡分类 二层负载均衡 三层负载均衡 四层负载均衡 七层负载均衡 负载均衡算法 静态均衡算法: 动态负债均衡算法: 说在后面话 什么是负载均衡? 百度词条里的解释是:负载均衡,英文叫Load Balance,意思就是将请求或者数据分摊到多个操作单元上进行执行,共同完成工作任务。 它的目的就通过调度集群,达到最佳化资源使用,最大化吞吐率,最小化响应时间,避免单点过载的问题。 负载均衡分类 负载均衡可以根据网络协议的层数进行分类,我们这里以ISO模型为准,从下到上分为: 物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。 当客户端发起请求,会经过层层的封装,发给服务器,服务器收到请求后经过层层的解析,获取到对应的内容。 二层负载均衡 二层负债均衡是基于数据链路层的负债均衡,即让负债均衡服务器和业务服务器绑定同一个虚拟IP(即VIP),客户端直接通过这个VIP进行请求,那么如何区分相同IP下的不同机器呢?没错,通过MAC物理地址,每台机器的MAC物理地址都不一样,当负载均衡服务器接收到请求之后,通过改写HTTP报文中以太网首部的MAC地址,按照某种算法将请求转发到目标机器上,实现负载均衡。

《分布式设计模式—分布式事务》

我的未来我决定 提交于 2019-11-27 21:39:59
作者:h-松 链接:https://juejin.im/post/5d5569466fb9a06af629a9ab 分布式事务的挑战 在多个服务、数据库和消息代理之间维持数据的一致性的传统方式是采用分布式事务。分布式的事实标注是XA、XA采用了两阶段提交老保证事务中的所有参与方同时完成提交,或者失败时同时回滚。应用程序的整个技术栈需要满足XA标准。 许多新技术,包括NoSQLshujk ,liru MongoDB和Cassandra并不支持XA标准的分布式事务。同样,一些流行的消息代理如RabbitMQ和Apache Kafka也不支持分布式事务。如果你坚持在微服务中使用分布式事务,那么不得不放弃使用这些流行的数据库或消息代理。 saga 将跨越多个服务的每个业务事务作为一个SAGA实现。SAGA是一系列本地事务。每个本地事务更新数据库并发布消息或事件以触发SAGA中的下一个本地事务。如果本地事务由于违反业务规则而失败,那么SAGA将执行一系列补偿事务,以撤消前面的本地事务所做的更改。 有两种协调方式: 协同-每个本地事务发布触发其他服务中本地事务的域事件 编排-编排器(对象)告诉参与者要执行的本地事务 协同式 编排 saga这种模式有以下好处: 它使应用程序能够跨多个服务维护数据一致性,而无需使用分布式事务 此解决方案有以下缺点: 编程模型更复杂。例如,开发人员必须设计补偿事务

MySQL

烂漫一生 提交于 2019-11-27 21:03:59
1.1 mysql 架构   mysql 分为 server 层和存储引擎 1.1.1 server层 连接器:管理连接权限验证 查询缓存:命中缓存直接换回查询结果 分析器:分析语法 优化器:生成执行计划,选择索引 执行器:操作索引返回结果 1.1.2 存储引擎 存储引擎负责数据的存储和提取;其架构是插件式的。innodb 在 mysql5.5.5 版本开始成为 mysql 默认存储引擎。 各存储引擎比对: InnoDB:支持事务,支持外键,InnoDB 是聚集索引,数据文件是和索引绑在一起的,必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据,不支持全文索引。 MyISAM:不支持事物,不支持外键,MyISAM 是非聚集索引,数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的,查询效率上 MyISAM 要高于 InnnDB ,因此做读写分离的时候一般选择用 InnoDB 做主机,MyISAM 做从机 Memory:有比较大的缺陷使用场景很少;文件数据都存储在内存中,如果 mysqld 进程发生异常,重启或关闭机器这些数据都会消失。 1.1.3 sql 的执行过程   第一步客户端连接上 mysql 数据库的连接器,连接器获取权限,维持管理连接;连接完成后如果你没有后续的指令这个连接就会处于空闲状态