什么是Microservices?

Microservice架构, 或者只是microservices, 是一种开发软件系统的独特方法,试图专注于构建具有定义良好的界面和操作的单一功能模块吗. 近年来,随着企业希望变得更加敏捷,并转向DevOps和持续测试,这种趋势变得越来越流行.

设计Microservices

昂首阔步 & 昂首阔步Hub:如何设计完美的微服务体验.

阅读更多

测试Microservices

了解如何通过自动化测试加速微服务的交付.

看现在

监控Microservices

阅读为什么监控你的微服务比你想象的更重要.

阅读更多

微服务对于敏捷和 DevOps 团队-马丁福勒 指出的那样, 网飞公司, 易趣, 亚马逊, 推特, 贝宝, 而其他的科技明星也都从单片架构发展到了微服务架构. 与微服务不同,整体应用程序是作为一个独立的、自治的单元构建的. 这会使对应用程序的更改变慢,因为它会影响到整个系统. 对一小段代码的修改可能需要构建和部署一个全新版本的软件. 扩展应用程序的特定功能,也意味着必须扩展整个应用程序.

微服务通过尽可能模块化来解决单片系统的这些挑战. 最简单的形式, 它们帮助将应用程序构建为一套小型服务, 每一个都在自己的进程中运行,并且可以独立部署. 这些服务可以用不同的编程语言编写,也可以使用不同的数据存储技术. 而这将导致系统的开发具有可伸缩性和灵活性, 它需要一个动态的改造. 微服务通常通过api连接, 并且可以利用许多在RESTful和web服务生态系统中成长起来的相同工具和贝博游戏app. 测试这些api 是否可以帮助验证微服务部署过程中的数据和信息流.

Microservices的好处

简单的部署

在不影响其他服务的情况下逐字部署.

简单的理解

因为函数是独立的,依赖性更小,所以遵循代码更容易.

可重用性跨业务

在整个企业中共享支付或登录系统等小型服务.

更快的缺陷隔离

当测试失败或服务停止时,用微服务将其快速隔离.

变更风险最小化

避免锁定技术或语言——动态更改没有风险.

理解Microservice架构

正如“微服务”这个术语没有正式的定义一样, 基于这种体系结构风格,您在每个系统中都看不到标准模型. 但你可以期待大多数微服务系统都有一些显著的特点.

查看昂首阔步Hub如何帮助团队开始微服务
微服务的六个特点
  1. 多个组件

    根据定义,作为微服务构建的软件可以分解为多个组件服务. 为什么? 这样每个服务都可以被部署, 调整, 然后在不损害应用程序完整性的情况下独立地重新部署. 作为一个结果, 您可能只需要更改一个或多个不同的服务,而不必重新部署整个应用程序. 但这种方法也有缺点, 包括昂贵的远程调用(而不是进程内调用), 粗粒度的远程api, 在组件之间重新分配职责时增加了复杂性.

  2. 建立业务

    微服务风格通常围绕业务能力和优先级进行组织. 与传统的单一开发方法不同——不同的团队都有一个特定的关注点, 说, 用户界面, 数据库, 技术层, 或者服务器端逻辑微服务体系结构利用跨功能团队. 每个团队的职责是基于通过消息总线通信的一个或多个单独的服务来制作特定的产品. 在微服务中,团队终生拥有产品,正如亚马逊经常引用的格言“你构建它,你运行它.

  3. 简单的路由

    微服务的行为有点像经典的UNIX系统:它们接收请求, 处理它们, 并生成相应的响应. 这与esb(企业服务总线)等其他许多产品的工作方式相反, 哪里有高科技的信息路由系统, 编排, 并利用应用业务规则. 你可以说微服务拥有处理信息和应用逻辑的智能端点, 还有用来传递信息的哑管道.

  4. 分散的

    因为微服务涉及各种技术和平台, 老式的集中式管理方法并不是最佳的. 去中心化治理受到微服务社区的青睐,因为它的开发人员努力生产有用的工具,然后其他人可以使用这些工具来解决相同的问题. 就像分散管理一样, 微服务体系结构也支持分散的数据管理. 单片系统在不同的应用程序之间使用单个逻辑数据库. 在微服务应用程序中,每个服务通常管理其唯一的数据库.

  5. 抗失败

    就像一个全面发展的孩子,微服务的设计是为了应对失败. 因为几个独特和多样化的服务在一起交流, 服务很可能会失败, 由于这样或那样的原因.g.,当供应商不在时). 在这些情况下, 当客户端以尽可能优雅的方式退出时,它应该允许它的邻近服务正常工作. 然而, 监控microservices 可以帮助预防失败的风险吗. 原因很明显, 与单片系统体系结构相比,这一需求增加了微服务的复杂性.

  6. 进化

    微服务体系结构是一个渐进的设计, 再一次, 对于不能完全预测将来可能访问您的应用程序的设备类型的进化系统来说,是理想的吗.. 许多应用程序都是基于单片架构启动的, 但随着一些意料之外的要求浮出水面, 可以通过api慢慢改进为微服务,使其在一个更老的单片架构上进行交互.

Microservices的例子

网飞公司拥有一个广泛的体系结构,从单一的体系结构发展到SOA. 它每天会接到超过10亿个电话, 来自超过800种不同类型的设备, 流媒体视频API. 然后,每个API调用都会提示大约5个对后端服务的额外调用.

亚马逊也转向了微服务. 他们从各种各样的应用程序(包括管理web服务API和网站本身的应用程序)中获得了无数的调用,这对他们的旧应用程序来说简直是不可能的, 要处理的两层架构.

拍卖网站易趣是另一个经历了同样转变的例子. 它们的核心应用程序包括几个自治应用程序, 每一个执行不同功能区域的业务逻辑.

微服务的利弊

微服务并不是灵丹妙药, 通过实现它们,您将公开通信, 团队合作, 还有其他一些问题,以前可能是隐性的,但现在被迫暴露出来. 但 微服务中的API网关 可以大大减少构建和QA的时间和精力吗.

一个常见的问题涉及到跨服务共享模式/验证逻辑. A认为某些数据有效的要求并不总是适用于B, 如果B有不同的需求. 最好的建议是在共享库中应用版本控制和分发模式. 然后,对库的更改成为团队之间的讨论. 此外,强版本控制带来了依赖性,这会导致更多的开销. 克服这一点的最佳实践是围绕向后兼容性进行规划,并接受 回归测试 从外部服务/团队. 这些会促使你进行对话 之前 你打断了别人的业务流程,而不是之后.

和其他事情一样, 微服务架构是否适合您取决于您的需求, 因为它们都有各自的优缺点. 以下是一些好的和坏的:

优点

  • 微服务体系结构使开发人员能够自由地独立开发和部署服务
  • 微服务可以由一个相当小的团队开发
  • 不同服务的代码可以用不同的语言编写(尽管许多从业者不鼓励这样做)
  • 易于集成和自动部署(使用开源的持续集成工具,如Jenkins), 哈德逊, 等.)
  • 易于理解和修改的开发人员, 这样可以帮助一个新的团队成员迅速变得富有成效
  • 开发人员可以利用最新的技术
  • 代码是围绕业务能力组织的
  • 启动web容器更快,因此部署也更快
  • 当应用程序的某个部分需要更改时, 只有相关的服务可以被修改和重新部署—不需要修改和重新部署整个应用程序
  • 更好的故障隔离:如果一个微服务出现故障, 另一个将继续工作(尽管单块集成应用程序的一个有问题的领域可能危及整个系统)
  • 易于扩展和与第三方服务集成
  • 没有对技术堆栈的长期承诺

缺点

  • 由于分布式部署,测试可能变得复杂而乏味
  • 越来越多的服务会导致信息障碍
  • 体系结构带来了额外的复杂性,因为开发人员必须降低容错能力, 网络延迟, 并处理各种消息格式以及负载平衡
  • 作为一个分布式系统,它可能会导致重复工作
  • 当服务数量增加时,集成和管理整个产品会变得复杂
  • 除了几个复杂的单片架构, 开发人员必须处理分布式系统的额外复杂性
  • 开发人员必须付出额外的努力来实现服务之间的通信机制
  • 在不使用分布式事务的情况下处理跨多个服务的用例不仅很困难,而且还需要不同团队之间的通信和合作

微服务体系结构是如何工作的

1)整块材料和 康威定律

首先,让贝博游戏APP下载来看看康威定律: “设计系统的组织……在设计时受到限制,必须复制这些组织的沟通结构。.”

假设X公司有两个团队: 支持和会计. 本能地, we separate out the high risk activities; it’s only difficult deciding responsibilities like customer refunds. 考虑贝博游戏APP下载如何回答这样的问题:“会计团队是否有足够的人员来处理客户退款和信用。?或者“如果贝博游戏APP下载的客服人员能够申请信用并处理沮丧的客户,不是更好吗??答案将由X公司的新政策来解决:支持可以应用于 信贷,但会计部必须这么做 处理退款 把钱还给客户. 在这个相互关联的系统中,角色和职责已经成功地进行了划分, 同时获得客户满意度和最小化风险.

同样地,在设计任何软件应用程序的开始,公司通常组装一个 团队 并创建一个 项目. 随着时间的推移,团队不断壮大,在同一代码库上的多个项目都完成了. 通常情况下, 这导致了相互竞争的项目:两个人会发现,如果不引入权衡,很难在同一代码区域从事交叉目的的工作. 增加更多的人只会让问题变得更糟. As 弗雷德布鲁克斯 就是说,九个女人一个月内都生不了孩子.

此外, 在X公司或任何开发团队工作, 经常重点转移, 导致管理和沟通问题. 上个月的最高优先级项目可能导致贝博游戏APP下载的团队努力交付代码, 但是现在一个用户报告了一个问题, 贝博游戏APP下载没有时间去解决这个问题,因为 月的优先级. 这是采用SOA(包括各种微服务)的最有力的理由. 面向服务的方法认识到变更管理之间的摩擦, 领域知识, 和业务优先级, 允许开发团队显式地分离和处理它们. 当然, 这本身就是一种权衡——它需要协调——但它允许您集中摩擦并引入效率, 而不是遭受大量低效率的小问题.

最重要的是,聪明地实现SOA或微服务体系结构将迫使您应用 接口分离原则. 由于成熟系统的连接特性, 当隔离关注的问题时, 典型的方法是找到一个接缝或通信点,然后在系统的两个部分之间画一条虚线. 没有仔细考虑, 然而, 这可能会导致意外地产生两个更小但越来越大的巨石, 现在连接着一座桥. 这样做的结果可能是将重要的代码放逐到障碍的错误一侧:团队a不会费心去处理它, 而B队需要它, 所以他们重新发明了它.
2)微服务:避开大公司

We’ve named some problems that commonly emerge; now let’s begin to look at some solutions.

如何部署相对独立但集成的服务,而不产生意外的独块? 好吧, 假设您有一个大型应用程序, 如下面X公司的样品所示, 并将代码库和团队分开进行扩展. 而不是找到应用程序的整个部分来拆分, 你可以在 边缘 在应用图中. 您可以分辨出这些是哪些部分,因为没有任何东西依赖于它们. 在贝博游戏APP下载的例子中, 指向打印机和存储的箭头表明,它们是两个可以很容易地从贝博游戏APP下载的主应用程序中删除和抽象出来的东西. Printing either a Job or Invoice is irrelevant; a Printer just wants printable data. 将这些打印机和存储服务转换为外部服务可以避免前面提到的单一服务问题. 这也是有道理的,因为它们被多次使用,而且几乎没有什么可以再发明的. 用例从过去的经验中是众所周知的, 所以你可以避免不小心删除关键功能.

3)服务对象和识别数据

那么,贝博游戏APP下载如何从单一企业转变为服务企业呢? 一种方法是通过 服务对象. 无需从应用程序中删除代码, 你有效地开始组织它,就好像它是完全外部的. 要做到这一点,首先需要求导 行动 这是可以做到的 data 以这些操作的输入和输出的形式呈现. 考虑下面的代码,其中包含 做一些有用的东西 和一个 该任务的状态.


#一个类来建模一个核心事务并执行它

      类的工作
        def初始化
          @status =“排队”
        结束
        
        def do_useful_work
          ....
          @status = '完成'
        结束
        
        def完成?
          return @status == 'Finished'
        结束
        
        def准备好了?
          return @status == ' queue '
        结束
      结束

为了让它看起来像一个微服务,下一步是什么?


#服务,做有用的工作和修改状态

    类JobService
      def do_useful_work (job_status)
        ....
        
        job_status.完成!
        
        返回job_status
      结束
    结束

    #贝博游戏APP下载工作状态的典范

    类工作
      def初始化
        @status =“排队”
      结束
      
      def完成?
        return @status == 'Finished'
      结束
      
      def准备好了?
        return @status == ' queue '
      结束
      
      def完成!
        @status = '完成'
      结束
    结束

现在贝博游戏APP下载已经区分了两个不同的类:一个是对数据进行建模的类, 一个是执行操作的. 重要的是, 贝博游戏APP下载的JobService类只有很少或没有状态——你可以反复调用相同的动作, 只更改数据, 期望得到一致的结果. 如果JobService以某种方式开始在网络上运行, 贝博游戏APP下载的单块应用程序不会关心这个问题. 将这些类型的类转移到库中, 并且用一个网络客户端代替以前的实现, 是否允许您将现有代码转换为可伸缩的外部服务.

这是 六角结构, 应用程序的核心和协调在哪里, 外部组件围绕它进行协调,以实现您的目标.

(您可以阅读更多关于服务对象和六边形架构的信息 在这里在这里.)

4)协调和哑管

现在,让贝博游戏APP下载仔细看看是什么使某些东西成为微服务,而不是传统的SOA.

也许最重要的区别是 副作用. Microservices避开他们. 为了了解原因,让贝博游戏APP下载看看一种更老的方法:Unix管道.

l | wc -l

以上, 两个程序链接在一起:第一个列出一个目录中的所有文件, 第二步读取输入流中的行数. 想象一下,写了一个类似的程序,然后必须把它修改成下面这样:

ls |少

组合小块的功能依赖于可重复的结果, 输入和输出的标准机制, 以及一个程序的退出代码,用来指示程序是否成功. 贝博游戏APP下载从观察证据中知道这是可行的, 贝博游戏APP下载也知道Unix管道是一个“哑巴”接口,因为它没有控制语句. 管道通过将数据从A推到B来应用SRP, 这取决于管道的成员来决定输入是否不可接受.

贝博游戏APP下载回到X公司的工作和发票系统. 每个控件控制一个交易,可以一起使用,也可以单独使用:可以为工作创建发票, 就业机会可以在没有发票的情况下创造出来, 而且发票可以在没有工作的情况下创造出来. 与Unix shell命令不同, 拥有工作和发票的系统有自己独立工作的用户. 但没有回到 政策在美国,要在全球范围内执行这两种系统的规则是不可能的.

假设贝博游戏APP下载想要提取可重复执行的关键操作—用于发送发票的服务, 更改作业状态和更改发票状态. 这些是完全独立的任务 坚持 data.

这允许贝博游戏APP下载将离散的组件连接到两个管道中:

用户创建手动发票
  • 将数据添加到发票,状态 创建

    -调用BillingPolicyService来确定一个给定客户的发票何时可以支付

  • 开具发票给客户
  • 坚持发票数据服务、状态 发送
用户完成作业,创建发票
  • 验证任务是否完成
  • 将数据添加到发票,状态 创建

    -调用BillingPolicyService来确定一个给定客户的发票何时可以支付

  • 开具发票给客户
  • 坚持发票数据服务、状态 发送

与发票计算相关的步骤是幂等的,因此编写a很简单 发票草案 或者通过利用贝博游戏APP下载新的专用微服务预览客户的应付金额.

与传统的SOA, 这里的不同之处在于,贝博游戏APP下载通过一个简单的接口公开了底层细节, 与可能执行整个业务操作的高级API调用相比. 使用高级API, 事实上, 将小部件重新连接在一起变得很困难, 因为服务设计器已经删除了许多接缝或选择,贝博游戏APP下载可以通过提供一个一次性界面来实现.

通过这一点, 业务逻辑的重复, 策略和规则通常会将这种复杂性推到服务总线或单个总线上, 集中式工作流编制工具. 然而,微服务架构的关键优势并不是贝博游戏APP下载 从来没有 分享业务规则/政策/流程, 但贝博游戏APP下载把它们分成不同的组, 与业务需求保持一致. 这不仅意味着政策得到了分配,而且还意味着 您可以在没有风险的情况下更改业务流程.

SOA和. Microservices

“等一下,你们中的一些人可能会在早上喝咖啡时嘀咕着, 这难道不是SOA的另一个名称吗?面向服务的体系结构(SOA)在本世纪头几年兴起, 微服务体系结构(有些人简称为MSA)有许多相似之处. 然而,传统的SOA是一个更广泛的框架,可以意味着 各种各样的东西. 一些微服务倡导者完全拒绝使用SOA标签, 而另一些人则认为微服务只是一种理想, SOA的精细化形式. 在任何情况下, 贝博游戏APP下载认为有足够明显的差异来证明一个独特的“微服务”概念(至少作为SOA的一种特殊形式)是合理的, 正如贝博游戏APP下载稍后将说明的那样).

典型的SOA模型, 例如, 通常有更多的依赖esb, 微服务使用更快的消息传递机制. SOA还关注命令式编程, 而微服务体系结构侧重于响应参与者编程风格. 此外, SOA模型往往具有超大规模的关系数据库, 而微服务通常使用NoSQL或micro-SQL数据库(可以连接到传统数据库). 但真正的区别首先与用于实现集成服务集的体系结构方法有关.

由于数字世界的一切都在改变, 敏捷开发技术 能够跟上软件发展的需求是无价的. 微服务体系结构中使用的大多数实践来自为大型企业组织创建软件应用程序的开发人员, 谁知道今天的终端用户希望在各种设备上获得动态而一致的体验. 可伸缩、可适应、模块化和快速访问的基于云的应用程序的需求很高. 这导致许多开发人员改变了他们的方法.

微服务架构的未来

微服务架构是否会成为未来开发者的首选风格, 这显然是一个强有力的想法,为设计和实现企业应用程序提供了重大的好处. 许多开发人员和组织, 而没有使用SOA的名称,甚至没有给他们的实践贴上SOA的标签, 是否一直在利用可以归类为微服务的api.

贝博游戏APP下载也看到了一些现有的技术试图解决部分细分和沟通问题,这些都是微服务旨在解决的问题. SOAP在描述给定端点上可用的操作以及通过wsdl在何处发现这些操作方面做得很好. 从理论上讲,UDDI是向宣传服务可以做什么以及在哪里可以找到服务迈出的很好的一步. 但是,相对复杂的实现损害了这些技术, 而且在新项目中不会被采用. 基于rest的服务面临同样的问题, 尽管您可以将wsdl与REST一起使用, 这种做法并不普遍.

假设发现是一个已经解决的问题,共享模式和 意义 对于微服务和其他SOA系统之外的任何东西来说,跨不相关的应用程序仍然是一个困难的命题. 技术,如 RDFS, 猫头鹰, RIF 存在并标准化,但不常用. JSON-LD模式.org贝博游戏APP下载一窥共享定义的整个开放网络是什么样子, 但这些措施还没有在大型私营企业中采用.

然而,共享、标准化定义的力量正在政府内部取得进展. 结果通过数据可见.政府和数据.政府.您可以探索大量的数据集,作为良好描述的链接数据 在这里. 如果大量的标准化定义能够达成一致, 接下来的步骤很可能是 代理人: 编排来自大量供应商的微服务以实现特定目标的小程序. 当SaaS应用程序的复杂性和通信需求不断增加时, 穿戴, 将物联网融入整体, 很明显,微服务体系结构可能有一个非常光明的未来.

进一步的资源

工具:
更多阅读:
友情链接: 1 2 3 4 5 6 7 8 9 10