分布式
梦江河
聊聊高并发,数据库,存储
展开
-
分布式存储--聊聊分布式数据库NewSQL
分布式数据库原创 2022-12-04 21:06:24 · 508 阅读 · 0 评论 -
分布式存储--字节数据库
分布式存储原创 2022-12-03 10:49:42 · 372 阅读 · 0 评论 -
分布式存储--负载均衡
分布式存储 负载均衡原创 2022-11-29 22:53:33 · 751 阅读 · 0 评论 -
分布式存储--数据库分类
分布式存储原创 2022-11-13 09:26:05 · 555 阅读 · 0 评论 -
分布式存储--大规模订单架构设计
订单系统,大数据原创 2022-11-12 19:16:21 · 792 阅读 · 0 评论 -
分布式存储--如何设计一个分布式存储--理论模型
分布式存储原创 2022-11-11 00:20:40 · 852 阅读 · 0 评论 -
分布式存储--类Redis存储
redis,分布式kv,原创 2022-11-10 19:57:55 · 806 阅读 · 0 评论 -
分布式存储--Elasticsearch
三者之间的联系:控制节点负责集群分片的分配和索引元信息的维护,数据节点负责存储数据,通过多副本协议实现数据高可用,协调节点负责客户端的接入,es是客户端通过rest http协议进行访问的,数据的读写就依靠协调节点进行处理了,可能一次数据访问需要多个分片一起参与。一个索引包含多个文档,实际存储是一个索引包含多个分片支持分布式,并且分片有主分片和副分片的概念,通过类似Raft算法的PacificA算法实现多节点分布式一致性。一个分片就是一个lucene索引。读流程:确定分片后,轮询选择分片(可能读副分片)原创 2022-11-09 23:58:01 · 329 阅读 · 0 评论 -
RocketMQ 5.0 POP消费模式
RocketMQ POP原创 2022-09-28 23:13:33 · 562 阅读 · 0 评论 -
分布式事务七种解决方案
6)最大努力通知(支付宝支付结果回调通知);1)XA规范,java实现-jta;7)seataAT模式;原创 2022-07-31 23:40:53 · 197 阅读 · 0 评论 -
RocketMQ-生产者发送消息&获取路由信息架构设计
rocketmq获取路由信息原创 2022-07-03 18:55:08 · 167 阅读 · 0 评论 -
RocketMQ-事务消息架构设计
rocketmq--事务消息架构设计原创 2022-07-02 10:27:05 · 130 阅读 · 0 评论 -
RocketMQ-延时消息实现原理
rocketmq-延时消息原理原创 2022-06-29 23:09:22 · 200 阅读 · 1 评论 -
RocketMQ-推模式消费过程
rocketmq推模式消费原创 2022-06-26 22:42:57 · 103 阅读 · 0 评论 -
RocketMQ-主从同步架构设计
rocketmq主从同步架构设计原创 2022-06-25 11:25:14 · 123 阅读 · 0 评论 -
RocketMQ Broker存储过程
1)接收生产者发送过来的消息,写入到commitlog,这里如果开启了堆外内存,会写到堆外内存;2)然后是commitlog文件的刷盘,有两种策略:同步刷盘和异步刷盘,如果是同步刷盘,会将commitlog文件刷回磁盘再返回给客户端,如果是异步刷盘+不开启堆外内存,那么会有异步线程定期将commitlog文件刷回磁盘,如果是异步刷盘+开启堆外内存,那么会先把数据从堆外内存拷贝到commitlog文件对应的mmap内存区,再通知异步线程定期将commitlog文件刷回磁盘;...原创 2022-06-19 22:47:13 · 142 阅读 · 0 评论 -
nacos配置中心源码分析
nacos配置中心源码分析ConfigService接口实现类NacosConfigServiceNacosConfigService构造方法最重要一个组件:ClientWorkerClientWorker构造方法最重要一个组件:ConfigRpcTransportClientConfigRpcTransportClient的start方法:开启配置更新监听任务executeConfigListen方法客户端有文件缓存,但CacheData不是缓存,只是Listener缓存客户端获取配置:原创 2022-05-21 12:06:08 · 387 阅读 · 0 评论 -
CPU上下文切换原理
CPU上下文:把前一个任务的CPU上下文(CPU寄存器和程序计数器)保存起来,加载新任务的CPU上下文,执行新任务。任务:1)进程;2)线程;3)硬件中断,中断处理程序的调用;CPU特权模式1)Ring0–内核空间;2)Ring3–用户空间;进程可以运行在用户空间和内核空间。通过系统调用实现进程用户态到内核态的切换。系统调用会发生CPU上下文切换,但是不涉及虚拟内存等进程用户态的资源,不会切换进程,也叫做特权模式切换。进程上下文:1)虚拟内存;2)栈;3)全局变量;4)内核堆栈;原创 2022-05-15 17:50:29 · 432 阅读 · 0 评论 -
sleuth与zipkin原理
原创 2022-05-15 16:17:00 · 100 阅读 · 0 评论 -
负载均衡算法--权重随机
思路1)设w的权重之和为total,然后把total分成n份,n是w数组的长度,比如w数组[1,3,4,5],total=13,分成4份,那么第1份[1,1],第2份[2,4],第3份[5,8],第4份[9,13];2)在[1,total]范围上,选取一个随机数x,看落到哪个范围上,返回第几份的序号;伪算法// 返回[1,total]范围的随机数x=random(1,total);// 遍历区间,看x落在哪个区间for(每个区间:区间){if(区间包含x){return 当前区间序号;.原创 2022-05-12 22:50:18 · 348 阅读 · 0 评论 -
延时消息实现--从数据结构到落地实现
延时消息指定延时后可以消费该消息或者说被执行数据结构有序表1)有序数组(二分)2)二叉搜索树(红黑树)3)跳表小根堆1)Java的DelayQueue,优先级队列跳表1)查询时间复杂度logn这3种数据结构的思想都是根据延时消息的执行时间升序排序,最小的就是最先执行的,添加消息的时候维护大小关系;落地实现1)定时扫描MySQL创建一个延时消息表delay_msg,有一个delivery_time字段,表示执行时间,那么执行SQL select * from delay_msg w原创 2022-05-12 00:00:50 · 306 阅读 · 1 评论 -
Redis怎么实现分布式锁
怎么实现1)setnx如果一个key已经存在,设置失败,返回0;2)防止死锁设置过期时间 :lua脚本/redis2.8以后的ex命令3)过期时间设置多久如果锁住的代码还没执行完,锁已经过期了,那么其他线程又能获取锁,所以可以开启一个异步线程,如果当前线程还没释放锁,继续延长锁的过期时间;同时释放锁的时候判断key对应的value是不是自己设置的,如果是才删除,用lua脚本保证原子性;绝对安全吗redis实现的分布式锁无论如何也不能保证安全,假设现在是单机redis实现分布式锁,一个线程获取原创 2022-05-05 23:39:00 · 767 阅读 · 0 评论 -
Redis实现微博热度前100
假设微博热度排行榜是根据点赞数量排名怎么实现?可以用Redis的有序集合实现,外层key是固定前缀+排行榜名称,内层value是微博ID,对应的score是点赞数量。每次点赞可以用zincrby key increment score命令给每条微博增加对应的点赞数量。大key问题微博数量很多,如果都放在一个key,那就会产生大key问题。可以把一个key拆分成多个key,比如100个key,每个key只存储一部分微博。然后用一个汇总的key保存排名前N的数据1)这100个key还是保存在一个Re原创 2022-04-24 21:31:10 · 3408 阅读 · 0 评论 -
sentinel集成nacos动态更新数据原理
1)动态数据源顶层接口loadConfig方法:返回目标数据,应该就是sentinel需要的各种规则对象;readSource方法:返回源数据,一般是字符串类型或者byte类型,然后解析成上面的目标数据类型,可推断出这个方法是实现的重点;getProperty方法:获取与当前数据源绑定的SentinelProperty,可以看出与目标数据有关;总结:整个流程是2->1->3的顺序2)顶层抽象类包含一个数据转换器,将源数据转换成目标数据,和SentinelProperty的实现类原创 2021-10-23 10:19:54 · 389 阅读 · 0 评论 -
从ES、MongoDB、Redis、RocketMQ出发谈分布式存储
Redisredis分片集群是多个支持主从故障自动切换的小集群组成的整个集群通过gossip协议通信,去中心化架构,客户端入口依赖客户端APIESES没有从节点的概念,只有主分片和副分片的概念,一个数据节点既有主分片也有副分片,通过集群唯一的master进行统一管理,中心化架构,客户端入口是协调节点MongoDBMongoDB有三种节点,Config Server,Shard Server,Route Server,Config Server类似ES的master,中心化架构,Shard Serv原创 2021-09-25 09:45:12 · 8921 阅读 · 0 评论 -
RocketMQ扩容缩容解决方案
rocketmq的主从不支持级联原创 2021-09-25 09:18:22 · 1362 阅读 · 0 评论 -
RocketMQ消息积压解决思路
消息积压一般是消费者的消费速度跟不上生产消息的速度RocketMQ的消息积压一般指某个topic的大量消息没有被消息,比如消费这个topic的消费逻辑涉及的数据库宕机了或其他原因当前架构解决方法1)判断是否是消费端出现了问题 ,比如消费逻辑涉及的下游服务,IO资源等;2)解决第一个问题后,申请若干临时的broker,做好高可用,在这个broker创建新的topic,并创建一定数量的队列,比如申请2台broker,每个broker创建10个队列,那么2台broker就是20个队列,比原来的4个队列原创 2021-09-24 23:44:23 · 2379 阅读 · 0 评论 -
Dubbo网关选型
1)zuulzuul网关集成dubbo2)gatewayspringcloud gateway的底层是webflux+netty+reactor,三个重要组件分别是路由(route)路由是网关中最基础的部分,路由信息包括一个ID、一个目的URI、一组断言工厂、一组Filter组成。如果断言为真,则说明请求的URL和配置的路由匹配。断言(predicates)Java8中的断言函数,SpringCloud Gateway中的断言函数类型是Spring5.0框架中的ServerWebExchan原创 2021-09-20 23:27:50 · 1361 阅读 · 0 评论 -
架构师之路-03-RocketMQ Topic的创建原理
深度解析RocketMQ Topic的创建机制Topic的创建模式手动创建Topic时,有两种模式:集群模式:该模式下创建的Topic在该集群中,所有Broker中的Queue数量是相同的。Broker模式:该模式下创建的Topic在该集群中,每个Broker中的Queue数量可以不同。自动创建Topic时,默认采用的是Broker模式,会为每个Broker默认创建4个Queue。...原创 2021-09-12 17:20:41 · 355 阅读 · 0 评论 -
架构师之路-01-Feign 架构设计
Feign架构设计Feign集成Hystrix原理1)未集成HystrixFeign.builder()2)集成HystrixHystrixFeign.builder()3)HystrixFeign4)Feign#target(Target target) 方法返回目标接口的实现类public <T> T target(Target<T> target) { return build().newInstance(target);}5)buil.原创 2021-09-11 13:29:18 · 352 阅读 · 0 评论 -
Feign&Ribbon&注册中心集成原理
Feign1)调用feign接口方法;2)将服务名替换成ip+port,服务名对应若干服务,要选出其中一个服务,要依靠注册中心和负载均衡,Ribbon要做的就是这件事,所以Feign集成了Ribbon;原创 2021-09-05 22:26:17 · 315 阅读 · 0 评论 -
应用埋点skywalking与prometheus
skywalking埋点是push方式prometheus埋点是server pull方式prometheus原创 2021-09-04 18:23:29 · 4575 阅读 · 0 评论 -
监控SpringBoot应用
深入SpringBoot:自定义Endpoint个人理解自定义Endpoint是基础,SpringBoot-Admin、普鲁米修斯、skywalking正是通过自定义端点来扩展监控原创 2021-09-04 09:30:17 · 438 阅读 · 0 评论 -
Feign原生-集成Ribbon与hystrix
Feign原生原创 2021-09-01 08:05:56 · 318 阅读 · 0 评论 -
RocketMQ高可用-Dledger
搭建Dledger集群疑问Q1:Dledger集群是同步复制还是异步复制?Q2:主从切换后其他节点怎么知道最新的主节点?A2:每个broker的dledger配置文件配置了该主从集群包括自己在内的所有节点地址,节点间使用raft协议通信?...原创 2021-08-28 10:11:35 · 190 阅读 · 0 评论 -
sleuth原理-1-集成日志输出traceid
为什么sleuth能在logback的日志输出自己的内容?MDC原创 2021-08-16 23:09:53 · 505 阅读 · 0 评论 -
Aspectj&JavaAgent
Aspectj织入方式编译时织入编译后织入LTW织入Aspectj的LTW织入利用了JavaAgent机制Aspectj织入方式原创 2021-08-15 11:41:53 · 374 阅读 · 0 评论 -
三层架构与微服务的关系
三层架构网关层业务逻辑层数据访问层服务拆分水平拆分垂直拆分三层架构是水平拆分微服务是垂直拆分,把原来的单体服务拆分成多个服务,至于怎么拆分服务就看具体的拆法了微服务的落地究竟要不要水平拆分成三层,这个要看具体情况,也可以选择不拆,那就是业务逻辑层和数据访问层耦合在一起,每个微服务有自己的数据库,这里数据库指的是逻辑数据库,可能有多个数据库,多个表,其他服务如果想获取这些数据,只能通过调用该服务来获取,如果按照水平拆分三层,如图如下,二层自行脑补可以看出微服务和SOA其实是没太大原创 2021-08-14 20:00:11 · 966 阅读 · 0 评论 -
分布式-链路追踪&日志&监控
链路追踪:skywalking日志:filebeat、elk监控:普罗米修斯原创 2021-08-14 17:35:08 · 333 阅读 · 0 评论 -
深入Apollo配置中心的Meta Server
上面是Apoll的部署架构图1)Client和Portal都是通过域名访问Nginx LB,Nginx LB根据请求url喝负载均衡找到一台Meta Server;2)Meta Server暴露了3个http接口给Client和Portal,分别是发现Config Service、Admin Service、Meta Server;3)Eureka是默认的注册中心,可以替换成比如zk;4)Meta Server可以想象成是注册中心的客户端,提供标准服务发现接口给Client和Portal,虽然默认.原创 2021-08-08 18:45:35 · 2595 阅读 · 0 评论