建议和反馈

请填写你的反馈内容

从单片架构迁移到微服务架构的综合指南

2019-10-04 ·1600次阅读 ·读完需要21分钟

用于复杂和大型应用程序(具有大量用户和大量数据的应用程序)的服务器端应用程序开发体系结构不应只涉及更快的响应并为各种平台提供Web服务。它应该易于扩展,升级,更新,测试和部署。它还应具有很高的可用性,允许开发人员使用不同的编程语言编写服务器端应用程序的组件,并使用不同的数据库。
因此,这导致构建大型和复杂应用程序的开发人员从常见的单片架构切换到微服务架构,从而使我们能够轻松地完成所有这些工作。由于微服务架构已在构建大型和复杂应用程序的企业中广泛使用,因此了解如何使用该架构设计和创建服务器端应用程序非常重要。

在本文中,我们将回顾微服务架构概念,并讨论微服务与整体应用程序设计的优缺点。本文紧随其后的是两个教程:i- 使用Seneca工具包使用Node.js创建基于微服务架构的应用程序,以及ii- 使用Seneca js使用微服务开发服务器端应用程序

在本文中,我们将介绍以下主题:

  1. 了解整体架构

  2. 基于整体架构扩展,升级,部署和编写应用程序

  3. 深入讨论微服务架构

  4. 基于微服务架构扩展,升级,部署和编写应用程序

  5. 塞内卡入门

  6. 使用Seneca创建和调用服务

 


什么是整体架构?

要了解微服务体系结构,首先要了解
单片体系结构是相反的,这一点很重要
在整体架构中,服务器端应用程序的不同功能组件(例如付款处理,帐户管理,推送通知和其他组件)全部融合在一起形成一个单元。
例如,应用程序通常分为三个部分。这些部分是在用户计算机上运行的HTML页面或本机UI,在服务器上运行的服务器端应用程序以及也在服务器上运行的数据库。服务器端应用程序负责处理HTTP请求,在数据库中检索和存储数据,执行算法等。如果服务器端应用程序是执行所有这些任务的单个可执行文件(即,运行是单个进程),那么我们说服务器端应用程序是整体的。
这是构建服务器端应用程序的常用方法。几乎每个主要的CMS,Web服务器,服务器端框架等都是使用整体架构构建的。
该体系结构似乎很成功,但是当您的应用程序很大且很复杂时,可能会出现问题。

整体架构的缺点

以下是由使用整体架构构建的服务器端应用程序引起的一些问题。

扩展整体架构

随着到服务器端应用程序的流量增加,您将需要扩展
服务器端应用程序以处理流量。
如果是整体架构,则可以通过在多个服务器上运行相同的可执行文件来扩展服务器端应用程序,并将服务器放置在负载均衡器后面,或者可以使用轮询DNS在服务器之间分配流量:
Web设计微服务

在上图中,所有服务器都将运行相同的服务器端应用程序。
尽管扩展很容易,但是扩展单片服务器端应用程序最终只能扩展所有组件,而不是需要更多资源的组件。因此,有时会导致资源的不平衡利用,具体取决于组件所需的资源数量和类型。

让我们考虑一些示例,以了解在扩展整体服务器端应用程序时引起的问题:

  1. 假设服务器端应用程序的某个组件需要更强大或更特殊的硬件,我们不能简单地扩展该特定组件,因为所有组件都打包在一起,因此所有内容都需要扩展。因此,为确保组件获得足够的资源,您需要在更多具有强大或特殊硬件的服务器上运行服务器端应用程序,从而导致消耗的资源超过实际需要。

  2. 假设我们有一个需要在免费的特定服务器操作系统上执行的组件,那么我们不能简单地在非免费操作系统中运行该特定组件,因为所有组件都打包在一起,因此只能执行这个特定的组件,我们需要在所有服务器上安装非免费操作系统,从而大大增加了成本。

这些只是一些例子。在扩展整体服务器端应用程序时,您可能还会遇到更多问题。
因此,当我们扩展整体服务器端应用程序时,不需要更强大或特殊类型资源的组件开始接收它们,因此减少了需要它们的组件的资源。我们可以说,扩展整体服务器端应用程序涉及扩展所有组件,这些组件被迫复制新服务器中的所有内容。

编写整体服务器端应用程序

整体服务器端应用程序是使用特定框架以特定编程语言编写的。企业通常会有开发人员,他们是不同编程语言和框架的专家,可以构建服务器端应用程序。因此,如果要求他们构建一个整体的服务器端应用程序,那么他们将很难一起工作。
整体服务器端应用程序的组件只能在与其使用的相同框架中重用。因此,您不能将它们重用于使用不同技术构建的其他某种项目。

整体架构的其他问题

 根据用于构建整体服务器端应用程序的技术,开发人员可能还会遇到其他一些问题:

  1. 可能需要对其进行任何小的更改,对其进行完全重建和重新部署。这是一项耗时的任务,并使您的应用程序长时间无法访问。

  2. 如果任何一个组件发生故障,它可能会完全失败。构建单片应用程序以处理特定组件的故障并相应地降低应用程序功能很困难。

  3. 可能很难找到每个组件消耗多少资源。

  4. 分别测试和调试单个组件可能很困难。

微服务架构简介

我们看到了由整体架构引起的问题。这些问题导致开发人员从单片架构切换到微服务架构。
在微服务架构中,服务器端应用程序分为服务。
服务(或微服务)是一个小的独立过程,构成了整个服务器端应用程序的特定功能。例如,您可以具有一个用于付款处理的服务,另一个用于帐户管理的服务,等等。服务需要通过网络相互通信。
您不必在不同的服务器上运行每个服务,也就是说,您可以在一台计算机上运行多个服务。服务器与服务的比例取决于不同的因素。一个共同的因素是所需资源和技术的数量和类型。例如,如果一项服务需要大量的RAM和CPU时间,那么最好在服务器上单独运行它。如果有些服务不需要太多资源,则可以将它们全部一起在单个服务器上运行。
下图显示了微服务架构的示例:
Web设计微服务

 

在这里,您可以将服务1视为与浏览器进行通信的Web服务器,并提供为各种功能提供API的其他服务。Web服务与其他服务进行通信以获取数据。

微服务架构的优点

由于服务较小且独立并且可以通过网络进行通信,因此微服务架构解决了单片架构所遇到的许多问题。这是微服务架构的一些好处:

  1. 当服务通过网络进行通信时,可以使用不同的框架以不同的编程语言编写服务

  2. 更改服务仅需要重新部署特定服务,而不是所有服务,这是一个更快的过程

  3. 由于每个服务在不同的流程中运行,因此衡量每个服务消耗了多少资源变得更加容易

  4. 由于可以分别分析每个服务,因此测试和调试变得更加容易

  5. 服务可以通过网络调用与其他应用程序重用

缩放服务

除了上述优点之外,微服务体系结构的主要优点之一是您可以扩展需要扩展的单个服务而不是所有服务的扩展,因此可以防止资源重复和资源的不平衡使用。
假设我们要缩放上图中的服务1这是显示如何缩放的图表:
Web设计微服务

在这里,我们在负载平衡器后面的两个不同服务器上运行服务1的两个实例,该服务器在它们之间分配流量。所有其他服务都
以相同的方式运行,因为不需要扩展它们。如果要扩展Service 3,则可以在多个服务器上运行Service 3的多个实例,并将它们放置在负载均衡器后面。


微服务架构的缺点

尽管与单片架构相比,使用微服务架构有很多优点,但是微服务架构也有一些缺点:

  1. 由于将服务器端应用程序划分为服务,因此分别部署和(可选)分别配置每个服务是一项繁琐且耗时的任务。

  2. 服务之间的通信可能会因为通过网络完成而滞后。

  3. 当服务通过网络进行通信时,这种服务器端应用程序更容易出现网络安全漏洞。

  4. 编写用于与其他服务通信的代码可能会更加困难,也就是说,您需要进行网络调用,然后解析数据以读取它。这也需要更多处理。请注意,尽管存在使用微服务来构建服务器端应用程序的框架,这些框架使获取和解析数据变得更加容易,但仍不会减少处理和网络等待时间。

  5. 您肯定需要某种监视工具来监视服务,因为服务可能由于网络,硬件或软件故障而中断。尽管只有在应用程序突然停止时才可以使用监视工具,但是要构建监视软件或使用某种服务,监视软件需要一定程度的额外经验和专业知识。

  6. 基于微服务的服务器端应用程序比基于单体的服务器端应用程序要慢,这是因为通过网络的通信要比内存慢。

何时使用微服务架构

似乎很难在整体式和微服务
架构之间进行选择,但是实际上在它们之间进行选择并不是那么困难。
如果您正在使用整体式体系结构构建服务器端应用程序,并且感觉不太可能遇到我们之前讨论的任何整体式问题,那么您可以坚持使用整体式体系结构。将来,如果您面临使用微服务架构可以解决的问题,那么您应该切换到微服务架构。


如果您正在从单片架构转换为微服务架构,则不必重写完整的应用程序,而是只能通过执行一些代码重构将引起问题的组件转换为服务。这种类型的服务器端应用程序(其中主应用程序逻辑是整体的,但是某些特定的功能通过服务公开)称为具有整体核心的微服务体系结构。随着问题的进一步增加,您可以开始将单核的更多组件转换为服务。
Web设计微服务

如果您正在使用整体式体系结构构建服务器端应用程序,并且觉得自己很可能会遇到我们之前讨论的任何整体式问题,那么您应该立即切换到具有整体式核心的微服务体系结构或微服务体系结构,具体取决于哪种情况。你是最好的。

数据管理

在微服务体系结构中,每个服务可以拥有自己的数据库来存储数据,也可以使用集中式数据库。


一些开发人员根本不使用集中式数据库,而是所有服务都有自己的数据库来存储数据。为了在服务之间同步数据,服务会在事件的数据更改时忽略事件,而其他服务订阅事件并更新数据。这种机制的问题在于,如果服务关闭,则可能会丢失一些事件。也将有很多重复的数据,最后,很难对这种系统进行编码。
因此,拥有一个集中式数据库是一个好主意,如果每个服务都想存储自己不想与他人共享的内容,那么让每个服务都可以维护自己的数据库。服务不应直接连接到集中式数据库,提供与集中式数据库一起使用的API。这个额外的层具有许多优点,例如可以更改基础架构而无需更新和重新部署依赖于该架构的所有服务,我们可以在不更改服务的情况下添加一个缓存层,无需更改数据库类型对服务进行任何更改,还有许多其他好处。如果存在多个架构,或者存在不同类型的数据库,或者由于其他原因而使整体体系结构受益并分离服务,那么我们也可以具有多个数据库服务。


评论(0)问答(0)
请先登录或注册

请先登陆或注册

相关推荐

以太坊钱包是什么意思

您可以通过哪种软件使用以太坊?哪个在手机上运行,哪个在Linux上运行?哪个对存储以太币有好处,哪个对令牌有用,哪些可以与智能合约进行交互?我们为您提供每种设备和需求的钱包清单。虽然有数十个比特币钱包......
樱花YING · 2019-11-15
310阅读 · 0赞赏 · 0问答

以太坊钱包人如何使用

加密货币钱包是一种用于安全存储您的加密货币并将加密货币发送给他人的软件。它用作银行帐户,可以存储货币以及接收和汇出货币。一个复仇的钱包允许用户存储,发送和接收任何ERC20的复仇blockchain令......
· 2019-11-15
340阅读 · 0赞赏 · 0问答

EOS钱包如何创建

EOS利用具有资源赌注模式的账户系统,在EOS区块链上执行的任何操作都会消耗资源,包括创建EOS账户。为了完成EOS帐户创建过程,需要另一个具有足够EOS币的EOS钱包来支付所需的资源。当前,imTo......
mON · 2019-11-15
242阅读 · 0赞赏 · 0问答

捷报频传!SVT和GA强势上线FCion交易所,领涨市场!

科技的发展日新月异,信息的交替层出不穷。2019年,区块链技术自诞生至此,已走过了十余年。在其发展过程中,造就了几次风口:第一次风口,大约在2013年,主要研究加密数字货币在各领域的应用,最后诞生了R......
eason1688 · 2019-11-11
402阅读 · 0赞赏 · 0问答

加密货币钱包现状和未来发展

在区块链应用场景中,钱包是第一个落地应用的项目,也是加密货币的关键基础设施,同时,每一种加密货币的交易方式都是仰仗钱包进行。目前,加密钱包种类繁多,据调查发现,有近4亿美元资金流向加密钱包业务,其中以......
smallfish · 2019-11-11
398阅读 · 0赞赏 · 0问答

BitDATA纽约大会强势来袭,Spinach带你亮点抢先看!

2019年,区块链行业热闹非凡。随着中国提出把区块链作为核心技术自主创新重要突破口,指出区块链技术应用已经延伸到数字金融、物联网、智能制造、供应链管理、数字资产交易等多个领域。在此背景之下,一场区块链......
eason1688 · 2019-11-09
713阅读 · 0赞赏 · 0问答

1495

LK币

15

粉丝

30

笔记

感谢"千羽凡尘"

这篇精彩的笔记,目前已经帮助

  • 0
  • 1
  • 6
  • 0
  • 0
喜欢0
链客社群 加入

微博进入

商务合作>

广告投放>

公司名称:北京链客行科技有限公司

联系方式:010-67707199

ICP备案号:京ICP备18032136号

Copyright:链客区块链技术问答社区 版权所有

感谢您的提问,问题被社区永久收入以便新人查看。一定要记得采纳最佳答案哦!加油!

感谢您的善举,每一次解答会成为新人的灯塔,回答被采纳后获得20算力和相应的LK币奖励

您将赞赏给对方2LK币的奖励哦!感谢您的赞赏!

您将赞赏给对方2LK币的奖励哦!感谢您的赞赏!