什么是分布式?分布式跟集中式有哪些区别?[面试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自己实现了拥塞控制,流量控制,传输可靠性控制等

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐