根据Gartner的说法,微服务是云开发的新应用平台。微服务是独立部署和管理的,一旦在容器内实现,它们与底层操作系统的交互很少。 因此,如果您计划在微服务中开始您的职业生涯,那么现在正是潜入技术处于新生状态的时候。因此,为了帮助您准备面试,我提出了微服务面试问题和答案博客。
在这个微服务面试问题博客中,我收集了面试官最常问的问题。这些问题是在咨询微服务和相关技术领域的顶级行业专家后收集的。
如果您最近参加过任何微服务面试,请将这些面试问题粘贴到评论部分,我们会尽快回答。如果您有任何疑问,也可以在下面发表评论,这可能会在您的微服务面试中遇到。
您可以浏览微服务面试问题和答案的录音,我们的讲师已经详细解释了这些主题,并提供了一些示例,可帮助您更好地理解这一概念。
微服务,又称微服务 架构,是一种架构风格,它将应用程序构建为以业务领域为模型的小型自治服务集合 。
通俗地说,你必须看到蜜蜂如何通过对齐六角形蜡细胞来构建它们的蜂窝状物。他们最初从使用各种材料的小部分开始,并继续从中构建一个大型蜂箱。这些细胞形成图案,产生坚固的结构,将蜂窝的特定部分固定在一起。这里,每个细胞独立于另一个细胞,但它也与其他细胞相关。这意味着对一个细胞的损害不会损害其他细胞,因此,蜜蜂可以在不影响完整蜂箱的情况下重建这些细胞。
图1:微服务的蜂窝表示 – 微服务访谈问题
请参考上图。这里,每个六边形形状代表单独的服务组件。与蜜蜂的工作类似,每个敏捷团队都使用可用的框架和所选的技术堆栈构建单独的服务组件。就像在蜂箱中一样,每个服务组件形成一个强大的微服务架构,以提供更好的可扩展性。此外,敏捷团队可以单独处理每个服务组件的问题,而对整个应用程序没有影响或影响最小。
图2:微服务的 优点 – 微服务访谈问题
图3:微服务的 特点 – 微服务访谈问题
以下是设计微服务的最佳实践:
图4:设计微服务的最佳实践 – 微服务访谈问题
微服务架构具有以下组件:
图5:微服务 架构 – 微服务面试问题
微服务架构的优点 | 微服务架构的缺点 |
---|---|
自由使用不同的技术 | 增加故障排除挑战 |
每个微服务都侧重于单一功能 | 由于远程呼叫而增加延迟 |
支持单个可部署单元 | 增加了配置和其他操作的工作量 |
允许经常发布软件 | 难以保持交易安全 |
确保每项服务的安全性 | 艰难地跨越各种边界跟踪数据 |
多个服务是并行开发和部署的 | 难以在服务之间进行编码 |
图6: 单片SOA和微服务之间的比较 – 微服务访谈问题
开发一些较小的微服务听起来很容易,但开发它们时经常遇到的挑战如下。
SOA和微服务之间的主要区别如下:
SOA | 微服务 |
---|---|
遵循“ 尽可能多的共享 ”架构方法 | 遵循“ 尽可能少分享 ”的架构方法 |
重要性在于 业务功能 重用 | 重要性在于“ 有界背景 ” 的概念 |
他们有 共同的 治理 和标准 | 他们专注于 人们的 合作 和其他选择的自由 |
使用 企业服务总线(ESB) 进行通信 | 简单的消息系统 |
它们支持 多种消息协议 | 他们使用 轻量级协议 ,如 HTTP / REST 等。 |
多线程, 有更多的开销来处理I / O. | 单线程 通常使用Event Loop功能进行非锁定I / O处理 |
最大化应用程序服务可重用性 | 专注于 解耦 |
传统的关系数据库 更常用 | 现代 关系数据库 更常用 |
系统的变化需要修改整体 | 系统的变化是创造一种新的服务 |
DevOps / Continuous Delivery正在变得流行,但还不是主流 | 专注于DevOps /持续交付 |
您可以列出微服务的特征,如下所示:
图7:微服务的特征 – 微服务访谈问题
图8: DDD原理 – 微服务面试问题
图9:我们需要DDD的因素 – 微服务面试问题
如果您必须定义泛在语言(UL),那么它是特定域的开发人员和用户使用的通用语言,通过该语言可以轻松解释域。
无处不在的语言必须非常清晰,以便它将所有团队成员放在同一页面上,并以机器可以理解的方式进行翻译。
模块内部元素所属的程度被认为是凝聚力。
组件之间依赖关系强度的度量被认为是耦合。一个好的设计总是被认为具有高内聚力和低耦合性。
Representational State Transfer(REST)/ RESTful Web服务是一种帮助计算机系统通过Internet进行通信的架构风格。这使得微服务更容易理解和实现。
微服务可以使用或不使用RESTful API实现,但使用RESTful API构建松散耦合的微服务总是更容易。
事实上,随着新功能的增加,弹簧变得越来越复杂。如果必须启动新的spring项目,则必须添加构建路径或添加maven依赖项,配置应用程序服务器,添加spring配置。所以一切都必须从头开始。
Spring Boot是解决这个问题的方法。使用spring boot可以避免所有样板代码和配置。因此,基本上认为自己就好像你正在烘烤蛋糕一样,春天就像制作蛋糕所需的成分一样,弹簧靴就是你手中的完整蛋糕。
图10: Spring Boot的因素 – 微服务面试问题
Spring Boot执行程序提供了restful Web服务,以访问生产环境中运行应用程序的当前状态。在执行器的帮助下,您可以检查各种指标并监控您的应用程序。
根据Spring Cloud的官方网站,Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,领导选举,分布式会话,集群状态)。
在使用Spring Boot开发分布式微服务时,我们面临的问题很少由Spring Cloud解决。
在测试目标只关注Spring MVC组件的情况下,WebMvcTest注释用于单元测试Spring MVC应用程序。在上面显示的快照中,我们只想启动ToTestController。执行此单元测试时,不会启动所有其他控制器和映射。
虽然您可以通过多种方式实现微服务,但REST over HTTP是实现微服务的一种方式。REST还可用于其他应用程序,如Web应用程序,API设计和MVC应用程序,以提供业务数据。
微服务是一种体系结构,其中系统的所有组件都被放入单独的组件中,这些组件可以单独构建,部署和扩展。微服务的某些原则和最佳实践有助于构建弹性应用程序。
简而言之,您可以说REST是构建微服务的媒介。
在使用微服务时,由于有多个微服务协同工作,测试变得非常复杂。因此,测试分为不同的级别。
分布式事务是指单个事件导致两个或多个不能以原子方式提交的单独数据源的突变的任何情况。在微服务的世界中,它变得更加复杂,因为每个服务都是一个工作单元,并且大多数时候多个服务必须协同工作才能使业务成功。
幂等性是能够以这样的方式做两次事情的特性,即最终结果将保持不变,即好像它只做了一次。
用法:在远程服务或数据源中使用 Idempotence,这样当它多次接收指令时,它只处理指令一次。
有界上下文是域驱动设计的核心模式。DDD战略设计部门的重点是处理大型模型和团队。DDD通过将大型模型划分为不同的有界上下文并明确其相互关系来处理大型模型。
双因素身份验证为帐户登录过程启用第二级身份验证。
图11: 双因素认证的表示 – 微服务访谈问题
因此,假设用户必须只输入用户名和密码,那么这被认为是单因素身份验证。
这三种凭证是:
图12: 双因素认证的证书类型 – 微服务面试问题
客户端系统用于向远程服务器发出经过身份验证的请求的一种数字证书称为客户端证书。客户端证书在许多相互认证设计中起着非常重要的作用,为请求者的身份提供了强有力的保证。
PACT是一个开源工具,允许测试服务提供者和消费者之间的交互,与合同隔离,从而提高微服务集成的可靠性。
OAuth 代表开放授权协议。这允许通过在HTTP服务上启用客户端应用程序(例如第三方提供商Facebook,GitHub等)来访问资源所有者的资源。因此,您可以在不使用其凭据的情况下与另一个站点共享存储在一个站点上的资源。
“任何设计系统的组织(广泛定义)都将产生一种设计,其结构是组织通信结构的副本。” – Mel Conway
图13: Conway定律的表示 – 微服务访谈问题
该法律基本上试图传达这样一个事实:为了使软件模块起作用,整个团队应该进行良好的沟通。因此,系统的结构反映了产生它的组织的社会边界。
根据Martin Flower的说法,合同测试是在外部服务边界进行的测试,用于验证其是否符合消费服务预期的合同。
此外,合同测试不会深入测试服务的行为。更确切地说,它测试该服务调用的输入&输出包含所需的属性和所述响应延迟,吞吐量是允许的限度内。
端到端测试验证了工作流中的每个流程都正常运行。这可确保系统作为一个整体协同工作并满足所有要求。
通俗地说,你可以说端到端测试是一种测试,在特定时期后测试所有东西。
图14:测试层次 – 微服务面试问题
容器是管理基于微服务的应用程序以便单独开发和部署它们的好方法。您可以将微服务封装在容器映像及其依赖项中,然后可以使用它来滚动按需实例的微服务,而无需任何额外的工作。
图15: 容器的表示及其在微服务中的使用方式 – 微服务访谈问题
DRY代表不要重复自己。它基本上促进了重用代码的概念。这导致开发和共享库,这反过来导致紧密耦合。
这基本上是用于开发微服务的模式,以便它们可以被外部系统使用。当我们处理微服务时,有一个特定的提供者构建它,并且有一个或多个使用微服务的消费者。
通常,提供程序在XML文档中指定接口。但在消费者驱动的合同中,每个服务消费者都传达了提供商期望的接口。
微服务架构基于一个概念,其中所有服务应该能够彼此交互以构建业务功能。因此,要实现这一点,每个微服务必须具有接口。这使得Web API成为微服务的一个非常重要的推动者。RESTful API基于Web的开放网络原则,为构建微服务架构的各个组件之间的接口提供了最合理的模型。
语义监控,也称为 综合监控, 将自动化测试与监控应用程序相结合,以检测业务失败因素。
跨功能测试是对非功能性需求的验证,即那些无法像普通功能那样实现的需求。
非确定性测试(NDT)基本上是不可靠的测试。所以,有时可能会发生它们通过,显然有时它们也可能会失败。当它们失败时,它们会重新运行通过。
从测试中删除非确定性的一些方法如下:
例如,对于空堆栈,您可以创建一个只为empty()方法返回true的存根。因此,这并不关心堆栈中是否存在元素。
例如,对于Customer对象,您可以通过设置名称和年龄来模拟它。您可以将age设置为12,然后测试isAdult()方法,该方法将在年龄大于18时返回true。因此,您的Mock Customer对象适用于指定的条件。
Mike Cohn 提供了一个名为Test Pyramid的模型。这描述了软件开发所需的自动化测试类型。
图16: Mike Cohn的测试金字塔 – 微服务面试问题
根据金字塔,第一层的测试数量应该最高。在服务层,测试次数应小于单元测试级别,但应大于端到端级别。
Docker提供了一个可用于托管任何应用程序的容器环境。在此,软件应用程序和支持它的依赖项紧密打包在一起。
因此,这个打包的产品被称为Container,因为它是由Docker完成的,所以它被称为Docker容器!
Canary Releasing是一种降低在生产中引入新软件版本的风险的技术。这是通过将变更缓慢地推广到一小部分用户,然后将其发布到整个基础架构,即将其提供给每个人来完成的。
持续集成(CI)是每次团队成员提交版本控制更改时自动构建和测试代码的过程。这鼓励开发人员通过在每个小任务完成后将更改合并到共享版本控制存储库来共享代码和单元测试。
持续监控深入监控覆盖范围,从浏览器内前端性能指标,到应用程序性能,再到主机虚拟化基础架构指标。
微服务架构中的架构师扮演以下角色:
我们知道拥有自己的数据库的每个微服务都是一个可独立部署的程序单元,这反过来又让我们可以创建一个状态机。因此,我们可以为特定的微服务指定不同的状态和事件。
例如,我们可以定义Order微服务。订单可以具有不同的状态。Order状态的转换可以是Order微服务中的独立事件。
Reactive Extensions也称为Rx。这是一种设计方法,我们通过调用多个服务来收集结果,然后编译组合响应。这些调用可以是同步或异步,阻塞或非阻塞。Rx是分布式系统中非常流行的工具,与传统流程相反。
希望这些微服务面试问题可以帮助您进行微服务架构师访谈。
翻译来源:https://www.edureka.co/blog/interview-questions/microservices-interview-questions/