分布式的那些事儿
文章平均质量分 77
时小浅
折腾数据.折腾代码.折腾规约.折腾架构.折腾需求.折腾服务.生命不息.折腾不止.
展开
-
【面试】引入消息队列之后该如何保证其高可用性?
1、面试题如何保证消息队列的高可用啊?2、面试官心理分析如果有人问到你MQ的知识,高可用是必问的,因为MQ的缺点,我刚才已经说过了,有好多,导致系统可用性降低,等等。所以只要你用了MQ,接下来问的一些要点肯定就是围绕着MQ的那些缺点怎么来解决了。要是你傻乎乎的就干用了一个MQ,各种问题从来没考虑过,那你就杯具了,面试官对你的印象就是,只会简单实用一些技术,没任何思考,马上对你的印象就不太好了。这样的同学招进来要是做个20k薪资以内的普通小弟还凑合。如果招进来做薪资20多k..原创 2021-07-06 16:32:55 · 62 阅读 · 0 评论 -
Zookeeper的那些事
Zookeeper基本概念Zookeeper是一个开源的分布式协调服务,其设计目标是将那些复杂的且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一些简单的接口提供给用户使用。zookeeper是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它实现诸如数据订阅/发布、负载均衡、命名服务、集群管理、分布式锁和分布式队列等功能。Zookeeper角色Leader、Follower、Observer三种角色Zookeeper集群中的所有机器通过Leader选举来选定一台被称原创 2020-08-30 15:19:56 · 171 阅读 · 0 评论 -
基于Netty自定义RPC 服务端模块rpc-provider(四)
首先是接口的实现,这一点和普通接口实现是一样的package com.lwl.service;import com.lwl.common.JSONSerializer;import com.lwl.common.RpcDecoder;import com.lwl.common.RpcRequest;import com.lwl.handler.UserServiceHandler;import io.netty.bootstrap.ServerBootstrap;import io.nett原创 2020-08-16 21:35:23 · 148 阅读 · 0 评论 -
基于Netty自定义RPC 客户端模块rpc-consumer(三)
消费者有一个需要注意的地方,就是调用需要透明,也就是说,框架使用者不用关心底层的网络实现。这里我们可以使用 JDK 的动态代理来实现这个目的。思路:客户端调用代理方法,返回一个实现了 HelloService 接口的代理对象,调用代理对象的方法,返回结果。我们需要在代理中做手脚,当调用代理方法的时候,我们需要初始化 Netty 客户端,还需要向服务端请求数据,并返回数据。首先创建代理相关的类:RPCConsumerpackage com.lwl.client;import com.lwl.com.原创 2020-08-16 21:31:41 · 162 阅读 · 0 评论 -
基于Netty自定义RPC 公共模块rpc-common(二)
首先,在公共模块中添加netty的maven依赖 <dependencies> <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> <version>4.1.16.Final</version> &l.原创 2020-08-16 21:28:20 · 204 阅读 · 0 评论 -
基于Netty自定义RPC(一)
RPC又称远程过程调用,我们所知的远程调用分为两种,现在在服务间通信的方式也基本以这两种为主1.是基于HTTP的restful形式的广义远程调用,以spring could的feign和restTemplate为代表,采用的协议是HTTP的7层调用协议,并且协议的参数和响应序列化基本以JSON格式和XML格式为主。2.是基于TCP的狭义的RPC远程调用,以阿里的Dubbo为代表,主要通过netty来实现4层网络协议,NIO来异步传输,序列化也可以是JSON或者hessian2以及java自带的序列化等,原创 2020-08-16 21:22:20 · 297 阅读 · 0 评论 -
RMI远程方法调用 客户端实现(三)
2.客户端:1)通过符合JRMP规范的URL字符串在注册表中获取并强转成Remote子接口对象;2)调用这个Remote子接口对象中的某个方法就是为一次远程方法调用行为IHelloServicepackage com.lwl.demo;import com.lwl.pojo.User;import java.rmi.Remote;import java.rmi.RemoteException;public interface IHelloService extends Remote原创 2020-08-16 21:20:16 · 209 阅读 · 0 评论 -
RMI远程方法调用 服务端实现(二)
1.服务端:1)定义Remote子接口,在其内部定义要发布的远程方法,并且这些方法都要Throws RemoteException;2)定义实现远程接口,并且继承:UnicastRemoteObject3)启动服务器:依次完成注册表的启动和远程对象绑定。IHelloServicepackage com.lwl.demo;import com.lwl.pojo.User;import java.rmi.Remote;import java.rmi.RemoteException;pu原创 2020-08-16 21:17:51 · 106 阅读 · 0 评论 -
RMI远程方法调用基础了解(一)
Java RMI 指的是远程方法调用 (Remote Method Invocation),是java原生支持的远程调用 ,采用JRMP(JavaRemote Messageing protocol)作为通信协议,可以认为是纯java版本的分布式远程调用解决方案, RMI主要用于不同虚拟机之间的通信,这些虚拟机可以在不同的主机上、也可以在同一个主机上,这里的通信可以理解为一个虚拟机上的对象调用另一个虚拟机上对象的方法。1.客户端: 1)存根/桩(Stub):远程对象在客户端上的代理;原创 2020-08-16 21:11:44 · 111 阅读 · 0 评论 -
必须了解的分布式系统设计策略
1.心跳检测在分布式环境中,我们提及过存在非常多的节点(Node),其实质是这些节点分担任务的运行、计算或者程序逻辑处理。那么就有一个非常重要的问题,如何检测一个节点出现了故障乃至无法工作了?通常解决这一问题是采用心跳检测的手段,如同通过仪器对病人进行一些检测诊断一样。心跳顾名思义,就是以固定的频率向其他节点汇报当前节点状态的方式。收到心跳,一般可以认为一个节点和现在的网络拓扑是良好的。当然,心跳汇报时,一般也会携带一些附加的状态、元数据信息,以便管理如图所示,Client请求Server,Serve原创 2020-08-16 21:07:01 · 321 阅读 · 0 评论 -
如何理解:一致性算法 Paxos
Paxos 解决了什么问题答:解决了分布式系统一致性问题。分布式系统才用多副本进行存储数据 , 如果对多个副本执行序列不控制, 那多个副本执行更新操作,由于网络延迟 超时 等故障到值各个副本的数据不一致. 我们希望每个副本的执行序列是 [ op1 op2 op3 .... opn ] 不变的, 相同的. Paxos 一次来确定不可变变量 opi的取值 , 每次确定完Opi之后,各个副本执行opi操作, 一次类推。 结论: Paxos算法需要解决的问题就是如何在一个可能发生上述异常的分布式系统原创 2020-08-16 21:01:24 · 496 阅读 · 0 评论 -
如何理解:一致性协议 2PC、3PC
2PC对比3PC1.首先对于协调者和参与者都设置了超时机制(在2PC中,只有协调者拥有超时机制,即如果在一定时间内没有收到参与者的消息则默认失败),主要是避免了参与者在长时间无法与协调者节点通讯(协调者挂掉了)的情况下,无法释放资源的问题,因为参与者自身拥有超时机制会在超时后,自动进行本地commit从而进行释放资源。而这种机制也侧面降低了整个事务的阻塞时间和范围。2.通过CanCommit、PreCommit、DoCommit三个阶段的设计,相较于2PC而言,多设置了一个缓冲阶段保证了在最后提交阶段之转载 2020-08-16 20:46:11 · 391 阅读 · 0 评论 -
如何理解: 分布式理论的 CAP定理、BASE 理论
CAP 定理一个分布式系统不可能同时满足一致性(C:Consistency),可用性(A: Availability)和分区容错性(P:Partition tolerance)这三个基本需求,最多只能同时满足其中的2个。C - Consistency一致性是值写操作后读操作可以读到最新的数据状态,当数据分布在多个节点上时,从任意节点读取到的数据都是最新的.商品信息读写要满足一致性需要实现如下目标:1.商品服务写入主数据库成功, 则想从数据库查询数据也成功2.商品服务写入主数据库失败,则向从数原创 2020-08-15 17:30:44 · 224 阅读 · 0 评论 -
如何理解: 分布式理论的一致性
1)什么是分布式一致性分布式数据一致性,指的是数据在多份副本中存储时,各副本中的数据是一致的。2)副本一致性分布式系统当中,数据往往会有多个副本。如果是一台数据库处理所有的数据请求,那么通过ACID四原则,基本可以保证数据的一致性。而多个副本就需要保证数据会有多份拷贝。这就带来了同步的问题,因为我们几乎没有办法保证可以同时更新所有机器当中的包括备份所有数据。 网络延迟,即使我在同一时间给所有机器发送了更新数据的请求,也不能保证这些请求被响应的时间保持一致存在时间差,就会存在某些机器之间的数据不一致的情原创 2020-08-15 17:05:40 · 692 阅读 · 0 评论 -
分布式系统面临的问题
1)通信异常网络本身的不可靠性,因此每次网络通信都会伴随着网络不可用的风险(光纤、路由、DNS等硬件设备或系统的不可用),都会导致最终分布式系统无法顺利进行一次网络通信,另外,即使分布式系统各节点之间的网络通信能够正常执行,其延时也会大于单机操作,存在巨大的延时差别,也会影响消息的收发过程,因此消息丢失和消息延迟变的非常普遍。2)网络分区网络之间出现了网络不连通,但各个子网络的内部网络是正常的,从而导致整个系统的网络环境被切分成了若干个孤立的区域,分布式系统就会出现局部小集群,在极端情况下,这些小集群原创 2020-08-15 16:57:26 · 2235 阅读 · 0 评论 -
分布式架构的演变历程
原创 2020-08-11 08:37:21 · 91 阅读 · 0 评论