http://www.ox-holdings.com

API 节点失去响应,消息推送服务开始恢复

摘要即时通讯云服务商LeanCloud 2016年8月5日因由于缓存集群超负载崩溃,导致即时通讯服务瘫痪30分钟之久!以下消息来自LeanCloud官方:8 月 5 日晚上 7 点 10 分开始,LeanCloud 中国节点上的某一缓存集群因为流量过大,CPU 资源被占满而停止了服务,从而导致数据存储及依赖它的服务(云引擎、推送、实时聊天)出现约半小时的中断,在此期间有部分应用可能会遇到请求无法完成的情况。详细报告如下。故障节点和影响范围只有中国节点出现了问题,受影响的服务与时间段列举如下,其他服务未受到影响。服务名区域受影响时段范围数据存储中国19:10 – 19:41全部不可用云引擎中国19:10 – 19:41全部不可用实时通信中国19:10 – 19:41部分不可用(消息 hook 功能不可用、离线推送延迟)消息推送中国19:10 – 20:02推送大面积延迟统计服务中国19:10 – 20:23全部不可用(数据收集接口关闭)故障时间线19:10:内部监控报警,确认 redis 异常(CPU 资源占满,失去响应)。19:13:redis 机器无法直接重启,开始尝试逐步关停其他服务(依次是推送、聊天推送、云引擎、统计),以降低请求压力。19:41:redis 集群恢复可用,同时数据存储、云引擎和实时通信三个服务开始恢复。20:02:消息推送服务开始恢复,redis 集群运行正常。20:23:成功为统计服务单独搭建 redis 集群,统计服务的数据收集接口开放,新老 redis 集群运行正常。至此所有服务全部恢复。后续措施将该 redis 集群从业务层面进行拆分,小集群化。将 redis 集群进行高可用架构升级,避免单点故障。对集群加强容灾演练,确保异常条件下服务稳定。对于本次故障,我们诚恳地向您道歉。我们将免掉您账户中全部应用在 8 月 5 日当天的所有费用,以表诚意。

摘要即时通讯云 LeanCloud 3月29日因少量大用户量应用的高在线量而发生了连锁服务故障,这个问题相信不是第1次发生,也不会是最后一次。对于即时通讯云服务商来说,要想在成本和服务质量上达成平衡,暂期内只能是个梦。2016 年 3 月 29 日晚间,LeanCloud 平台上的多个应用进行了推广活动,激增的访问量给我们的数据存储和实时通信服务带来了较大压力。从 20:50 至 22:15 有多次流量高峰出现,我们多台 Web 服务器的网络吞吐包超过虚拟机的能力极限,内外网通信中断,从而导致 HTTP 服务多次出现间歇性故障(数据存储 API 以及依赖于它的服务也都间歇性不可用)。具体情况汇报如下:故障时间20:53 - 21:03(持续约 10 分钟)数据存储 API 服务约 50% 的请求超时。21:17 - 21:40(持续约 23 分钟)数据存储 API 服务约 50% 的请求超时。22:00 - 22:15(持续约 15 分钟)数据存储 API 服务约 12.5% 的请求超时。故障总共持续约 48 分钟。影响范围本次故障只影响中国节点,美国节点的所有服务均工作正常。在故障期间凡是向 LeanCloud 平台发送过请求,并使用了数据存储服务的活跃应用都受到了影响;我们的统计服务也在短时间内无法正常接收来自应用的事件上报。事故过程20:52:内部监控系统报警,显示多个 Web 服务器节点出现故障。我们立刻上线进行紧急处理,在排除后端服务问题之后,开始追查前端资源和带宽配额。21:03:由于部分应用流量回落,同时也由于我们临时大幅增加了出口带宽,服务暂时恢复正常。21:05:我们开始扩容前端机集群,以应对接下来可能再次出现的流量高峰。21:17:前端机扩容时碰到了虚拟机 OS 故障以及网络环境问题,未能及时完成。此时恰好部分应用又迎来一次流量高峰,前端机再次吃紧。21:30:修复过程将近半小时,于是我们启动了公告和通知流程,在微博和用户群里发出通告。21:40:流量自然回落,前端机再次恢复正常,我们的平台开始正常处理 API 请求。22:00:线上部分前端机出现物理故障,我们又开始对它们进行紧急处理,期间有大约 1/8 的 API 请求丢失。22:15:新的前端机节点经过手动处理后终于达到可用状态,并加入集群,完成了扩容,至此全部服务彻底被恢复。后续改进措施增加新的监控措施,对前端机网络入包量进行监控,防止网络转发量超过 VM 能力限制。调整前端机 VM 配置,使用高包量机型,增大前端机的处理能力。改进前端机扩容方式,使用 docker 镜像来加快新节点部署上线的进度。公告流程中增加短信通知渠道,确保信息及时通知到开发者。

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

摘要2016年11月22日,即时通讯云服务商LeanCloud中国节点所有服务瘫痪约 50 分钟。以下消息来自LeanCloud官网:11 月 22 日中午 12:55,我们收到来自内部监控系统的报警,发现 LeanCloud 中国节点的各项服务出现异常,经过近 50 分钟的抢修,最终在 13:45 将全部服务恢复。在此时段受到影响的应用较多,这令我们感到十分愧疚,所以在此诚恳地向用户们道歉,同时我们也将免掉中国节点用户账户在 2016 年 11 月 22 日所产生的除短信外的全部费用。以下为本次故障的详细情况和改进措施,请大家监督和反馈。故障节点和影响范围本次故障仅发生在中国节点,存储服务和依托于存储的聊天、云引擎等各项服务都无法正常响应。故障时间线12:55:内部监控系统发出报警,大量存储 API 节点失去响应,随后也有开发者反馈 API 响应异常。13:11:第一次重启了所有 API 节点,系统有所好转但很快又出现了恶化。13:36:定位到故障原因,是后台服务对部分特殊请求存在漏洞,系统资源被逐渐耗尽,致使各模块都无法正常提供服务。立即实施热修复,阻断流量,再次重启所有 API 节点。13:45:所有 API 节点运行正常,开放流量,各服务恢复正常。后续措施加大 API 节点的资源配置,以期类似不可预知的事件发生时,可以延缓状态恶化的过程,争取更长的处理时间。(11 月 24 日前完成)本次故障原因比较复杂,内部定位花费了较长时间,因此需要进一步完善对网络延迟、缓存节点等内部各环节的监控与状态展示,缩短故障排查时间。(11 月 29 日前完成)详细排查所有资源消耗的潜在问题点,对自定义的结构化数据实现更严格的限制和检查。(12 月 8 日前完成)详情请见:

摘要2016年6月份即时通讯云供应商LeanCloud的产品更新内容汇总,仅供参考。以下信息来自LeanCoud官方:6 月份最重大的改进在云引擎方面,云引擎开始支持 PHP这门世界上最好的语言,开发文档(网站托管和云函数)也已齐备。此外,我们计划开始测试 Java SDK 对云引擎的支持。在客户端,iOS ChatKit库也正式推出。ChatKit 是一个由 LeanCloud 官方推出、免费开源、自带 UI 的聊天组件,其底层聊天服务基于 LeanCloud 的 IM 实时通信服务 LeanMessage 而开发,支持 iOS 7+。它的最大特点是把聊天常用的一些功能与 UI 整合一起提供给开发者,帮助开发者快速集成 IM 服务,轻松实现聊天功能。同时它提供完全自由的授权协议,支持二次开发。iOS SDK 最新版本也发布了对 IPv6-Only 环境的支持。消息推送方面,我们很快会发布混合推送功能,支持小米、华为等第三方推送平台,提高 Android 手机在这些平台上的消息到达率,请留意我们的博客和微博通知。我们还发布了 LeanCloud iOS 应用。用户可以在手机上查看 LeanCloud 控制台中与应用相关的基本信息和统计数据,修改设置等等,欢迎下载和试用。更详细的汇总如下。网站及存储服务API 统计的慢查询统计增加了云引擎 hook 的调用统计,耗时较长的 hook 将在该菜单显示,用户可依此来进行优化。API 统计增加 HTTP 状态码和错误码统计,方便用户监控应用的健康状况。修复导入服务导入 Schema 失败的问题,感谢用户的反馈。增加429 错误码,提醒「超过流控限制」。加强检测 ACL 合法性。修复导出失败所调用的邮件模板。离线分析发布了新的结果导出的方案,增强稳定性。实时通信及短信美国节点支持敏感词过滤。完成了混合推送功能,支持小米、华为等第三方推送平台,发布时间请留意我们的博客和微博。lastMessage增加 from 等信息。iOS 推送历史记录增加成功计数字段。短信签名支持默认签名设置。改进短信流控机制,常见的参数和权限错误将不会增加发送次数。云引擎正式发布 PHP 语言支持及相关文档:网站托管开发指南和云函数开发指南。node-js-getting-started更新全局异常处理方式,并增加默认的 15 秒请求超时。上线新的日志收集服务,更加实时和稳定。增强 Hook 安全性,强制校验签名。命令行工具发布了 1.3 版本(Hook 签名和其他 Bug 修复)以及一些细节修改等。LeanEngine Node SDK发布 1.1 版本,强制认证所有 Hook 签名。我们很快会发布 Java SDK 测试版,以及对云引擎的支持,敬请留意我们的博客和微博。iOS SDKiOS SDK 最重要的改进是兼容 IPv6-only 环境,这是苹果官方的最新要求。最新版本是 3.3.4,其他改进如下:修复可变集合在遍历时被修改导致崩溃的问题。修复 protobuf 与用户使用的 protobuf 冲突的问题。修复当有未读消息时,出现「断开—重连」死循环的问题。修复文件类型消息中,文件属性偶尔丢失的问题。修复上传文件时,创建脏数据的问题。修复使用美国节点时,REST API 指向国内节点的问题。修复 protobuf 与用户使用的库冲突的问题。修复云引擎的请求日志无法打印的问题。注意:为了兼容 IPv6-only 网络环境,3.3.3 版本重写了网络层,使得静态库最低支持 iOS 7,后续版本不再支持 iOS 6。请将 iOS 应用的 deployment target 设置为 7.0 及以上。Android SDKAndroid SDK 主要改进集中在 IM SDK 的重连方面,增强稳定性:修复实时通讯网络重连时有可能出现的 NPE 问题。开发者可以自定义日志输出。修复AVIMConversation的attribute会覆盖更新的问题。修复创建会话时会报 4301 的问题。修复实时通讯断网后不能及时重连问题。修改AVIMConversation的setAttribute函数为增量更新,避免覆盖其他已经存在的属性。JavaScript SDK防止 SDK 覆盖全局变量 AV。Object.add、Object.addUnique、Object.remove等方法支持传入非数组类型的 value 参数。修复路由缓存异常时,不再出现多次 410 错误请求。美国节点上传到 S3 改为直接上传,不再通过服务器中转。增加AV.User.associateWithAuthData()方法。修复AV.User.signUpOrlogInWithAuthData()省略 callback 参数会报异常的问题。修复 React Native 中import leancloud-storage时抛出「cannot read property "APIServerURL" for undefined」异常的问题。JavaScript 实时通信和推送 SDK发布leancloud-realtime-typed-messages。改进ConversationQuery对lastMessage的支持,包含更完整的信息。PHP SDK支持云引擎,及 Slim 框架的中间件。云引擎 Node.js SDK详情参考Change Log,主要改进如下:添加对X-LC-UA头的跨域支持。升级 JavaScript SDK 到 leancloud-storage 1.0.0,可能存在细微不兼容。强制检查 Class Hook、User Hook、实时通讯 Hook 的签名信息,确保请求来自 LeanCloud(签名错误的请求会打印一条日志)。使用AV.Cloud.run运行云函数时,被运行的云函数将会得到和 HTTP 调用时结构一致的 request 参数。原文链接:

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

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

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

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

郑重声明:本文版权归新匍京a奥门-最全网站手机版app官方下载所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。