写点什么

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

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

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

关注

评论

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

数据库存取策略对比

小舰

4月日更

智慧公安重点人员管控系统搭建,实现重点人员动态管控

13828808769

智慧公安

openLooKeng V1.2.0 发布

LooK

大数据 数据 Bigdata

区块链特色农产品溯源平台解决方案

13828808769

溯源 #区块链#

GaussDB(for openGauss)让数据“存得下、算得快、算得准”

华为云开发者联盟

GaussDB(for openGauss) 华为云数据库 数据分布方式 计算下推 数据强一致

【LeetCode】打家劫舍 II Java题解

Albert

算法 LeetCode 4月日更

SQL 性能优化的几条建议

U2647

sql 4月日更

分页场景慢?MySQL迷惑行为解读~

Java架构师迁哥

喜欢回忆过去的人,没有未来

小天同学

成长 自我思考 个人感悟 突破瓶颈 4月日更

算法突击营毕业总结

韩儿

Spring Boot 启动时,让方法自动执行的 4 种方法!

Java小咖秀

springboot 启动方式

一加9pro联名哈苏了!这可能是你能买的平替哈苏

Geek_4a453c

修电脑、脱发、格子衫?程序员拒绝标签化,这才是真正的他们

华为云开发者联盟

程序员 女朋友 标签 格子衫 单身狗

超详细 PowerDesigner 入门教学(项目数据库设计标准)

若尘

数据库 数据库设计

Linux pwd 命令

一个大红包

Linux linux命令 4月日更

直播 | 如何使用Ranger增强权限管理?

LooK

大数据 数据分析 数据 Bigdata

算法思考:红包金额生成

程序员架构进阶

Java 28天写作 算法解析 4月日更 微信红包

中寰卫星导航卜钢采访:IT年轻人怎么工作、学习和生活(采访提纲)

老猿Python

学习 采访 IT年轻人

VueRouter源码解读:三大核心模块构成

梁龙先森

源码分析 大前端 vue-router

他人方寸间,山海几千重

清秋

随笔 4月日更 1 周年盛典 我和写作平台的故事

ES9的新特性:异步遍历Async iteration

程序那些事

JavaScript ecmascript 程序那些事 es9

C++系列:Visual Studio(VS)2019登录不上?

Bob

c++ 踩坑经历 编程经验 4月日更

Github Star 11.5K项目再发版:AAAI 2021 顶会论文开源,80+多语言模型全新升级

百度大脑

飞桨

被应用商店下架的应用,该如何下载?

彭宏豪95

效率 App 苹果 4月日更

Python OpenCV 图像处理之直方图的应用,取经之旅第 26 天

梦想橡皮擦

Python OpenCV 4月日更

初识GaussDB(for Cassandra)

华为云开发者联盟

数据安全 GaussDB 华为云数据库 GaussDB(for Cassandra) 分布式云数据库

Windows 下 搭建 Flutter 环境

U2647

flutter 4月日更

计算机原理学习笔记 Day5

穿过生命散发芬芳

计算机原理 4月日更

Zabbix Linux 下源码安装

耳东@Erdong

zabbix 4月日更

第一个 Go 程序

escray

学习 极客时间 Go 语言 4月日更 Go100

一直做着行业最“新”的尝试:NA(Nirvana)Chain受邀出席共为·创新大会并办展

区块链第一资讯

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