java分布式
什么是分布式?分布式跟集中式有哪些区别?[面试8.0]分布式: 很多子系统组成一个整体,多个子系统可以协作完成一个任务每一个子系统都可以部署在多台机器上面子系统之间有调用依赖关系,需要互相通信分布式系统和集中式系统的区别: 高可用性: 集中式系统中央处理服务器一宕机就崩盘了,分布式系统某一服务器宕机后其他机器可以继续提供服务高并发性: 集中式不支持高并发,流量全部由中央处理器支持,分布式系统分摊流
什么是分布式?分布式跟集中式有哪些区别?[面试8.0]
分布式:
很多子系统组成一个整体,多个子系统可以协作完成一个任务
每一个子系统都可以部署在多台机器上面
子系统之间有调用依赖关系,需要互相通信
分布式系统和集中式系统的区别:
高可用性: 集中式系统中央处理服务器一宕机就崩盘了,分布式系统某一服务器宕机后其他机器可以继续提供服务
高并发性: 集中式不支持高并发,流量全部由中央处理器支持,分布式系统分摊流量,负载均衡
数据储存和处理: 集中式是靠中央处理器,分布式系统靠本机或其他机器协作处理
为什么要使用微服务?[面试8.0]
微服务的优点:
解耦合: 独立团队开发,独立部署,服务之间不直接关联影响
隔离性: 一个服务挂掉,其他服务可以继续提供工作
扩展性: 可根据每个服务的规模来部署,选择合适的资源硬件
微服务的缺点:
参考CAP,CAP就是微服务需要解决的问题(也是微服务的缺点)
当微服务很多的时候怎么进行管理?[面试8.0]
分层:
如界面层,接入层,代理层,网关层,服务层,接口层,方法层,上层只能调下层服务
分组:
把彼此紧密相关的服务构建成逻辑上的一个组,该组提供一个API网关,其他组服务通过这个API网关进行访问
自动化调用:
利用注册中心,服务注册时将服务名字,IP,版本,状态,所属组,所属层等信息保存起来,客户端再到注册中心去拉取服务列表进行调用(客户端配置好注册中心地址即可自动化扩展微服务)
控制服务依赖:
利用Ribbon或Feigh限制服务调用,当客户端获取到服务列表(启动时会获取)后,通过Ribbon或Feign提供白名单或黑名单方式限制只能调用那些服务
什么是ACID,CAP,BASE?[面试8.0]
ACID(针对数据库事务):
即原子性,一致性,隔离性,持久性,见MySql事务章节
CAP(针对分布式系统):
C->Consistency(一致性),默认是强一致性,任何时刻节点看到的数据是一致的(比如redis和数据库的双写一致性),另外还有用户一致性(储存不一致,但用户访问的是一致的)和最终一致性
A->Availability(可用性),任何时间内都是高可用的(如redis的哨兵模式(redisCluster就是基于哨兵实现的高可用))
P->Partition Tolerance(分区容错性),一部分集群坏掉,另一部分仍能正常工作
注意: 一般来说分布式系统以P优先,只能达到AP或CP,如(Eureka就是AP,Zookeeper就是CP),要保证CP就会导致可用性降低,因为保证强一致性会导致运行更多的时间,出现更多的延时
BASE(CAP一致性的扩展):
BA->Basically Available(基本可用),分布式中可以保证核心可用即可,允许损失部分可用性(如降级)
S->Soft State(软状态),分布式允许有中间状态,该状态不会影响可用性(如:redis节点镜像复制,MySql主从复制都需要耗时时间,这个时间就是中间状态)
E->Eventual Consistency(最终一致性),系统中数据经过一定时间的处理后最终达到一致的状态(如补单机制)
Feign和Dubbo有什么区别?[面试8.0]
Feign和Dubbo都是RPC(Remote Procedure Call)(远程过程调用,一个节点请求另一个节点提供的服务)
Feign是基于HTTP或HTTPS的,HTTP,HTTPS使用的是应用层协议
Dubbo是是基于TCP/IP的,TCP/IP使用的是传输层协议,由于HTTP或HTTPS对TCP/IP做了数据封装,所以Dubbo的速度比Feign更快
Dubbo默认使用的是socket长连接,而HTTP1.0使用的是短连接,HTTP1.1才开始支持长连接,HTTP2.0将默认的socket连接改为了长连接,HTTP3.0则采用了UDP自己实现了拥塞控制,流量控制,传输可靠性控制等
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)