分布式一致性

一致性哈希算法

↘锁芯ラ 提交于 2020-01-07 17:05:32
一致哈希算法 Consistent Hashing 标签(空格分隔): Java基础 1.场景描述(分布式缓存问题) 有三台缓存服务器sever1,server2,server3,如何读写呢?有如下方法 随机访问 哈希计算(取模法) 一致性哈希 随机访问 每次请求随机发送到一台缓存服务器,策略简单但是会导致问题: 同一份数据可能被存在不同的机器上造成数据冗余 数据已有缓存,但是没有命中 所以,随机策略在时间效率、空间效率上都不是很好。 哈希计算(取模法) 解决相同key访问发送到同一服务器的常用方法->计算哈希。如下 server=Hash(key)%3 这样会解决随机访问导致的问题。但是有产生了新的问题: 容错性:系统中有服务器不可用时,整个系统是否可正确高效运行 扩展性:加入新的服务器,整个系统是否可正确高效运行 假设现在有一台机器宕机了,那么之前的算法就要改为 server=Hash(key)%(N-1) 增加一台服务器,则变为 server=Hash(key)%(N+1) 这会导致无论是增加还是减少服务器都会从新计算Hash。从而导致缓存不命中问题。 一致性哈希 分布式系统每个节点都可能失效,在节点失效或者加入新节点后,如何把对数据的影响降到最低?在分布式缓存中,如果没有好的算法,某个节点失效或者加入新节点后,会对当前缓存的命中率产生巨大的影响。 传统Hash也不是最优解

蚂蚁金服服务注册中心数据分片和同步方案详解 | SOFARegistry 解析

那年仲夏 提交于 2020-01-07 05:26:45
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> SOFAStack( S calable O pen F inancial A rchitecture Stack) 是蚂蚁金服自主研发的金融级分布式架构,包含了构建金融级云原生架构所需的各个组件,是在金融场景里锤炼出来的最佳实践。 SOFARegistry 是蚂蚁金服开源的具有承载海量服务注册和订阅能力的、高可用的服务注册中心,在支付宝/蚂蚁金服的业务发展驱动下,近十年间已经演进至第五代。 本文为《剖析 | SOFARegistry 框架》第四篇, 本篇作者明不二 。《剖析 | SOFARegistry 框架》系列由 SOFA 团队和源码爱好者们出品,项目代号: SOFA:RegistryLab/ ,文末包含往期系列文章。 GitHub 地址: https://gitee.com/sofastack/sofa-registry 概述 在前面的章节中我们已经提到,SOFARegistry 与其他服务发现领域的产品相比,最大的不同点在于支持海量数据。本章即将讲述 SOFARegistry 在支撑海量数据上的一些特性。 本文将从如下几个方面进行讲解: DataServer 总体架构 :对 SOFARegistry 中支持海量数据的总体架构做一个简述,讲解数据分片和同步方案中所涉及到的关键技术点;

聊聊一致性hash算法的原理

纵饮孤独 提交于 2020-01-06 20:03:49
https://mp.weixin.qq.com/s/BnErT5xrPpq76A4qUEyQCw 工程师经常使用服务器的集群来设计和实现数据缓存,他们常见的策略是: 1:不管是添加,删除和查询数据,都是先将数据的id通过hash函数生成一个hash值,记为key。 2:如果有N台机器,则会计算key%N的值,这个值就是所属机器的编号,无论是添加,删除和查询数据,都是在这台机器上操作。 请分析上面的策略存在的问题,并提出解决的方案。 2 解答 1:首先来想下在什么情况下会产生问题。一般情况下,在不增加机器的情况下,产生的hash值相同,那么就会在某一台机器上操作,不会产生什么问题,但是如果增加或者删除了机器,即N变化的时候,代价就会比较高,所有的数据都需要根据id重新计算一次hash值,并通过hash值对新的机器进行重新取模操作,然后对数据进行大规模的迁移。 2:那么为了解决这些问题,我们就引入了一致性hash算法,这是一种很好的数据缓存解决方案。 假设通过id生成的hash值是0到(2^32)-1 的范围,那么我们可以想象成一个闭合的圆,一个数据id计算出的hash值就是对应圆中的某一个位置,如图所示 当采用一致性哈希算法,把分布式集群中新的机器加入。其原理是通过使用与对象存储一样的Hash算法将机器也映射到圈中

一文讲透数据库事务四原则

ⅰ亾dé卋堺 提交于 2020-01-06 15:43:03
本文始发于个人公众号: TechFlow 说到数据库,以前我老师有一句很经典的话。你可以不会写SQL,但是一定不能不知道 ACID 。 在工业领域,SQL可以说是应用最广泛的技术。从后端到算法,从数据到DBA,再到产品,甚至连一些运营也会基本的SQL。所以如果你现在还不太会的话,我建议你用一个下午的时间找个网站好好学一下。 原本我是想直接写些Hbase相关的内容,但是我发现要想讲清楚Hbase,必须要讲noSQL数据库。如果将noSQL,则又离不开最传统的关系型数据库。所以我们一步一步来,先从基础的关系型数据库讲起。或许我这么说并不准确,因为数据库并不基础,相反它十分复杂。从索引到各种优化和设计原理,再到内部的各种算法和数据结构,涉及到的内容非常多。我们先把浩如烟海的知识放一放,先从最核心的数据库四大原则开始说起。 数据库事务ACID四大原则, A代表Atomicity,即原子性。C表示Consistency,即一致性。I表示Isolation,即隔离性。D表示Durability,即持久性 。 这四个原则了解过数据库的应该都如雷贯耳。可是真正面试的时候被问起来,能一个不落说得上来,并且讲得清楚原委的就不多了。我觉得主要是因为我们的翻译过于文雅,不像英文那么直观,所以很难顾名思义。另一个原因是我们在学习的时候理解不够深入,只知道原因,不知道原因的究竟。所谓知其然,不知其所以然。

什么是分布式系统,如何学习分布式系统

佐手、 提交于 2020-01-05 22:05:21
欢迎关注专栏: Java架构技术进阶 。里面有大量batj面试题集锦,还有各种技术分享,如有好文章也欢迎投稿哦。 什么是分布式系统 分布式系统是由一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统。分布式系统的出现是为了用廉价的、普通的机器完成单个计算机无法完成的计算、存储任务。其目的是 利用更多的机器,处理更多的数据 。 首先需要明确的是,只有当单个节点的处理能力无法满足日益增长的计算、存储任务的时候,且硬件的提升(加内存、加磁盘、使用更好的CPU)高昂到得不偿失的时候,应用程序也不能进一步优化的时候,我们才需要考虑分布式系统。因为,分布式系统要解决的问题本身就是和单机系统一样的,而由于分布式系统多节点、通过网络通信的拓扑结构,会引入很多单机系统没有的问题,为了解决这些问题又会引入更多的机制、协议,带来更多的问题。。。 在很多文章中,主要讲分布式系统分为分布式计算(computation)与分布式存储(storage)。计算与存储是相辅相成的,计算需要数据,要么来自实时数据(流数据),要么来自存储的数据;而计算的结果也是需要存储的。在操作系统中,对计算与存储有非常详尽的讨论,分布式系统只不过将这些理论推广到多个节点罢了。 那么分布式系统怎么将任务分发到这些计算机节点呢,很简单的思想,分而治之,即分片( partition) 。对于计算

一文讲透数据库事务的四原则

情到浓时终转凉″ 提交于 2020-01-04 12:50:32
说到数据库,以前我老师有一句很经典的话。你可以不会写SQL,但是一定不能不知道 ACID 。 在工业领域,SQL可以说是应用最广泛的技术。从后端到算法,从数据到DBA,再到产品,甚至连一些运营也会基本的SQL。所以如果你现在还不太会的话,我建议你用一个下午的时间找个网站好好学一下。 原本我是想直接写些Hbase相关的内容,但是我发现要想讲清楚Hbase,必须要讲noSQL数据库。如果将noSQL,则又离不开最传统的关系型数据库。所以我们一步一步来,先从基础的关系型数据库讲起。或许我这么说并不准确,因为数据库并不基础,相反它十分复杂。从索引到各种优化和设计原理,再到内部的各种算法和数据结构,涉及到的内容非常多。我们先把浩如烟海的知识放一放,先从最核心的数据库四大原则开始说起。 数据库事务ACID四大原则, A代表Atomicity,即原子性。C表示Consistency,即一致性。I表示Isolation,即隔离性。D表示Durability,即持久性 。 这四个原则了解过数据库的应该都如雷贯耳。可是真正面试的时候被问起来,能一个不落说得上来,并且讲得清楚原委的就不多了。我觉得主要是因为我们的翻译过于文雅,不像英文那么直观,所以很难顾名思义。另一个原因是我们在学习的时候理解不够深入,只知道原因,不知道原因的究竟。所谓知其然,不知其所以然。 原子性 让我们先从其中最简单的原子性开始。

一文讲透数据库事务四原则

别来无恙 提交于 2020-01-04 08:23:22
本文始发于个人公众号: TechFlow 说到数据库,以前我老师有一句很经典的话。你可以不会写SQL,但是一定不能不知道 ACID 。 在工业领域,SQL可以说是应用最广泛的技术。从后端到算法,从数据到DBA,再到产品,甚至连一些运营也会基本的SQL。所以如果你现在还不太会的话,我建议你用一个下午的时间找个网站好好学一下。 原本我是想直接写些Hbase相关的内容,但是我发现要想讲清楚Hbase,必须要讲noSQL数据库。如果将noSQL,则又离不开最传统的关系型数据库。所以我们一步一步来,先从基础的关系型数据库讲起。或许我这么说并不准确,因为数据库并不基础,相反它十分复杂。从索引到各种优化和设计原理,再到内部的各种算法和数据结构,涉及到的内容非常多。我们先把浩如烟海的知识放一放,先从最核心的数据库四大原则开始说起。 数据库事务ACID四大原则, A代表Atomicity,即原子性。C表示Consistency,即一致性。I表示Isolation,即隔离性。D表示Durability,即持久性 。 这四个原则了解过数据库的应该都如雷贯耳。可是真正面试的时候被问起来,能一个不落说得上来,并且讲得清楚原委的就不多了。我觉得主要是因为我们的翻译过于文雅,不像英文那么直观,所以很难顾名思义。另一个原因是我们在学习的时候理解不够深入,只知道原因,不知道原因的究竟。所谓知其然,不知其所以然。

MySQL基础之事务编程学习笔记

自古美人都是妖i 提交于 2020-01-01 12:27:54
MySQL基础之事务编程学习笔记 在学习《MySQL技术内幕:SQL编程》一书,并做了笔记。本博客内容是自己学了《MySQL技术内幕:SQL编程》事务编程一章之后,根据自己的理解做的笔记,内容和书本并不一致,不过书本实验都经过自己验证,基于MySQL5.7版本。做笔记的目的是方便自己复习,同时分享出来或许对其他人或许有点帮助 1、事务概述 事务是数据库区别于文件系统的重要特性之一,提到事务肯定会想到事务的4个特性ACID,要保证业务的正常使用,必须保证ACID,ACID表示原子性(atomicity)、一致性(consistency)、隔离性(isolation)、持久性(durability),一个运行良好的事务系统也是要求具备这些特征 原子性(atomicity):一个事务必须被视为一个不可分割的最小工作单位,整个事务中的所有操作要么全部提交成功,要么全部失败回滚,不能只执行一部分操作 一致性(consistency):一致性要求数据库总是从一个一致性的状态转换为另外一个一致性的状态,比如银行转账的例子,一个用户转账账号里减了200元,另外一个收账账号必须增加,一个失败数据必须全部回退状态,要保证事务一致性 隔离性(isolation):一般来说,一个事务所做的修改在提交之前对其它事务来说都是不可见的 持久性(durability):事务一旦提交

分布式大牛详解Zookeeper底层原理

﹥>﹥吖頭↗ 提交于 2020-01-01 00:43:17
很多学员都在反馈,说zk很难学,学的不是很明白,在这里,我继续带着大家详解一遍Zookeeper 首先zk是什么呢首先肯定是一个个分布式服务框架,是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用 中经常遇到的一些数据管理问题,如:统一命名服务、集群管理、分布式应用配置项的管理 等。 第二:Zookeeper是一个数据库 第三:Zookeeper是一个拥有一件系统特点的数据库 第四:Zookeeper是一个解决了数据一致性问题的分布式数据库 第五:Zookeeper是一个具有发布和订阅功能的分布式数据库 (watch) 这样说同学们应该都是认同的吧,没有异议的吧 那么这个一致性又是什么呢 一致性分为强一致性,弱一致性, 最终一致性 有些同学不是很懂哈,那就接着看下面的内容 强制要求步骤2读取的时候,一定要读取的是2,不能读取到的是1,那么要求数据库之间同步异常迅速或者在步骤2上加锁以等待数据同步完成,那么这种叫强一致性; 允许步骤2读取的时候,可以读取的是1,那么这种叫弱一致性,其实就是不需要要一致; 允许步骤2读取的时候,可以先读到 1,过一段时间再读到2,那么这种叫最终一致性,就是可以等待一段时间才一致; 一个集群需要对外部提供强一致性,所以只要集群内部某一台服务器的数据发生了改变,那么就需要等待集群内其他服务器的数据同步完成后才能正常的对外提供服务。

MongoDB入门

给你一囗甜甜゛ 提交于 2019-12-30 04:22:33
1.什么是NoSQL Nosql的全称是Not Only Sql 这个概念早起就有人提出,而我们常用的都是关系型数据库。就像我们常用mysql,sqlserver一样,这些数据库一般用来存储重要信息,应对普通的业务是没有问题的。但是,随着互联网的高速发展,传统的关系型数据库在应付超大规模,超大流量以及高并发的时候力不从心。而就在这个时候,Nosql得到的告诉的发展。 2.为什么要使用NoSQL 单机 MySQL 的美好时代 在90年代,一个网站的访问量一般都不大,用单个数据库完全可以轻松应付。 在那个时候,更多的都是静态网页,动态交互类型的网站不多 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yHjk2K6A-1577542875039)(D:\youruike\MongoDB\assets\1575617897290.png)] 上述架构下,我们来看看数据存储的瓶颈是什么? DAL : Data Access Layer(数据访问层 – Hibernate,MyBatis) 数据量的总大小一个机器放不下时 数据的索引(B+ Tree)一个机器的内存放不下时 访问量(读写混合)一个实例不能承受 如果满足了上述1 or 3个时,只能对数据库的整体架构进行重构。 Memcached(缓存)+MySQL+垂直拆分 后来,随着访问量的上升