2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

生产环境中保持微服务井然有序的五大措施

  • 2016-06-22
  • 本文字数:1569 字

    阅读完需:约 5 分钟

本月初,Takipi 公司的 Alex Zhitnitsky 撰写了生产环境中保持微服务井然有序的五大措施一文(好吧,“井然有序”这个词并非他的原话)。他结合我们几个月前报道过的小组讨论成果与用户反馈,向大家介绍了在生产环境中使用微服务可能遇到的主要问题以及这些问题的解决方法。这些内容的侧重点在于分布式调试,以及为了使其成为一种易于驾驭的方式所能采取的方法。他谈到的第一个问题是监控:

监控是一种明智的做法。系统会逐渐变得高度碎片化,为了对系统的运行状况获得更全面的了解,人们对集中式监控和日志会产生越来越高的需求。

Alex 谈到了在最新一期播客节目中所涉及的一个场景,这个场景中需要对有问题的版本进行回滚,这就要确定相应的微服务,并确定进行回滚可能会对其他服务产生的影响。他认为:

结论 1:如果你认为对单层(Monolith)体系结构进行监控已经很困难,微服务的监控要比这个难十倍,需要事先做好极为充分的规划和更大的投入。

对于第二个问题,Alex 谈到了我们已经从 Sam Newman Adrian Cockcroft 等人处多次听到的一种观点:

单层体系结构的日志文件很可能已经分散在不同位置,就算心里想着“单层”,但最终依然可能会使用多个不同技术层,并可能将日志保存在不同地方。微服务则会让日志进一步分散。现在如果需要调查有关某些用户事务的场景,为了理解实际发生的一切,你可能需要从不同位置获取所有服务的全部日志。

这就产生了他的下一个结论:

结论 2:微服务的目标就是将所有东西拆分为零散组件。但这种做法的副作用之一是运维规程和监控工作也需要分别应用给每个服务,进而导致无法发挥“整体系统”的强大之处。通过恰当的工具以统一方式管理这一切已成为此时最大的挑战。

第三个问题引述自 Leslie Lamport 对于分布式系统的定义中的一句话:“分布式系统是指某台我从未听说过的计算机也能导致我的程序崩溃的体系。”或者按照 Alex 的说法:“一个服务引发的问题,会造成其他地方出现连锁反应。”那么这个结论也就不言自明了:

结论 3:对于单层体系,遇到问题后通常你会知道需要调查哪些方面,微服务使得人们难以确定问题根源以及要从哪里拿到所需数据。

在分布式系统中,“确定问题根源”这一需求进一步产生了下个问题,此时日志可以提供一定的帮助,但日志只是解决方案的一部分:

大部分情况下,你寄希望于日志文件中获得的前几位变量数据,但这些可能根本无法解决你的问题。这些信息只能让你继续追查下一条线索,进而需要进一步深入这样的“魔法世界”,继续运行更多日志语句。随后部署改动,期待着问题能够重现或永不再现,因为… 有时候仅仅添加一条日志语句似乎就能解决问题。这类似于墨菲法则的一次糟糕的大逆转。

这也产生了我们的下一个结论:

结论 4:如果微服务中一个问题的根源涉及到多个服务,就很有必要使用一个集中的根源检测工具。

Alex 提到的最后一个问题是版本管理和服务之间的循环依赖。同时他也提到了在检查依赖性时需要注意的两个问题。

1,如果服务之间存在循环依赖,一旦某个事务卡在循环中,就很容易产生分布式堆栈溢出错误。2,如果两个服务共享同一个依赖项,并且使用会影响到这些服务的方式更新了其他服务的 API,那么就需要同时对这三个服务进行更新。这就造成了另一种问题,例如:要先更新哪个服务?如何确保所有服务能顺利地完成更新?

相互独立的服务越多意味着可移植性越高,不同服务可以使用互不干涉的发布周期,但同时这样做也会增加整个系统的复杂度,尤其是在可再生性(Reproducibility)方面。那么这就引出了我们的第五个,也是最后一个结论:

结论 5:在微服务体系结构中,更容易产生依赖性问题所导致的错误。

很高兴看到在生产环境中运用微服务的人就此展开的讨论,更让人高兴的是,很多人已经就其中的一些核心问题和解决这些问题的常见方法达成了一致。

查看英文原文 Five Ways to Not Mess up Microservices in Production

2016-06-22 19:003224
用户头像

发布了 283 篇内容, 共 122.4 次阅读, 收获喜欢 63 次。

关注

评论

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

[分词]基于Lucene8版本的逆向最大匹配分词器(依赖本地词典)

alexgaoyh

Java 中文分词 lucene 逆向最大匹配

NebulaGraph is nothing without you | 社区 2023 年度人物合集

NebulaGraph

FTM 暴跌23% — 除了价格下跌之外还有什么?

Footprint Analytics

区块链 Token 代币 FTM

Python多任务协程:编写高性能应用的秘密武器!

测试人

软件测试 自动化测试 测试开发

矩阵起源荣获《2023大数据产业年度国产化优秀代表厂商》

MatrixOrigin

云原生 分布式, 数据库· 分布式数据库 Matrixone

livehome3dpro破解版 Mac室内设计软件 中文版Live Home 3D Pro下载

南屿

Mac软件 3D家庭室内设计工具 装修设计 livehome3dpro破解版

不会用Photoshop修图?别急,Pixelmator Pro比肩ps的mac修图软件 轻松实现专业级图像处理!

南屿

Pixelmator Pro破解 Pixelmator Pro下载 修图软件 Mac图像编辑器

Cinema 4D 2024 图文安装教程 c4d2024中文版附激活补丁

南屿

3d建模 Cinema 4D 2024 C4D R24插件 Cinema 4D安装教程

从零开始用Rust编写nginx,命令行参数的设计与解析及说明

不在线第一只蜗牛

nginx rust 开发语言

【2024最新版】Sapphire视觉特效插件功能介绍 附蓝宝石插件破解补丁

南屿

视觉特效插件 Boris FX Sapphire 蓝宝石插件

1Password 7 :为用户提供安全高效的密码管理

南屿

1Password 7 Mac密码管理器

点燃你的Python技能:剖析闭包与装饰器的魔力

测试人

软件测试

花 15 分钟把 Express.js 搞明白,全栈没有那么难

杨成功

JavaScript node.js 前端 全栈

Paste for Mac剪切板工具 强大的功能可提高您的工作效率

南屿

Paste for Mac 剪切板管理软件 paste mac破解版

Acxyn 和 Footprint Analytics 联手探索 Web3 游戏知识产权评估

Footprint Analytics

区块链 区块链游戏

MCtalk·CEO对话 x 高成资本丨2024年,SaaS 还是不是一门好生意?

ToB行业头条

指标平台详解(上):为什么有了 BI ,还需要指标平台?

Aloudata

BI 指标体系 ETL BI 分析工具 指标中台

哪里有BricsCAD中文版资源?最新2024版BricsCAD破解中文 for Mac安装包

南屿

CAD设计软件 BricsCAD 24破解版 BricsCAD 24下载

香港网站服务器的优势:为什么它们如此受欢迎?

一只扑棱蛾子

香港服务器

前端重磅福利!前端百宝箱

前端连环话

前端开发平台

unitypro安装教程 Unity Pro 2018 Mac破解版下载安装

南屿

Unity Pro 2019 Unity Pro 安装教程 3D游戏动画开发工具

矩阵起源通过2023年“专精特新”中小企业认定!

MatrixOrigin

云原生 数据库· 分布式数据库 Matrixone

一分钟带你搞定MySQL5.5安装教程

小魏写代码

zbrush2024新功能介绍 含zbrush2024下载破解资源

南屿

ZBrush 2024新功能 zbrush2024破解版 zbrush2024下载 zbrush雕刻

甲骨文云-云迁移新篇章:轻松、快捷的数据库搬家之路

极客天地

良心推荐!五个超好用的Vue3工具

伤感汤姆布利柏

wolframmathematica14激活密钥 mathematica mac破解安装教程

南屿

Wolfram Mathematica下载 Wolfram Mathematica密钥 Mathematica 14新功能 数学软件Mac版

生产环境中保持微服务井然有序的五大措施_DevOps & 平台工程_Mark Little_InfoQ精选文章