结交“混世魔猴”

去年年底,Netflix技术博客上发表了这么一篇文章,题为“转向亚马逊网络服务过程中学到的五个教训”(5 Lessons We’ve Learned Using AWS)。亚马逊网络服务(Amazon Web Services,以下简称AWS)无疑是所谓的“云计算”的杰出代表。因此,这篇文章实际上也可以看成是给任何想要转向“云”的网站的关键性建议。当然,这些建议的确很棒!下面是一条最让我震惊的:

译者注:Netflix是一家美国公司,在美国、加拿大等地提供互联网随选流媒体播放,以及DVD、蓝光光碟的在线租赁业务。该公司成立于1997年,总部位于加利福尼亚州的洛斯盖图。1999年开始订阅服务。到2009年,该公司可提供多达10万部DVD电影,并有1000万的订阅用户。


我们时常把Netflix在AWS里的软件架构称作为“蓝博”。不管怎么样,哪怕不借助任何外力,每个系统都要有自我实现成功的能力。我们在设计每一个分布式系统时,对我们所依赖的其他系统的容错能力总是会充分考虑的。

译者注:蓝博(Rambo)是电影《第一滴血》里男主角的名字,他是一个所向披靡的孤胆英雄的形象。

如果我们的推荐系统当机了,我们对客户响应的质量肯定会下降,但我们仍然是有应必答的。虽然在这种情况下做不了个性化的推荐,但我们会把最流行的电影推荐给客户。如果我们的搜索系统突然慢得让人无法忍受,但这绝对不会妨碍用户以流媒体的方式观看电影。

我们的工程师最早在AWS里创建的一个系统其实是“混世魔猴”。这只猴子的工作就是捣蛋,它要随机杀死我们系统架构里的组件或服务。如果我们不持续检验我们在失败面前自我恢复乃至成功的能力,那这个系统很有可能就是会在关键时刻掉链子。

猛一看,你肯定觉得这条建议太疯狂!但我们必须面对它。我不确定会有多少公司认同这样的做法,更别说有多少公司会真的去尝试了。如果在你工作的地方,有人部署了一个后台程序或服务,专门用于随机杀死你的服务器集群里的服务或进程,请举手!

如果这个人还没被你的公司解雇,请举起你的另外一只手!

但凡大脑正常的人,怎么会愿意去结交一只“混世魔猴”呢?


其实,有时候你没的选择;“混世魔猴”会自己找上门!Stack Exchange网络曾经碰到过一个诡异的问题,我们也为此苦苦挣扎了几个月。这个问题是:每隔几天,Oregon网络中心的某台服务器总会突然对来自外部网络的任何请求停止响应。没有原因;毫无道理;而且必须经过缓慢的关机、重启之后才能恢复,期间还会让服务器出现蓝屏现象……

我们花了几个月——真正是几个月的时间——去追踪这个问题。我们还把可能的原因列了很长的一个清单,一项一项去排除:

  • 交换网络端口
  • 更换网线
  • 使用一个不同的路由器
  • 尝试多个版本的网卡驱动程序
  • 尝试各种操作系统和驱动程序级别的网络设置
  • 简化我们的网络配置,并且关掉TProxy代理服务以使用更为传统的X-FORWARDED-FOR
  • 更换虚拟化软件供应商
  • 改变我们的TCP/IP主机模型
  • 安装内核升级包
  • 寻求高级供应商客户支持团队的帮助
  • 其他尝试(我现在已经忘记了,因为我现在已经从这种痛苦中解脱了)

在整个事件过程中,我们的团队成员是如此地受挫,以致于一度几乎要打起来。(团队成员都是远程工作的,怎么“打”?我们都用Skype。你懂的……)这能怪我们吗?每隔几天,我们的几台服务器中的一台会随机地出现当机。“混世魔猴”老是来捣乱!

不过,即使在我们最受挫的时刻,我意识到我们还是做了一些积极的改变:

  • 对于一些重要的功能,以前我们只用一个服务器,现在我们改成两个。
  • 如果某些服务没有合理的容错或应变方案,我们补上一个。
  • 我们对系统做了全面的检查,去掉了一些不必要的组件,直至一个足以运维我们的服务的最小集合。
  • 我们采取了一些权变措施,使得我们的系统即使在我们之前认为很关键的服务突然失效的时候,也能永远处于运行状态。

时间一天一天过去,我们每周都使我们的系统更加冗余一点点,因为我们必须这么做。尽管整个过程很痛苦,但事实摆在面前,实际上“混世魔猴”帮了我们一个大忙,它迫使我们变得极具弹性。赶快行动起来吧!不要等明天,也不要指望将来更远的某一天,更别说“以后再说吧”,立刻行动起来!

当你结交“混世魔猴”之后,你很快就会发现,每件事情发生的背后总是有原因的(除了那些完完全全随机发生的事情)。“避免失败最好的办法就是不断地失败。”明白这句话的道理了吧,虽然它听起来很疯狂!
俗话说,‘熟读唐诗三百首,不会吟诗也会吟’,请分析附件的唐诗300首文本文件。 完成下列功能:(部分功能需要使用jieba第三方库) 统计每首诗歌的作者,如果第一行输入‘作者’,第二行则输入一个整数n,输出出现最多的作者前n个,出现次数相同时,按作者出现顺序排序。每行输出一个名字和出现次数,以空格间隔,程序结束 统计作者的名字出现的次数,如果第一行输入‘人物’,第二行则输入一个整数n,输出出现最多的作者前n个,出现次数相同时,按作者出现顺序排序。每行输出一个名字和对应出现次数,以空格间隔,程序结束 注:有的诗人在诗名或诗句中用到了别的诗人的名字。如’梦李白二首之一‘。因此第1,2项目之间的数据可能有所差异。 如果输入某个字符串编号,范围和格式在’010‘-’320‘之间(测试用例保证编号存在),输出对应该编号的诗句。 输出格式:去掉首行诗歌编号,其余格式与文件中诗歌显示格式相同。 如果输入‘唐诗’,输出文件中的诗词数量,程序结束 飞花令,如果第一行输入'飞花',则可以在第二行输入s中文字符(长度为1),然后按照在文件中出现的顺序,输出唐诗300首文件包含该中文字符的诗句(长度不超过7的诗句),每行一句。 如果非以上输入,输出‘输入错误’,程序结束 请严格按照输入输出示例的格式编写程序输出 输入输出示例 示例仅为格式示例,与测试数据无关 示例1: 输入: 作者 1 输出: 杜甫 37 示例2: 输入: 人物 2 输出: 杜甫 37 李白 33 示例3: 输入: 084 输出: 李白 行路难三首之三 有耳莫洗颍川水 有口莫食首阳蕨 含光混世贵无名 何用孤高比云月 吾观自古贤达人 功成不退皆殒身 子胥既弃吴江上 屈原终投湘水滨 陆机雄才岂自保 李斯税驾苦不早 华亭鹤唳讵可闻 上蔡苍鹰何足道 君不见 吴中张翰称达生 秋风忽忆江东行 且乐生前一杯酒 何须身后千载名 示例4: 输入: 飞花 秦 输出: 秦地罗敷女 孔子西行不到秦 居人未改秦衣服 始与秦塞通人烟 况复秦兵耐苦战 赐名大国虢与秦 城阙辅三秦 河山北枕秦关险 渭水自萦秦塞曲 山色遥连秦树晚 夜泊秦淮近酒家 嵩云秦树久离居 秦时明月汉时关 示例5: 输入: 21 输出: 输入错误。请帮我编写详细代码
02-06
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值