最新发布《数智时代的AI人才粮仓模型解读白皮书(2024版)》,立即领取! 了解详情
写点什么

微服务部署面临的挑战

  • 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:003361
用户头像

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

关注

评论

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

分析商务报表使用什么工具?

对不起该用户已成仙‖

通宵加班设计的储能板不能用?厚铜PCB设计这个问题一定要注意

华秋电子

储能

PoseiSwap 更新质押系统,并将在 8 月18 日开启“Trident ”快照

大瞿科技

Centos 7系统安装python 3.9.10详细教程。

百度搜索:蓝易云

Python 云计算 Linux centos 运维

微信小程序:跨端开发框架的繁荣发展之路

没有用户名丶

Eudic欧路词典 for Mac(英语学习工具) v4.4.5增强激活版

mac

苹果mac Windows软件 欧路词典 Eudic mac 英语学习工具

R 语言入门与介绍

timerring

R 语言

VisualStudio打包项目文件为.exe安装包

二哈侠

“龙蜥社区系统运维MeetUp”乘云数字议题分享

乘云 DataBuff

OLED屏幕,LED,AMOLED哪个更好?

Dylan

LED 显示器 LED显示屏

smardaten实战丨谁说无代码不能开发出漂亮的门户首页?

热爱编程的小白白

坚持梦想,心向光明

何元

ARTS 打卡计划 个人感悟

VuePress 数学公式支持

ReturnTmp

2023上海国际智慧物业展览会|城博会

AIOTE智博会

城博会 智慧物业博览会

BSN“五、十、百”工程实施半年成果丰硕,助力数字化转型和高质量发展

BSN研习社

中国大学生服务外包创新创业大赛丨借 AI 之力,助“记账”难题

热爱编程的小白白

Presto 设计与实现(三):依赖注入框架 Guice

冰心的小屋

guice presto 依赖注入 presto 设计与实现

鸿蒙生态星河璀璨| 先行者李洋全力以赴,拥抱星辰大海

最新动态

Kyligence x 百胜数睿|电商全渠道运营增长新利器

Kyligence

数智化 指标平台

四项代表厂商,Kyligence 入选 Gartner 数据及人工智能相关领域多项报告

Kyligence

数据分析 指标建设

ARTS 打卡第 8 天

自由

ARTS 打卡计划

MySQL切换字符集引发的思考(一)

石小天

MySQL 数据库 运维

基于 Easysearch kNN 搭建即时图片搜索服务

极限实验室

KNN 向量检索 图像搜索 easysearch

MATLAB R2023a 激活for Mac附安装教程

胖墩儿不胖y

Mac软件 数据分析软件 好用的数据管理

火山引擎DataLeap:助力PICO落地数据流程规范,提升开发效率

字节跳动数据平台

数据中台 数据治理 数据安全 数据研发 企业号 8 月 PK 榜

《知识图谱互联互通白皮书》正式发布,合合信息携手电子标准院共同推动技术规范化发展

合合技术团队

人工智能 知识图谱

ARTS 打卡第1周(8.14~8.20)

向东是大海

ARTS 打卡计划 arts

银行科技外包存风险,金融机构如何做好软件供应链安全管理?

网安云

软件安全 供应商管理 软件供应链安全 金融业

Illustrator 2023最新资源v27.8.1+补丁激活教程

mac大玩家j

AI Mac软件 矢量设计 矢量设计工具

【华秋推荐】无线充电的原理与解决方案

华秋电子

无线充电

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