9道微服务⾯试题,你能回答上来⼏个?
hi ⼤家好,我是⽥哥
如今,微服务是我们Java开发者必备的技能之⼀了。不管你⼯作中是否真的是使⽤微服务架构,但是⾯试官肯定会问你,所以⽥哥给你整理⼀份微服务⾯试题。
话不多说,我们直⼊主题。
1. 什么是微服务?
单个轻量级服务⼀般为⼀个单独微服务,微服务讲究的是 专注某个功能的实现,⽐如登录系统只专注于⽤户登录⽅⾯功能的实现,讲究的是职责单⼀,开箱即⽤,可以独⽴运⾏。微服务架构系统是⼀个分布式的系统,按照业务进⾏划分服务单元模块,解决单个系统的不⾜,满⾜越来越复杂的业务需求。
分布式和微服务的关系
马丁福勒(Martin Fowler):就⽬前⽽⾔,对于微服务业界并没有⼀个统⼀的、标准的定义。但通常⽽⾔,微服务架构是⼀种架构模式或者说是架构风格,它提倡将单⼀应⽤程序划分成⼀组⼩的服务。每个服务运⾏在其独⽴的⾃⼰的进程中服务之间相互配合、相互协调,为⽤户提供最终价值。服务之间采⽤轻量级通信。每个服务都围绕具体业务进⾏构建,并能够独⽴部署到⽣产环境等。另外应尽量避免统⼀的、集中的服务管理机制。
通俗的来讲:
微服务就是⼀个独⽴的职责单⼀的服务应⽤程序。在 intellij idea ⼯具⾥⾯就是⽤ maven 开发的⼀个个独⽴的 module,具体就是使⽤springboot 开发的⼀个⼩的模块,处理单⼀专业的业务逻辑,⼀个模块只做⼀个事情。
微服务强调的是服务⼤⼩,关注的是某⼀个点,具体解决某⼀个问题 / 落地对应的⼀个服务应⽤,可以看做是 idea ⾥⾯⼀个 module。
⽐如你去医院:你的⽛齿不舒服,那么你就去⽛科。你的头疼,那么你就去脑科。⼀个个的科室,就是⼀个微服务,⼀个功能就是⼀个服务。
2. 微服务之间如何独⽴通讯的?
同步通信:dobbo 通过 RPC 远程过程调⽤、springcloud 通过 REST 接⼝ json 调⽤ 等。异步:消息队列,如:RabbitMq、ActiveM、Kafka 等。
3.SpringCloud 和 Dubbo 有哪些区别?
⾸先,他们都是分布式管理框架。
dubbo 是⼆进制传输,占⽤带宽会少⼀点。SpringCloud 是 http 传输,带宽会多⼀点,同时使⽤ http 协议⼀般会使⽤ JSON 报⽂,消耗会更⼤。
dubbo 开发难度较⼤,所依赖的 jar 包有很多问题⼤型⼯程⽆法解决。SpringCloud 对第三⽅的继承可以⼀键式⽣成,天然集成。
SpringCloud 接⼝协议约定⽐较松散,需要强有⼒的⾏政措施来限制接⼝⽆序升级。
最⼤的区别: Spring Cloud 抛弃了 Dubbo 的 RPC 通信,采⽤的是基于 HTTP 的 REST ⽅式。
严格来说,这两种⽅式各有优劣。虽然在⼀定程度上来说,后者牺牲了服务调⽤的性能,但也避免了上⾯提到的原⽣ RPC 带来的问题。⽽且 REST 相⽐ RPC 更为灵活,服务提供⽅和调⽤⽅的依赖只依靠⼀纸契约,不存在代码级别的强依赖,这在强调快速演化的微服务环境下,显得更为合适。
SpringCloud 和 Dubbo.png
4.SpringBoot 和 SpringCloud 之间关系?
SpringBoot:专注于快速⽅便的开发单个个体微服务(关注微观);SpringCloud:关注全局的微服务
协调治理框架,将
SpringBoot 开发的⼀个个单体微服务组合并管理起来(关注宏观);
SpringBoot 可以离开 SpringCloud 独⽴使⽤,但是 SpringCloud 不可以离开 SpringBoot,属于依赖关系。
5. 什么是熔断?什么是服务降级?
服务熔断的作⽤类似于我们家⽤的保险丝,当某服务出现不可⽤或响应超时的情况时,为了防⽌整个系统出现雪崩,暂时停⽌对该服务的调⽤。
服务降级是从整个系统的负荷情况出发和考虑的,对某些负荷会⽐较⾼的情况,为了预防某些功能(业务场景)出现负荷过载或者响应慢的情况,在其内部暂时舍弃对⼀些⾮核⼼的接⼝和数据的请求,⽽直接返回⼀个提前准备好的 fallback(退路)错误处理信息。这样,虽然提供的是⼀个有损的服务,但却保证了整个系统的稳定性和可⽤性。
6. 微服务的优缺点是什么?说下你在项⽬中碰到的坑。
优点:松耦合,聚焦单⼀业务功能,⽆关开发语⾔,团队规模降低。在开发中,不需要了解多有业务,
只专注于当前功能,便利集中,功能⼩⽽精。微服务⼀个功能受损,对其他功能影响并不是太⼤,可以快速定位问题。微服务只专注于当前业务逻辑代码,不会和html、css 或其他界⾯进⾏混合。可以灵活搭配技术,独⽴性⽐较舒服。
缺点:随着服务数量增加,管理复杂,部署复杂,服务器需要增多,服务通信和调⽤压⼒增⼤,运维⼯程师压⼒增⼤,⼈⼒资源增多,系统依赖增强,数据⼀致性,性能监控。
7.eureka 和 zookeeper有什么区别?
zookeeper 是 CP 原则,强⼀致性和分区容错性。eureka 是 AP 原则 可⽤性和分区容错性。zookeeper 当主节点故障时,zk 会在剩余节点重新选择主节点,耗时过长,虽然最终能够恢复,但是选取主节点期间会导致服务不可⽤,这是不能容忍的。eureka 各个节点是平等的,⼀个节点挂掉,其他节点仍会正常保证服务。
8. 你所知道微服务的技术栈有哪些?列举⼀⼆。
微服务条⽬落地技术
服务开发SpringBoot、Spring、SpringMVC
服务配置与管理Netfix 公司的 Archaius、阿⾥的 Dlamond 等
服务注册与发现Eurka、Consul、Zookeeper 等
服务调⽤Rest(服务通信)、RPC(Dubbo)、GRpc
微服务条⽬落地技术
服务熔断器Hystrix、Envoy 等
负载均衡Nginx、Ribbon 等
服务接⼝调⽤(客户端简化⼯具)Fegin 等
消息队列Kafka、RabbitMQ、ActiveMQ 等
服务配置中⼼管理SpringCloudConfig、Chef 等
服务路由(API ⽹关)Zuul 等
服务监控Zabbix,Nagios,Metrics,Spectator 等
全链路追踪Zipkin,Brave,Dapper 等
服务部署Docker,OpenStack,Kubernetes 等
数据流操作开发包SpringCloud Stream(封装与 Redis,Rabbit,kafka 等发送接收消息)
事件消息总线Spring Cloud Bus
9. 什么是微服务架构?
在前⾯你理解什么是微服务,那么对于微服务架构基本上就已经理解了。
微服务架构 就是 对微服务进⾏管理整合应⽤的。微服务架构 依赖于 微服务,是在微服务基础之上的。
例如:上⾯已经列举了什么是微服务。在医院⾥,每⼀个科室都是⼀个独⽴的微服务,那么 这个医院 就是 ⼀个⼤型的微服务架构,就类似院长 可以 对下⾯的 科室进⾏管理。微服务架构主要就是这种功能。
后记
虽然⽥哥⼀再强调⾯试之前,⼀定要背⼋股⽂,但也不是死记硬背,得取巧,不然⼀看就是背的也是⾏不通的。不过,话⼜说回来,背的总⽐⾯试冷场好吧。
其实,准备⾯试除了背⼋股⽂以外,还有个⾮常重要的,那就是:。
不然,你⾃⼰认为⾃⼰背的挑好的,准备的挺好的,等到了⾯试官⾯前,才发现,这个知道⼀点,那个也知道⼀点,但就是不全。
并且,还会出现⼀种幻觉:这问题我好像在哪⾥见过,好熟悉呀,可我就是想不起来。
怎么办?
也不是没有办法,加⼊我的知识星球,我可以给你做模拟⾯试。
知识星球现有内容和长期规划,请看:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。