Java面试题-微服务
微服务
1. 前后端分离具体如何实现
现主流前后端分离多数为:
前端:Vue/Angular/React
中间件:Nodejs
后端:Java/Go
前后端交互基于Nodejs作为中间层,不再直接进行交互。
2. 微服务哪些框架
SpringBoot
SpringCloud
3. 如何理解RPC框架
RPC:Remote Procedure Call 远程过程调用。RPC被用来作为远程调用的框架,主要用于公司内部服务直接的互相调用,具有性能消耗低、传输效率高、服务治理方便等特点。
HTTP:RPC底层协议可以像HTTP一样基于TCP协议,也可以直接基于HTTP协议。HTTP主要用于对外的异构环境。
4. RPC的实现原理
RPC框架需要三个角色:
- Server:服务提供方。
- Register:服务注册与发现的中心。
- Client:服务调用方。
场景:
人民群众有事拨打110电话,110指挥中心根据沟通获取人民群众的位置,派出就近的民警前往现场。
如上这就是一个RPC框架的场景,
人民群众就是 服务调用方,需要就近的民警出警;
110指挥中心就是 服务注册与发现的中心,对各地警力具有实时的掌握以及调度权限;
就近民警就是 服务提供方,能够及时的为人民群众排忧解难。
服务提供方在启动后需要向 服务注册与发现中心注册当前服务IP、端口、服务列表等信息;服务调用方在需要调用时向 服务注册与发现中心获取当前可提供服务的ip、端口、服务接口等信息,通过HTTP等协议进行通信。
5. 说说Dubbo/Spring Cloud的实现原理
Dubbo
https://segmentfault.com/a/1190000042674690
Spring Cloud
SpringCloud有五大核心组件,基于这五大组件构成了分布式微服务架构的解决方案。
https://blog.csdn.net/qq_36986510/article/details/127324912
6. 如何理解RESTful
REST:Representational State Transfer,表象状态转移。
RESTful是一种架构的规范与约束,目的是:统一接口。
REST要求,必须通过统一的接口来对资源执行各种操作。对于每个资源只能执行一组有限的操作。
7. 如何设计一个良好的API
满足:标准化、兼容性、抽象性、简单性、高性能。
- 标准化:尽可能少的创建自定义规范和机制,使用共同遵守业内标准。
- 兼容性:通过版本号解决多版本兼容性的问题。
- 抽象性:定义清晰的问题领域模型,尽可能屏蔽具体的业务实现细节。
- 简单性:相对的,遵循最少知识原则,让调用方尽可能少的知道内部调用细节。
- 高性能:业务组合复杂性以及入参。
8. 如何理解RESTful的幂等性
接口幂等性:指调用某个接口1次或者n次,对访问资源产生的影响的结果都是一样的。
接口符合幂等性可以降低系统实现的复杂性,并能够保证资源状态的一致性。
9. 如何保证接口的幂等性
- 分布式锁
- 数据库唯一索引
- 乐观锁
10. 说说CAP定理、BASE理论
CAP定理
分布式系统最多只能满足CAP理论中的2项
- C:Consistency 一致性,这里指的是数据一致性,也就是同一时间所有数据是一致的。(弱一致性、抢一致性、最终一致性)
- A:Availability 可用性,这里指的是服务一直可用。
- P:Partition tolerance 分区容错性,这里指分布式系统在某个节点故障时,仍能够对外提供服务。
BASE理论
是对CAP理论的延伸,核心思想是:无法满足强一致性,也可以采用适合的方式达到最终一致性。
- B A:Basically Available 基本可用,这里是指分布式系统出现故障后,允许损失部分可用性,保证核心可用。
- S E:Soft State 软状态,指允许系统存在中间状态,这个状态不会影响系统可用性。
11. 怎么考虑数据一致性问题
按架构区分:单体架构、分布式架构
单体架构
单体架构的数据一致性可以通过同一个数据库事务进行处理,数据库事务能够保证全部成功或全部回退。
分布式架构
分布式架构下,已无法满足 同一个数据库事务的前提,此时 分布式事务是解决分布式架构下数据一致性的方案。
现如今分布式事务有多种实现方案:2PC、3PC、TCC、本地消息表等解决方案,具体方案参考:Java面试题-分布式事务
12. 说说最终一致性的实现方案
常见TCC实现最终一致性:
TCC:Try-Confirm-Cancel ,两阶段提交的变种;先尝试执行业务,执行成功则更新成功状态;执行失败则更新失败状态。
Try:尝试联通服务并冻结所需要的资源。
Confirm:所有的Try都可行,则执行Confirm逻辑。
Cancel:当有服务宕机或资源无法满足冻结,则执行Cancel逻辑。
13. 如何看待微服务
微服务的目的就是:有效拆分应用,实现敏捷开发和独立部署。
现在大数据时代下,PC、手机都能够发起请求,此时微服务对于一个系统而言,能够极大的降低系统的耦合度,适用于任何一个分布式系统。
14. 微服务与SOA的区别
SOA:面向服务的架构,在这种架构中,所有功能都定义为独立的服务,这些服务带有定义明确的可调用接口,能够以定义好的顺序调用这些服务来形成业务流程。
这两其实是差不多的,SOA关注的是服务重用,微服务在SOA的基础上,也关注业务划分。
15. 如何拆分服务
纵向拆分:基于业务逻辑拆分,根据不同业务进行服务拆分。
横向拆分:从公共且功能独立的维度进行拆分。
16. 微服务如何进行数据库管理
根据业务场景进行实际分析;对于没有强一致性要求的业务和强一致性要求的业务对数据库的要求是不一样的。
微服务如何进行数据库管理
17. 如何应对微服务链式调用异常
一般情况下,每个微服务之间是独立的,如果某个服务宕机,只会影响到当前服务,而不会对整个业务系统产生影响。但是,服务端可能会在多个微服务之间产生一条链式调用,并把整合后的信息返回给客户端。在调用过程中,如果某个服务宕机或者网络不稳定可能造成整个请求失败。
因此,为了应对微服务的链式调用异常,我们需要在设计微服务调用链时不宜过长,以免客户端长时间等待,以及中间环节出现错误造成整个请求失败。
此外,可以考虑使用消息队列进行业务解耦,并且使用缓存避免微服务的链式调用从而提高该接口的可用性。
18. 对于快速追踪与定位问题
在微服务复杂的链式调用中,我们会比单体架构更难以追踪与定位问题。因此,在设计的时候,需要特别注意。
一种比较好的方案是,当 RESTful API 接口出现非 2xx 的 HTTP 错误码响应时,采用全局的异常结构响应信息。
19. 微服务的安全
- 单点登录:微服务多的场景下,带来大量重复的网络流量。
- 分布式会话:用户认证信息存储在共享存储(Redis)中,通过对共享存储的读取获取用户认证信息。
- 客户端Token:客户端生成,服务器签名;每个请求携带该Token,通过短期令牌和定期检查令牌有效性。
- 网关+客户端Token:所有客户请求经由网关处理,网关增加一层过滤器进行Token的过滤。
微服务安全
Java面试题-微服务相关推荐
- Spring Cloud 与微服务学习总结(14)—— 云原生时代,如何从 Java 开发者转型微服务?
前言 根据维基百科定义,微服务不是整体应用程序中的一个层.相反,微服务是一个独立的业务功能,具有清晰的接口,并且可以通过内部组件实现分层架构.从战略角度来看,微服务架构基本上遵循"做一件事, ...
- 秒杀springboot——未来轻量级高性能的Java云原生微服务框架来啦
秒杀springboot--未来轻量级高性能的Java云原生微服务框架来啦 引子 自2003年Rod.Juergen 和 Yann开发并发布Spring项目后,J2EE 迎来了新的开始.在 2013 ...
- java计算机毕业设计微服务”架构下新闻头条的设计与实现源码+系统+数据库+lw文档
java计算机毕业设计微服务"架构下新闻头条的设计与实现源码+系统+数据库+lw文档 java计算机毕业设计微服务"架构下新闻头条的设计与实现源码+系统+数据库+lw文档 本源码技 ...
- 13 年 Java 老兵的微服务战地笔记 | 文末有1元福利
* 文末有仅限 24 小时的 1 元福利,错过别怪我!!! 微服务在业内的实践已经从流行走向成熟,诸多公司(比如 Amazon.Netflix.蚂蚁金服.网易云音乐等)都已经迁移并采用了微服务架构.而 ...
- Linux(Nginx)+Java SpringBoot视频微服务搭建
最近收到一个需求,需要把视频集成为一个服务,视频播放时根据登录的用户名动态生成水印覆盖在视频上: 这些视频隔段时间会来一波,需要集成进去: 最初的解决方案:把视频当作静态资源放在Java Spring ...
- 【直播回顾】云栖社区特邀专家徐雷Java Spring Boot开发实战系列课程(第19讲):Java Spring Cloud微服务架构模式与开发实战...
主讲人:徐雷(云栖社区特邀Java专家) 徐雷,花名:徐雷frank:资深架构师,MongoDB中文社区联席主席,吉林大学计算机学士,上海交通大学硕士.从事了 10年+开发工作,专注于分布式架构,Ja ...
- linkerd——针对java的为微服务提供可靠性的proxy,服务发现重试LB等
Buoyant是一家云服务公司,宣布了Linkerd(发音为"linker-DEE")的一周年纪念日,这是一个基于微服务的原生云应用程序的开源"服务网格"项目. ...
- swarm:pending_WildFly Swarm:使用Java EE构建微服务
swarm:pending "完美无缺,不是在没有其他可添加的东西时,而是在没有其他东西要带走时实现的" Antoine de Saint-Exupery 法国作家安托万·德·圣艾 ...
- WildFly Swarm:使用Java EE构建微服务
"完美无缺,不是在没有其他可添加的东西时,而是在没有其他东西要带走时实现的" Antoine de Saint-Exupery 法国作家安托万·德·圣艾修伯里 ( Antoine ...
最新文章
- 用于自动泊车的鸟瞰图的边缘线的语义SLAM系统
- php-fpm 进程管理
- 关于IE6,奇数宽高的BUG
- 【VMware vSAN 6.6】5.5.Update Manager:vSAN硬件服务器解决方案
- 区块链去中心化分布式_为什么渐进式去中心化是区块链的最大希望
- PointNet++详解与代码
- 数据结构思维 第十五章 爬取维基百科
- 【ElasticSearch】es 面试题 视频 笔记
- phalcon:model 事件与事件管理器
- java替代重定向_一个简单的java重定向程序,为什么要恢复System . out 对象,却不要恢复System...
- Code UI Automation脱离VS黑盒自动化测试工具编写
- LayaAir WebSocket 通信
- LordPE--计算RVA到Offset的值
- lnmp一键安装的步骤
- 初学cesium时的一些笔记,过于潦草看看就好
- VS中的debug和releasse版本的区别
- 计算机系统基础学习笔记(7)-缓冲区溢出攻击实验
- 微信公号开发之图文消息全攻略
- 使用minizip解压缩多个文件(基于zlib)
- SQL Server 2008 R2自定义快捷键快捷查询表的内容
热门文章
- UVA 10158 War 并查集
- 如何在微信分享的网页中显示描述和图片
- 茫茫沧海,你终成了我无法逾越的泅渡
- HTML5期末考核大作业网站——卫生与健康HTML+CSS+JavaScript
- 怎么快速缩小gif图大小?gif动图如何变小?
- 如何识别手写汉字?跟着步骤就能完成
- 关于const A* f(const A* pSrc,A* const pDst,int v=2,...) const throw();
- 二战计算机技术,2020二本二战西南交大电子信息(计算机技术)上岸
- 您好!欢迎关注异贝!异贝是中国8000万中小微企业忠实的朋友,与您一起成长。异贝商学院今天与您分享:健身行业异贝引客、锁客方案设计!
- 华为鸿蒙OS正式发布!教你如何升级