架构
文章平均质量分 90
Java后端架构V
这个作者很懒,什么都没留下…
展开
-
面试必问:详细介绍一下Java线程池和Spring异步处理
好了Spring处理异步的过程都说了,我们也看到Spring的异步处理器不是太好,需要我们自己配置默认的线程池,还有如果程序中有返回结果一定要记得把返回结果用Futrue封装一下,要不然写出来的程序可能出现空指针的情况【PS你已经是一个成熟的开发了,要记得自己避免空指针。好了看了获取默认线程池的方法了,对我们后面配置程序中自己的线程池就有了很大的帮助了,慢慢知道我一开始为啥要先聊线程池了吗,放心不会骗你的【PS呸呸呸 这句话说的是不是有点渣)这个时候可能会有小伙伴说这使用也太简单了,讲上面的线程池没有啊。原创 2023-05-12 12:01:46 · 147 阅读 · 0 评论 -
面试必问:DDD到底有什么用?解决了什么问题?
第一章提出了架构的根本目是解决系统复杂度,并简要说明系统复杂度的六个来源及通用解法,为我们设计架构提供了清晰可执行的操作思路。二、微服务架构解决了高可用、可扩展问题,但性能下降、成本&规模复杂度暴增我们知道,这些年来随着设备和新技术的发展,软件的架构模式发生了很大的变化。软件架构模式大体来说经历了从单机、集中式到分布式微服务架构三个阶段的演进。随着分布式技术的快速兴起,我们已经进入到了微服务架构时代。原创 2023-05-12 10:28:44 · 878 阅读 · 0 评论 -
深入浅出:带你读 MySQL 源码:where 条件怎么过滤记录?
在源码中,where 条件会形成树状结构,示例 SQL 的 where 条件结构如下:注意:这里的树状结构不是数据结构中的树。我们可以从图中得到以下信息:Item_cond_and 代表 where 条件中的and,连接 Item_func_gt 和 Item_cond_or。Item_func_gt 代表i2 > 20,其中 Item_field 包含 Field_long,代表 i2 字段,Item_int 代表整数 20。Item_cond_or 代表 where 条件中的or。原创 2023-05-06 10:37:07 · 263 阅读 · 0 评论 -
深入浅出:带你读 MySQL 源码:select
对于中的星号,我们再熟悉不过了:它告诉 MySQL 返回表所有字段的内容。MySQL 服务端收到 select 语句之后,会在 server 层把星号展开为表中的所有字段,然后告诉存储引擎返回这些字段的内容。对于存储引擎来说,它只需要按照 server 层的要求返回指定字段的内容即可,它不知道(也不需要知道)客户端是要求返回表中所有字段,还是部分字段的内容。select *词法 & 语法分析阶段:标记 select 字段列表中包含几个星号。查询准备阶段:把星号展开为表中所有字段。原创 2023-05-06 10:32:47 · 181 阅读 · 0 评论 -
深入浅出:带你读 MySQL 源码:limit, offset
我们先通过 explain 来看一下执行计划:,对应 LimitOffsetIterator 迭代器。Table scan,对应 TableScanIterator 迭代器。原创 2023-05-06 10:26:41 · 238 阅读 · 0 评论 -
面试官:解释下什么是死锁?为什么会发生死锁?怎么避免死锁?
开局先来个段子面试官解释下什么是死锁?应聘者你录用我,我就告诉你面试官你告诉我,我就录用你应聘者你录用我,我就告诉你面试官滚!原创 2022-07-21 22:01:14 · 285 阅读 · 0 评论 -
mysql in溢出bug和排查经历
经过提示,发现:idea翻译一下源代码以后就会变成varX。我看了一下github,代码似乎不是这样的。这是mybatis里面io / defaultVFS的代码: protected boolean isJar(URL url, byte[] buffer) { try { InputStream is = url.openStream(); Throwable var4 = null; boolea原创 2022-03-11 21:07:08 · 280 阅读 · 0 评论 -
三顾茅庐,七面阿里,25k*16offer,还原我的大厂面经
写在片头:声明,勿杠首先简单说一下,这三次面试阿里并不是一次性去面的,实际上第一次面试时候还在大四,找的实习岗,不太清楚是什么部门,别问我为什么还记得面试题,有记录和复盘的习惯,再问就是杠。个人背景不详细多说,学历双非本科,不是应届生,工作年限不长,技术不是大牛,但也非小白,面经分享是想给正面试的同行一些建议和鼓励,希望能够多多支持。注意:下文内容中会提到一些简历模板、学习笔记、学习脑图、Java电子书籍和视频等,扫描尾部二维码,回复暗号【01】免费领取。One:三顾茅庐,七面阿里,拿下25K原创 2021-12-22 17:17:20 · 128 阅读 · 0 评论 -
专科出身,2年进入苏宁,5年跳槽阿里,论我是怎么快速晋升的?
写在开头今年也是多灾难的一年,对于我们每个人来说,健康地活着比什么都重要。受到疫情的影响,很多公司都过得比较艰难,裁员更是普遍,所以对大部分来说保住饭碗就很不错了,更别说什么跳槽晋升了。但今年的我,似乎要比很多人幸运,专科出身,起点很低了,在看重学历的一众大厂中杀出一条血路。工作两年我就跳槽进入了苏宁,在苏宁待了3年,现在竟到了阿里。身边很多人都好奇,我究竟是怎么做到的?下面就来分享一下我这些年是怎么快速晋升的,希望能够给你带来一些启发和帮助吧。本文主要分享4个点,可按需来阅读:Share1:阿里原创 2021-12-22 16:25:03 · 128 阅读 · 0 评论 -
【封神总结】蚂蚁金服+滴滴+美团+拼多多+腾讯15万字Java面试题
项目经历怎么写的?简历上有一两个项目经历很正常,但是真正能把项目经历很好地展示给面试官的非常少。对于项目经历大家可以考虑从如下几点来写:对项目整体设计的一个感受在这个项目中你负责了什么、做了什么,担任了什么角色?从这个项目中你学会了那些东西,使用到了那些技术,学会了那些新技术的使用4. 另外项目描述中,最好可以体现自己的综合素质,比如你是如何协调项目组成员协同开发的或者在遇到某一个棘手的问题的时候你是如何解决的又或者说你在这个项目用了什么技术实现了什么功能,比如:用redis做缓存提高访原创 2021-12-02 22:29:16 · 223 阅读 · 3 评论 -
阿里面试官必问:不要为了“分库分表”而“分库分表”
为什么要进行分库分表?当数据库的数据量过大,大到一定的程度,我们就可以进行分库分表。那么基于什么原则,什么方法进行拆分,这就是本篇所要讲的。为什么要进行分库分表?当数据库大到一定程度的时候,我们采用优化硬件,优化表的结构,这种方法还是无法满足的时候,就要进行分库分表。分库分表是什么?随着公司的业务快速发展,数据库中的数据量猛增,访问性能也变慢了,优化迫在眉睫。分析下问题出现哪里呢?关系型数据本身就比较容易形成系统瓶颈,单机存储容量,连接数,处理能力都有限。当单表的数据量达到1000W或100G以后原创 2021-11-28 17:34:23 · 764 阅读 · 0 评论 -
HDFS读写原理和代码简单实现
摘要:本文主要研究了HDFS文件系统的读写流程以及基于MRS在windows客户端下读写HDFS文件的实现。HDFS(Hadoop分布式文件系统)是Apache Hadoop项目的一个子项目。HDFS支持海量数据的存储,允许用户把成百上千的计算机组成存储集群,其中的每一台计算机称为一个节点。用户通过HDFS的终端命令可以操作其中的文件和目录,如同操作本地文件系统(如Linux)中的文件一样。用户也可以通过HDFS API或MapReduce来编程访问其中的文件数据。本文主要研究了HDFS文件原创 2021-01-13 00:23:27 · 523 阅读 · 0 评论 -
从根上理解高性能、高并发(四):深入操作系统,彻底理解同步与异步
1、系列文章引言1.1文章目的作为即时通讯技术的开发者来说,高性能、高并发相关的技术概念早就了然与胸,什么线程池、零拷贝、多路复用、事件驱动、epoll等等名词信手拈来,又或许你对具有这些技术特征的技术框架比如:Java的Netty 、Php的workman 、Go的gnet 等熟练掌握。但真正到了面视或者技术实践过程中遇到无法释怀的疑惑时,方知自已所掌握的不过是皮毛。返璞归真、回归本质,这些技术特征背后的底层原理到底是什么?如何能通俗易懂、毫不费力真正透彻理解这些技术背后的原理,...原创 2021-01-13 00:17:57 · 516 阅读 · 0 评论 -
高并发场景下,到底先更新缓存还是先更新数据库?
在大型系统中,为了减少数据库压力通常会引入缓存机制,一旦引入缓存又很容易造成缓存和数据库数据不一致,导致用户看到的是旧数据。为了减少数据不一致的情况,更新缓存和数据库的机制显得尤为重要,接下来带领大家踩踩坑。Cache asideCache aside也就是旁路缓存,是比较常用的缓存策略。(1)读请求常见流程Cache aside 读请求应用首先会判断缓存是否有该数据,缓存命中直接返回数据,缓存未命中即缓存穿透到数据库,从数据库查询数据然后回写到缓存中,最后返回数据...转载 2021-01-13 00:14:21 · 522 阅读 · 0 评论 -
一致性Hash算法Java版实现
前言在之前写了两篇关于缓存的文章《万字长文聊缓存(上)- http缓存》《万字长文聊缓存(下)- 应用级缓存》,谈到缓存不说一下一致性Hash算法那就是在耍流氓。分布式缓存集群的访问模型现在通常使用Redis来做分布式缓存,下面我们就以Redis为例:假如当前我们系统的业务发展很快,需要缓存的数据很多,所以我们做了一个由三组主从复制的redis组成的高可用的redis集群,如何将请求路由的不同的redis集群上,这是我们需要考虑的,常用的路由算法:随机算法:每次将请求随机的发送到其中原创 2021-01-13 00:09:49 · 889 阅读 · 0 评论 -
【面试必问I/O】一篇文章帮你彻底搞清楚“I/O多路复用”和“异步I/O”的前世今生
曾经的VIP服务在网络的初期,网民很少,服务器完全无压力,那时的技术也没有现在先进,通常用一个线程来全程跟踪处理一个请求。因为这样最简单。其实代码实现大家都知道,就是服务器上有个ServerSocket在某个端口监听,接收到客户端的连接后,会创建一个Socket,并把它交给一个线程进行后续处理。线程主要从Socket读取客户端传过来的数据,然后进行业务处理,并把结果再写入Socket传回客户端。由于网络的原因,Socket创建后并不一定能立刻从它上面读取数据,可能需要等一段时间,此时线程也必须一直阻原创 2021-01-12 23:55:20 · 464 阅读 · 0 评论 -
真实记录一次给朋友转账引发我对分布式事务的思考
前两天发了工资,第一反应是想着要给远方的女朋友一点惊喜!于是打开了平安银行的APP给女朋友转点钱!填写上对方招商银行卡的卡号、开户名,一键转账!搞定!在我点击的那瞬间,就收到了app的账户变动的提醒,并且出现了图一所示的提示界面:“处理中,正在等待对方银行返回结果…”。嗯!毕竟是跨行转账嘛,等个几秒也正常!脑海开始浮现出女朋友收到转账后惊喜与感动的画面! 然而,一切并没有那么顺利,刚过一会儿,app却如图二所示的提示我“由于收款人户名不符”导致转账失败!!! 刚刚都已经从..原创 2021-01-12 23:49:43 · 354 阅读 · 0 评论 -
为什么删除数据后,Redis内存占用依然很高?
前言上周刚来了个应届小师弟,组长说让我带着,周二问了我这样一个问题:师兄啊,我用top命令看了下服务器的内存占用情况,发现Redis内存占用严重,于是我就删除了大部分不用的keys,为什么内存占用还是很严重,并没有释放呢?嗯?为什么呢?今天就带着这个问题来介绍一下如何正确释放Redis的内存。什么是内存碎片?内存碎片这个概念应该不是第一听说了,熟悉JVM或者操作系统的应该都熟悉,以火车卖票为例,一个车厢128个车位,由于高峰期,只剩余两个位置了,但是此时三个人想要坐在一起,能够吹吹牛批,喝喝原创 2021-01-12 00:43:53 · 409 阅读 · 0 评论 -
“12306”的架构到底有多牛逼?
每到节假日期间,一二线城市返乡、外出游玩的人们几乎都面临着一个问题:抢火车票!12306 抢票,极限并发带来的思考虽然现在大多数情况下都能订到票,但是放票瞬间即无票的场景,相信大家都深有体会。尤其是春节期间,大家不仅使用 12306,还会考虑“智行”和其他的抢票软件,全国上下几亿人在这段时间都在抢票。“12306 服务”承受着这个世界上任何秒杀系统都无法超越的 QPS,上百万的并发再正常不过了!笔者专门研究了一下“12306”的服务端架构,学习到了其系统设计上很多亮点,在这里和大家分享一原创 2021-01-12 00:41:51 · 1117 阅读 · 0 评论 -
Redis(九):主从复制的设计与实现解析
前面几篇我们已经完全理解了redis的基本功能的实现了。 但单靠基本功能实现,往往还是称不上优秀的项目的。毕竟,我们现在面对的都是复杂的环境,高并发的场景,大数据量的可能。 简而言之,现在的系统一般都需要支持分布式部署,不存在单点问题,才算是一个合格的系统。 而redis作为一个存储系统,单点问题肯定是不行的。 最简单的,就是起码得支持读写分离功能,因为我们面临的许多问题,一般是面对大量的查询问题。而要做到读写分离功能,就是要把主节点的数据同步到从节点上。从而可以让从节点接受读请求,原创 2021-01-03 22:55:37 · 742 阅读 · 0 评论 -
Redis(八):zset/zadd/zrange/zrembyscore 命令源码解析
前面几篇文章,我们完全领略了redis的string,hash,list,set数据类型的实现方法,相信对redis已经不再神秘。 本篇我们将介绍redis的最后一种数据类型: zset 的相关实现。 本篇过后,我们对redis的各种基础功能,应该不会再有疑惑。有可能的话,我们后续将会对redis的高级功能的实现做解析。(如复制、哨兵模式、集群模式) 回归本篇主题,zset。zset 又称有序集合(sorted set),即是序版本的set。经过上篇的介绍,大家可以看到,redis的读取功原创 2021-01-03 22:48:57 · 2090 阅读 · 0 评论 -
Redis(七):set/sadd/sismember/sinter/sdiffstore 命令源码解析
上两篇我们讲了hash和list数据类型相关的主要实现方法,同时加上前面对框架服务和string相关的功能介绍,已揭开了大部分redis的实用面纱。 现在还剩下两种数据类型: set, zset. 本篇咱们继续来看redis中的数据类型的实现: set 相关操作实现。 研究过jdk的hashmap和hashset实现的同学,肯定都是知道,set其实就是一个简化版的map,只要将map的 k->v 的形式变为 k->1 的形式就可以了。所以set只是map的一个简单包装类。.原创 2021-01-03 22:02:31 · 963 阅读 · 0 评论 -
Redis(六):list/lpush/lrange/lpop 命令源码解析
上一篇讲了hash数据类型的相关实现方法,没有茅塞顿开也至少知道redis如何搞事情的了吧。 本篇咱们继续来看redis中的数据类型的实现: list 相关操作实现。 同样,我们以使用者的角度,开始理解list提供的功能,相应的数据结构承载,再到具体实现,以这样一个思路来理解redis之list。零、redis list相关操作方法 从官方的手册中可以查到相关的使用方法。1> BLPOP key1 [key2] timeout功能: 移出并获取列表的第一个元素, 如果列表原创 2021-01-03 21:56:45 · 2125 阅读 · 0 评论 -
Redis(五):hash/hset/hget 命令源码解析
Redis作为nosql数据库,kv string型数据的支持是最基础的,但是如果仅有kv的操作,也不至于有redis的成功。(memcache就是个例子) Redis除了string, 还有hash,list,set,zset。 所以,我们就来看看hash的相关操作实现吧。 首先,我们从作用上理解hash存在的意义:Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。从另一个方面来说是,hash可以聚合很多类似的属性,原创 2021-01-03 21:51:42 · 3163 阅读 · 0 评论 -
Redis(四):del/unlink 命令源码解析
上一篇文章从根本上理解了set/get的处理过程,相当于理解了 增、改、查的过程,现在就差一个删了。本篇我们来看一下删除过程。 对于客户端来说,删除操作无需区分何种数据类型,只管进行 del 操作即可。零、删除命令 del 的定义 主要有两个: del/unlink, 差别是 unlink 速度会更快, 因为其使用了异步删除优化模式, 其定义如下: // 标识只有一个 w, 说明就是一个普通的写操作,没啥好说的 {"del",delCommand,-2,"w",0,NULL,1原创 2021-01-03 21:45:14 · 1494 阅读 · 0 评论 -
Redis(三):set/get 命令源码解析
经过前两篇的介绍,我们对整个redis的动作流程已经有比较清晰的认识。 接下来就是到具体的命令处理方式的理解了,想来我们用这些工具的意义也是在此。虽然没有人觉得,一个set/get方法会有难度,但是我们毕竟不是很清楚,否则也不至于在谈到深处就懵逼了。 我觉得本文的一个重要意义就是: 让set/get还原成它本来样子,和写"hello world"一样简单。框架性质的东西,我们前面已经讲解,就直接进入主题: set/get 的操作。 set/get 对应的两个处理函数 (redisCom原创 2021-01-03 21:40:26 · 762 阅读 · 0 评论 -
Redis(二):命令集构建及关键属性源码解析
上一篇文章,我们从框架层面,主要介绍了redis的启动过程,以及主要的命令处理流程逻辑。这些更多的都是些差不多的道理,而要细了解redis,则需要更细节的东西。 今天我们稍微内围的角度,来看看几个命令执行的重要方法,深入理解下redis的魅力所在。首先,我们通过上一章知道,processCommand 是其业务主要入口,我们再来回顾下:// server.c/* If this function gets called we already read a whole * command,原创 2021-01-03 21:13:36 · 328 阅读 · 0 评论 -
Redis(一):服务启动及基础请求处理流程源码解析
redis是用c语言的写的缓存服务器,有高性能和多种数据类型支持的特性,广受互联网公司喜爱。 我们要分析其启动过程,首先就要先找到其入口。 当然我们应该是要先分析 Makefile 文件,然后找到最终编译成的文件,然后再顺势找到C语言入口 main(); 这里咱们就不费那事了,一是这事很枯燥,二是我也不知道找不找到得到。所以,就直接找到入口吧: 在 src/server.c 中,main() 函数就是了。引用网上大牛的话归纳一下,main 函数执行的过程分以下几步:1. Redis 会原创 2021-01-03 21:08:09 · 289 阅读 · 1 评论 -
Mybatis源码一:一条select的一生
工具除了会用,还应该多做点。我觉得使用一个软件工具(开源类),一般会经历几个步骤:1. 通过wiki了解大致作用,然后开始码代码;2. 系统性地学习其特性,找出可能需要的点,用上去;3. 通过阅读其源码,清楚其来龙去脉;4. 有能力你就去超越别人; mybatis作为orm框架给我们带来了很多方便,其定制功能也让我们惊喜!还是来看看别人怎么做到的吧! 1. 下载git仓库, https://github.com/mybatis/mybatis-3 2. 打开IDE,...原创 2021-01-03 20:40:20 · 166 阅读 · 0 评论 -
最全二叉树:完整详解二叉树的遍历以及完全二叉树等6种二叉树
树在数据结构中占据了非常重要的位置,尤其是二叉树。经常是在java面试中必问的一个环节,而且二叉树的应用场景真的非常普遍,需要重点掌握好。但是一直以来,很多同学对于二叉树的掌握都是不太全面。今天我就来谈谈二叉树,希望你喜欢这个Java数据结构与算法这个专题,认真看完后你会对二叉树会有一个比较完整的了解。重点会谈到以下几点:二叉树二叉树的遍历方式二叉树有哪些种类满二叉树完全二叉树二叉搜索树平衡二叉树(AVL)左旋与右旋一.什么是二叉树二叉树:就是每个节点都只能有两个子节点的树结构,原创 2020-12-12 16:18:46 · 1254 阅读 · 0 评论 -
大话架构—深度展现最全的高并发
Hi ! 我是小小,今天是本周的第六篇,本月的最后一篇,你还好吗?我是小小,我们本周的内容是大话高并发架构前言高并发经常会发生在有大量用户量,用户高聚集的业务场景,例如秒杀活动,定时领取红包。为了让业务可以在高并发的时候能够相当好的运行,并给用户一个良好的交互体验,所以,考虑各种高并发的场景,设计高并发架构。服务器架构业务从初期到成熟,从单一到集群,最后到分布式,需要有服务器的负载均衡,数据的主从复制,nosql的各种集群,静态文件上传cdn等等。需要用到的服务器架构如下服务器负载均衡,.原创 2020-12-11 17:13:50 · 230 阅读 · 0 评论 -
深入浅出详解Spring Boot 最核心的 3 个注解
Hi ! 我是小小,开始本周的第一篇,本周第一篇内容是关于Spring Boot 最核心的三个注解,将会对这三个注解进行详细解释。前言Spring Boot 最大的特点是无需 XML 配置文件,能够实现自动装配,并进行全自动化的jar包配置。Spring Boot 是微服务的核心,其Spring Cloud 是基于Spring Boot 为基础的。其框架是用来简化Spring应用的初始搭建和开发过程,即,简化了框架,便捷了开发。下面开始介绍Spring Boot 最核心的三个注解Config.原创 2020-12-11 17:02:17 · 145 阅读 · 0 评论 -
跟着小小学会这些 Java 工程师面试题,月薪至少 3 W
Hi! 我是小小,今天的主要内容是讲解一份Java工程师必备面试题,学会了这些面试题,面试至少三万起步。File常用方法有哪些Files.exists() 检测文件路径是否存在Files.createFile() 用于创建文件Files.createDirectory() 用于创建文件夹Files.delete() 用于删除一个文件或者目录Files.copy() 用于复制文件Files.move() 用于移动文件Files.size() 查看文件个数Files.read() 读取文件.原创 2020-12-11 16:56:08 · 82 阅读 · 0 评论 -
以后别再说你不会 JVM 性能监控和调优了
常用工具常用工具主要有 JDK 自带工具与 Arthas 这两种工具。JDK 自带工具jps 虚拟机进程状况工具用于查看虚拟机进程状况的工具命令示例$ jps15236 Jps14966 Example1jstat 虚拟机统计信息监视工具用于查看虚拟机的堆内存,内存信息,类的装载和卸载信息等内容显示堆内存信息jstat -gc 14966 S0C S1C S0U S1U EC EU OC OU MC原创 2020-12-11 16:48:19 · 125 阅读 · 0 评论 -
谁说的 StringJoiner 不好?真香警告……
基本使用从字面理解上是用来拼接字符串的,一般需要分隔符进行拼接。例如hello, world这三段分隔符由 , 分割,如果需要拼接,需要这样使用StringBuilder sb = new StringBuilder();sb.append("hello");sb.append(",");sb.append("world");现在呢,不需要了,只需要,轻松一点,使用 StringJoiner,即可轻松完成拼接,妈妈再也不用担心我的拼接了。public static void main(S原创 2020-12-11 16:36:54 · 130 阅读 · 0 评论 -
“树”突然间,看了这篇文章,树我懂了
树树是一种非常常用的数据结构,与线性表,堆栈并驾齐驱。树的定义树是从自然界抽象出来的,它指的是N个父子节点的有限集合,对于这个有限集合,需要满足如下条件:当N=0时,该节点集合为空,这棵树也为空在任意非空树中,只能有一个根节点当N>1时,除去跟节点意外的其余节点本身也要集合成为一颗树。即,树具有递归特性,一棵树是由若干子树组成,每颗树又是由若干颗更小的子树组成,如图所示二叉树二叉树指每个节点最多只能有两个子树的有序树。通常左边子树称之为左子树,右边树称之为右子树。二叉树最多原创 2020-12-11 16:22:24 · 118 阅读 · 0 评论 -
分布式监控数据采集系统Ganglia实战
一、什么是Ganglia对于这个工具,大家可能比较陌生,但是它功能非常强大,如果我们想收集所有服务器、网络设备的数据,那么ganglia绝对是首选,在深入学习之前,还是先从基础概念了解起吧!Ganglia是一款为HPC(高性能计算)集群而设计的可扩展的分布式监控系统,它可以监视和显示集群中的节点的各种状态信息,它由运行在各个节点上的gmond守护进程来采集CPU 、内存、硬盘利用率、I/O负载、网络流量情况等方面的数据,然后汇总到gmetad守护进程下,使用rrdtool存储数据,最后将历史数据以曲线方原创 2020-12-08 22:26:17 · 573 阅读 · 1 评论 -
深入浅出认识 Tair,深度剖析分布式缓存
TairTair 是阿里巴巴自主研发的高性能、分布式、可扩展、高可靠的 key/value 存储系统。一个 Tair 集群主要包括 3 个必选模块:configserver、dataserver 和 client,以及一个可选模块:invalidserver。目前 Tair 常用的存储引擎包括 mdb、rdb 和 ldb,分别适用于不同的应用场景。ConfigServer两台 configserver 互为主备通过维护和 dataserver 心跳来获知集群中存活节点的信息根据存活节点的信原创 2020-12-08 22:10:15 · 1537 阅读 · 4 评论