Spring Cloud面试题目集锦(1)

1、什么是Spring Cloud?

Spring Cloud 就是微服务系统架构的一站式解决方案,它包括注册中心Eurake、负载均衡Ribbon、注册中心Spring Config、Histrix服务熔断、Gateway注册网关五大核心组件。


2、微服务与SOA的区别?

SOA的特点:


1、系统集成:站在系统的角度,解决企业系统间的通信问 题,把原先散乱、无规划的系统间的网状结构,梳理成 规整、可治理的系统间星形结构,这一步往往需要引入 一些产品,比如 ESB、以及技术规范、服务管理规范; 这一步解决的核心问题是【有序】

2、系统的服务化:站在功能的角度,把业务逻辑抽象成 可复用、可组装的服务,通过服务的编排实现业务的 快速再生,目的:把原先固有的业务功能转变为通用 的业务服务,实现业务逻辑的快速复用;这一步解决 的核心问题是【复用】(SOA的思路是把应用中相近的功能聚合到一起,以服务的形式提供出去,可以理解为一批服务的组合。SOA将原来的单体架构按照功能细分为不同的子系统,然后再由各个子系统依赖服务中间件来调用所需服务。使用SOA将系统切分为多个组件服务,这种通过多个组件服务来完成请求的方式有很多好处,比如不同团队的可以负责不同的子项目;模块拆分,使用通讯接口,降低了模块之间的耦合度等等。)

3、业务的服务化:站在企业的角度,把企业职能抽象成 可复用、可组装的服务;把原先职能化的企业架构转变为服务化的企业架构,进一步提升企业的对外服务能力;“前面两步都是从技术层面来解决系统调用、系统功能复用的问题”。第三步,则是以业务驱动把一个业务单元封装成一项服务。这一步解决的核心问题是【高效】


SOA架构和微服务架构的区别


微服务:


1.通过服务实现组件化

开发者不再需要协调其它服务部署对本服务的影响。


2.按业务能力来划分服务和开发团队

开发者可以*选择开发技术,提供 API 服务


3.去中心化


每个微服务有自己私有的数据库持久化业务数据


每个微服务只能访问自己的数据库,而不能访问其它服务的数据库


某些业务场景下,需要在一个事务中更新多个数据库。这种情况也不能直接访问其它微服务的数据库,而是通过对于微服务进行操作。


数据的去中心化,进一步降低了微服务之间的耦合度,不同服务可以采用不同的数据库技术(SQL、NoSQL等)。在复杂的业务场景下,如果包含多个微服务,通常在客户端或者中间层(网关)处理。


4.基础设施自动化(devops、自动化部署)


的Java EE部署架构,通过展现层打包WARs,业务层划分到JARs最后部署为EAR一个大包,而微服务则打开了这个黑盒子,把应用拆分成为一个一个的单个服务,应用Docker技术,不依赖任何服务器和数据模型,是一个全栈应用,可以通过自动化方式独立部署,每个服务运行在自己的进程中,通过轻量的通讯机制联系,经常是基于HTTP资源API,这些服务基于业务能力构建,能实现集中化管理(因为服务太多啦,不集中管理就无法DevOps啦)。


二者区别

SOA和微服务的主要区别:


微服务剔除SOA中复杂的ESB企业服务总线,所有的

业务智能逻辑在服务内部处理,使用Http(Rest API)进行轻量化通讯

SOA强调按水平架构划分为:前、后端、数据库、测试等,微服务强调按垂直架构划分,按业务能力划分,每个服务完成一种特定的功能,服务即产品


SOA将组件以library的方式和应用部署在同一个进程中运行,微服务则是各个服务独立运行。


传统应用倾向于使用统一的技术平台来解决所有问题,微服务可以针对不同业务特征选择不同技术平台,去中心统一化,发挥各种技术平台的特长。


SOA架构强调的是异构系统之间的通信和解耦合;(一种粗粒度、松耦合的服务架构)

微服务架构强调的是系统按业务边界做细粒度的拆分和部署。


3、Eurake、Nacos、Zookeeper的区别,注册中心技术选型

CAP理论

CAP理论是分布式架构中重要理论


一致性(Consistency) (所有节点在同一时间具有相同的数据)


可用性(Availability) (保证每个请求不管成功或者失败都有响应)


分隔容忍(Partition tolerance) (系统中任意信息的丢失或失败不会影响系统的继续运作)


Spring Cloud面试题目集锦(1)


通常情况先,C,A,无法同时保证C,A,或者保证CP,或者保证AP


Apache Zookeeper -> CP


与 Eureka 有所不同,Apache Zookeeper 在设计时就紧遵CP原则,即任何时候对


Zookeeper 的访问请求能得到一致的数据结果,同时系统对网络分割具备容错性,但是 Zookeeper 不能保证每次服务请求都是可达的。


从 Zookeeper 的实际应用情况来看,在使用 Zookeeper 获取服务列表时,如果此时的 Zookeeper 集群中的 Leader 宕机了,该集群就要进行 Leader 的选举,又或者

Zookeeper 集群中半数以上服务器节点不可用(例如有三个节点,如果节点一检测到节点三挂了 ,节点二也检测到节点三挂了,那这个节点才算是真的挂了),那么将无法处理该请求。所以说,Zookeeper 不能保证服务可用性。


当然,在大多数分布式环境中,尤其是涉及到数据存储的场景,数据一致性应该是首先被保证的,这也是 Zookeeper 设计紧遵CP原则的另一个原因。


但是对于服务发现来说,情况就不太一样了,针对同一个服务,即使注册中心的不同节点保存的服务提供者信息不尽相同,也并不会造成灾难性的后果。


因为对于服务消费者来说,能消费才是最重要的,消费者虽然拿到可能不正确的服务实例信息后尝试消费一下,也要胜过因为无法获取实例信息而不去消费,导致系统异常要好(淘宝的双十一,京东的618就是紧遵AP的最好参照)。


当master节点因为网络故障与其他节点失去联系时,剩余节点会重新进行leader选举。问题在于,选举leader的时间太长,30~120s,而且选举期间整个zk集群都是不可用的,这就导致在选举期间注册服务瘫痪。


在云部署环境下, 因为网络问题使得zk集群失去master节点是大概率事件,虽然服务能最终恢复,但是漫长的选举事件导致注册长期不可用是不能容忍的。


上一篇:Spring Cloud面试题目集锦(2)


下一篇:剑指offer 二叉树专题 刷题记录(1)