随笔分类 -  分布式

摘要:概要 是什么:ZooKeeper是一个分布式系统的基础构件(协调内核),分布式应用(如RocketMQ)可以使用ZooKeeper来处理分布式系统协同的各个方面,比如可以使用它来实现leader选举、分布式锁等等,分布式应用可以使用它暴露的API实现各种类型的协同原语(考虑Java中的AQS)。它让 阅读全文
posted @ 2024-05-22 08:55 yudoge 阅读(20) 评论(0) 推荐(0) 编辑
摘要:本篇是论文《The Design of a Practical System for Fault-Tolerant Virtual Machines》的学习笔记 论文作者:Daniel J. Scales, Mike Nelson, Ganesh Venkitachalam @ VMWare, In 阅读全文
posted @ 2024-04-28 09:36 yudoge 阅读(16) 评论(0) 推荐(0) 编辑
摘要:本文是论文《MapReduce: Simplified Data Processing on Large Clusters》的翻译。 原作者:Jeffrey Dean and Sanjay Ghemawat @ Google, Inc. 为了刷MIT 6.824 2021,分布式系统课程,可以去B站 阅读全文
posted @ 2024-04-17 10:25 yudoge 阅读(127) 评论(0) 推荐(0) 编辑
摘要:前言 本篇文章只是看别人总结后的文章之后自己进行的梳理,所以内容和原文章基本没什么区别,参考的所有原文章在文末。 问题 缓存穿透 缓存穿透是指用户在访问一个并不存在于缓存中并且也并不存在于数据库中的数据,这样的数据无论访问多少次,最终还是会打到数据库上。 解决办法1:缓存NULL 将从数据库中检索到 阅读全文
posted @ 2022-09-24 16:43 yudoge 阅读(64) 评论(0) 推荐(0) 编辑
摘要:Consumer Acknowledgements and Publisher Confirms 基础 使用如RabbitMQ这样的消息代理的系统在定义上是分布式的。因此,发送一个协议方法(消息)时无法保证它到达对端或者被它成功的处理。无论是发布者还是消费者都需要一个机制来传送以及处理确认。Rabb 阅读全文
posted @ 2022-09-05 14:44 yudoge 阅读(108) 评论(0) 推荐(0) 编辑
摘要:mandatory——处理不可路由消息 在使用Basic.Publish发送一条消息并携带参数mandatory=True时,当消息是不可路由的时,RabbitMQ会发回一个Basic.Return方法帧。 不可路由消息是指交换机无法通过指定的路由键将消息映射到具体的队列上,也就是路由键不正确 im 阅读全文
posted @ 2022-09-02 14:13 yudoge 阅读(112) 评论(0) 推荐(0) 编辑
摘要:帧 帧是AMQP服务器(如RabbitMQ,后面统一用RabbitMQ代指)以及客户端(生产者消费者)进行通信的单元。帧的发送并不是单向的,MQ服务器以及客户端都可以作为帧的发起者。 帧的组成部分: 帧类型 通道编号 帧大小 帧有效载荷 结束字节标记 帧类型 协议头帧 方法帧 内容头帧 消息体帧 心 阅读全文
posted @ 2022-09-01 14:12 yudoge 阅读(253) 评论(0) 推荐(0) 编辑
摘要:内容:如何保证消息可靠性,如何发送延迟消息(基于死信队列和DelayExchange插件),使用惰性队列解决消息堆积问题,MQ高可用集群 消息可靠性 RabbitMQ的消息模型中,可能有以下部分发生消息丢失 消息在传输路径上丢失,比如发送者到exchanger、exchanger到queue、que 阅读全文
posted @ 2022-08-29 11:30 yudoge 阅读(852) 评论(1) 推荐(2) 编辑
摘要:架构 实际开发中往往使用多级缓存架构,如下图 Java应用使用Caffine等缓存技术在JVM中缓存数据库的数据 Redis(集群)做Java应用的缓存 OpenResty(集群)做Redis(以及Java应用)的缓存 用户本地缓存 这种多级缓存结构可以大大的减少数据库甚至Web服务器的压力,因为大 阅读全文
posted @ 2022-08-28 11:26 yudoge 阅读(544) 评论(0) 推荐(0) 编辑
摘要:主从集群的问题 需要额外Sentinel节点 写操作过多导致的主节点压力过大的问题还是没法解决 内存的空间较小,无法应对海量数据存储的问题 分片集群 可以把分片集群堪称多个主从集群连接在一起了,但它有如下好处 海量数据可以被分片,并存储在其内部的每个主从集群中 master之间通过心跳检测检测彼此存 阅读全文
posted @ 2022-08-26 13:38 yudoge 阅读(614) 评论(0) 推荐(0) 编辑
摘要:主从集群数据同步原理 从节点刚连接到主节点时,主动请求数据同步 主节点判断是否是第一次同步,如果是,就返回主节点的数据版本信息 随后,主节点执行bgsave,生成RDB文件,并发送给从节点 这个过程中以及随后产生的全部命令都会记录到repl_baklog这个缓冲区中,然后一点一点的同步给从节点,这样 阅读全文
posted @ 2022-08-23 17:46 yudoge 阅读(1177) 评论(2) 推荐(1) 编辑
摘要:支撑分布式事务的两个理论:CAP和BASE理论。 其精髓就是在一致性可用性和分区容错性中,在必须保证分区容错性的前提下,不可能既保证一致性又保证可用性,需在二者之间进行调和,这在以往的文章中有过介绍。 分布式事务中的两种事务: 全局事务:整个分布式事务 分支事务:分布式事务中的独立子事务 根据CAP 阅读全文
posted @ 2022-08-22 16:19 yudoge 阅读(193) 评论(0) 推荐(0) 编辑
摘要:雪崩问题 由于微服务中的某个服务出现故障无法完成任务,导致依赖于它的服务阻塞在对它的请求上,不释放连接资源,最终连接堆积,它也无法处理新的任务,这样的情况按照层级不断传递,最终使得微服务集群中的很多节点都出现相同的故障,这就是雪崩 雪崩问题的原因: 瞬时高并发使得服务处理的速率跟不上请求速率 服务或 阅读全文
posted @ 2022-08-21 11:27 yudoge 阅读(132) 评论(0) 推荐(0) 编辑
摘要:本篇文章演示在WSL2中通过DockerCompose搭建ES集群,解决其中遇到的问题。 虚拟内存最大映射数 第一个问题是几乎所有机器上搭建ES集群都会遇到的,即虚拟内存最大映射数默认为65535,而ES需要更大,最少是262144,所以你需要设置这个参数 sudo vim /etc/sysctl. 阅读全文
posted @ 2022-08-20 10:59 yudoge 阅读(343) 评论(0) 推荐(0) 编辑
摘要:有时我们有允许用户按照拼音搜索的需求,一个解决办法是在插入文档的分词过程中就生成对应的拼音,同时插入进倒排索引。 我们可以使用这个拼音分词插件:medcl/elasticsearch-analysis-pinyin 拼音分词器初步使用 POST /_analyze { "text": ["碳酸钙咀嚼 阅读全文
posted @ 2022-08-19 13:50 yudoge 阅读(600) 评论(0) 推荐(0) 编辑
摘要:DSL查询 GET /hotel/_search { "query": { "查询方式": { "查询字段": "条件值" } } } 查询全部 GET /hotel/_search { "query": { "match_all": {} } } 结果: 默认情况下并不返回所有,大概只返回十条数据 阅读全文
posted @ 2022-08-09 11:41 yudoge 阅读(185) 评论(0) 推荐(0) 编辑
摘要:什么是搜索引擎 当你的项目中需要一个很强大且快速的搜索功能,并且需求的预期已经超过了关系型数据库能带来的检索能力时,你就需要使用搜索引擎技术。 存储并快速检索、分析海量数据 提供全文检索 一般都提供分布式功能 Lucene和ElasticSearch Lucene是一个历史悠久的Java搜索引擎库, 阅读全文
posted @ 2022-08-08 13:56 yudoge 阅读(222) 评论(0) 推荐(0) 编辑
摘要:同步请求&异步请求 同步请求 以下是微服务间使用同步请求调用的示意图: 缺点: 性能低下:支付服务的服务是它所调用的所有服务的服务时间之和 资源浪费:支付服务在等待其它服务时占用系统资源,但实际不工作 紧耦合:当支付动作发生后又要扩展其它的业务时(比如新增赠送优惠券服务),需要更改支付服务的代码 故 阅读全文
posted @ 2022-08-07 11:35 yudoge 阅读(57) 评论(0) 推荐(0) 编辑
摘要:目前,我们的微服务架构已经有了微服务集群、注册中心和配置中心,并且我们的微服务集群可以利用各种远程调用协议来相互调用。 不过,在当前的场景下,用户如果想要去使用某个服务,他必须直接调用微服务,这对用户十分不友好,用户可能要记住很多很多服务的IP及端口,并且,他要手动选择到一个具体的服务实例上,这让我 阅读全文
posted @ 2022-08-06 15:07 yudoge 阅读(128) 评论(0) 推荐(0) 编辑
摘要:Feign是为了解决RestTemplate将URL请求卷入到开发业务的问题而设计的。 使用Feign,你可以针对一个服务创建一个接口,其中描述该服务的细节,然后就可以通过这个接口来对服务进行调用,而非用URL拼接的方式。 QuickStart 导入 <dependency> <groupId>or 阅读全文
posted @ 2022-08-06 11:59 yudoge 阅读(57) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示
主题色彩