稳定性「三十六计」- 无状态化

背景

随着容器化、云原生等的流行,DevOps团队也在不断鼓吹「以无状态为荣,以有状态为耻」。因为有状态的服务难以部署、难以扩展。下面我举几个自己工作中实际的例子。

实例1-依赖系统目录结构

刚转来基础架构的时候,接手了一个服务,原来是个应届生写的。所以可以理解,也就是基本能完成功能,反正也不是核心服务。

刚拿到的时候下载下来本地运行没成功,报错是说对某个目录下没有某个文件。读了一下代码发现是启动时需要加载一个本地认证的证书。从发布脚本目录下找到了那个证书文件,放到指定目录下后运行成功。

后来把这个证书的内容放到了公司的秘钥统一管理服务上,就实现了更加安全的无状态化了。

无状态是指服务内部变量值的存储,这里证书文件是存储在服务器上的,那就是这个变量值,是一个状态。

实例2-依赖服务器上脚本

之前在金融那边有个兄弟是从「去哪儿」过来的。当时我们聊起日志的定时归档。一般java日志组件都带有这个功能。但是在「去哪儿」的时候他们采用的cron脚本来实现。原因是更省资源更高效。

后来我自己想了想,在一般的项目中还是更建议用自带的日志组件。因为便于统一管理,可移植性好。

仔细分一下领域:日志和业务逻辑分开,没有问题。但是日志需要和服务分开吗?服务性质、打印日志的级别、服务的量级直接决定了日志文件的大小以及归档策略。如果需要调整时要找另一个地方就不太合适的。

如果这个东西真的和业务逻辑一点关系都没有。那就会有一个专门的服务比如在linux系统层自己去处理这件事情,我们就不需要感知了。

无状态是指服务内部变量值的存储,这里服务器上的脚本就是那个状态。

实例3-zookeeper和DB

zookeeper、分布式共识、分布式协调、leader选举、master-slave五个概念都不知道的可以跳过这个例子。不影响理解本文的核心。

zookeeper和目前经典数据库部署既然有master和非master之分。那么就是有状态的,是否为master就是一个状态。

这个状态会引起什么问题呢?

不容易水平扩展:经典的线上mysql部署方式是1主2从或者1主3从。只有主节点负责写。压力扛不住了,可以纵向升级,就是提高机器配置。或者垂直拆分,业务自己去拆库拆表。

节点多反而引起性能下降:zookeeper也好、mysql也好,之间要通信,节点越多开销越大。zookeeper用Paxos来解决拜占庭将军问题的时候,节点越多,可用性是越差的。这个不解释了。知道有状态不好就OK啦。着实,像数据库、图片存储服务这样的,本质就是磁盘存储的,是做不到无状态的。这会增加一些部署上的困难,但是是可以接受的。但是对于外侧业务来说,如果是有状态的,就需要问自己一下:是否可以通过引入中间件等策略来消除状态?

内推

最近陆续收到一些朋友让帮忙美团内推的的消息,非常欢迎!内推请自助。填写完材料我会收到消息,然后我会帮忙一起物色合适的职位。

校招

社招

相关阅读

编写代码的「八荣八耻」(上篇)

编写代码的「八荣八耻」- 以开关上线为荣,以自信编码为耻

稳定性「三十六计」- 配额管控

「前任的50种死法」开发踩坑案例--慢就是错

设置默认的超时和重试是一个基础设施的基本素养

原文地址:https://www.cnblogs.com/xiexj/p/10702108.html

时间: 2024-10-07 18:17:04

稳定性「三十六计」- 无状态化的相关文章

「JSOI2016」无界单词

题目描述 对于一个单词 $S$ ,如果存在一个长度 $l$,满足 $0\lt l\lt |S|$,并且使得 $S$ 长度为 $l$ 的前缀与 $S$ 长度为 $l$ 的后缀相同,JYY 则称 $S$ 是有界的.比如 `aabaa` 和 `ababab` 就都是有界的字符串.如果一个单词不存在这样的 $l$ ,则 JYY 称之为无界单词. 现在考虑所有仅由字母 `a` 和 `b` 组成的长度为 $N$ 的字符串,JYY想知道:1. 一共有多少个无界单词?2. 这些无界单词中,按字典序排列第 $K$

分布式系统关注点—“无状态”详解

一.初识"状态"我们首先举个例子. 开发 Z 哥对运维 Y 弟喊:"Y 弟,现在系统好卡,刚上了一波活动,赶紧帮我加几台机器上去顶一下." Y 弟回复说:"没问题,分分钟搞定". 然后就发现数据库的压力迅速上升,DBA 就吼了:"Z 哥,你丫的搞什么呢?数据库要被你弄垮了". 然后客服那边接框也爆炸了,越来越多的用户说刚登陆后没多久,操作着就退出了,接着登陆,又退出了,到底还做不做生意了. 这个案例中的问题,产生的根本原因是因

为什么说产品经理要有「傻瓜」的心态?

摘要 : 我最早听到类似的说法并不来自于张小龙,而是一本书.书的名字叫做<像外行一样思考>,作者是美国卡耐基·梅隆大学(CMU)的计算机科学和机器人研究所的金出武雄教授.金教授的学术固然在同行眼里高山仰止,行文也极为流畅.关于写作,他的观点是,无论写科普还是论文,都要像创作小说那样写出引人入胜的独特观点.这一点和 MacTalk 秉承的写作原则一脉相承. 微信之父张小龙曾经在「微信背后的产品观」里讲到:「产品经理要有傻瓜心态」.这里的傻瓜并不是真傻,而是一种外行心态.张小龙说,自己要经过5-1

不设目标也能通关「马里奥」的AI算法,全靠好奇心学习

在强化学习中,设计密集.定义良好的外部奖励是很困难的,并且通常不可扩展.通常增加内部奖励可以作为对此限制的补偿,OpenAI.CMU 在本研究中更近一步,提出了完全靠内部奖励即好奇心来训练智能体的方法.在 54 个环境上的大规模实验结果表明:内在好奇心目标函数和手工设计的外在奖励高度一致:随机特征也能作为强大的基线. 通过与任务匹配的奖励函数最大化来训练智能体策略.对于智能体来说,奖励是外在的,并特定于它们定义的环境.只有奖励函数密集且定义良好时,多数的 RL 才得以成功实现,例如在电子游戏中的

分布式系统「伸缩性」大招之——「水平&amp;垂直切分」详解

如果第二次看到我的文章,欢迎右侧扫码订阅我哟~  ?? 本文长度为5389字,建议阅读14分钟. 坚持原创,每一篇都是用心之作- 没想到这篇文章写了这么长,一时半会没消化完的话,可以收藏一下先. 这是「伸缩性」章节的第四篇,先给新来的小伙伴们简单回顾下前三篇的内容. 做「伸缩性」最重要的就是先做好「无状态」,如此才可以随心所欲的进行横向“扩展”,而不用担心在多个副本之间切换会产生错乱.<分布式系统关注点——「无状态」详解>聊的就是这个. 不过,就算做好了横向扩展,本质上还是一个“大程序”,只是

大数据和「数据挖掘」是何关系?---来自知乎

知乎用户,互联网 244 人赞同 在我读数据挖掘方向研究生的时候:如果要描述数据量非常大,我们用Massive Data(海量数据)如果要描述数据非常多样,我们用Heterogeneous Data(异构数据)如果要描述数据既多样,又量大,我们用Massive Heterogeneous Data(海量异构数据)--如果要申请基金忽悠一笔钱,我们用Big Data(大数据) 编辑于 2014-02-2817 条评论感谢 收藏没有帮助举报作者保留权利 刘知远,NLPer 4 人赞同 我觉得 大数据

过去这几十年,分布式系统的「数据一致性」精华都在这了!

阅读目录 为什么需要事务 事务的来源 分布式系统中的事务问题 分布式事务的解决方案 结语 暂时还未涉及的园友们,可以收藏防身哦~ 本文是本系列的第三篇.与前两篇<不知道是不是最通俗易懂的<数据一致性>剖析了>.<烦人的数据不一致到底怎么解决?——通过“共识”达成数据一致性>形成完整的「数据一致性」合集. 一.为什么需要事务 如果说「共识」解决的是「水平」问题,那么「事务」解决的是「垂直」问题.是如何让一条绳上的蚂蚱共同起舞? 事务只是一个计算机术语,而事务的体现形式其实

给人工智能「好奇心」会变成什么样?答案不出所料

如果赋予人工智能好奇心,它会去做些什么?科学家们尝试用「好奇心」来驱动人工智能自主学习.这群工程师想知道,在没有人类事先提供引导时,人工智能的「好奇心」会使它对什么产生兴趣?他们在七月发表的研究结果显示,有好奇心的人工智能会永无止尽地看电视. 让「好奇心」驱使人工智能学习目前常见的人工智能在运作上,都需要人类先给予一些原始数据才能开始.比如说,要让Google人工智能帮你翻译,最一开始得先告诉它,不同语言中的哪些字汇具有相同意涵:脸书的人脸辨识系统在自动标记你时,仰赖的是早就上传过的有你在内的照

正在用华为手机的你,怎能少了这一「神器」

人们总希望有后悔药,能够在意外发生时「倒流时光」.但现实告诉我们的是,世界上根本就没有后悔药,我们能做的只有在意外发生前买好「保险」,将意外造成的风险降到最低,而最近,我发现「买保险」的这一原则同样适用于华为手机. 但别会错意,此「保险」非彼「保险」,并不是说让你真的为手机买一期「机身安全险」,这个保险指的是「华为云空间」,如果你能够善加利用 TA,那么 TA 将能够最大程度地降低你在使用手机时可能会发生的风险. 真的有必要使用手机上的云空间吗? 相信在许多人脑海中,首先浮现的就是这个问题:到底