0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

微服务五大关键好处揭秘

lhl545545 来源:电子发烧友网 2018-02-09 08:39 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

前言

在过去40 年里,软件开发的世界日新月异,微服务日趋流行。本文为我们揭示了微服务的五大关键好处,看它们是如何帮助我们提升软件质量并适应新的业务需求。

弹性

维基百科将弹性定义为系统处理变化的能力。我对弹性的理解是在问题被解决后系统从异常状态(短暂的硬件故障以及意料之外的高网络延迟等)或压力期中优雅恢复,同时又不会影响系统性能的能力。

这虽然听上去很简单,但是在构建面向微服务软件的时候,问题源会由于系统的分布式特性而被放大,有时很难(甚至不可能)防止所有的异常情况。

弹性是从错误中优雅恢复的能力。但它同样也为系统带来了新的复杂度:如果一个微服务出现了问题,我们能否防止系统的常规故障?理想情况下,我们应该以这样一种方式来构建服务:仅对服务响应进行降级而非让系统出现常规故障,即使这样做也并不容易。

可伸缩性

如今,各大公司的一个通病是系统存在可伸缩性问题。如果你之前曾与某个单块软件打过交道,我确信你在伴随公司的成长过程中,必定会在某些时刻遭遇到容量问题。

通常,这些问题并不涉及应用的每一层次或所有子系统。往往只有个别子系统或服务会明显慢于其余部分,一旦没有处理好容量问题就会导致整个应用发生故障。下图描述了我们是如何对微服务进行扩展(扩展成两个邮件服务)的,同时又不牵扯系统的其余部分:

微服务五大关键好处揭秘

让我们来看一个关于车险的场景,用于计算指定风险因素列表报价的服务便是该类问题的一个例子。通过扩展整个应用来满足对某个特定部分的需求是否有意义?如果你脑海中的答案是“否”,那么你离拥抱微服务更近了一步。微服务可以让你仅仅按需扩展系统的一部分,从而只加大系统特定部分的处理能力。让我们来看一个关于车险的场景,用于计算指定风险因素列表报价的服务便是该类问题的一个例子。通过扩展整个应用来满足对某个特定部分的需求是否有意义?如果你脑海中的答案是“否”,那么你离拥抱微服务更近了一步。微服务可以让你仅仅按需扩展系统的一部分,从而只加大系统特定部分的处理能力。

如果该保险系统是一个面向微服务的系统,那么我们只需要创建更多的微服务实例来负责计算就能解决报价计算需求过旺的问题。请记住,扩展服务会给运维团队增加开销。

技术多样性

软件的世界每几个月就会更新换代。新语言进入业界成为某类系统事实标准的节奏片刻未停。几年前, Ruby onRails面世并在 2013年成为在各种新项目中使用昀多的 Web框架。Golang(由 Google创建的一门语言)因其结合了强大的性能与优雅简洁的语法而成为当前的一种趋势,任何只要拥有一门编程语言经验的人都可以在几天内学会它。

在过去,我也曾使用 PythonJava成功编写过微服务。

尤其是 Java,自从 Spring Boot发布之后,它成为在编写敏捷微服务方面相当有吸引力的技术栈。

Django是一款强大且可用于编写微服务的 Python框架,与 Ruby on Rails非常相似。通过它我们可以自动化地进行数据库迁移,并可以非常轻松地完成创建 CRUD(创建、读取、更新及删除)服务的工作。

Node.js利用了著名语言 JavaScript的优势,创建了一个新的服务端技术栈,从而改变了工程师们编写新软件的方式。

那么,将这些技术都结合起来会有什么问题吗?平心而论,这是一个优势:我们可以选择合适的工具来做相对应的工作。

只要待集成的技术是标准化的,面向微服务的架构便可以帮你实现这一点。正如我们在上文中已经了解到的,一个微服务是非常小的,并且是一个自主运维的软件中的独立部分。

下图展示了微服务是如何隐藏数据的存取逻辑的,两个服务在存取数据方面共用同一个通信点,从而能很好地互相解耦(一个服务实现发生变化时并不涉及任何其他服务):

微服务五大关键好处揭秘

此前我们曾讨论到性能的问题。通常,系统的某些部分会比其他部分承受更多的压力。通过利用当代的多核 CPU进行并行(并发)编程可以解决其中的一些性能问题。然而, Node.js并不是一门适合执行并行任务的语言。针对那些处于压力之下的微服务来说,我们可以选择一门更加适合的语言来进行开发,比如 Erlang,从而可以以一种更加优雅的方式来管理并发。这样做,花不了你两周的时间。

在同一系统中使用多种技术存在着一个问题:开发人员和系统管理员需要知道所有的(或一部分)相关技能。拥抱微服务的公司通常可以秉持一门核心技术(在本书中,我们将会使用 Node.js),并辅以一些其他技术(我们除了使用 Docker来管理部署之外,还可以采用 Capistrano或 Fabricator来管理发布)。

可替换性

可替换性是指替换系统中某个组件而不影响系统行为的一种能力。当我们在讨论软件的时候,可替换性往往是与低耦合密不可分的。在编写微服务的时候不能将内部逻辑暴露给调用服务,服务实现对客户端来说是透明的,客户端了解的只有接口。让我们来看看下面的例子,该接口是用 Java编写的,仅需通过观察接口就能识别出它存在着什么问题。

public interface GeoIpService {

/**

*检查IP是否属于指定ISO代码所对应的国家

**/

boolean isIn(String ip, String isoCode) throws

SOAPFaultException;

}

初看该接口可以发现它是自描述的。它将检查特定 IP是否属于特定的国家,一旦服务出现重大问题会抛出 SOAPFaultException。

如果我们构建客户端来消费该接口,需要考虑到服务的上述逻辑,捕获并处理 SoapFaultException。这等同于将服务内部实现的细节暴露给了外部世界,从而很难再替换掉 GeoIpService接口。同样的,事实上我们创建的某个服务如果关联了应用逻辑的某个部分则表明创建了一个限界上下文:即一个高内聚的服务或服务集(通过集合所辖服务的协同工作可以达成一个目标)。

独立性

不管我们怎么努力,人类的大脑都不擅长解决复杂问题。人类大脑昀有效的运作模式是同一时间只做一件事情,所以我们可以将复杂问题拆解成更小的问题。面向微服务的架构应该也遵从这一方式:所有服务应该都是独立的,它们通过接口进行交互。除了协定确认接口这一环节之外,不同的工程师团队可以在无须交流的情况下完成对服务的开发。一家采用了微服务的公司可以根据业务的需求来调整工程师团队的规模,从而能敏捷地响应业务的高峰期或静默期。

为什么可替换性如此重要

在前面的一个小节中,我们讨论了该如何确定微服务的合理规模。按照普遍的经验而言,一个团队应该能在一个 sprint内完成一个微服务的重写和部署。这样做的背后的根本原因就是技术债务。

我会将技术债务定义为在一个既定计划的周期内,初始技术设计与预期交付功能之间的偏差。某些方面的牺牲或错误假设会导致编写的软件非常糟糕,这样的软件需要全盘重构或重写。在前面的例子中,接口在暴露给外部世界时明确表明必须使用 SOAP来调用 Web服务。一旦需要将客户端代码改造成 REST客户端,REST客户端根本无法处理 SOAP异常。

易于部署

微服务应当易于部署。作为软件开发者,我们知道在软件的部署过程中很多事情都可能会出现问题。正如前面所提到的,微服务是非常易于部署的,原因如下:

•少量的业务逻辑(从经验上来说是只需两周即可完成从无到有的编写)导致更易于部署。

•微服务是自治的工作单元,所以升级一个服务对于复杂系统来说是一个局部可控的问题。无须重新部署整个系统。

•微服务架构中的基础设施和配置应该尽可能自动化。在本书的后续部分中,我们将学习如何使用 Docker来部署微服务,以及这样做相比于传统部署技术会有怎样的优势。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 微服务
    +关注

    关注

    0

    文章

    152

    浏览量

    8155
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    新一代微服务全家桶AlibabaCloud+SpringCloud实战

    \"多云架构\"\"双云部署\"关键词的岗位同比增长420%,平均月薪35-60K。P8级别的架构师JD里,\"精通双云微服务架构\"已经从加分项变成
    发表于 05-18 17:04

    Springboot+SpringData+SpringCloud微服务架构课程

      后端进阶必学:SpringCloud 微服务高可用落地实战 在互联网技术飞速迭代的今天,单体应用架构已逐渐难以承载亿级流量的重担。对于渴望突破瓶颈、迈向架构师行列的后端开发者而言,掌握微服务架构
    的头像 发表于 03-19 16:08 582次阅读

    机器视觉缺陷检测中传感器集成的五大关键

    工智能技术一样,机器视觉虽然令人印象深刻,但它仅仅是一个工具。其效果取决于最终用户的应用方式。因此,以下是将机器视觉系统集成到缺陷检测中的关键步骤。一、明确缺陷定
    的头像 发表于 11-03 11:40 1004次阅读
    机器视觉缺陷检测中传感器集成的<b class='flag-5'>五大关键</b>

    “点沙成金”的科技奇迹:深入解读芯片制造三大阶段与五大步骤

    芯片是如何“点沙成金”的?本文深度解析芯片制造的三大阶段与五大步骤,从逻辑设计、晶圆拉制,到上百次的光刻-刻蚀循环,揭秘驱动数字世界的微观奇迹。
    的头像 发表于 10-31 10:34 1852次阅读
    “点沙成金”的科技奇迹:深入解读芯片制造三大阶段与<b class='flag-5'>五大</b>步骤

    五大电磁频谱管理系统:原理、架构与应用全景解析

    五大电磁频谱管理系统:原理、架构与应用全景解析
    的头像 发表于 09-26 10:21 733次阅读
    <b class='flag-5'>五大</b>电磁频谱管理系统:原理、架构与应用全景解析

    选择专业X-ray探伤设备厂家的五大关键标准与实用指南

    需要确保采购的设备具备稳定性能与可靠性。那么,选择专业X-ray探伤设备厂家的关键标准是什么呢?本文将为您提供五大标准与实用指南,助您在采购过程中做出明智的选择。 1. 厂家的资质与行业信誉 选择一个具有良好行业声誉和相应资质的厂家至关
    的头像 发表于 09-19 14:03 767次阅读

    能源数字化转型核心!一张图揭秘绿电直连“流合一”超级架构

    本文将化繁为简,通过“源、网、荷、储、碳”五大核心要素,为您全景解析其系统架构,揭秘如何实现“流合一”的智慧协同。
    的头像 发表于 09-17 17:07 1369次阅读
    能源数字化转型核心!一张图<b class='flag-5'>揭秘</b>绿电直连“<b class='flag-5'>五</b>流合一”超级架构

    晶体晶振在机器人五大核心模块的关键作用

    你以为机器人那些流畅的动作和适宜的反应,只靠一颗强大的CPU就够了吗?NO,NO,NO! 再聪明的大脑也需要晶体晶振来统筹全局!晶体晶振就像机器人的「心跳」和「指挥棒」,决定了它每一个动作、每一条指令的精准触达。今天,我们就来解析这颗「芯」在机器人五大核心模块的关键作用!
    的头像 发表于 09-03 09:36 1121次阅读
    晶体晶振在机器人<b class='flag-5'>五大</b>核心模块的<b class='flag-5'>关键</b>作用

    如何基于Nginx构建微服务网关

    今天,我将分享我们团队如何基于Nginx构建了一个日均处理10亿+请求的微服务网关,以及踩过的那些坑。这套方案已经稳定运行2年+,经历过多次大促考验。
    的头像 发表于 09-02 16:29 1056次阅读

    A级标准如何达成?太阳光模拟器性能评估的五大关键指标

    推动技术革新的关键工具。本文以国际标准体系为框架,结合紫创测控Luminbox在精密光学测试领域的工程实践,系统解析太阳光模拟器性能评估的五大核心维度,揭示高精度
    的头像 发表于 08-18 18:08 900次阅读
    A级标准如何达成?太阳光模拟器性能评估的<b class='flag-5'>五大关键</b>指标

    深度揭秘:PCB 抄板打样的五大核心科技

    一站式PCBA加工厂家今天为大家讲讲PCB抄板打样技术有哪些?PCB抄板打样5大核心技术揭秘。在电子产品逆向开发领域,80%的PCB抄板项目失败源于隐秘技术风险。下面小编为大家揭示行业五大核心痛点
    的头像 发表于 08-01 09:20 1049次阅读

    判定太阳光模拟器性能的五大关键指标及其评估

    推动技术革新的关键工具。本文以国际标准体系为框架,结合Luminbox在精密光学测试领域的工程实践,系统解析太阳光模拟器性能评估的五大核心维度,揭示高精度光照环境
    的头像 发表于 07-24 11:29 815次阅读
    判定太阳光模拟器性能的<b class='flag-5'>五大关键</b>指标及其评估

    电商API的微服务架构优化策略

    ​ 随着电子商务的快速发展,API(应用程序编程接口)已成为电商平台的核心组件,负责连接用户、商家和后台系统。微服务架构通过将应用拆分为独立、可扩展的服务单元,显著提升了系统的灵活性和可维护性。然而
    的头像 发表于 07-23 14:30 781次阅读
    电商API的<b class='flag-5'>微服务</b>架构优化策略

    华为汪涛提出解锁5G-A潜能的五大关键方向

    在2025 MWC上海期间举办的全球移动宽带菁英论坛上,华为常务董事汪涛发表了“共赢移动AI时代:解锁5G-A潜能,释放商业价值”主题演讲。他表示,移动AI时代发展速度超乎想象,为移动产业带来三大变化,倡议产业界共迎变化,加速激活5G-A五大潜能,携手共赢移动AI时代。
    的头像 发表于 06-23 11:23 1137次阅读

    工业化超声波清洗设备的五大关键特性

    工业化超声波清洗设备的五大关键特性工业化超声波清洗设备在现代制造业中扮演着至关重要的角色,它们能够以高效、精确的方式清洗各种零件和产品。本文将介绍工业化超声波清洗设备的五大关键特性,帮助您更深
    的头像 发表于 06-13 17:29 952次阅读
    工业化超声波清洗设备的<b class='flag-5'>五大关键</b>特性