微服务正在完全颠覆我们如今构建应用程序的方式。当涉及到软件架构时,这是最热门的趋势之一。越来越多的开发人员正在采用它。
微服务正在成为整体方法的替代方案,这种方法为开发人员提供了构建复杂软件应用程序所需的更高的灵活性、可伸缩性和简单性。世界各地的公司都认识到了他们从微服务中获得的优势。亚马逊、Netflix、eBay、Spotify、优步、Groupon和SoundCloud只是其中的一部分。
在这里,我们总结了开始使用微服务所需了解的所有内容。以下是我们将要讨论的主题:
使用微服务意味着从松散耦合的服务创建应用程序。该应用程序由几个小服务组成,每个服务代表一个单独的业务目标。
在复杂的应用程序中将它们结合在一起之后,可以单独开发和轻松维护它们。您还可以使用不同的编程语言,如Node.js、Java、PHP等。
微服务让开发团队可以自由选择他们最喜欢的技术堆栈。他们让他们不用担心这会对他们正在开发的应用程序产生影响。这使他们的操作速度更快,并且比使用单一架构时更有信心。
然而,这并不意味着我们应该完全淘汰和忘记单体建筑。当谈到选择他们应该使用的架构类型时,许多公司仍然在苦苦挣扎-是单片服务还是微服务。
拥有整体式架构意味着创建单个单元作为所有功能组件的基础。这包括数据库操作、业务逻辑、后台处理等。它们都是一次性部署的,并在相同的服务器上运行。
所有内容都在一个代码库中,所有的更新都是在这里进行的。这使得伸缩变得棘手,因为应用程序变得太复杂而无法处理。当代码库更大时,添加更多功能将成为一个更大的问题。这限制了灵活性,没有给新想法留下空间。
整体式体系结构意味着流程是紧密耦合的。如果它们中只有一个出现问题,整个体系结构就会崩溃。这是非常危险的,因为整个应用程序可能会因为一个小错误而失败。
另一方面,微服务架构由单独的服务组成,而不是单个单元。这些服务代表通过API进行通信的单独代码库。因为每个服务都代表一个单独的功能,所以您还可以独立地更新、部署和扩展它。这不会影响其余的微服务。
您正在开发的应用程序很简单,并且所有内容都使用相同的语言和框架,
您没有太多的新功能可以触发整个应用程序的发布。
在微服务体系结构中,每个服务都独立于其他服务进行扩展。这意味着每个功能都独立运行,允许团队选择最合适的技术堆栈。此外,他们可以估算每个功能的成本,并在需要时进行修改。
微服务绝对是大型团队的必由之路。当他们在耗费太多时间和精力的大型项目上工作时,微服务方法允许团队将其拆分成几个独立的服务。
这些服务独立运行。这意味着他们的团队成员将能够在不需要太多协调的情况下从事同一项目。从事特定微服务的团队可以自己做出决定,而不必等待其他团队。首先,他们可以自由选择他们想要用来编写微服务的语言。他们不必与其他团队正在使用的技术堆栈进行协调。
敏捷是当今大多数开发团队努力追求的目标。微服务架构允许大型团队拆分成几个较小的团队,负责单独的服务。这给了他们自主权,以及通过缩短开发周期来提高效率的可能性。
使用微服务意味着将小段代码配对到一个大型应用程序中。这些代表应用程序不同功能的部分也可以独立运行。这意味着你可以将它们作为基础或对另一项功能的补充。开发人员节省了大量时间,因为他们不必总是从头开始编写代码。
而且,所有这些部件都可以更换。因此,如果应用程序的某个功能变得过时,可以很容易地重写和添加它。这不会中断整个应用程序的功能。你可以随时根据团队目标和表现做出改变。
在决定迁移到微服务架构之前,您还应该了解可能会出现的挑战:
既然应用程序由几个独立运行的不同服务组成,那么应该仔细设置它们之间的通信。开发人员必须处理模块之间的请求。他们可能还必须添加一些额外的代码来保持流量的持续,如果微服务的数量很多,它们之间的通信可能会造成许多复杂情况。
与所有东西都在同一个单元中的整体架构不同,微服务有更多的数据库,需要更好的事务管理。更重要的是,每个独立的单位都要单独部署和监控。这意味着团队将不得不花费时间和精力来监控和准备部署每项单独的服务。
在整体方法中,您只需要启动服务器上的单个单元,并确保它连接到数据库。现在你有了更多的服务和数据库,你必须分别确认它们,然后才能测试整个应用程序。在某些情况下,其中一个服务可能会阻塞测试阶段,并停止部署其余服务。
这意味着微服务需要更多的测试时间。您将有很多接口需要测试,并且每个测试过程都必须与其他过程分开完成。
除了所有这些缺点之外,非常重要的一点是,正确的自动化、工具和开发人员都是各自领域中的明星,每个挑战都是可以解决的。
微服务通常部署在容器中,即充当微服务打包的虚拟操作系统环境。
Docker是目前最流行的容器解决方案之一,Docker是一个轻量级的虚拟机系统,帮助开发者更高效地管理和部署微服务。
有了Docker,每一个微服务都放在一个Docker镜像和一个Docker容器中。这些部分完全独立于主机环境。
Docker通过在其Docker主机上共享操作系统内核,取代了拥有您自己的虚拟操作系统环境的需求。
Docker允许将微服务拆分成更小的代码片段,并通过名为Dockerfiles的文件创建为Docker映像。这些Dockerfile使得将微服务链接到大型应用程序变得容易得多。
微服务系统通常由多个Docker容器组成,通过虚拟网络进行协调。由于容器需要通信,Docker构建了Docker组合环境,允许服务器之间的通信。
多克经常和库伯内斯混在一起。然而,这两个不是竞争对手。事实上,他们的结合可以带来更好的结果。
Kubernetes Containers(K8s或“Kube”)是一个开源系统,用于自动化容器的部署、缩放和管理,它最早是由谷歌工程师开发的。从那时起,谷歌在容器中运行一切,每周生成超过20亿次容器部署。
为了让他们的生活更轻松,开发人员正在大量采用Kubernetes。他们通过一个名为Kubernetes的社区联系在一起,这个社区有数千名贡献者和许多经过认证的合作伙伴。
通过将正在运行的容器组合并在一起,KUBERNETES创建了易于管理的集群。您可以在所有类型的云中管理这些集群,包括公共云、私有云和混合云。这就是为什么Kubernetes被用来托管设置为快速扩展的云本地应用程序的原因。
所以,库伯内斯不是多克的替代品。多克也不会取代库伯内斯。它们都可以独立运行。然而,当他们配对时,他们可以从对方那里获得巨大的好处。
Docker是安装在计算机上并与一起运行集装箱化应用程序的软件。如果您的计算机上安装了Docker,则可以使用Kubernetes自动执行管理、联网、安全、伸缩等容器操作。如果您的Docker安装在多个Docker主机或节点上,则可以实现这一点。
无需对流程进行重大更改即可从一个主机供应商迁移到另一个主机供应商。
使用配置文件,这样您就可以确保您的应用程序完全按照您的规范运行。您可以以声明方式管理它们。
您可以在许多不同的框架中构建微服务。以下是最受欢迎的几个:
Spring Boot with Spring Cloud--为Spring Cloud上的全栈微服务创建一个Java框架,其中包含各种扩展。
Vert.x-是一个运行在JVM上的工具,允许您选择您的语言并提供简单的API。
在云上,我希望能够扩展和服务来自不同地点的大量用户。
AWS拥有大量服务,几乎适用于任何一种技术。
Azure是.NET堆栈的最佳解决方案,有助于开发、数据存储和托管解决方案。
谷歌云平台解决了易访问的AI&;数据分析问题,并且对Kubernetes有很大的支持。
Digital Ocean One既支持一键应用,也支持标准分发,8个数据中心区域统一定价。
Datadog-我们将其用于监控、跟踪日志分析和警报。当涉及到错误检测和性能下降时,它非常有效。
Microtica涵盖了整个软件交付自动化过程,从完整的云基础设施设置到使用Kubernetes在云中交付应用程序和服务。Microtica标准化了我们的开发人员在云中开发、测试和部署代码的方式。这使得他们的工作可以在未来的项目中重用。
邮递员致力于API测试自动化。我们为每个公共API定义一个测试用例。我们每天结束时处决他们,并立即得到报告。当出现问题时,我们会立即修复并部署到生产中。
有很多做法,但让我们看看一些最常见的做法:
Micro Fronaders-将整体Web界面分成几个独立的组件,这些组件以微服务的形式进行通信。
持续交付-如果您只需要更改一项功能,而不涉及其余功能,则可以。
每个服务的数据库-虽然这需要团队之间进行更多的沟通,但每个微服务中的数据库带来了更多的可持续性。
你有一个庞大的团队,可以同时从事不同的微服务,
您需要多少存储空间?*如果依赖本地存储,您将无法灵活地增长和扩展。您将无法处理大量工作负载。
您的应用程序是事件驱动的吗?如果是,您应该能够异步处理,因为您的应用程序将跨越多台机器。
需要灵活的消息传递机制。将有多个事件源,它们都必须处理。这就是您需要健壮的消息传递模型的原因。
创建一个新的API通信模式也将是强制性的,因为微服务将使用它们的API进行通信。
你需要一个更加安全的模型,它将允许一个微服务只访问它需要的资源,而不会让其他微服务面临安全威胁。
微服务在软件体系结构中引发了一场重大革命。在构建应用程序时,您应该认真考虑它们。Netflix、亚马逊、优步和Spotify只是决定在其大型、复杂的应用程序中充分利用微服务优势的部分科技巨头。
但是,迁移到微服务应该取决于项目和团队结构。这对整个公司来说是一笔很大的交易,所以你应该认真讨论一下。