什么是微服务?
微服务是一种面向服务的体系结构模式,其中应用程序被构建为各种最小的独立服务单元的集合。它是一种软件工程方法,侧重于将应用程序分解为具有良好定义接口的单个功能模块。这些模块可以由拥有整个服务生命周期的小型团队独立部署和操作。
术语“micro”指的是一个微服务的规模,它必须由一个开发团队(5到10个开发人员)管理。在这种方法中,大型应用程序被划分为最小的独立单元。
什么是单体结构?
通俗地说,单机体系结构就像一个大容器,应用程序的所有软件组件都集中在一个包中。
让我们在单机体系结构的上下文中讨论一个电子商务商店的示例:
在任何电子商务应用程序中,都有一些标准功能,如搜索、评论和评级以及支付。客户可以使用浏览器或应用程序访问这些功能。当电子商务网站的开发者部署应用程序时,它是一个单一的单片单元。不同功能(如搜索、评论和评级以及支付)的代码在同一台服务器上。要扩展应用程序,需要运行这些应用程序的多个实例(服务器)。
什么是微服务架构?
微服务体系结构是一种体系结构开发风格,它允许将应用程序构建为为业务领域开发的小型自治服务的集合。它是结构风格体系结构的变体,有助于将应用程序安排为松散耦合的服务集合。微服务体系结构包含细粒度服务和轻量级协议。
让我们举一个用微服务架构开发的电子商务应用程序的例子。在这个微服务体系结构示例中,每个微服务都专注于单个业务能力。搜索、评级和审查以及支付都有自己的实例(服务器),并相互通信。
在单片体系结构中,所有组件合并成一个模块。但是,在微服务体系结构中,它们被分散到单独的模块(微服务)中,这些模块相互通信,如上面的微服务示例所示。
微服务之间的通信是一种无状态通信,其中每对请求和响应是独立的。因此,微服务可以轻松地进行通信。在微服务体系结构中,数据是联合的。每个微服务都有其独立的数据存储。接下来在这个Java微服务文章中,我们将学习微服务和单片体系结构之间的区别。
微服务与单机体系结构
微服务 | 单机体系结构 |
整个应用程序的每个单元都应该是最小的,并且应该能够实现一个特定的业务目标。 | 所有业务目标的单一代码库 |
服务启动比较快 | 服务启动需要更多时间 |
故障隔离很容易。即使一个服务停止,另一个也可以继续工作。 | 故障隔离困难。如果任何特定功能不起作用,整个系统就会停止工作。为了处理这个问题,应用程序需要重新构建、重新测试和重新部署。 |
所有的微服务都应该是松散耦合的,这样在一个微服务中所做的更改就不会影响另一个微服务。 | 单片结构是紧密耦合的。一个代码模块中的更改会影响另一个模块 |
企业可以将更多资源部署到产生更高投资回报率的服务中 | 因为服务不是孤立的,所以不可能单独分配资源 |
可以为经常使用的服务分配更多的硬件资源。在上面的电子商务示例中,与支付相比,更多的用户查看产品列表和搜索。因此,可以为搜索和产品列表微服务分配更多的资源。 | 应用程序扩展既有挑战性,也有浪费性。 |
微服务始终保持一致性和持续可用性。 | 开发工具负担过重,因为过程需要从头开始。 |
数据是联合的。这允许单个微服务采用最适合其需求的数据模型。 | 数据是集中的。 |
小型专注团队。并行快速发展 | 需要庞大的团队和大量的团队管理工作 |
一个微服务的数据模型的更改不会影响其他微服务。 | 数据模型的更改会影响整个数据库 |
使用定义良好的接口与其他微服务交互 | 不适用 |
微服务的工作原理是专注于产品,而不是项目 | 把重点放在整个项目上 |
代码基之间没有交叉依赖关系。您可以为不同的微服务使用不同的技术。 | 一个函数或程序依赖于其他函数或程序。 |
微服务挑战
- 微服务相互依赖,它们必须相互通信。
- 与单机系统相比,使用不同编程语言开发的监控服务更多。
- 由于它是一个分布式系统,因此它本身就是一个复杂的模型。
- 不同的服务将有其独立的机制,导致非结构化数据占用大量内存。
- 需要有效地管理和团队合作来防止连锁问题
- 当一个问题在一个版本中消失,并在最新版本中返回时,重新生成它将是一项困难的任务。
- 独立部署与微服务是复杂的。
- 微服务架构带来了大量的操作开销。
- 向系统中添加新服务时,很难管理应用程序
- 需要大量熟练的专业人员来支持异构分布的微服务
- 微服务成本高昂,因为您需要为不同的业务任务维护不同的服务器空间。
SOA与微服务
SOA服务在组织中由作为目录列表的注册表来维护。应用程序需要在注册表中查找服务并调用服务。
在另一个世界里,SOA就像一个管弦乐队,每个艺术家都在用自己的乐器表演,而音乐总监则给所有人下达指令。
另一方面,微服务是一种面向服务的体系结构风格,其中应用程序被构建为不同较小服务的集合,而不是一个软件或应用程序。
微服务就像一个舞蹈团,每个舞者都是独立的,知道他们需要做什么。所以,如果他们错过了一些步骤,他们知道如何回到正确的顺序。现在在这个微服务体系结构教程中,让我们了解SOA和微服务之间的区别。
下面是SOA和微服务之间的详细比较:
参数 | SOA | 微服务 |
设计类型 | 在SOA中,软件组件以服务的形式暴露于外部世界以供使用。 | 微服务是SOA的一部分。它是SOA的一个实现。 |
依赖 | 业务单位是独立的。 | 它们相互独立。 |
软件大小 | 软件规模比任何传统软件都大 | 在微服务中,软件的规模总是很小的 |
技术栈 | 与微服务相比,技术层次更低。 | 微服务技术堆栈可能非常大 |
申请的性质 | 整体的 | 全栈 |
独立和专注 | SOA应用程序是为执行多个业务任务而构建的。 | 它们是为执行单个业务任务而构建的。 |
部署 | 部署过程非常耗时。 | 部署简单且耗时较少。 |
成本效益 | 更具成本效益。 | 成本效益较低。 |
可扩展性 | 与微服务相比更少。 | 高度可扩展。 |
业务逻辑 | 业务逻辑组件存储在单服务域简单有线协议(带XMLJSON的HTTP)中API由SDK/客户端驱动 | 业务逻辑可以跨域、跨企业服务总线,就像服务中间件之间的层一样 |
微服务工具
1. Wiremock:测试微服务
WireMock是一个灵活的库,用于存根和模拟web服务。它可以配置在收到特定请求时由httpapi返回的响应。它也用于测试微服务。
2. Docker
Docker是一个开源项目,它允许我们使用容器创建、部署和运行应用程序。通过使用这些容器,开发人员可以将应用程序作为单个包运行。它允许您在一个包中提供库和其他依赖项。
3. Hystrix
Hystrix是一个容错java库。此工具设计用于在分布式环境(如微服务)中分离对远程服务、系统和第三方库的访问点。它通过隔离失败的服务和防止失败的级联效应来改进整个系统。
微服务体系结构的最佳实践
- 每个微服务都有单独的数据存储
- 保持代码具有相似的成熟度。
- 为每个微服务单独构建
- 始终将-sever视为无状态的。
总结
- 微服务是一种面向服务的体系结构模式,其中应用程序被构建为各种最小的独立服务单元的集合。
- 微服务体系结构是一种体系结构开发风格,它允许将应用程序构建为为业务领域开发的小型自治服务的集合。
- 单机体系结构就像一个大容器,应用程序的所有软件组件都集中在一个包中
- 在微服务中,整个应用程序的每个单元都应该是最小的,并且应该能够实现一个特定的业务目标
- 在单机体系结构中,庞大的代码库会减慢整个开发过程。新版本可能需要几个月的时间。代码维护困难
- 有两种类型的微服务是1:无状态的,2:有状态的
- Java中的微服务相互依赖,它们必须相互通信。帮助您强调特定功能和业务需求
- 面向服务架构(Service-oriented architecture,简称SOA)是基于同步和异步应用程序的请求或应答设计模型的分布式计算的发展
- 在SOA中,软件组件以服务的形式暴露给外部世界使用,而微服务是SOA的一部分。它是SOA的一个实现
- Wiremock、Docker和Hystrix是一些流行的微服务工具
原文链接:https://javakk.com/1601.html
如果觉得本文对你有帮助,可以关注一下我公众号,回复关键字【面试】即可得到一份Java核心知识点整理与一份面试大礼包!另有更多技术干货文章以及相关资料共享,大家一起学习进步!