分布式缓存

分布式均匀算法--hash性一致算法--hash slot(转)

故事扮演 提交于 2020-01-18 08:02:32
目录   1、redis cluster介绍   2、最老土的hash算法和弊端(大量缓存重建)   3、一致性hash算法(自动缓存迁移)+虚拟节点(自动负载均衡)     不用遍历 --》 hash算法: 缓存位置= hash(key)%n     新增/减少 节点 --》缓存位置失效--》hash环     hash环 节点少--》数据倾斜--》添加虚拟节点   4、redis cluster的hash slot算法 分布式寻址算法 hash 算法(大量缓存重建) 一致性 hash 算法(自动缓存迁移)+ 虚拟节点(自动负载均衡) redis cluster 的 hash slot 算法 1、redis cluster介绍  redis cluster   (1)自动将数据进行分片,每个master上放一部分数据   (2)提供内置的高可用支持,部分master不可用时,还是可以继续工作的  在redis cluster架构下,每个redis要放开两个端口号,比如一个是6379,另外一个就是加10000的端口号,比如16379  16379端口号是用来进行节点间通信的,也就是cluster bus的东西,集群总线。cluster bus的通信,用来进行故障检测,配置更新,故障转移授权  cluster bus用了另外一种二进制的协议,主要用于节点间进行高效的数据交换

.Net Core使用分布式缓存Redis:Lua脚本

时光怂恿深爱的人放手 提交于 2020-01-16 00:09:49
一、前言   运行环境window,redis版本3.2.1。此处暂不对Lua进行详细讲解,只从Redis的方面讲解。 二、Redis的Lua脚本   在Redis的2.6版本推出了脚本功能,允许开发者使用Lua语言编写脚本传到Redis中执行,在Lua脚本中也可以调用大部分的Redis命令。使用脚本有以下三个好处:   (1) 减少网络开销:有些时候需要多次请求Redis获取处理数据,而使用脚本功能就可以只使用一次请求完成相同操作,减少了网络往返时延。   (2) 原子操作:Redis会将整个脚本作为一个整体执行,中间不会被其他命令插入。也就是说在编写脚本的过程中无须担心会出现竞态条件,也就是无须使用事务。事务可以完成的所有功能,都可以用脚本来完成。   (3) 复用:客户端发送的脚本会永久存储在Redis中,这就意味着其他客户端(可以是其他语言开发的项目)可以复用这一脚本而不需要使用代码完成同样的逻辑。 三、Redis调用Lua    1、EVAL命令   编写完脚本后最重要的就是在程序中执行脚本。Redis提供了EVAL命令可以使开发者像调用其他Redis内置命令一样调用脚本。EVAL的命令格式如下: 127.0.0.1:6379> eval script numkeys key [key ...] arg [arg ...]   script:脚本内容。numkeys

电商平台架构

感情迁移 提交于 2020-01-15 03:39:56
设计理念 1 时间换空间 1.1 多级缓存,静态化 客户端页面缓存(http header中包含Expires/Cache of Control,last modified(304,server不返回body,客户端可以继续用cache,减少流量),ETag), 反向代理缓存,应用端的缓存(memcache),内存数据库,Buffer、cache机制(数据库,中间件等)。 1.2 索引 哈希、B树、倒排、bitmap 哈希索引:适合综合数组的寻址和链表的插入特性,可以实现数据的快速存取。 B树索引:适合于查询为主导的场景,避免多次的IO,提高查询的效率。 倒排索引:实现单词到文档映射关系的最佳实现方式和最有效的索引结构,广泛用在搜索领域。 Bitmap:是一种非常简洁快速的数据结构,他能同时使存储空间和速度最优化(而不必空间换时间),适合于海量数据的的计算场景。 2. 并行与分布式计算 2.1 任务切分、分而治之(MR) 在大规模的数据中,数据存在一定的局部性的特征,利用局部性的原理将海量数据计算的问题分而治之。 MR模型是无共享的架构,数据集分布至各个节点。处理时,每个节点就近读取本地存储的数据处理(map),将处理后的数据进行合并(combine)、排序(shuffle and sort)后再分发(至reduce节点),避免了大量数据的传输,提高了处理效率。 2.2 多进程

Flink分布式缓存与累加器

◇◆丶佛笑我妖孽 提交于 2020-01-14 07:50:06
分布式缓存 Flink提供了一个分布式缓存,类似于hadoop,可以使用户在并行函数中很方便的读取本地文件,并把它放在taskmanager节点中,防止task重复拉取。此缓存的工作机制如下:程序注册一个文件或者目录(本地或者远程文件系统,例如hdfs或者s3),通过ExecutionEnvironment注册缓存文件并为它起一个名称。 当程序执行,Flink自动将文件或者目录复制到所有taskmanager节点的本地文件系统,仅会执行一次。用户可以通过这个指定的名称查找文件或者目录,然后从taskmanager节点的本地文件系统访问它。 其实分布式缓存就相当于spark的广播,把一个变量广播到所有的executor上,也可以看做是Flink的广播流,只不过这里广播的是一个文件. 示例 Step 1 : 注册一个文件,可以使用hdfs上的文件 也可以是本地文件进行测试 Step 2 : 使用文件 注意: 在用户函数中访问缓存文件或者目录(这里是一个map函数)。这个函数必须继承RichFunction,因为它需要使用RuntimeContext读取数据: java分布式缓存代码如下: /** * <p/> DataSet 分布式缓存 </li> * <li>@author: li.pan</li> * <li>Date: 2019/12/29 16:10 下午</li> * <li

分布式缓存的面试题9

旧城冷巷雨未停 提交于 2020-01-11 15:05:26
1 、面试题 如何保证缓存与数据库的双写一致性? 2、面试官心里分析 你只要用缓存,就可能会涉及到缓存与数据库双存储双写,你只要是双写,就一定会有数据一致性的问题,那么你如何解决一致性问题? 3 、面试题剖析 一般来说,就是如果你的系统不是严格要求缓存 + 数据库必须一致性的话,缓存可以稍微的跟数据库偶尔有不一致的情况,最好不要做这个方案,读请求和写请求串行化,串到一个内存队列里去,这样就可以保证一定不会出现不一致的情况 串行化之后,就会导致系统的吞吐量会大幅度的降低,用比正常情况下多几倍的机器去支撑线上的一个请求。 Cache Aside Pattern缓存+数据库读写模式的分析 最经典的缓存+数据库读写的模式,cache aside pattern 1、Cache Aside Pattern (1)读的时候,先读缓存,缓存没有的话,那么就读数据库,然后取出数据后放入缓存,同时返回响应 (2)更新的时候,先删除缓存,然后再更新数据库 2、为什么是删除缓存,而不是更新缓存呢? 原因很简单,很多时候,复杂点的缓存的场景,因为缓存有的时候,不简单是数据库中直接取出来的值 商品详情页的系统,修改库存,只是修改了某个表的某些字段,但是要真正把这个影响的最终的库存计算出来,可能还需要从其他表查询一些数据,然后进行一些复杂的运算,才能最终计算出 现在最新的库存是多少

【大数据面试常问问题】----Hadoop缓存机制

吃可爱长大的小学妹 提交于 2020-01-11 10:35:37
分布式缓存 面试可说: 分布式缓存最重要的一个应用就是join操作,比如说一个表很大,另一个表很小。我们就可以对小表就行广播处理, 即每个节点都存放一个小表,然后进行Map端的连接。经过试验,Map端的join效率远远高于Reduce端的join,广 博处理就运用到了分布式缓存的技术。 每篇一言: 但问耕耘,莫问收获 来源: CSDN 作者: 江南科技创始人 链接: https://blog.csdn.net/axxx6666/article/details/103933232

电商平台架构2

强颜欢笑 提交于 2020-01-10 20:51:43
1.电商案例原因 分布式大型网站,目前看主要有几类: 1.大型门户,比如网易,新浪等; 2.SNS网站,比如校内,开心网等; 3.电商网站:比如阿里巴巴,京东商城,国美在线,汽车之家等。大型门户一般是新闻类信息,可以使用CDN,静态化等方式优化,开心网等交互性比较多,可能会引入更多的NOSQL,分布式缓存,使用高性能的通信框架等。 电商网站具备以上两类的特点,比如产品详情可以采用CDN,静态化,交互性高的需要采用NOSQL等技术。 因此,我们采用电商网站作为案例,进行分析。 2 电商网站需求 客户需求: 建立一个全品类的电子商务网站(B2C),用户可以在线购买商品,可以在线支付,也可以货到付款; (1)用户购买时可以在线与客服沟通; (2)用户收到商品后,可以给商品打分,评价; (3)目前有成熟的进销存系统;需要与网站对接; (4)希望能够支持3~5年,业务的发展; (5)预计3~5年用户数达到1000万; (6)定期举办双11,双12,三八男人节等活动; (7)其他的功能参考京东或国美在线等网站。 客户就是客户,不会告诉你具体要什么,只会告诉你他想要什么,我们很多时候要引导,挖掘客户的需求。好在提供了明确的参考网站。因此,下一步要进行大量的分析,结合行业,以及参考网站,给客户提供方案。 需求管理传统的做法,会使用用例图或模块图(需求列表)进行需求的描述

《大规模WEB服务开发技术》读书笔记(I)

别等时光非礼了梦想. 提交于 2020-01-09 13:55:20
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 1、认识服务的规模 注册用户,独立用户 请求数 繁忙时流量 服务器台数 貌似应该有很多其他的指标,以前都听说过,但是从来没有认真分析过,已经上线的系统也没有对此进行过统计和分析! 2、大规模服务中的问题有以下几点: 可扩展性、负载均衡的必要性 一般来说,当一台服务器无法承担负载时,都会采用横向扩展(scale out)或者纵向扩展(scale up)。横向扩展就是通过服务器的数量来分担负载,纵向扩展是通过提高硬件的性能来处理负载。而我们知道,硬件的性能和价格不是成比例的,所以通常采用横向扩展技术!采用横向扩展也会带来问题,如请求如何分配——负载均衡,数据如何同步,网络通信延迟等。 保证冗余性 服务器多了后,故障率也会上升。要么构建稳定的系统,要么构建发生故障时能自动切换以继续运行的系统! 低成本运维的重要性 采用自动化工具。 开发人数和开发方法的变化 如何标准化开发? 考虑下应用程序实现方案? 统一编程语言? 统一库函数和框架? 统一代码规范? 使用版本管理工具管理源代码? 需要有人负责全局的推行。 团队如何管理 应对大规模数据量 数据的流向:磁盘->内存->缓存->CPU。各层的速度差异巨大。 减小数据大小? 分散到多台服务器上? 把数据读取次数降到最低? 3、系统增长战略——最小化开端、预见变化的管理和设计

分布式缓存之Redis

和自甴很熟 提交于 2020-01-08 15:49:12
缓存大致可以分为两类,一种是应用内缓存,比如Map(简单的数据结构),以及EH Cache(Java第三方库),另一种 就是缓存组件,比如Memached,Redis;Redis(remote dictionary server)是一个基于KEY-VALUE的高性能的 存储系统,通过提供多种键值数据类型来适应不同场景下的缓存与存储需求 存储结构 大家一定对字典类型的数据结构非常熟悉,比如map ,通过key value的方式存储的结构。 redis的全称是remote dictionary server(远程字典服务器),它以字典结构存储数据,并允许其他应用通过TCP协议读写字典中的内容。数 据结构如下 启动停止redis Redis有哪些可执行文件 Redis-server Redis服务器 Redis-cli Redis命令行客户端 Redis-benchmark          Redis性能测试工具 Redis-check-aof Aof文件修复工具 Redis-check-dump Rdb文件检查工具 Redis-sentinel Sentinel服务器(2.8以后) 常用的命令是redis-server和redis-cli \1.直接启动 redis-server ../redis.conf 服务器启动后默认使用的是6379的端口,通过--port可以自定义端口;

NCache实现Oracle数据与分布式缓存数据同步三个步骤

天涯浪子 提交于 2020-01-07 20:29:59
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 多层次结构的应用程序是目前发展的趋势,这种程序都需要庞大的数据库支持。而数据传输的能力直接影响程序性能,成为程序可扩展性的瓶颈。因此很多开发者开始在程序中使用 内存分布式缓存 来提高程序性能。 同时, 内存分布式缓存 也带来了问题,那就是数据在缓存中如何保证与数据库同步。如果程序使用 Oracle数据库 ,那么 NCache 会帮你解决难题! NCache 提供OracleCacheDependency(数据库缓存依赖项),通过字符串连接数据库发现被注册的变化项。从而通过Oracle的数据库里的通知功能,更新相应的缓存。那么NCache是如何帮助程序实现的呢? 简单的说,你只需开启Oracle数据库的通知功能,然后添加NCache项目中的OracleCacheDependency到应用程序。总的分三个步骤完成: 首先启动Oracle数据库的通知功能,执行代码如下: 1 2 [SQL] "grant change notification to scott" 再次在你的程序中添加需要引用的NCache配置: 1 2 3 usingAlachisoft.NCache.Web.Caching; usingAlachisoft.NCache.Runtime.Dependencies; usingAlachisoft