海外数据中心

更新时间: 2024/10/08 17:15:18

如果您服务的用户主要在非中国大陆地区,您可以选择接入海外数据中心。本文主要介绍网易云信即时通讯 SDK(简称 NIM SDK)海外数据中心的接入流程、节点迁移流程以及相关说明。

接入流程

海外数据中心的接入流程为:

graph LR
    classDef default fill:#337EFF,stroke:#337EFF,stroke-width:0px,color:#FFFFFF;
A("创建应用") --> B1("选择服务区域") --> B("使用专属 API 域名") --> C("配置 link 域名和 LBS 域名")

当前只有使用 S3 存储(NIMFCS)时,所有图片/文件才存储于对应的数据中心。

第一步:创建应用

网易云信控制台 上创建应用,具体步骤请参考 创建应用并获取 AppKey 文档。

第二步:选择服务区域

参考 开通或试用服务,为您创建的应用 免费试用正式开通 IM 即时通讯产品,并指定节点的服务区域为 海外

  • 免费试用:

    免费试用 IM 7 天海外数据中心.png
  • 正式开通:

    海外数据中心正式版.png

第三步:使用专属 API 域名

海外数据中心需要使用海外指定的专属域名,目前海外仅支持新加坡数据中心,API 域名是 open-sg.yunxinapi.com

网易云信 IM 服务器的默认 API 域名为 open.yunxinapi.com,属于国内数据中心。用户在对接网易云信服务器时需要自行替换 API 域名。更多详情,请参考 服务端海外接口域名

如果您的应用的服务区域为海外数据中心,为满足海外访问域名合规性,您需要自行通过客户端 SDK 配置海外专属域名,包括 link 域名和 LBS 域名。

目前海外仅支持新加坡数据中心,新加坡域名地址如下表所示。

地址类型 新加坡域名
link 域名 link-sg.netease.im:7000
weblink 域名 weblink01-sg.netease.im:443
LBS 域名 lbs.netease.im
Android

初始化 SDK 时,通过 SDKOptions.serverConfig 配置服务器地址中的 LBS 和 link 域名相关信息。

JavaserverConfig.defaultLink = "link-sg.netease.im:7000";
serverConfig.lbs = "https://lbs.netease.im/lbs/conf.jsp";
serverConfig.nosUploadLbs = "https://wannos.127.net/lbs";
serverConfig.nosUploadDefaultLink = "https://nosup-hz1.127.net";
serverConfig.nosDownloadUrlFormat = "{bucket}-nosdn.netease.im/{object}";
serverConfig.nosUpload = "nosup-hz1.127.net";
serverConfig.nosSupportHttps = true;

参数说明:

参数
类型
说明
SDKOption Object 可自定义的 SDK 选项,用来进行 SDK 初始化配置。
defaultLink String IM 默认的 link 服务器地址,当 LBS 不可用时先连接该地址。填 IP/Host:PORT
lbs String IM LBS 服务器地址,通过它获取 IM link 地址信息。填 HTTP/HTTPS 地址。
nosUploadLbs String NOS 上传 LBS 服务器地址。填 HTTP/HTTPS 地址。
nosUploadDefaultLink String NOS 上传默认的 link 服务器地址,当 NOS LBS 不可用时先连接该地址。填 HTTP/HTTPS 地址。
nosDownloadUrlFormat String NOS 下载地址拼接模板,用于拼接最终得到的下载地址。
nosUpload String NOS 上传服务器主机地址(仅 nosSupportHttps=true 时有效,用作 HTTPS 上传时的域名校验及 http header host 字段填充)。填 Host 地址。
nosSupportHttps Boolean NOS 上传/下载是否都转换为 HTTPS 协议。
iOS

初始化 SDK 时,在 NIMServerSetting 中配置 LBS 和 link 域名参数,NIMServerSetting 需要您自行创建并注入。

Objective-Csetting.lbsAddress = @"https://lbs.netease.im/lbs/conf.jsp";
setting.linkAddress = @"link-sg.netease.im:7000";
setting.httpsEnabled = YES;

参数说明:

参数
类型
说明
NIMServerSetting Object 配置网易云信服务器相关信息。
lbsAddress String LBS 地址,默认为网易云信公网提供的链接。SDK 连接时会向 LBS 地址请求得到 Socket 连接地址。填 HTTP/HTTPS 地址。
linkAddress String Socket 备用地址,当 LBS 请求失败时,尝试直接连接 Socket 备用地址。填 IP/Host:PORT
httpsEnabled BOOL NOS 上传/下载是否都转换为 HTTPS 协议。
Web/uni-app 编译为非小程序环境

初始化 SDK 时,在 NIM.getInstance 中添加 LBS 和 link 域名参数的配置。

TypeScriptconst nim = NIM.getInstance(
   V2NIMLoginServiceConfig: {
    lbsUrls: [
      "https://lbs.netease.im/lbs/webconf"
    ],
    linkUrl: "weblink01-sg.netease.im:443"
  },
)

参数说明:

参数
类型
说明
NIM.getInstance Object IM 的初始化构造函数。
lbsUrls String[] LBS 地址,默认为网易云信公网提供的链接。SDK 连接时会向 LBS 地址请求得到 Socket 连接地址。填 HTTP/HTTPS 地址。
linkUrl String Socket 备用地址,当 LBS 请求失败时,尝试直接连接 Socket 备用地址。填 IP/Host:PORT
小程序/uni-app 编译为小程序环境

初始化 SDK 时,添加 LBS 和长连接域名参数的配置。

TypeScriptconst nim = NIM.getInstance(
   V2NIMLoginServiceConfig: {
    lbsUrls: [
      "https://lbs.netease.im/lbs/wxwebconf.jsp"
    ],
    linkUrl: "weblink01-sg.netease.im:443"
  },
)

参数说明:

参数
类型
说明
NIM.getInstance object IM 的初始化构造函数。
lbsUrls String[] LBS 地址,默认为网易云信公网提供的链接。SDK 连接时会向 LBS 地址请求得到 Socket 连接地址。填 HTTP/HTTPS 地址。
linkUrl String Socket 备用地址,当 LBS 请求失败时,尝试直接连接 Socket 备用地址。填 IP/Host:PORT
PC

通过设置 V2NIMInitOption 中的 privateServerOption 可以修改私有化环境配置,示例代码如下:

C{
  v2::V2NIMInitOption option;

  option.appkey = "Your appkey";
  option.appDataPath = "NIM";

  option.privateServerOption = v2::V2NIMPrivateServerOption();
  option.privateServerOption->ipProtocolVersion = V2NIM_IP_PROTOCOL_VERSION_IPV4;
  option.privateServerOption->lbsAddresses.push_back("https://lbs.netease.im/lbs/conf.jsp");
  option.privateServerOption->nosLbsAddress = "https://wannos.127.net/lbs";
  option.privateServerOption->defaultLinkAddress = "IPv6 default link address, e.g. link.netease.im:8080";
  option.privateServerOption->defaultLinkAddressIpv6 = "IPv6 default link address";
  option.privateServerOption->defaultNosUploadAddress = "https://nosup-hz1.127.net";
  option.privateServerOption->defaultNosUploadHost = "nosup-hz1.127.net";
  option.privateServerOption->nosDownloadAddress = "{bucket}-nosdn.netease.im/{object}";
  option.privateServerOption->nosAccelerateHosts.push_back("nos.netease.com");
  option.privateServerOption->nosAccelerateAddress = "{bucket}-nosdn.netease.im/{object}";
  option.privateServerOption->asymmetricEncryptionKeyA = "10001";
  option.privateServerOption->asymmetricEncryptionKeyB = "Public key";
  option.privateServerOption->asymmetricEncryptionKeyVersion = 0;
  auto error = v2::V2NIMClient::get().init(option);
  if (error) {
      // handle error
  }
}

在使用前,请先校验 JSON 格式是否正确。

Flutter

Android&iOS 环境:

初始化 SDK 时,通过 NIMServerConfig 配置服务器地址中的 LBS 和 link 域名相关信息。

Web 环境:

初始化 SDK 时,通过 NIMLoginServiceConfig 配置。

Windows&MacOS 环境:

初始化 SDK 时,通过 NIMPrivateServerOption 配置。

示例代码如下:

DartNIMServerConfig config = NIMServerConfig(
        defaultLink: "link-sg.netease.im:7000",
        lbs: "https://lbs.netease.im/lbs/conf.jsp",
        nosUploadLbs: "https://wannos.127.net/lbs",
        nosUploadDefaultLink: "https://nosup-hz1.127.net",
        nosDownloadUrlFormat: "{bucket}-nosdn.netease.im/{object}",
        nosUpload: "nosup-hz1.127.net",
        nosSupportHttps: true);

    late NIMSDKOptions options;
    if (kIsWeb) {
      var base = NIMInitializeOptions(
        appkey: appKey,
        apiVersion: 'v2',
        debugLevel: 'debug',
      );
      options = NIMWebSDKOptions(
        appKey: appKey,
        initializeOptions: base,
        otherOptions: NIMOtherOptions(loginServiceConfig: NIMLoginServiceConfig(
          linkUrl: 'weblink01-sg.netease.im:443',
          lbsUrls: ['https://lbs.netease.im/lbs/webconf']
        ))
      );
    } else if (Platform.isAndroid) {
      final directory = await getExternalStorageDirectory();
      options = NIMAndroidSDKOptions(
          appKey: appKey,
          shouldSyncStickTopSessionInfos: true,
          serverConfig: config,
          sdkRootDir:
              directory != null ? '${directory.path}/NIMFlutter' : null);
    } else if (Platform.isIOS) {
      final directory = await getApplicationDocumentsDirectory();
      options = NIMIOSSDKOptions(
        appKey: appKey,
        shouldSyncStickTopSessionInfos: true,
        sdkRootDir: '${directory.path}/NIMFlutter',
        serverConfig: config,
        apnsCername: 'your apnsCername',
        pkCername: 'your pkCername',
      );
    } else if (Platform.isMacOS || Platform.isWindows) {
      NIMBasicOption basicOption = NIMBasicOption();
      NIMPrivateServerOption privateServerOption = NIMPrivateServerOption(
        ipProtocolVersion: NIMIPProtocolVersion.NIMIPProtocolVersionIPv4,
        lbsAddresses: ['https://lbs.netease.im/lbs/conf.jsp'],
        nosLbsAddress: 'https://wannos.127.net/lbs',
        defaultLinkAddress: 'IPv6 default link address, e.g. link.netease.im:8080',
        defaultLinkAddressIpv6: 'IPv6 default link address',
        defaultNosUploadAddress: 'https://nosup-hz1.127.net',
        defaultNosUploadHost: 'nosup-hz1.127.net',
        nosDownloadAddress: '{bucket}-nosdn.netease.im/{object}',
        nosAccelerateHosts: ['nos.netease.com'],
        nosAccelerateAddress: '{bucket}-nosdn.netease.im/{object}',
        asymmetricEncryptionKeyA: '10001',
        asymmetricEncryptionKeyB: 'Public key',
        asymmetricEncryptionKeyVersion: 0
      );
      options = NIMPCSDKOptions(basicOption: basicOption, appKey: appKey,
        privateServerOption: privateServerOption);
    }

迁移至海外节点

对于已上线的国内节点应用,如果您有业务需求,可将应用迁移至海外数据中心。

迁移说明

网易云信支持将已有的国内应用数据、用户信息、好友关系、会话列表、群组数据、超大群组数据、聊天室数据、漫游、历史消息、离线消息等内容,平滑迁移至对应的海外数据中心。

  • 用户信息:已经在网易云信获取过 Token 的所有用户信息支持迁移至海外数据中心,包括用户 ID、用户名、用户头像等
  • 群组数据:群基本信息、群成员信息
  • 超大群组数据:超大群基本信息、超大群成员信息
  • 聊天室数据:聊天室基本信息、聊天室固定成员信息
  • 历史消息数据:针对应用发送过的历史消息支持迁移至海外数据中心,包含:单聊、群聊、聊天室消息
  • 离线消息数据:针对用户未收取过的离线消息,支持迁移至海外数据中心

迁移准备

为避免流量干扰,您可以 提交工单 联系网易云信技术支持工程师申请 公有云专属服务,由网易云信负责部署专属云服务。具体费用可咨询您的网易云信商务经理。

公有云专属服务 主要用于迁移海外节点过程中为保证业务不受公有云流量干扰而产生的隔离资源。部署的时间范围以实际迁移时间为准,全部迁移完成后,可取消该服务部署。

迁移流程

  1. 联系网易云信商务经理,申请将指定的 AppKey 迁移至对应海外数据中心,并与网易云信技术支持确认迁移范围。

  2. 对于您迁移前的国内数据中心公有云环境(open.yunxinapi.com),网易云信将部署专属云服务,并提供专属云对应的 API 域名和 link 域名。

  3. 您在对接网易云信服务器时需要将网易云信 API 公有云域名替换为 专属云域名

  4. 将网易云信客户端 SDK 的 link 公有云域名替换为 专属云域名,并发布客户端新版本。

  5. 网易云信对迁移后的海外数据中心(open-sg.yunxinapi.com)部署专属云服务,然后将国内公有云数据中心的数据,迁移至海外数据中心。

  6. 升级应用客户端。从国内迁移至海外数据中心,因涉及修改客户端 SDK 中的 link 服务地址,所以应用客户端必须强制升级到新的版本,才能连接到迁移后的数据中心。老版本将无法使用。

  7. 您需要与网易云信商务协商正式迁移的时间节点。协商好后,网易云信正式开始流量迁移。建议在线上业务低峰期时执行。

资产归属

为满足安全合规条款,应用在海外数据中心的所有数字资产的归属情况如下:

  • 接入海外数据中心的 App Key 的数据均存储于海外,包括但不限于:

    • 账号信息(账号 ID、昵称、头像等)
    • 群组、聊天室等
    • 好友、黑名单等
    • 历史消息等
    • 图片/文件存储
    • 其他
  • 国内数据中心和海外数据中心的关系:

    • 应用级别的信息全局共享,如 App Key 信息、功能开通关闭(包括网易云信侧功能,安全通等)。
    • 应用内的信息存储于所属数据中心。
  • 安全通

    • 海外数据中心的安全通使用了对应的海外易盾能力,数据不回国。
    • 支持多语种的内容安全审核。
  • 国内数据中心和海外数据中心的 link、weblink、chatlink、chatwl、以及 API 域名不互通,如果连接错误,会返回 403。

  • 为了方便客户接入和提高接入效果,海外数据中心相关域名会添加国内加速代理和海外其他地区的加速代理。

    • 在国内会解析到网易云信的国内 BGP 入口,但是所有数据最终都存储在新加坡。
    • 在美国地区会解析到美国的加速入口,但是所有数据最终都存储在新加坡。

常见问题

数据迁移时,App 是否必须强制升级?

是。网易云信从 8.10.0 开始才支持海外节点且迁移需要更换为海外域名,所以必须强制升级到新的版本,才能连接到指定数据中心。

漫游消息是否支持迁移?

支持。在正式迁移前 7 天,网易云信会开启双写,将漫游消息双写写到指定数据中心。

存储在网易云信服务端的历史消息是否支持迁移?

支持。需要和网易云信商务说明历史消息迁移时间范围。

是否支持从海外节点迁移至国内节点?

不支持。

迁移过程中服务是否不可用?

是的。在切换的瞬间所有客户端会强制下线,触发重连到海外单元。切换期间有分钟级服务不可用,正常不超过一分钟。

是否支持历史图片和文件的迁移?

不支持。历史图片和文件不会迁移,还是存储在国内数据中心,但是不影响访问。

此文档是否对你有帮助?
有帮助
去反馈
  • 接入流程
  • 第一步:创建应用
  • 第二步:选择服务区域
  • 第三步:使用专属 API 域名
  • 第四步:配置 link 和 LBS 域名
  • 迁移至海外节点
  • 迁移说明
  • 迁移准备
  • 迁移流程
  • 资产归属
  • 常见问题
  • 数据迁移时,App 是否必须强制升级?
  • 漫游消息是否支持迁移?
  • 存储在网易云信服务端的历史消息是否支持迁移?
  • 是否支持从海外节点迁移至国内节点?
  • 迁移过程中服务是否不可用?
  • 是否支持历史图片和文件的迁移?