分类目录归档:故障

关于 LeanCloud 国内域名解析问题的情况更新(6 月 21 日)

各位 LeanCloud 的用户大家好,我是 LeanCloud 的联合创始人江宏。

大部分用户都已经知道我们的两个域名目前无法解析,具体的情况我们昨天给大家发了邮件和博客说明,今天又再次发了短信通知。虽然这件事还没有解决,但本着对事件处理过程透明的原则,我想向大家更新一下最新进展,以及我们已经采取的措施。

由于在域名被禁用前没有事先通知我们,所以昨天我们在事情发生一段时间之后也不知道具体的原因。后来经过和阿里云各相关消息渠道一段时间的沟通后得知是因为某违规应用被查封,所以该应用访问的域名受到牵连。我们到目前为止没有看到有关函件的内容。根据应用名判断,我们已经于一个月前就清查和处理过这个应用,禁用了相关账号,这次不知因什么原因仍然被该应用影响导致两个域名被设为 ClientHold。我在今天下午拜访了有关部门,递交了我们的处理情况说明、申诉和保证,仍需要等待确认才可以解禁。很抱歉目前原有域名的恢复时间取决于政府部门之间的沟通进展,我们也无法给用户准确的估计。

在我们可控制的范围内,我们针对这件事已经完成的应对措施有:

  • 为可以替换域名的用户提供可用的替代域名,说明见博客
  • 我们 iOS、Android、JS、Unity 等 SDK 都做了紧急更新,以避免国际版的应用受国内域名的影响。
  • 为避免在解决问题过程中出现其它问题,华北和华东节点暂停新开发版应用的创建。如果您有需要可以用邮件联系我们创建,或者使用国际版。
  • 华北节点提供了自助绑定 API 自定义域名的功能,自定义域名可用于访问数据存储、云函数、短信、推送以及即时通讯服务。你可以在控制台的「存储 -> 设置 -> 自定义 API 服务域名」中提供一个已备案的域名(如需开启 HTTPS 还需提供对应的证书)来自助绑定。详细的自定义域名的配置和使用文档参见另一篇博客

我们还有一些正在实施的措施,既为了应对目前情况,也为了在更长期能把特殊国情带来的特殊风险限制在尽量小的范围。我们也会把后续的和有关部门的沟通结果同步给用户。有一些用户因为域名解析问题无法联系我们,请注意我们的各个线上联系渠道有的使用了临时域名:

很多用户在此次事件的沟通中给予了我们宝贵的宽容、支持和信任。我想特别向我们的用户表达感谢,并将继续尽我们所能克服未来可能遇到的困难,服务好用户。

关于 LeanCloud 国内域名解析问题的情况更新

我们监测到从今天(06/20)下午开始各个地区陆续出现部分网络无法解析华北节点的 api.leancloud.cn 以及 *.lncld.net 域名的问题。通过和我们的域名注册商阿里云沟通,得知他们接到有关部门行政命令将一批域名设置为 ClientHold 状态,其中包括 leancloud.cn 和 lncld.net,但是没有可执行的其它信息可以提供给我们。目前我们仍在和阿里云沟通中。
这个问题目前影响到从公网使用 leancloud.cn、lncld.net 及其子域名的服务,包括:

  • 华北节点:从公网对存储及即时通讯服务的调用
  • 华东节点:即时通讯服务和部分使用老版本 SDK 访问存储服务的应用
  • 美国节点部分仍在使用 us-api.leancloud.cn 从公网调用存储服务的老应用
  • 美国节点的即时通讯服务(我们在做一些改动降低影响范围)

不受影响的服务有

  • 各节点:云引擎的公网访问及云引擎对存储、即时通讯服务 API 的访问
  • 对华东节点存储服务的访问
  • 美国节点的大部分应用(使用新域名的应用)对存储服务的访问

在争取尽快彻底解决问题的同时,我们也提供了让用户可以暂时切换的域名。如果您是从服务端,或者 JavaScript 代码调用 LeanCloud 的服务,可以按照这里的说明来切换到新域名。

感谢您的耐心和理解。我们会及时与用户沟通新的进展。

域名无法访问的临时解决方案

我们监测到从今天(06/20)下午开始各个地区陆续出现部分网络无法解析 leancloud.cn 以及 ***.***.lncld.net 域名的问题。我们正在全力和域名提供商沟通该问题的解决方案。在问题彻底解决之前,我们建议开发者更换域名作为临时解决方案。

开发者如何访问 LeanCloud 控制台等服务

将原域名 leancloud.cn 切换成 avoscloud.com 即可:

官网:https://avoscloud.com/
博客:https://blog.avoscloud.com/
健康状态:https://status.avoscloud.com
论坛:https://forum.avoscloud.com

华北节点控制台:https://avoscloud.com/dashboard/
华东节点控制台:https://tab.avoscloud.com
美国节点控制台:https://us.avoscloud.com

华北节点

云引擎

云引擎本身不受影响(因为云引擎内部运行的代码访问 API 走的是内网),但是命令行工具部署代码可能有问题,需要进行如下配置后才能正常使用:

0) 升级命令行工具到最新版 0.20.1

1) 根据具体的环境,执行下列命令:

Shell 环境

export LEANCLOUD_DASHBOARD=https://avoscloud.com
export LEANCLOUD_API_SERVER=https://avoscloud.com

Windows 环境

set LEANCLOUD_DASHBOARD=https://avoscloud.com
set LEANCLOUD_API_SERVER=https://avoscloud.com

2) 使用 lean login 重新登录

当然,如果在云引擎托管网站,其中的客户端 JavaScript 访问 LeanCloud API,
仍然需要按照下面 JavaScript SDK 一节中的方法切换域名。

服务端应用

如果是在自己的服务器上跑的应用(包括通过 REST API 和 SDK),
最简单快捷的方法是修改服务器的 /etc/hosts,加入以下行:

117.50.12.165        leancloud.cn
123.59.50.132        app-router.leancloud.cn
123.59.58.149        router-g0-push.leancloud.cn

此外,还需要加上 {{appid 前八位}}.api.lncld.netapi.leancloud.cn 这两项记录。

这两项记录的 IP 值通过在命令行 dig avoscloud.com 获取(在 ANSWER SECTION 部分查看结果),
dig 命令可能返回多个 IP,任选其一即可。

如果需要访问云函数,还需加上 {{appid 前八位}}.engine.lncld.net 这条记录,IP 值同样通过 dig avoscloud.com 获取。

注意,如果需要在本地调试服务端应用,那么本地机器的 hosts 文件同样需要修改(不同操作系统的 hosts 文件路径不同,请自行搜索相关方法)。

REST API

注意:

  1. 在云引擎内访问 REST API,同样走的是内网,不受影响,无需修改代码。
  2. 服务端访问 REST API 的话,请优先尝试上面提到的修改 /etc/hosts 的方法,不用修改代码。

客户端访问 REST API,需要在代码中将 api.leancloud.cn{{appid 前八位}}.api.lncld.net 域名替换为 avoscloud.com

客户端通过 REST API 访问云函数,需要将 {{appid 前八位}}.engine.lncld.net 替换为 avoscloud.com

SDK

注意:

  1. 云引擎 SDK 不受影响,无需修改代码。
  2. 服务端 SDK,请优先尝试上面提到的修改 /etc/hosts 的方法,不用修改代码。

客户端 SDK 需要进行如下修改:(注意,只有较新版本的 SDK 才支持设定 API 服务器地址)

JavaScript SDK

存储 SDK(3.0.0 以上支持,建议升级到 3.11.1 以上,详情见下)

AV.init({
  // appId, appKey,
  serverURLs: 'https://avoscloud.com',
});

>= 3.5.5, < 3.11.1 的应用可能会碰到仍然使用缓存默认配置的 bug,
更新后应用打开的第一次请求可能失败。

>= 3.0.0, < 3.5.5 的应用 不能按上述方法设置,需要使用如下的写法:

AV.init({
  // appId, appKey,
  serverURLs: {
    push: 'https://avoscloud.com',
    stats: 'https://avoscloud.com',
    engine: 'https://avoscloud.com',
    api: 'https://avoscloud.com',
  },
});

如果你使用了 LiveQuery 功能,还需要在初始化的时候额外指定 LiveQuery 模块的域名配置(需要版本 >= 3.5.0):

AV.init({
  // appId, appKey,
  // serverURLs,
  realtime: new AV._sharedConfig.liveQueryRealtime({
    appId,
    appKey,
    server: 'example.com',
  }),
});

即时通讯 SDK(4.0.0 以上支持)

new Realtime({
  // appId, appKey,
  server: {
    api: 'avoscloud.com',
    RTMRouter: 'router-g0-push.avoscloud.com',
  },
};

多人在线对战 SDK

new Client({
      appId: '',
      appKey: '',
      userId: 'tar1',
      playServer: 'https://game-router-cn-n1.avoscloud.com/v1',
});
微信小程序

微信小程序白名单增加:

存储:
request:https://avoscloud.com

即时通讯:
request:https://router-g0-push.avoscloud.com/
Socket:
wss://cn-n1-cell1.avoscloud.com,
wss://cn-n1-cell2.avoscloud.com,
wss://cn-n1-cell5.avoscloud.com,
wss://cn-n1-cell7.avoscloud.com

多人在线对战:
Request:https://game-router-cn-n1.avoscloud.com/
Socket:
wss://cn-n1-wechat-mesos-cell-1.avoscloud.com
wss://cn-n1-wechat-mesos-cell-2.avoscloud.com
wss://cn-n1-wechat-mesos-cell-3.avoscloud.com
wss://cn-n1-wechat-mesos-cell-4.avoscloud.com

iOS SDK

Objective-C SDK

// 配置 SDK 储存
[AVOSCloud setServerURLString:@"https://avoscloud.com" forServiceModule:AVServiceModuleAPI];
// 配置 SDK 推送
[AVOSCloud setServerURLString:@"https://avoscloud.com" forServiceModule:AVServiceModulePush];
// 配置 SDK 云引擎
[AVOSCloud setServerURLString:@"https://avoscloud.com" forServiceModule:AVServiceModuleEngine];
// 配置 SDK 即时通讯
[AVOSCloud setServerURLString:@"https://router-g0-push.avoscloud.com" forServiceModule:AVServiceModuleRTM];
// 配置 SDK 统计
[AVOSCloud setServerURLString:@"https://avoscloud.com" forServiceModule:AVServiceModuleStatistics];
// 初始化
[AVOSCloud setApplicationId:APP_ID clientKey:APP_KEY];

Swift SDK(16.1.0 以上)

let configuration = LCApplication.Configuration(
    customizedServers: [
        .api("https://avoscloud.com"),
        .engine("https://avoscloud.com"),
        .push("https://avoscloud.com"),
        .rtm("https://router-g0-push.avoscloud.com")
    ]
)
try LCApplication.default.set(
    id: "APP_ID",
    key: "APP_KEY",
    configuration: configuration
)

Android SDK

// 配置 SDK 储存
AVOSCloud.setServer(AVOSCloud.SERVER_TYPE.API, "https://avoscloud.com");
// 配置 SDK 云引擎
AVOSCloud.setServer(AVOSCloud.SERVER_TYPE.ENGINE, "https://avoscloud.com");
// 配置 SDK 推送
AVOSCloud.setServer(AVOSCloud.SERVER_TYPE.PUSH, "https://avoscloud.com");
// 配置 SDK 即时通讯
AVOSCloud.setServer(AVOSCloud.SERVER_TYPE.RTM, "https://router-g0-push.avoscloud.com");
// 初始化
AVOSCloud.initialize(this,APP_ID,APP_KEY);

Java Unified SDK

import cn.leancloud.core.AVOSService;

// 配置 SDK 储存
AVOSCloud.setServer(AVOSService.API, "https://avoscloud.com");
// 配置 SDK 云引擎
AVOSCloud.setServer(AVOSService.ENGINE, "https://avoscloud.com");
// 配置 SDK 推送
AVOSCloud.setServer(AVOSService.PUSH, "https://avoscloud.com");
// 配置 SDK 即时通讯
AVOSCloud.setServer(AVOSService.RTM, "https://router-g0-push.avoscloud.com");
// 初始化
AVOSCloud.initialize(this,APP_ID,APP_KEY);

.NET SDK

AVClient.Initialize(new AVClient.Configuration {
                ApplicationId = appId,
                ApplicationKey = appKey,
                ApiServer = new Uri("https://avoscloud.com"),
                EngineServer = new Uri("https://avoscloud.com")
            });
// 通过 RTM Router 配置即时通讯
var realtime = new AVRealtime(new AVRealtime.Configuration
           {
                ApplicationId = "app-id",
                ApplicationKey = "app-key",
                RTMRouter = new Uri("https://router-g0-push.avoscloud.com")
           });

多人在线对战,v0.5.0-alpha.0 及之后的版本

var client = new Client(appId, appKey, userId, playServer: "https://game-router-cn-n1.avoscloud.com/v1");
await client.Connect();

PHP SDK 和 Python SDK

这两个属于服务端 SDK,请使用上面「服务端应用」一节提到的修改 /etc/hosts 的方法,不用修改代码。

华东节点

华东节点的大部分服务不受此次事件的影响。

云引擎命令行工具

0) 升级命令行工具到最新版 0.20.1

1) 根据具体的环境,执行下列命令:

Shell 环境

export LEANCLOUD_DASHBOARD=https://tab.avoscloud.com
export LEANCLOUD_API_SERVER=https://avoscloud.com

Windows 环境

set LEANCLOUD_DASHBOARD=https://tab.avoscloud.com
set LEANCLOUD_API_SERVER=https://avoscloud.com

2) 使用 lean login 重新登录

JavaScript

即时通讯 SDK

const appId = 'YOUR_APP_ID';
new Realtime({
  // appId, appKey,
  server: {
    api: 'APPID 前八位.api.lncldapi.com',
    RTMRouter: 'APPID 前八位.rtm.lncldapi.com',
  },
};

多人在线对战 SDK

new Client({
      appId: '',
      appKey: '',
      userId: 'tar1',
      playServer: 'https://{{APPID 前八位}}.play.lncldapi.com/1/multiplayer/router',
});

如果在小程序中使用,还需要将 APPID 前八位.api.lncldapi.comAPPID 前八位.rtm.lncldapi.comAPPID 前八位.play.lncldapi.com 添加到域名白名单列表中。

iOS SDK

Objective-C SDK

// 配置 SDK 储存
[AVOSCloud setServerURLString:@"https://{{APPID 前八位}}.api.lncldapi.com" forServiceModule:AVServiceModuleAPI];
// 配置 SDK 推送
[AVOSCloud setServerURLString:@"https://{{APPID 前八位}}.push.lncldapi.com" forServiceModule:AVServiceModulePush];
// 配置 SDK 云引擎
[AVOSCloud setServerURLString:@"https://{{APPID 前八位}}.engine.lncldapi.com" forServiceModule:AVServiceModuleEngine];
// 配置 SDK 即时通讯
[AVOSCloud setServerURLString:@"https://{{APPID 前八位}}.rtm.lncldapi.com" forServiceModule:AVServiceModuleRTM];
// 配置 SDK 统计
[AVOSCloud setServerURLString:@"https://{{APPID 前八位}}.stats.lncldapi.com" forServiceModule:AVServiceModuleStatistics];
// 初始化
[AVOSCloud setApplicationId:APP_ID clientKey:APP_KEY];

Swift SDK 升级到最新版即可。

Android SDK

// 配置 SDK 储存
AVOSCloud.setServer(AVOSCloud.SERVER_TYPE.API, "https://{{APPID 前八位}}.api.lncldapi.com");
// 配置 SDK 云引擎
AVOSCloud.setServer(AVOSCloud.SERVER_TYPE.ENGINE, "https://{{APPID 前八位}}.engine.lncldapi.com");
// 配置 SDK 推送
AVOSCloud.setServer(AVOSCloud.SERVER_TYPE.PUSH, "https://{{APPID 前八位}}.push.lncldapi.com");
// 配置 SDK 即时通讯
AVOSCloud.setServer(AVOSCloud.SERVER_TYPE.RTM, "https://{{APPID 前八位}}.rtm.lncldapi.com");
// 初始化
AVOSCloud.initialize(this,APP_ID,APP_KEY);

Java Unified SDK

import cn.leancloud.core.AVOSService;

// 配置 SDK 储存
AVOSCloud.setServer(AVOSService.API, "https://{{APPID 前八位}}.api.lncldapi.com");
// 配置 SDK 云引擎
AVOSCloud.setServer(AVOSService.ENGINE, "https://{{APPID 前八位}}.engine.lncldapi.com");
// 配置 SDK 推送
AVOSCloud.setServer(AVOSService.PUSH, "https://{{APPID 前八位}}.push.lncldapi.com");
// 配置 SDK 即时通讯
AVOSCloud.setServer(AVOSService.RTM, "https://{{APPID 前八位}}.rtm.lncldapi.com");
// 初始化
AVOSCloud.initialize(this,APP_ID,APP_KEY);

.NET SDK

// 配置存储和云引擎
AVClient.Initialize(new AVClient.Configuration {
                ApplicationId = appId,
                ApplicationKey = appKey,
                ApiServer = new Uri("https://{{APPID 前八位}}.api.lncldapi.com"),
                EngineServer = new Uri("https://{{APPID 前八位}}.engine.lncldapi.com")
            });
// 通过 RTM Router 配置即时通讯
var realtime = new AVRealtime(new AVRealtime.Configuration
           {
                ApplicationId = "app-id",
                ApplicationKey = "app-key",
                RTMRouter = new Uri("https://{{APPID 前八位}}.rtm.lncldapi.com")
           });

多人在线对战,v0.5.0-alpha.0 及之后的版本

var client = new Client(appId, appKey, userId, playServer: "https://{{APPID 前八位}}.play.lncldapi.com/1/multiplayer/router");
await client.Connect();

美国节点

美国节点的大部分服务不受此次事件的影响。

云引擎命令行工具

0) 升级命令行工具到最新版 0.20.1

1) 根据具体的环境,执行下列命令:

Shell 环境

export LEANCLOUD_DASHBOARD=https://us.avoscloud.com
export LEANCLOUD_API_SERVER=https://us.avoscloud.com

Windows 环境

set LEANCLOUD_DASHBOARD=https://us.avoscloud.com
set LEANCLOUD_API_SERVER=https://us.avoscloud.com

2) 使用 lean login 重新登录

在 Shell 中执行 export LEANCLOUD_DASHBOARD=; export LEANCLOUD_API_SERVER= 后再运行命令行工具(需要用 lean login 重新登录)

JavaScript

即时通讯 SDK

const appId = 'YOUR_APP_ID';
new Realtime({
  // appId, appKey,
  server: {
    api: 'APPID 前八位.api.lncldglobal.com',
    RTMRouter: 'APPID 前八位.rtm.lncldglobal.com',
  },
};

多人在线对战 SDK

new Client({
      appId: '',
      appKey: '',
      userId: 'tar1',
      playServer: 'https://{{APPID 前八位}}.play.lncldglobal.com/1/multiplayer/router',
});

如果在小程序中使用,还需要将 APPID 前八位.api.lncldglobal.comAPPID 前八位.rtm.lncldglobal.comAPPID 前八位.play.lncldglobal.com 添加到域名白名单列表中。

iOS SDK

Objective-C SDK

// 配置 SDK 储存
[AVOSCloud setServerURLString:@"https://{{APPID 前八位}}.api.lncldglobal.com" forServiceModule:AVServiceModuleAPI];
// 配置 SDK 推送
[AVOSCloud setServerURLString:@"https://{{APPID 前八位}}.push.lncldglobal.com" forServiceModule:AVServiceModulePush];
// 配置 SDK 云引擎
[AVOSCloud setServerURLString:@"https://{{APPID 前八位}}.engine.lncldglobal.com" forServiceModule:AVServiceModuleEngine];
// 配置 SDK 即时通讯
[AVOSCloud setServerURLString:@"https://{{APPID 前八位}}.rtm.lncldglobal.com" forServiceModule:AVServiceModuleRTM];
// 配置 SDK 统计
[AVOSCloud setServerURLString:@"https://{{APPID 前八位}}.stats.lncldglobal.com" forServiceModule:AVServiceModuleStatistics];
// 初始化
[AVOSCloud setApplicationId:APP_ID clientKey:APP_KEY];

Swift SDK 升级到最新版即可。

Android SDK

// 配置 SDK 储存
AVOSCloud.setServer(AVOSCloud.SERVER_TYPE.API, "https://{{APPID 前八位}}.api.lncldglobal.com");
// 配置 SDK 云引擎
AVOSCloud.setServer(AVOSCloud.SERVER_TYPE.ENGINE, "https://{{APPID 前八位}}.engine.lncldglobal.com");
// 配置 SDK 推送
AVOSCloud.setServer(AVOSCloud.SERVER_TYPE.PUSH, "https://{{APPID 前八位}}.push.lncldglobal.com");
// 配置 SDK 即时通讯
AVOSCloud.setServer(AVOSCloud.SERVER_TYPE.RTM, "https://{{APPID 前八位}}.rtm.lncldglobal.com");
// 初始化
AVOSCloud.initialize(this,APP_ID,APP_KEY);

Java Unified SDK

import cn.leancloud.core.AVOSService;

// 配置 SDK 储存
AVOSCloud.setServer(AVOSService.API, "https://{{APPID 前八位}}.api.lncldglobal.com");
// 配置 SDK 云引擎
AVOSCloud.setServer(AVOSService.ENGINE, "https://{{APPID 前八位}}.engine.lncldglobal.com");
// 配置 SDK 推送
AVOSCloud.setServer(AVOSService.PUSH, "https://{{APPID 前八位}}.push.lncldglobal.com");
// 配置 SDK 即时通讯
AVOSCloud.setServer(AVOSService.RTM, "https://{{APPID 前八位}}.rtm.lncldglobal.com");
// 初始化
AVOSCloud.initialize(this,APP_ID,APP_KEY);

.Net 即时通讯 SDK

// 配置存储和云引擎
AVClient.Initialize(new AVClient.Configuration {
                ApplicationId = appId,
                ApplicationKey = appKey,
                ApiServer = new Uri("https://{{APPID 前八位}}.api.lncldglobal.com"),
                EngineServer = new Uri("https://{{APPID 前八位}}.engine.lncldglobal.com")
            });
// 通过 RTM Router 配置即时通讯
var realtime = new AVRealtime(new AVRealtime.Configuration
           {
                ApplicationId = "app-id",
                ApplicationKey = "app-key",
                RTMRouter = new Uri("https://{{APPID 前八位}}.rtm.lncldglobal.com")
           });

多人在线对战,v0.5.0-alpha.0 及之后的版本

var client = new Client(appId, appKey, userId, playServer: "https://{{APPID 前八位}}.play.lncldglobal.com/1/multiplayer/router");
await client.Connect();

关于 7 月 31 日 AppSo 应用的部分用户收到重复推送的说明及致歉

7 月 31 日下午,我们收到爱范儿团队的通知了解到他们发布的 AppSo 应用部分用户在中午 12 点之后的半小时里收到了多至 27 次的重复推送通知。我们的工程师在当天下午定位了故障原因:我们在给大量用户推送时会遍历数据库来逐批发送推送,在这个过程中如果有已发送推送的设备记录发生更新,就可能再次出现在遍历过程中,更详细的技术性说明可以参考 StackOverflow 的这篇帖子。触发这个条件的情况非常少见,但导致了这次推送故障。目前我们已经实现了防止类似情况发生的措施。

这次故障打扰了 AppSo 的很多用户,并给 AppSo 运营团队的工作带来了困扰。我们在此向他们诚挚道歉。

4 月 6 日 LeanCloud 中国节点因底层服务商的故障而引发部分服务中断 38 分钟的说明

2017 年 4 月 6 日 22:19,我们收到内部告警,发现中国节点的 API 服务出现了响应超时。在调查过程中,我们收到了来自底层服务提供商的通知,证实了中国节点所在的数据中心因部分网络设备异常而发生了容灾切换,导致部分 IP 不可访问,从而影响到部分 LeanCloud 服务(包括数据存储、REST API 和 LeanCloud 官网)无法使用,底层服务商已在紧急修复相关机房的网络故障。

与此同时,云引擎与实时通信服务并未受到任何影响,一直正常提供服务。此外,故障仅发生在中国节点,美国节点和腾讯节点及其之上的所有服务也都正常。截至到 22:57,根据我们的服务状态报告,中国节点的各项服务均恢复了正常。

继续阅读

2 月 22 日晚间云引擎日志、推送记录和统计数据部分丢失的说明

2017 年 2 月 22 日将近 18:00,我们在进行后端集群维护的过程中发现一个集群在重启后无法正常上线,影响了统计数据的存储,统计的数据接收 API 不再响应。同时统计服务也承担了云引擎日志、推送记录的写入,以及相关记录的 REST API 查询功能,所以事故期间,统计数据、云引擎日志和推送记录都会有不同程度的丢失。但是存储、聊天、云引擎等核心服务和业务数据并未受到影响,请大家放心。

我们连夜对该集群进行修复,待部分数据恢复后,其服务于凌晨 0 点开始恢复,但仍有一定比例的请求会失败。直至次日凌晨 5 点所有数据得以修复后,统计服务完全恢复健康。故障期间,推送记录和云引擎日志约有 75% 的记录丢失,数据收集和实时展示基本不可用。由于统计数据不完整,所以最终统计的相关指标也会有所下降。

继续阅读

11 月 22 日中国节点 API 请求异常约 50 分钟的说明

11 月 22 日中午 12:55,我们收到来自内部监控系统的报警,发现 LeanCloud 中国节点的各项服务出现异常,经过近 50 分钟的抢修,最终在 13:45 将全部服务恢复。在此时段受到影响的应用较多,这令我们感到十分愧疚,所以在此诚恳地向用户们道歉,同时我们也将免掉中国节点用户账户在 2016 年 11 月 22 日所产生的除短信外的全部费用。

以下为本次故障的详细情况和改进措施,请大家监督和反馈。

继续阅读

2016 年 10 月 17 日:骨干网网络故障引发 LeanCloud 服务超时的说明

根据底层 IaaS 服务提供商报告,10 月 17 日 14:58 开始,中国南北骨干网线路外网电信线路出现网络异常,南北电信互访可能有 50% 以上的丢包现象,这导致终端用户访问 LeanCloud 服务时可能出现超时错误。

我们紧急联系并督促 IaaS 服务商于 15:12 切换出口线路到联通网络,此后丢包率下降到 3% 左右,但延迟会稍有上升(至 20ms)。电信运营商确认这一事故为深圳至北京部分链路省外光缆可能出现了中断,正在全力抢修中。我们会持续关注这一问题,并督促上游服务商尽快解决故障。

如果有任何疑问,请发邮件至 support@leancloud.rocks 来咨询。

2016 年 8 月 5 日:中国节点存储系统中断约半小时的故障说明

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 全部不可用(数据收集接口关闭)

继续阅读

2016 年 7 月 13 日:中国节点上部分应用的存储服务中断 48 分钟的故障说明

7 月 13 日早上 9 点左右,我们内部在使用中国节点的应用控制台时遇到报错,于是很快便定位到某一集群由于突发硬件故障而引起存储服务中断,经过抢修问题得以解决。大约一小时后正当我们在继续对该集群进行加固处理时,突然遇到流量高峰,该集群的性能逐渐下降并再次发生了故障。此次故障影响到中国节点上 20% 的应用无法使用存储及其依赖服务,如实时通信、云引擎等。美国节点不受影响。

继续阅读