Java面试经常会考察微服务,下面给家总结了一份非常全面的微服务面试题及答案详解,希望对大家有所帮助。
什么是微服务?
微服务是一种架构模式,它提倡将单一应用程序划,分成一组小的服务,每个服务运行独立的自己的进程中,服务之间互相协调、互相配合,为用户提供最终价值。
微服务的特点
1)一组小的服务(大小没有特别的标准,只要同一团队的工程师理解服务的标识一致即可)
2)独立的进程(java的tomcat,nodejs等)
3)轻量级的通信(不是soap,是http协议)
4)基于业务能力(类似用户服务,商品服务等等)
5)独立部署(迭代速度快)
6)无集中式管理(无须统一技术栈,可以根据不同的服务或者团队进行灵活选择)
微服务的优势?
1.降低复杂度
将原来偶合在一起的复杂业务拆分为单个服务,规避了原本复杂度无止境的积累。每一个微服务专注于单一功能,并通过定义良好的接口清晰表述服务边界。每个服务开发者只专注服务本身,通过使用缓存、DAL等各种技术手段来提升系统的性能,而对于消费方来说完全透明。
2.可独立部署
由于微服务具备独立的运行进程,所以每个微服务可以独立部署。当业务迭代时只需要发布相关服务的迭代即可,降低了测试的工作量同时也降低了服务发布的风险。
3.容错
在微服务架构下,当某一组件发生故障时,故障会被隔离在单个服务中。 通过限流、熔断等方式降低错误导致的危害,保障核心业务正常运行。
4.扩展
单块架构应用也可以实现横向扩展,就是将整个应用完整的复制到不同的节点。当应用的不同组件在扩展需求上存在差异时,微服务架构便体现出其灵活性,因为每个服务可以根据实际需求独立进行扩展。
微服务的由来?
互联网的快速发展,Web应用程序的规模不断扩大,一般会经历如下四个发展阶段。
单一应用架构
当网站流量很小时,只需一个应用,将所有功能都部署在一起即可。
垂直应用架构
当访问量逐渐增大,单一应用按照有业务线拆成多个应用,以提升效率。
此时,用于加速前端页面开发的 Web框架(MVC) 是关键。
分布式服务架构
服务注册定义
服务注册指的是将自身服务信息注册到注册中心,服务信息包括:服务所在主机IP、服务的端口号Port、暴露服务协议等信息。
如下图所示:
Service B 把自己注册到注册中心,这就叫 服务注册。
服务注册组件有哪些?
当下用于服务注册的工具非常多ZooKeeper,Consul,Etcd, 还有Netflix家的Eureka等等。
什么是服务熔断
熔断其实可以理解为类似于电表的保险丝,一旦某个时刻电压过载,那么保险丝就熔断了。
同样这个场景被应用到了互联网系统中,比如:当下游服务因访问压力过大而响应变慢或失败,上游服务为了保护系统整体的可用性,可以暂时切断对下游服务的调用,这就是服务熔断。
服务熔断组件有哪些?
目前使用服务熔断组件,主要有以下4种:
- hystrix circuit breaker(不再维护);
- hystrix-go;
- resilience4j(推荐);
- sentinel(推荐);
什么是服务发现?
服务发现: 即服务客户端在其网络上找到其要调用服务的具体连接信息的过程。
例如:通过查询服务注册中心得到其所调用服务的具体 IP地址和端口。 简单的说,服务发现就是服务或者应用之间互相定位的过程。
微服务框架
目前国内企业使用的微服务框架:主要是:Spring Cloud和Spring Cloud Alibaba。
SpringCloud由哪些组成?
Spring Cloud体系包含如下:
SpringCloudAlibaba包含哪些组件?
SpringCloudAlibaba包含如下组件:
Dubbo是什么?包含组件?
Dubbo是一款Java RPC框架,是一个分布式、高性能、透明化的 RPC 服务框架,致力于提供高性能的RPC远程服务调用方案,可以和 Spring 框架无缝集成。
Dubbo角色,主要包含如下几个核心组件:
1)注册中心(registry)
生产者在此注册并发布内容,消费者在此订阅并接收发布的内容。
2)消费者(consumer)
客户端,从注册中心获取到方法,可以调用生产者中的方法。
3)生产者(provider)
服务端,生产内容,生产前需要依赖容器(先启动容器)。
4)容器(container)
生产者在启动执行的时候,必须依赖容器才能正常启动(默认依赖的是spring容器),
5)监控(Monitor)
统计服务的调用次数与时间等。
RocketMQ消息中间件
RocketMQ是一个纯java、分布式、队列模型的开源消息中间件。
RocketMQ架构
RocketMQ架构,如下图所示:
RocketMQ架构:主要由NameServer、Broker、Producer以及Consumer四部分构成。
Seata分布式事务
Seata是一款阿里开源的分布式事务解决方案,Seata致力于在微服务架构下提供高性能和简单易用的分布式事务服务。
Seata事务管理中有三个重要的组件角色,如下图所示:
三个组件相互协作,TC 以 Server 形式独立部署,TM和RM集成在应用中启动。
什么是Nacos?
Nacos是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台,你可以用Nacos代替Eureka和Apollo两个组件。
Nacos主要的功能有:注册中心和配置中心。
Spring Cloud Alibaba应用场景
Spring Cloud Alibaba 的典型应用场景如下:
1.大型复杂的系统
例如:大型电商系统,大型的直播系统,大型网站系统等。
2.高并发系统
例如:阿里双11为代表的商品秒杀系统,以及亿级高并发的系统。
下一代微服务框架
目前下一代微服务架构就是Service Mesh,Service Mesh主流框架有Linkerd和Istio,其中Istio有大厂加持所以呼声更高。
以上就是常见的微服务面试题及答案,更多的Java面试题及答案,请查看:1000+Java面试题及答案详解。
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》