写点什么

微服务部署面临的挑战

  • 2016-04-20
  • 本文字数:2005 字

    阅读完需:约 7 分钟

以前,我们邀请几位嘉宾讨论了他们在开发微服务时遇到的挑战,比如 Fred George Dustin Huptas 和 Andreas Schmidt 。近日,Usman Ismail 参加了一场小组会议,讨论了微服务持续交付面临的挑战,并决定随后详述其中的部分重点内容。他首先讨论了微服务其中一个基本原则的缺点,那允许大型团队通过快速原型和迭代以一种更加敏捷的方式推进(软件)开发:

不过,微服务显著增加了开发团队的运维和工具负担。每个服务都需要一个部署管道、一个监控系统、自动报警、轮流电话值班,等等。对于大型团队,所有这些负担都可以视为提升特性开发效率的合理代价,是创建这些系统值得付出的努力。不过,在小型团队中,如果同一批人负责所有的服务,那么无论如何,为多个项目复制管道都是开销上的浪费。

接下来考虑的是运维负担。在 Usman 看来,使用微服务或单体架构,如果推出了一个服务或组件的不良版本,就需要回滚系统,而且如果遇到资源限制,则(常常)可以横向扩展。不过,使用微服务,你需要更多的监控和自动化才能检测出哪些服务需要回滚,并确定回滚一个服务对其他依赖它的服务产生什么影响,等等。

如果你有自动报警系统(你真应该有一个),那么你需要把报警信息发给服务所有者,并为多个服务维护一个电话值班时间表。在小型组织中,负责不同服务的人群之间会有很大的重叠。这就是说,我们必须针对这些服务协调时间表,以确保同一个人不会被许多服务钩住,让人们在轮流电话值班之外得到一些喘息。由于这些以及上一节中提到的原因,最好是开始引入多个微服务的开销之前有一个单体架构,并把所有的运维工作安排妥当。

然后当然是微服务一个基本特点——一个在传统单体应用中可能不会提到或者很少提到的特点:分布式。这引发了一个古老的问题,就是在分布式环境中调试,我们过去已经提到过许多次,在微服务这个术语被创造出来以前。原先,Joyent 首席技术官 Bryan Cantrill 探讨过在生产环境中调试微服务。Usman 认为,没有一个集中式的微服务日志是一种致命的缺陷:

而且,在规模比较大的情况下,有一个单独的监控系统(比如 datadog、grahite)和一个单独的日志聚合系统(比如 ELK、loggly 或 Splunk)是不可行的。在这种规模下,可视化指标和日志数据是一个大数据问题,最好在一个地方解决。

对于小组会议的最后一个重点,Usman 提到了部署协调和版本管理。文章认为,微服务和单体应用的其中一个重大差别是前者是一棵服务依赖树,而后者是一个图:

例如,在单体模型中,一个典型的服务栈可能包含一个“Web 组件组合(web array)”,它调用一个缓存层、数据库层,可能还有一些独立服务,比如身份验证,等等。在微服务模型中,你会有一个连通图或者服务网络,每个服务都依赖于几个其他的服务。有一点很重要,就是要确保这个图是一个有向无环图(DAG),否则你会陷入依赖地狱,可能还会遇到分布式堆栈溢出错误。

有趣的是,Usman 的文章接下来总结了嘉宾们提出的一些指导原则:

参加小组会议的嘉宾,没有哪个人对他们的微服务系统十分满意,也就无法为如何构建这样一个系统提出任何类似指南的东西,不过,我们确实提出了一些经验法则或者一般的指导原则,包括下列这些。

这些原则可以总结为:

  • 微服务需要大量的基础设施用于开发和部署,因此要使用一个平台。“ Kubernetes Swarm Mesos 以及其他类似产品可以提供很大的帮助,但你仍然需要使监控、调试、“连续管道(continuous pipeline)”和服务发现机制一体化。”
  • 为了实现可再现、可靠的自动化,不要通过人工过程定义系统的任何东西。“任何东西都必须通过代码定义,可测试,可再现。例如,服务器 / 虚拟机的配置应该使用 docker-machine、puppet、ansible 等进行编排。
  • 开发或使用集中式监控、日志和报警。“单体服务就像一个深受喜爱的宠物,你知道它所有的怪癖和习惯,而微服务就像牲畜;你要它们全部都差不多一样,并作为一个普通的畜群进行管理,而不是一个个体。”
  • 务必确保向后向前兼容。
  • 将大型微服务部署可视化为一个网络。“监控和管理一个大型微服务部署同管理一个网络系统十分类似。”

所有的建议都是基于来自各类公司的嘉宾们的集体经验。那些建议一直随着时间演变,将来可能会随着经验的日益丰富而继续演变。在某种程度上,Usman 最后的评论附和了 Vijay Alagarasan 去年在演讲“7 种微服务反模式”中所讲的内容:

[微服务] 并不是解决构建和运行大规模分布式软件基本问题的魔弹。微服务架构迫使你更谨慎地遵循最佳实践和自动化工作流。本次讨论的一个重要结论是,除非你愿意将大量的时间和资源从特性开发工作转到构建和维护一个服务框架上,否则最好避免进入微服务的世界。不过,如果你能够投入时间构建一个很棒的服务框架和工作流,那么你将完成重大转变,成为一个更敏捷、更有生产力的组织。

我们总是在寻求更深入的微服务经验,有好的经验,也有不好的经验,因此,或许你想自己对 Usman 的工作或讨论作出评判。

查看英文原文: Challenges of Microservices Deployments

2016-04-20 19:003543
用户头像

发布了 1008 篇内容, 共 401.7 次阅读, 收获喜欢 345 次。

关注

评论

发布
暂无评论
发现更多内容

一文看懂SBD(一种基于存储的扩展防护服务)

统信软件

储存

无代码落地进企业,轻流不断扩大交友圈

ToB行业头条

高效运营新纪元:智能化华为云Astro低代码重塑组装式交付

华为云开发者联盟

云计算 后端 华为云 华为云开发者联盟 企业号 7 月 PK 榜

错过直播?快收藏详实回顾!Get「研发效能管理」7 步实践指南与案例剖析

极狐GitLab

gitlab DevSecOps 效能管理 GDAI 蔚来案例

GitLab 入选 Forrester Wave™️ 集成软件交付平台,并获评唯一「领导者」!

极狐GitLab

领导力 gitlab Forrester Wave 领导者 创新能力

版本更新|OpenTiny Vue 发布了 v3.9.0 🎉。

OpenTiny社区

开源 前端 UI组件库

初窥低代码 | 社区征文

神木鼎

低代码 年中技术盘点

软件测试/测试开发丨Selenium 安装教程

测试人

Python 程序员 软件测试 selenium

十大功能特性,助力开发者玩转API Explorer

华为云开发者联盟

云计算 后端 华为云 华为云开发者联盟 企业号 7 月 PK 榜

面试上海某小厂Java岗,全程一小时问的全是细节

程序员小毕

数据库 程序员 后端 java面试 八股文

IoT 场景下 TDengine 与老牌时序数据库怎么选?看看这份TSBS报告

爱倒腾的程序员

数据库·

新增华为高阶智驾+大五座版本!全新问界M7工信部曝光

Geek_2d6073

比较Postman和JMeter

Liam

程序员 开发 Jmeter Postman

Nautilus Chain 更换全新测试网,主网即将在不久上线

大瞿科技

DevOps in China:15年来,DevOps在中国经历了什么?

DevOps和数字孪生

嵌入式DevOps

【分久必合】构建下一代前端组件 | 社区征文

小鑫同学

年中技术盘点

软件测试/测试开发丨Selenium如何复用已打开浏览器

测试人

Python 程序员 浏览器 软件测试 selenium

NFTScan 与 Decert 达成合作伙伴,双方在 NFT 数据方面展开合作

NFT Research

Web3 Daily NFT\

AP controller-centralized management-support-IPQ6010-IPQ5018-IPQ4019 motherboard

wifi6-yiyi

wifi6

2023算网融合产业峰会,网心科技边缘计算+AI创新实践获权威认可

网心科技

边缘计算 边缘云 AIGC

AIGC:新AI时代,推动数字人进化的引擎

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 企业号 7 月 PK 榜

一文读透,FreeSWITCH的originate命令解析及示例

快乐非自愿限量之名

教程 freesql

一文看懂流行的Rust ORM

高端章鱼哥

sql rust ORM

小红书Java后端一面,被问麻了

程序员小毕

程序员 高并发 架构师 java面试 计算机底层

华为云Astro低代码三侠「踢馆」 学员:也带带我! ——低代码设计师混入极客挑战赛

华为云PaaS服务小智

云计算 低代码 华为云 华为开发者大会2023

苹果iOS App Store上架操作流程详解:从开发者账号到应用发布

雪奈椰子

2023年iOS App Store上架流程详解(上)

雪奈椰子

低代码技术:提高效率降低成本的全新选择

互联网工科生

软件开发 低代码 应用程序

开发者的秘密武器:人工智能与开发工具的完美结合

知者如C

MobPush 最佳实践:消息重弹

MobTech袤博科技

前端 后端 开发者工具 开发 开发工具

微服务部署面临的挑战_语言 & 开发_Mark Little_InfoQ精选文章