微服务常见问题汇总


1、SOA和微服务架构之间的主要区别是什么?
SOA(Service Oriented Architecture)面向服务的架构:他是一种设计方法,其中包含多个服务, 服务之间通过相互依赖最终提供一系列的功能。一个服务 通常以独立的形式存在与操作系统进程中。各个服务之间通过网络调用。
微服务架构:其实和SOA架构类似,微服务是在SOA上做的升华,微服务架构强调的一个重点是“业务需要彻底的组件化和服务化”,原有的单个业务系统会拆分为多个可以独立开发、设计、运行的小应用。这些小应用之间通过服务完成交互和集成。
微服务架构 = 80%的SOA服务架构思想 + 100%的组件化架构思想 + 80%的领域建模思想

功能 SOA 微服务
组件大小 大块业务逻辑 单独任务或小块业务逻辑
耦合 通常松耦合 总是松耦合
公司架构 任何类型 小型、专注于功能交叉团队
管理 着重中央管理 着重分散管理
目标 确保应用能够交互操作 执行新功能、快速拓展开发团队
SOA 微服务
遵循“尽可能多的共享”架构方法 遵循“尽可能少分享”的架构方法
重要性在于业务功能重用 重要性在于“有界背景”的概念
他们有共同的治理和标准 他们专注于人们的合作和其他选择的自由
使用企业服务总线ESB进行通信 简单的消息系统
它们支持多种消息协议 他们使用轻量级协议,如 HTTP / REST 等。
多线程,有更多的开销来处理I/O 单线程,通常使用Event Loop功能进行非锁定I/O处理
最大化应用程序服务可重用性 专注于解耦
传统的 关系数据库 更常用 现代 关系数据库 更常用
系统的变化需要修改整体 系统的变化是创造一种新的服务
DevOps/Continuous Delivery正在变得流行,但还不是主流 专注于DevOps/持续交付

2、什么是领域驱动设计(DDD)?
Domain Driven Design 领域驱动设计,是一种软件设计思想。专注于核心领域逻辑、在模型上找到综合的设计、不断与领域专家合作。

3、什么是REST/RESTful?它的用途是什么?
REST:是一种软件架构设计风格,提供了一组设计原则和约束条件,而不是标准。(英文:Representational State Transfer,简称REST)即表述性状态传递是:Roy Fielding博士在2000年他的博士论文中提出来的一种软件架构风格。它是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。
RESTful:基于REST构建的API就是Restful风格。
总结:URL定位资源,HTTP动词(GET,POST,PUT,DELETE)描述操作。

4、你能否给出关于REST和微服务的要点?
REST:虽然可以通过多种方式实现微服务,但REST over HTTP是实现微服务的一种方式。REST还可用于其他应用程序,如Web应用程序,API设计和MVC应用程序,以提供业务数据。
微服务:是一种体系结构,其中系统的所有组件都被放入单独的组件中,这些组件可以单独构建,部署和扩展。微服务的某些原则和最佳实践有助于构建弹性应用程序。

5、什么是不同类型的微服务测试?
单元测试、端到端(系统)测试、集成测试、消费者驱动的合同测试(CDC测试)
在底层,我们有面向技术的测试,单元测试和性能测试。
在中间层,我们有探测性测试,如压力测试和可用性测试。
在顶级,我们有很少的验收测试。这些验收测试有助于利益相关者理解和验证软件功能。

6、PACT在微服务架构中的用途是什么?
PACT:是一个开源CDC测试框架。允许测试服务提供者和消费者之间的交互,与契约隔离,从而提高微服务集成的可靠性。
1.定义消费者端服务的预期结果
2.生成PACT文件
3.与提供者服务共享生成的PACT文件

7、什么是端到端微服务测试?
端到端测试:即对待测功能在各服务、组件完全正常运行的情况进行测试,这里更类似于功能测试或者UAT测试。
端到端测试:验证了工作流中的每个流程都正常运行。这可确保系统作为一个整体协同工作并满足所有要求。

8、容器在微服务中的用途是什么?
容器:是管理基于微服务的程序以便单独开发和部署它们的好方法。你可以将微服务封装在容器镜像及其依赖项中,然后可以用它来滚动开发按需实例的微服务而无需任何额外的工作。

9、微服务架构中的DRY是什么?
DRY:代表不要重复自己。它基本上促进了重用代码的概念。这导致开发并共享库,但是反过来导致紧耦合。

10、你对微服务架构中的语义监控有何了解?
语义监控,也称为综合监控,将自动化测试与监控程序相结合,以检测业务失败的因素。

11、微服务中的反应性扩展是什么?
Reactive Extensions也称为Rx。这是一种设计方法,我们通过调用多个服务来收集结果,然后编译组合响应。这些调用可以是同步或异步,阻塞或非阻塞。Rx 是分布式系统中非常流行的工具,与传统流程相反。

12、Mock 与 Stub 有什么区别?
Mock:关注行为验证。细粒度的测试,即代码的逻辑,多数情况下用于单元测试。
Stub:关注状态验证。粗粒度的测试,在某个依赖系统不存在或者还没实现或者难以测试的情况下使用,例如访问文件系统,数据库连接,远程协议等。
 

区别 Mock Stub桩
优点 运行速度快
测试覆盖率高
容易实现且可以形成良好的测试文档
能弥补Mock的不足
能够模拟复杂的测试环境
缺点 不是银弹,对于集成测试等粗粒度且耗时的测试不太适用 Stub往往比较复杂难以实现,而且需要经常性的调试它。
Stub模拟的都是难以测试的环境依赖,其复杂性导致它难以维护。
Stub并不能提供细粒度的单元测试。
不同的情况需要不同的Stub实现策略。

 13、Kubernetes与Docker有什么关系?

Docker:是一个开源的应用容器引擎,开发者可以打包他们的应用及依赖到一个可移植的容器中,发布到流行的Linux机器上,也可实现虚拟化。
K8s:是一个开源的容器集群管理系统,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。

14、虚拟机和容器之间的区别是什么?
容器:是轻量级的虚拟化,主要是利用NameSpace的隔离,容器内部有独立的文件系统,但是和主机共享内存空间。
虚拟机:是一套完全的虚拟化,他虚拟了计算机运行的所有部分。
通过了解技术的实现,与主机操作系统的隔离级别是评估的主要方面
进程:是在操作系统层面默认隔离程度很低,主要只有隔离的内存地址空间和用户权限。 容器:是一个进程(或一组进程),但是与操作系统间的隔离程度比普通的进程高,但比VM低,安全性也更差。
虚拟机:是在操作系统中完全隔离,这意味着他们在主机硬件顶层创建了完整的新的操作系统。完全的独立伴随的是更多的资源使用来运行虚拟机。

15、什么是pod?什么是部署?什么是有状态集?
Pod:是由一组紧耦合的容器组成的容器组。

16、如何在不停机的情况下更新应用程序?
Master/Worker模式:应用容器实现不停机发布特性,最常见是Master/Worker模式。容器中常驻一个master进程和多个work进程,master进程只负责加载程序和分发请求,由fork出来的worker进程完成具体工作。

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM