微服务正在完全打乱我们当今构建应用程序的方式。当涉及到软件体系结构时,这是最热门的趋势之一。越来越多的开发人员正在采用它。微服务是 整体方法的替代方法
,可为开发人员提供构建复杂软件应用程序所需的灵活性,可伸缩性和简便性。全世界的公司都已经意识到他们通过微服务所获得的优势。亚马逊,Netflix,eBay,Spotify,Uber,Groupon和SoundCloud只是其中一些。
在这里,我们总结了您需要了解的有关微服务的所有知识,以便上手。这些是我们将讨论的主题:
- 什么是微服务?
- 整体与微服务架构
- 为什么选择微服务?
- 微服务的挑战
- 微服务和Docker
- 微服务和Kubernetes
- 建立微服务架构
- 何时使用微服务?
什么是微服务?
使用微服务意味着从松散耦合的服务创建应用程序。该应用程序由几个小服务组成,每个小服务代表一个单独的业务目标。在复杂的应用程序中结合使用之后, 它们可以单独开发和维护
。您还可以使用不同的编程语言,例如Node.js,Java,PHP等。
微服务使开发团队可以自由选择他们最喜欢的技术堆栈。他们免除了他们对其正在开发的应用程序将产生的影响的担忧。与使用整体架构时相比,这使它们可以更快地运行并更有信心。但是,这并不意味着我们应该完全消除并忘记整体架构。
单片整体(单体)与微服务架构
具有整体式架构意味着创建单个单元作为所有功能组件的基础。这包括数据库操作,业务逻辑,后台处理等。它们都可以一次部署并在同一服务器上运行。
一切都在一个单独的代码库中,所有更新均在该代码库中进行。由于应用程序变得太复杂而无法处理,这使扩展变得棘手。当代码库较大时,添加更多功能将成为一个更大的问题。这限制了灵活性,并且没有新思想的余地。
单体架构意味着流程紧密耦合。如果仅其中之一存在问题,则整个体系结构将崩溃。这是非常危险的,因为整个应用程序可能会由于一个小错误而失败。
另一方面,微服务体系结构由单独的服务而不是单个单元组成。这些服务代表通过API进行通信的单独的代码库。由于每个服务都代表一个单独的功能,因此您也可以独立更新,部署和扩展它。这不会影响其余的微服务。
在以下情况下,单片架构会更好:
- 您正在开发的应用程序很简单,并且所有内容都使用相同的语言和框架,
- 您只需启动应用程序即可快速轻松地进行测试,
- 而且您没有太多新功能会触发整个应用程序的发布。
为什么选择微服务?
微服务对您的应用程序更好的原因有几个:
- 可扩展性,在微服务架构中,每个服务都可以彼此独立地扩展。这意味着每个功能都可以独立运行,从而使团队可以选择最合适的技术堆栈。而且,他们可以估算每个功能的成本,并在需要时进行修改。
- 生产率,微服务绝对是大型团队的必经之路。当他们处理占用大量时间和精力的大型项目时,微服务方法允许团队将其分为几个独立的服务。这些服务独立运行。这意味着团队成员将能够在无需协调的情况下从事同一项目。从事特定微服务的团队可以自行制定决策,而不必等待其他团队。对于初学者来说,他们将可以自由选择要编写微服务的语言。他们不必与其他团队正在使用的技术堆栈进行协调。
- 敏捷,敏捷是当今大多数开发团队所追求的。微服务体系结构允许一个大团队分成几个负责独立服务的小团队。这使他们具有自治权,并有可能通过缩短开发周期来提高效率。
- 可重用性,使用微服务意味着将小段代码配对到大型应用程序中。这些代表应用程序不同功能的部分也可以独立运行。这意味着您可以将它们用作基础或其他功能的补充。开发人员节省了很多时间,因为他们不必总是从头开始编写代码。而且,所有这些零件都可以更换。因此,如果应用程序的功能过时,则可以轻松地对其进行重写和重新添加。这不会破坏整个应用程序的功能。您始终可以根据团队目标和绩效进行更改。
微服务的挑战
在决定迁移到微服务架构之前,您还应该了解可能发生的挑战:
- 沟通的复杂性,现在,该应用程序包含几个独立运行的不同服务,因此应谨慎设置它们之间的通信。开发人员必须处理的模块之间会有请求。他们可能还必须添加一些其他代码以保持流程的进行。如果微服务的数量很大,它们之间的通信可能会导致许多复杂情况。
- 需要更多的努力,与所有组件都位于同一单元中的整体架构不同,微服务具有更多的数据库,需要更好的事务管理。而且,每个独立的单元都必须分别部署和监视。这意味着团队将不得不花费时间和精力来监视和准备每个单独的服务以进行部署。
- 测试多个单元,在整体方法中,您只需要启动服务器上具有的单个单元并确保它已连接到数据库。既然您拥有更多的服务和数据库,则必须分别确认每个服务和数据库,然后才能测试整个应用程序。在某些情况下,其中一项服务可能会阻止测试阶段并停止其余服务的部署。这意味着微服务需要更多的测试时间。您将有很多要测试的接口,并且每个测试过程都必须与其他过程分开完成。
Docker和微服务
微服务通常部署在容器中,这些容器是充当微服务包装的虚拟操作系统环境。Docker是最受欢迎的容器解决方案之一。 Docker
是虚拟机的轻量级系统,可帮助开发人员更有效地管理和部署微服务。
使用Docker,每个微服务都放置在Docker镜像和Docker容器中。这些部分完全独立于宿主环境。
Docker通过在其Docker主机上共享操作系统内核来取代拥有自己的虚拟操作系统环境的需求。
Docker允许将微服务拆分为更小的代码段,并通过名为Dockerfiles的文件将其创建为Docker映像。这些Dockerfile使得将微服务链接到大型应用程序变得更加容易。
微服务系统通常由多个Docker容器构建,这些容器通过虚拟网络进行协调。由于容器必须进行通信,因此Docker构建了Docker Compose环境,该环境允许服务器之间进行通信。
Docker通常与Kubernetes混在一起。但是,这两个不是竞争对手。实际上,它们的组合可以带来更好的结果。让我们分解一下。
微服务和Kubernetes
Kubernetes
(k8s或“ kube”)是一个开源系统,用于自动化容器的部署,扩展和管理。它最初是由Google工程师开发的。自那时以来, Google在容器中运行所有内容,
并且每周生成超过20亿个容器部署。
开发人员正在广泛采用Kubernetes
,以使生活更轻松。他们通过 Kubernetes社区进行
连接,该 社区
包括成千上万的贡献者和许多认证的合作伙伴。
通过将运行容器的组合并在一起,Kubernetes可以创建易于管理的集群。您可以在各种云中管理这些集群,包括公共云,私有云和混合云。这就是使用Kubernetes托管可快速扩展的云原生应用程序的原因。
因此,Kubernetes不能替代Docker。Docker也不取代Kubernetes。它们都可以独立运行。但是,配对时,它们可以彼此受益匪浅。
Docker是一种可安装在计算机上并运行容器化应用程序的软件。如果您的计算机上安装了Docker,则可以使用Kubernetes自动化容器操作,如管理,网络,安全性,扩展等。如果Docker安装在多个Docker主机或节点上,则可以执行此操作。Kubernetes管理的一组节点集称为Kubernetes集群。
Kubernetes可以做很多事情:
- 将应用程序拆分为在不同云环境中运行的小容器
- 整合和编排容器
- 管理代码库并有效测试单独的输入和输出
- 即时扩展应用程序并加快上市时间
- 从一家主机供应商迁移到另一家主机供应商,而无需在流程中进行重大更改
- 使用配置文件,这样可以确保您的应用程序完全按照您的规范运行。您可以声明式管理它们
- 自动重启,复制和扩展应用程序,使其能够独立修复
建立微服务架构
您可以在许多不同的框架中构建微服务。以下是最受欢迎的:
- 带有Spring Cloud的Spring Boot —一个Java框架,具有各种扩展功能,用于Spring Cloud上的全栈微服务。
- Vert.x-在JVM上运行的工具,使您可以选择语言并提供简单的API。
- Akka —基于角色的框架,非常适合响应式微服务。
- Quarkus-用于构建模块化微服务应用程序的Kubernetes本机Java框架。
- Falcon-一个专注于质量控制并针对微服务进行了优化的Python框架。
- Molecular(分子) — Node.js的微服务框架,支持事件驱动的体系结构。
如何部署微服务?
有几种选择。您也可以将其中一些结合起来。
-
在云上
,要获得扩展能力并为来自不同位置的许多用户提供服务的能力,
- 使用容器,可以缩短产品上市时间,轻松扩展并快速解决问题。
- 作为PaaS(平台即服务),从云提供商那里租用开发工具,基础架构和操作系统,
- 无服务器,当预计会有大流量时,
- 如果您有足够的资源来执行此操作,则构建自己的IT基础结构。
使用什么云提供商?
以下是一些选项:
-
AWS
具有大量服务,并且适用于几乎所有类型的技术。
-
Azure
是.NET堆栈的最佳解决方案,有助于开发,数据存储和托管解决方案。
-
Google Cloud Platform
通过可访问的AI和数据分析解决了问题,并为Kubernetes提供了强大的支持。
-
Digital Ocean
支持一键式应用程序和标准分发,并在8个数据中心区域统一定价。
如何监控微服务?
您可以使用许多工具。这里有一些建议:
-
Datadog-
我们将其用于监视,跟踪日志分析和警报。当涉及到错误检测和性能下降时,它非常有效。
-
Dynatrace
—由AI驱动的平台,用于监视动态混合云环境。
-
NewRelic
—用于云环境的集中式监视和报告工具。
-
Splunk-
日志分析的灵活工具。
-
AppDynamix
—实时监视应用程序和服务器性能。
-
Zabbix
—一个用于性能监视的开源网络。
如何自动化CI / CD过程?
Microtica
涵盖了整个软件交付自动化流程,从完整的云基础架构设置到使用Kubernetes在云中交付应用程序和服务。Microtica标准化了我们的开发人员在云中开发,测试和部署代码的方式。这使得他们的工作可重复用于将来的项目。
要测试什么?
这是我们使用的:
-
Mocha
+ Chai
用于单元集成测试和
-
API测试自动化的 Postman
。我们为每个公共API定义了一个测试用例。我们每天结束时执行它们,并立即获得报告。出现问题时,我们会立即修复并部署到生产环境。
微服务最佳实践
有很多做法,但让我们看一些最常见的做法:
-
微型前端
-整体式Web界面分为几个独立的组件,这些组件作为微服务进行通信
-
连续交付
-如果您只需要更改一项功能而无需动用其余功能
-
域驱动的设计 —解决紧密耦合的微服务的挑战
-
每个服务的数据库
-尽管这需要团队之间更多的沟通,但是每个微服务中的数据库都带来了更多的可持续性
但是,在开始之前,请不要错过以下注意事项: *
- 您需要多少存储空间?如果您依赖本地存储,则无法灵活地进行扩展和扩展。您将无法处理大量工作负载。
- 您的应用是事件驱动的吗?如果是这样,则您应该能够异步处理,因为您的应用程序将跨多台机器进行扩展。
- 需要灵活的消息传递。将有多个事件源,并且都必须对其进行处理。这就是为什么您需要一个健壮的消息传递模型。
- 由于微服务将使用其API进行通信,因此创建API通信模式也是必不可少的。
- 您将需要一个更安全的模型,该模型将允许一个微服务仅访问其所需的资源,而不会使其他微服务受到安全威胁。
微服务在软件体系结构方面进行了一场重大的革命。在构建应用程序时,应认真考虑它们。Netflix,Amazon,Uber和Spotify只是决定将 微服务的优势用于大型,复杂应用程序
的科技巨头中的一些。
但是,迁移到微服务应取决于项目和团队结构。这对整个公司来说都是非常重要的,因此您应该认真讨论。