常用中间件理解

Dubbo

是一个RPC调用的解决方案,我们在最开始的时候都是在一个系统中调用服务,没有远程调用,随着业务的复杂度提升,需要多系统之间进行服务调用,因此在服务的提供方和调用方之间就需要约定一个协议,进行通信,Dubbo就是这样的一个协议,他的整体架构是一个三角形,有服务提供者,注册中心,服务调用者,首先服务提供者向注册中心注册服务,然后服务调用者从注册中心获得服务提供列表,并缓存到本地,然后服务调用者直接调用服务提供者,同时Dubbo还有一个监控模块,负责监控整个服务调用的情况,比如耗时,服务调用次数等

 

MQ

MQ:主要作用是解耦合,比如业务中有1个主模块和多个辅模块共同实现,如果不用MQ,会导致辅模块的失败影响到主模块。但是加入MQ之后,只需要保证主模块完成后,发送一条消息,其余模块消费MQ消息,即可实现模块解耦合。如果消费失败,MQ会自动重试。而且MQ可以保证可靠性传播,比如Kafka 主要有三个角色,生产者,MQ集群,消费者,生产者生产消息到达MQ集群后,kafka会在主副本和ISR列表都同步后认为生产消息成功,kafka接收到消息后会进行将消息以顺序写的方式写入到磁盘,保证消息不丢失,然后消费者每次消费消息后会进行offset自动提交,如果失败,则会一直重试。如果一直失败,则会触发监控报警,然后进行排查。

 

Redis

Redis:主要是解决快速的存取问题,redis是基于内存的kv型数据库,他提供了丰富的数据结构供我们使用,有String,List,Set,Zset,Hash,其中list是双向链表,提供lpush,lpop,rpush,rpop的操作,可以实现栈和队列,Set是一个无序集合,不能重复。Zset是一个有序集合,可以使用score进行排序,底层使用跳跃表实现。Hash是一个双层map,可以用来存储对象的信息。
另外redis还提供2种持久化策略,AOF,RDB,前者是将redis写的命令追加到日志文件中以文本形式存储,在数据恢复时重新执行写入命令,后者是在一定时间间隔内生成数据快照二进制存储,用于数据恢复
他们的区别是AOF是文本形式,RDB是二进制形式,RDB比AOF更节省空间。另外RDB由于是整个快照,在数据恢复时比AOF更快一些,但是RDB也有缺点,在这次快照之后下次快照之前的数据就会丢失。
而在这一点AOF更好一点,他能及时保存写入命令,尽可能减少数据丢失。

 

Zookeeper

Zookeeper:主要解决在分布式环境中多个节点的数据一致性问题。那zk如何保证一致呢?首先zk集群会进行leader选举,选举时按照zxid - > myid选择较大的,先比较事务id(zxid),如果事务id一样,则比较自身节点id(在配置中指定的),事务id越大表示该节点的数据越新。
zk中所有写的操作都会走leader节点,leader节点会生成一个事务id,全局有序。然后进行follower节点数据同步,在同步时,zk使用ZAB协议保证数据一致性
1. leader写入数据后,会发送广播消息,从节点接收消息进行数据写入,然后回复主节点。当主节点收到一半以上的回复后,发送提交事务的广播消息,从节点接收消息提交事务,然后回复主节点,最后主节点提交事务。完成写入。
2. 如果在主从同步数据的过程中,主节点宕机了,则会首先重新选举主节点,然后从节点同步新的主节点的数据,最后继续进行写入操作。
zk就是这样保证数据一致性的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值