惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
Schneier on Security
F
Fortinet All Blogs
博客园_首页
The GitHub Blog
The GitHub Blog
V
Visual Studio Blog
D
DataBreaches.Net
aimingoo的专栏
aimingoo的专栏
爱范儿
爱范儿
B
Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
N
Netflix TechBlog - Medium
阮一峰的网络日志
阮一峰的网络日志
P
Proofpoint News Feed
D
Docker
Engineering at Meta
Engineering at Meta
大猫的无限游戏
大猫的无限游戏
The Cloudflare Blog
罗磊的独立博客
云风的 BLOG
云风的 BLOG
Microsoft Azure Blog
Microsoft Azure Blog
T
The Exploit Database - CXSecurity.com
博客园 - 三生石上(FineUI控件)
量子位
The Last Watchdog
The Last Watchdog
MyScale Blog
MyScale Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
The Blog of Author Tim Ferriss
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
小众软件
小众软件
Cloudbric
Cloudbric
博客园 - 司徒正美
H
Help Net Security
人人都是产品经理
人人都是产品经理
Application and Cybersecurity Blog
Application and Cybersecurity Blog
L
LangChain Blog
Latest news
Latest news
M
MIT News - Artificial intelligence
T
Threat Research - Cisco Blogs
博客园 - Franky
S
Security Affairs
W
WeLiveSecurity
F
Full Disclosure
Know Your Adversary
Know Your Adversary
Google DeepMind News
Google DeepMind News
The Hacker News
The Hacker News
Cyberwarzone
Cyberwarzone
美团技术团队
PCI Perspectives
PCI Perspectives
C
Check Point Blog
Spread Privacy
Spread Privacy

LeanCloud

LeanCloud 无了? - V2EX 8 月 1 日起, LeanCloud 国际版共享域名不再向中国大陆提供服务 - V2EX LeanCloud 凉了吗? - V2EX LeanCloud 将加入心动/TapTap - V2EX 关于我在使用 LeanCloud 时候遇到的的一些情况分享 - V2EX Leancloud 又双叒叕挂了,炸站了 - V2EX 为什么 LeanCloud 中国版云引擎的标准版实例价格是 ¥ 1/天,国际版的是 $1/天? - V2EX leancloud 强制绑定域名, valine 没得玩了 - V2EX Leancloud 又挂了 - V2EX 这回 Leancloud 域名被锁定到底是因为啥 - V2EX Leancloud 挂了 - V2EX LeanCloud 怎么使用 JavaScript 的 API 保存富文本? - V2EX 做了一个 LeanCloud 数据存储的导出工具 - V2EX Leancloud 的价格方案是不是有点不合理啊 - V2EX LeanCloud 发布了多客户端实时同步数据的功能,欢迎试用 - V2EX 如何在 LeanCloud 开通 cdn 加速 - V2EX LeanCloud 的云引擎是什么配置,为什么免费版的性能还比阿里云的最低配要快? - V2EX 有没有 leancloud 代替方案或开源产品推荐? - V2EX 国内短信价格下调 17%, 2016 年 7 月 5 日零时生效 - V2EX LeanCloud 和阿里云到底有什么区别? - V2EX 怎样才能写得一手好代码? - V2EX 赞 Leanote - V2EX LeanCloud 的推送服务稳定性捉急啊,两分钟前好好的突然又不行了。。。另外大家都用什么 Android 推送服务,求推荐 - V2EX 又来。。。LeanCloud 中国节点的后端存储集群出现问题 - V2EX Leancloud 又挂了?全国都无法 ping 通 - V2EX leanapp.cn 下域名无法验证微信? - V2EX LeanCloud 你们的 push 是不是挂掉了,发了几个都不行啊 - V2EX 请允许我水一下,每次敲打 AV.Object...,都会让我下意识的乱想,不能好好的工作,你们设计的时候是如何考虑的,虽然我知道是之前品牌的简称…… - V2EX 使用 New Relic 监控云引擎应用的性能 - V2EX 「产品更新」高效内存存储服务 LeanCache 正式发布 - V2EX 基于 LeanCloud 云引擎的 Web 全栈方案: LeanEngine-Full-Stack - V2EX 「产品更新」2015 年 10 月 LeanCloud 产品更新汇总 - V2EX LeanCloud 的 PHP SDK 发布了 「重要的事情说三遍」将数据安全捍卫到底:权限管理( acl)文档全新发布 「更新日志」2015 年 9 月 LeanCloud 更新汇总 - V2EX 有 leancloud 的人在吗? - V2EX LeanCloud 中的 Relation 是不能同时 add 和 remove 的么? - V2EX LeanEngine 2.0 升级 3.0 指南 - V2EX 云代码 通过 leancloud 的命令行部署失败 - V2EX 如何避免使用 JS sdk 的页面被恶意使用网页开发者工具写个死循环调用 leancloud API? - V2EX 创业公司,北京 iOS 主程, 30k+, React Native, LeanCloud 用户。 - V2EX 我 leancloud 账号用 gmail 邮箱注册,但是忘记了登录密码,申请更改密码但是验证信息收不到,怎么破 - V2EX LeanCloud 发布简单好用的 Web 统计 - V2EX 如何在 React Native 中使用 LeanCloud? - V2EX LeanCloud 数据存储起码要交 200 块才能给数据表加设值唯一字段?? - V2EX Web 实时通信 Demo - V2EX 基于 LeanCloud 的 JavaScript 实时对战游戏简单 Demo - V2EX LeanCloud JavaScript 发送短信 LeanCloud JavaScript 推送 SDK - V2EX
对六月六日 LeanCloud 多项服务发生中断的说明 - V2EX
LeanCloudRRY · 2015-06-08 · via LeanCloud

各位 LeanCloud 的用户,大家好。

LeanCloud 的多项服务在六月六日周六下午发生了大约四个小时的中断或不稳定。其中 16:10 到 19:09 为故障阶段;19:09 到 20:17 为限流恢复阶段。

在故障阶段受到重大影响的服务包括:数据存储、网站及控制台、云代码、推送、工单系统、用户反馈、第三方登录、应用内社交;受到轻度影响的服务包括:短信、实时通信服务中获取聊天记录的 API;未受影响的服务包括:统计分析、离线数据分析、应用内搜索、文档。

在限流恢复阶段受到重大影响的服务包括数据存储、网站及控制台、云代码、推送、短信、工单系统、用户反馈、第三方登录、应用内社交、统计分析、离线数据分析、应用内搜索、文档、实时通信中获取聊天记录的 API。实时通信在这个阶段未受影响。

在这次事故中没有发生服务器端数据的丢失或损坏。

我们知道这次服务中断给很多用户造成了实质性的影响。我写这封信的目的是为了向用户说明发生的事情,以及我们将如何改进产品和服务以降低类似事件发生的可能性。

架构总览

为了更好地解释这次事故,我想先简单介绍一下 LeanCloud 的后端架构。以下是一个简化版的架构图。

LeanCloud 简化架构图

虽然实际上系统间的关联比这个图要复杂,并且有一些做异步处理的系统没有画出来,但用以说明问题是足够的。

在 LeanCloud 的最前端,除了负载均衡之外就是 API 服务集群,也就是实现 RESTful API 的部分。客户端应用通过 SDK 或直接调用 API 和它通讯。根据请求的类型,API 服务再调用后端的各个系统完成所需的功能。比如如果是统计服务的请求,事件信息会被发送到统计服务并最终被保存到 HBase 集群;如果是数据存储服务的请求,那么 API 服务就会调用 MySQL 和 MongoDB 集群完成数据访问。因为 MongoDB 存储了每个应用的大部分数据,所以不少服务都需要从这里获取一些信息,是整个系统中很重要的组件。

MongoDB 集群存储了所有应用除了统计和备份数据以外的其他数据。由于数据量巨大,所以我们对 MongoDB 进行了分片(sharding),让数据分布在不同 shard。每个 shard 又由 5 台服务器(节点)组成,其中每台都保存着这个 shard 的完整数据,这样不但可以承担更高的负载,也保证了即使其中一些服务器坏掉,数据也是安全的。每个 shard 有一台称为 primary 的服务器,所有对数据的修改都会首先在这台服务器进行,然后再复制到其他服务器,而读取可以从任何一台服务器进行。当 primary 出现问题时,会有一个自动选举过程从其他成员里选出新的 primary,让服务可以继续,这是实现容错的方式。

故障说明

在故障发生前的一周,我们做了与本次故障相关的两个改动。

为了更好地管理 LeanCloud 的大量服务器,我们在近期引入了 Apache Mesos,这是一个为服务器集群的资源管理提供高层抽象接口的系统。Mesos 会在每台受管理的服务器上运行一个 mesos-slave 进程。

我们把 MongoDB 从 2.4 升级到了 2.6。新版本对地理位置的查询,以及 count 查询的准确性有所改进,所以我们认为这次升级对用户来说是值得的。但新版本的一个负面影响是,因为每次启动时要检查索引,所以启动时间大大延长了。而如果 MongoDB 是在出错的情况下重新启动,会导致大量的索引被重新建立,进一步延长启动的时间。

大约在 16:10 我们的运维工程师收到 MongoDB 集群内存不足的报警,在初步诊断后,确定原因为 mesos-slave 启动的一个子进程占用内存太多,有可能是存在内存泄漏,所以我们开始终止各台服务器的 mesos-slave 进程。在这时我们发现 MongoDB 的其中一个 shard 中有三个节点因为可用内存不足进入异常状态,其中一个是 primary,所以我们开始重启其中两个节点。由于 MongoDB 2.6 在启动过程中需要校验数据并修复索引,所以这个过程很慢,而当时正是流量高峰期,这个 shard 剩下的节点不足以承担当时的负载,所以很快被压垮。由于 primary 的连接数被占满,这导致出问题的两个节点无法加入集群。在这种情况下,我们决定屏蔽所有 API 服务请求,并重启处于错误状态的三个节点。

在此之后,这三个节点分别经历了多次重启,原因是出问题的 shard 大约有 10,000 个数据库,而新版 MongoDB 要验证每个数据库并修复索引。这不但使得重启很慢,而且因为数据库数量太多,这个过程会耗尽系统对子进程数的限制,所以在重启之后集群无法恢复正常可用状态。直到我们找到原因并调整了系统设置,各个节点才完成正常启动,集群恢复可用。

在这个过程中,除了事故本身,我们在沟通上也犯了一些错误。当用户询问服务恢复时间时,我们给出了过于乐观的估计,但因为以上所说的原因,多个 MongoDB 节点经过了多次重启,实际恢复服务的时间晚了很多,这给用户造成了进一步的困扰。

改进措施

  • 更新 MongoDB 节点内存报警值,预留更多响应时间。(已完成)
  • 在 MongoDB 节点暂停使用 mesos-slave。(已完成)
  • 设置各服务 OOM 优先级,意外情况发生导致剩余内存不够时重启低优先级服务以保护高优先级服务。(已完成)
  • MongoDB 集群增加硬件资源。
  • 拆分 MongoDB 集群为多个小集群,降低单个集群里的数据库数量。这也让我们可以对 MongoDB 进行滚动升级,降低风险。
  • 在重要系统升级前进行更多事故恢复的测试,并以滚动方式在较长时间内逐步完成升级。
  • 降低 MongoDB 启动时间。
  • 进行阶段性的 MongoDB 压测及故障恢复模拟。
  • status.leancloud.cn 从主站拆分,让用户得到更准确的故障信息。
  • 改进 API 服务线程池分配机制,避免因为一个 MongoDB shard 异常而堵塞线程池。
  • 改进 API 服务流量控制,紧急情况时做到可以仅切断对应特定 MongoDB shard 的请求。
  • 在发生线上事故时,我们将在 Blog 上开通直播贴,实时向用户通报进展。

结语

我们肩上承载着为数万开发者提供稳定服务的责任。周六傍晚事故持续的四个小时也是所有 LeanCloud 的同事最难熬的一段时间。我们了解到有的创业团队为了当天进行的一个活动,在过去的时间里非常辛苦地工作,而活动却受到了 LeanCloud 事故的影响。这样的事情让同为创业公司的我们非常地难受和惭愧。

我们希望通过这个详细的报告让用户全面地了解整个过程,并将尽一切努力降低未来发生类似事件的可能性。虽然任何人都没有办法完全保证服务中断不会发生,但我们会采取一系列措施避免可预见的问题,并确保在发生意外的时候能更快地恢复。为了保持改进过程的透明,我们开放了一个追踪各项具体措施的 Trello board,用户可以通过它随时了解我们的执行过程。

江宏

LeanCloud Cofounder/CEO