微服务的部署规模在不断扩大。容器架构的采用和随后的微服务部署并不是按下一个简单的按钮就能完成的,这是一个持续演变的过程。这个演变过程发生在应用程序开发、架构、打包和基础设施的各个方面。软件的创建和交付方式在过去几年中发生了重大转变。

随着团队在这个持续演化的软件生命周期环境中不断地探索,他们所在组织的一些独特方面——他们个人的集体体验和特定的项目需求——正塑造着这个演化旅程,也就是说,并非每一条通向云原生的道路都是相同的。应用程序和团队将利用其中一种或一些甚至是全部方法开启走向云原生的道路。

在这里,我们将专注于微服务。并非所有尝试创建微服务的应用程序或团队(从头开始或拆解单体)都能够真正意识到微服务架构的好处。通常,由于应用程序设计要求具备前所未有的监控和管理水平,团队一般都未能取得显著成功。从建立能够支持分布式系统问题的环境和基础设施,到组织和培训团队、培养文化和制定运营实践,再到应用可观察性和基础设施即代码,以及融入现代DevOps监控工具,团队的第一次微服务体验可能是非常混乱的。然而,一旦形成了持续交付的稳定节奏,它们的好处(例如交付速度)却是其他企业架构应用程序所无法比拟的。

微服务可以帮助团队实现更快的交付和迭代。微服务为独立的服务开发团队带来语言和技术选择的民主化——团队一边迭代和持续交付软件(通常作为服务),一边快速地创建新功能。作为一种设计可扩展、可独立交付的服务的云原生方法,微服务让团队可以以最佳的方式确定服务需求的优先级。这种提供松散耦合功能的做法推动了敏捷性和迭代交付,并强制实现它们所暴露的API的“契约义务”。

来自各个方面的挑战

由于每个微服务都需要对外暴露API,微服务行为的一致性和版本控制方案的一致性就成了部署微服务时需要面临的两大挑战。大量的微服务不仅加剧了在一致的环境中创建功能、注入DevOps文化和实践的挑战,还加剧了确保多个新服务具备互操作性的挑战。部署的微服务越多,这些挑战就越严峻。

在部署微服务时,更多的移动部件和额外的服务增加了监控的难度。想象一下:你有一个由五个服务组成的应用程序,每个服务又由大约10个容器组成。你对应用程序的物理拓扑及其服务间的逻辑交互的了解很快就会过时,因为它的组件会移动。与传统监控工具支持的静态虚拟机不同,微服务的监控工具需要支持临时构造和原生服务发现。如果你正在使用过时的监控工具,无异于在蒙着眼睛走钢丝。

微服务部署还可能带来额外的组织开销和复杂性。专注于一个服务而不是多个服务可以实现持续交付和敏捷,同时也允许开发人员和运营团队彼此独立工作。因此,团队之间必须保持持续的沟通和协作,才能确保快速迭代服务,而不是去否定DevOps文化。

考虑到所有这些因素,服务团队应该如何避免责任和工作的扩散,以确保跨微服务的成功交付和运营?

缓解挑战以获得收益

虽然服务网格不是什么银弹,但它却试图解决一个众所周知的分布式系统的核心挑战(即没有同质、可靠、不变的网络)。为了直接解决这些挑战,服务网格提供了一层新的云原生可见性、安全性和控制。

服务网格是一个新兴的领域,虽然它没有被纳入云原生应用程序,但为非容器化、非微服务工作负载提供了很多价值。这个额外的工具层为微服务提供了基于策略的网络,描述了网络在面对不断变化的条件和网络拓扑时的行为。

最后,服务网格提供了一种服务优先的网络,将应用程序开发人员从基础设施问题中解放出来,如果你愿意,还可以通过为服务管理提供可独立寻址的工具层(Layer 5)来扩展服务管理职责。服务网格创建了一个网络,让运营人员能够定义细粒度的流量控制,在不需要与开发人员交互的情况下影响应用程序的行为。通过声明性策略,运营人员可以重新控制流经其基础设施的服务请求。

服务网格提供分布式应用程序服务的可见性、弹性、流量和安全控制,并提供对请求数量、分布式跟踪和延迟的可观测性。通过在服务网格上部署微服务,DevOps团队可以立即获得指标、日志和跟踪信息,而无需更改应用程序代码。服务网格有助于了解应用程序运行缓慢的原因,这个问题是服务所有者面临的最麻烦的问题之一,因为他们不知道是什么导致应用程序执行缓慢。

DevOps团队可以从大多数服务网格提供的增强安全性中受益。服务网格可以帮助DevOps团队识别出不良参与者、标记并阻止用户发送大量的非法请求、控制经过身份验证但没有调用服务权限的人。

在实践时,你需要知道些什么

有很多服务网格部署模型可用在你的微服务架构中。你可以尝试遵循一些最佳实践:

衡量必要性:当服务网格变成一种必需品时,这是一种进步。环境越动态,服务越复杂,服务网格的价值就越大。团队通常先从单个节点的几个容器开始,当需要扩展到几个节点来获得弹性时,需要进行容器编排,然后进入服务网格部署阶段,因为随着部署的增长,他们最终将面临更加严峻的挑战。
了解你的应用场景:了解对服务网格的依赖程度,以及需要让服务网格做些什么,这是使用服务网格的第一步。先从小规模开始,并在进一步深入之前确保它能为你提供你想要的价值。你的基础设施类型和服务类型将有助于确定要使用哪种服务网格。

例如,某些网格更多地关注容器化环境,而其他网格则更适用于直接在虚拟机或裸机操作系统上运行的服务。你需要知道你的环境中适合部署哪种服务网格(有些服务网格比较简单,有些服务网格更容易部署),以及服务网格需要具备哪些功能。Layer5.io为此提供了一些有用的见解。

搞清楚你对网络和应用程序的期望是什么:你希望从连接微服务的网络中得到什么好处?你可能希望你的网络尽可能智能和弹性,让流量远离故障以提高集群的总体可靠性,避免不必要的开销,如高延迟路由或具有冷缓存的服务器。你可能希望你的网络能够确保服务之间的流量可以抵御来自外界的攻击。你可能希望你的网络能够通过突显意外的依赖关系和服务通信故障为你提供见解。你可能希望你的网络能够自行收集有关请求的服务级度量指标。

结论

成功部署微服务或采用容器架构并非一蹴而就的事情,大多数团队肩负维护现有基础设施和服务的重担。因此,你可能是循序渐进地转向云原生。微服务具有显著的优势,并且服务网格可能是解决问题的最佳工具。在实现或考虑使用服务网格时,首先要衡量必要性。在确定有必要使用服务网格之后,请在选择部署模型之前考虑你的应用场景。如果控制和管理得当,微服务架构会让你变得更加愉快。

英文原文:https://containerjournal.com/2018/12/05/microservices-the-more-the-merrier-or-meshy-er/

微服务:更愉快还是更嘈杂?相关推荐

  1. 微服务平台(Micro Service Platform : MSP)旨在提供一个集开发、测试、运维于一体的开发者专属平台,让开发者能快速构建或使用微服务,让开发更简单,让运维更高效。...

    微服务平台(Micro Service Platform : MSP)旨在提供一个集开发.测试.运维于一体的开发者专属平台,让开发者能快速构建或使用微服务,让开发更简单,让运维更高效. MSP采用业界 ...

  2. Java微服务 vs Go微服务,究竟谁更强!?

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 前言 Java微服务能像Go微服务一样快吗?这是我最近一直 ...

  3. 基于docker微服务架构_使用基于微服务的流架构更好地进行大规模的复杂事件处理(第1部分)...

    基于docker微服务架构 基于微服务的流架构与开源规则引擎相结合,使实时业务规则变得容易 这篇文章旨在详细介绍我将OSS业务规则引擎与Kafka风格的现代流消息传递系统集成在一起的项目. 该项目的目 ...

  4. 使用基于微服务的流架构更好地进行大规模的复杂事件处理(第1部分)

    基于微服务的流架构与开源规则引擎相结合,使实时业务规则变得容易 这篇文章旨在详细说明我将OSS业务规则引擎与Kafka风格的现代流消息传递系统集成在一起的项目. 该项目的目标(即众所周知的复杂事件处理 ...

  5. 微服务go还是java,Java微服务 vs Go微服务,究竟谁更强!?

    前言 Java微服务能像Go微服务一样快吗? 这是我最近一直在思索地一个问题. 去年8月份的the Oracle Groundbreakers Tour 2020 LATAM大会上,Mark Nels ...

  6. 浅析微服务架构应该在什么时候采用

    前言 微服务不能"包治百病". 时下微服务是一个不错的架构,它具备模块化.可伸缩和高容错这些优点.许多公司都采用微服务架构并取得了巨大的成功,自然而然地,如果你正开始一个新项目,微 ...

  7. 什么时候不要采用微服务架构

    微服务不能"包治百病". 时下微服务是一个不错的架构,它具备模块化.可伸缩和高容错这些优点.许多公司都采用微服务架构并取得了巨大的成功,自然而然地,如果你正开始一个新项目,微服务似 ...

  8. Martin Fowler关于微服务的原文翻译

    原文如下:http://martinfowler.com/articles/microservices.html 微服务 有关这个新的技术架构术语的定义 "微服务架构"这个术语最近 ...

  9. 微服务概念 概念提出者Martin Fowler的译文

    微服务 有关这个新的技术架构术语的定义 "微服务架构"这个术语最近几年横空出世,来描述这样一种特定的软件设计方法,即以若干组可独立部署的服务的方式进行软件应用系统的设计.尽管这种架 ...

最新文章

  1. 在CentOS 6.9上从源码安装Go 1.10
  2. 读取Cert格式证书的密钥
  3. 数据挖掘领域十大经典算法初探
  4. 去重数组里面重复数据
  5. byteofpython中文gitbook_Gitbook快速简明教程
  6. rs232 距离_串行通信接口之一RS232接口
  7. 企业如何选择数据分析架构?——谈谈3种架构的利弊
  8. 牛逼!java反射创建类实例的三种方式
  9. mess组网 中继_Mesh路由和无线中继的差距在哪里?谁才是更好的选择?
  10. 手机浏览器怎么查看html,手机浏览器网页收藏在哪里查看
  11. MYSQL 视图 触发器 存储过程 事务 索引
  12. PTA—C语言练习题
  13. java实验:正n多边形类的定义与使用
  14. Google搜索API?
  15. c3600路由器查看和修改ip地址
  16. 看完电影 Sicko和 Fahrenheit 9-11 多遍的感想
  17. 图像处理--角点检测
  18. xctf攻防世界 CRYPTO高手进阶区 告诉你个秘密
  19. Cast-Designer 助力蔚来汽车,共同打造更美好未来
  20. PostgreSQL数据库psql连接报错connections on Unix domain socket “/pgsql/data/.s.PGSQL.5432“?

热门文章

  1. NYOJ 105 其余9个
  2. StyleCop学习笔记——默认的规则
  3. 无线网卡802.11n、 Intel 5100 AGN
  4. 互联网寒冬,程序员该怎样突破重围?
  5. 【译】用JavaScript写一个区块链
  6. 有意思的clip-path
  7. [20170828]grep过滤技巧.txt
  8. 黄聪:WordPress图片插件:Auto Highslide修改版(转)
  9. $.ajax提交,后台接受到的值总是乱码?明天再总结
  10. component、constituent、element、ingredient的区别