微服务常见问题汇总
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进程完成具体工作。