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

    文章

    138

    浏览量

    7367
收藏 人收藏

    评论

    相关推荐

    德州仪器分析服务器电源设计中的五大趋势

    服务器电源设计中的五大趋势: 功率预算、冗余、效率、工作温度 以及通信和控制 并分析预测 服务器 PSU 的未来发展趋势
    的头像 发表于 01-11 10:15 144次阅读
    德州仪器分析<b class='flag-5'>服务</b>器电源设计中的<b class='flag-5'>五大</b>趋势

    解析爱普生RTC芯片选型的五大关键

    关键部分。RTC选型的关键部分:1、首先,我们将探索周期性MCU唤醒功能,让你的设备在特定时间或事件发生时自动唤醒,如醒来时钟的独角兽!2、其次,我们将深
    的头像 发表于 01-06 15:42 73次阅读
    解析爱普生RTC芯片选型的<b class='flag-5'>五大关键</b>

    工业网络管理新纪元:揭秘五大“利器”,化繁为简的智慧转型

    亟需解决的难题。本文将揭秘五大“秘密武器”, 助力工业网络管理化繁为简,迈向智能化、高效化 的新纪元。 秘密武器一 统一平台,集成管理(一站式解决方案,打破信息孤岛) 在复杂的工业环境中,不同品牌、不同类型的设备
    的头像 发表于 12-21 17:51 144次阅读
    工业网络管理新纪元:<b class='flag-5'>揭秘</b><b class='flag-5'>五大</b>“利器”,化繁为简的智慧转型

    宝藏级微服务架构工具合集

    宝藏级热门微服务架构工具包含Spring Boot、Eclipse Vert.X、Kubernetes、Tyk、RabbitMQ、Apache Kafka等。其中,Spring Boot简化了微服务
    的头像 发表于 12-21 16:33 190次阅读

    SSR与微服务架构的结合应用

    随着互联网技术的快速发展,前端技术栈不断更新迭代,后端架构也经历了从单体应用到微服务的变革。在这个过程中,服务端渲染(SSR)作为一种提升页面加载速度和SEO性能的技术,与微服务架构的结合应用,为
    的头像 发表于 11-18 11:34 356次阅读

    Skydel 24.9版本震撼发布,升级五大关键功能

    在信号传播与仿真领域,Skydel软件一直是行业内的佼佼者。我们与您分享升级快讯,Skydel软件24.9.0版本已正式发布,此次更新不仅带来了五大全新功能,还在性能优化、用户体验以及远程API方面
    的头像 发表于 10-23 10:09 237次阅读
    Skydel 24.9版本震撼发布,升级<b class='flag-5'>五大关键</b>功能

    微服务架构与容器云的关系与区别

    微服务架构与容器云密切相关又有所区别。微服务将大型应用拆分为小型、独立的服务,而容器云基于容器技术,为微服务提供构建、发布和运行的平台。区别在于,
    的头像 发表于 10-21 17:28 253次阅读

    入门级攻略:如何容器化部署微服务

    第一步理解容器化基础,第二步创建Dockerfile,第三步构建推送镜像,第四步部署微服务,第步管理微服务、第六步优化更新。容器化部署微服务是现代软件开发中的一种高效方法,可提供良好
    的头像 发表于 10-09 10:08 169次阅读

    揭秘高质量点焊机的五大标准:打造焊接性能的基石

    ,究竟什么样的点焊机才能称之为高质量呢?现在,就让我们一同揭秘高质量点焊机的五大标准,带您领略其背后的技术魅力与工艺精髓。
    的头像 发表于 09-12 15:26 522次阅读
    <b class='flag-5'>揭秘</b>高质量点焊机的<b class='flag-5'>五大</b>标准:打造焊接性能的基石

    NVIDIA NIM微服务带来巨大优势

    服务通过热门 AI 模型为数百万开发者带来高达 5 倍的 token 效率提升,使他们能够立即访问在 NVIDIA DGX Cloud 上运行的 NIM 微服务
    的头像 发表于 08-23 15:20 514次阅读

    采用OpenUSD和NVIDIA NIM微服务创建精准品牌视觉

    全球领先的创意和制作服务机构率先采用 OpenUSD 和 NVIDIA NIM 微服务来创建精准的品牌视觉。
    的头像 发表于 08-01 14:33 445次阅读

    工业PLC控制柜保养的五大关键步骤

    工业PLC控制柜保养的五大关键步骤  控制柜厂家找上海尤劲恩 随着工业自动化技术的不断发展,PLC控制柜在生产线上的地位日益重要。尤劲恩(上海)信息科技有限公司作为专业的自动化控制设备供应商,其
    的头像 发表于 04-22 15:00 441次阅读

    MOS管发热的五大关键技术

    MOS管作为一种常见的功率器件,在电子设备中起着重要作用。其中,MOS管发热问题是设计过程中需要重点考虑的技术难题之一。下面将从以下关键技术方面对MOS管发热问题进行浅析: 1. 导热
    的头像 发表于 03-19 13:28 817次阅读

    【算能RADXA微服务器试用体验】Radxa Fogwise 1684X Mini 规格

    通过网络可以了解到,算能RADXA微服务器的具体规格: 处理器:BM1684X 算力:高达32Tops INT8峰值算力 内存:16GB LPDDR4X 内存 存储:64GB eMMC 编程框架
    发表于 02-28 11:21

    Java微服务随机掉线排查过程简析

    我们的业务共使用 11 台(阿里云)服务器,使用 SpringcloudAlibaba 构建微服务集群, 共计 60 个微服务, 全部注册在同一个 Nacos 集群。
    的头像 发表于 01-13 17:41 956次阅读
    Java<b class='flag-5'>微服务</b>随机掉线排查过程简析