长连接服务需注意什么?

边缘服务

  • 边缘服务的网络质量很重要,覆盖不好会有弱网问题

网络相关命令

  • dig命令 :

    • 一个域名可以有两种类型的指向,如果一个 域名指向 称为一个 记录 (Record)的话,那么就有两种 记录类型 (Record Type),分别是:
      A记录 :指向一个IP地址 (地址记录)
      CNAME :指向一个其他的域名(别名记录)
      NS : 名字服务器记录(理解为dns服务器 )
  • linux查看网络路由跳转
    traceroute www.baidu.com

  • 查看路由表
    route -n(netstat -rn)

  • nslookup

使用tcp长连通信 (个人总结)

  • 一般都是直接用ip端口的方式;一般情况下域名都是公共的,很少会为了某些业务暴露端口,所以一般直接ip端口直接连应用(边缘服务器??)
  • 使用ip端口相连会有部分用户连不上的问题,比如只有北京的外网ip,用户在广州,可能会连接不稳定(没走专线)
  • 非tcp长连,普通的http请求走域名(或cdn),返回用户一个就近的ip,进入这个ip之后,之后的通信都是内网通信(运营商内网,专线,CDN专线等)
  • 所以一般使用tcp长连,需要很多个边缘节点ip,分布在各个地方的机房,并配合合适的调度策略(根据机器的负载情况)(腾讯im有大量的边缘服务?)
  • 如果没足够的边缘机器(部署几个重要的边缘服务,其他的降级走http(域名),不走长连??)
  • 注意NAT的使用
    • 解Bug之路-NAT引发的性能瓶颈
    • 使用同一个NAT地址的机器,timestamp是不能保证同步的(即使一致也没用,per-host PAWS机制的存在会导致问题)。
      • TCP长连接服务,最好服务上有外网ip,否则直接用NAT转发,容易造成问题

边缘计算机器

  • 边缘计算机器(Edge Computing Machine,ECM)通过将计算能力从中心节点下沉到靠近用户的边缘节点,为您提供低时延、高可用、低成本的边缘计算服务。
  • CDN俗称“边缘节点服务”。可用于网站加速、将源站内容分发至最接近用户的节点,使用户可就近取得所需内容,提高用户访问的响应速度和成功率。解决因分布、带宽、服务器性能带来的访问延迟问题,适用于站点加速、点播、直播等场景。
  • 还有边缘节点服务(Edge Node Service, ENS)提供基于CDN的边缘弹性基础设施,使您可以将计算、转发等业务下沉至边缘。降低响应时延和带宽成本、减轻中心集群压力,适用于“中心+边缘”架构模型下的各类业务。

使用websocket

BGP AnyCast

  • 时延敏感度高的内容服务业务(比如这里说的长连接服务)

    • 针对https/tcp等对时延敏感的协议(涉及多次握手的协议),由于用户位置流动,而数据中心相对固定,因此会随着用户的移动,体验可能出现严重下降。
    • 基于以上背景,可在全球有相关业务的地址位置部署小型数据中心,所有小型数据中心和总部数据中心保持长期稳定的TCP会话连接。当相对于总部的远端用户访问服务时,TCP连接实际是发送至用户当地的小型数据中心,从而降低了访问延时,提高了用户体验度。
    • 在全球大规模部署多个节点时,为了确保用户能就近访问所在地的数据中心,可把所有小型数据中心的IP采用相同地址,通过BGP发布至Internet。
    • 当用户访问服务时,DNS解析会返回此小型数据中心的IP,然后用户运营商会根据就近原则路由用户数据到最近的小型数据中心,从而达到了上面所述的优化延迟的目的。
  • AnyCast适用于无连接的UDP,以及有连接的TCP协议;基于AnyCast的特性——就近原则,很大程度上提升了客户端的响应速度。

  • AnyCast缺点

    • AnyCast严重依赖于BGP的选路原则,在整个Internet网络拓扑复杂的情况下,可能导致次优路由选择
  • BGP AnyCast 的部署成本比较大,基本由一定规模的公司才会实施这一套方案(比如阿里云、腾讯云等),并以云服务的形式提供给其他企业使用。

  • 以腾讯云为例

    • Anycast 公网加速(Anycast Internet Acceleration,AIA)是一个覆盖多地的动态加速网络,可以大幅提升您业务的公网访问体验。AIA 不同于其他应用层加速服务,它能实现 IP 传输的质量优化和多入口就近接入,减少网络传输的抖动、丢包,最终提升云上应用的服务质量,扩大服务范围,精简后端部署。
  • 疑惑:在AnyCast网络中多个主机用同一个IP,这岂不是IP地址冲突了?

    1. 首先,每一个节点主机处在不同的地理位置,相互之间不在同一个广播域内。所以把所有主机配置成相同的IP地址并不会引起我们日常所见的IP地址冲突;
    2. 其次,在仅仅配置相同IP之外,还需要借助BGP协议进行地址宣告,通过BGP,各个站点向Internet宣告相同的AnyCast IP地址。
  • 最佳实践

背景说明
某游戏公司,BACKEND 服务集群在首尔。该公司不希望部署多套逻辑和数据层,从而降低成本,但又希望全球的客户能够接入,需要全局漂移 IP 作为访问的唯一入口,并可做全局的就近分配、动态流量分配、故障剔除。

痛点说明
该游戏公司由客户自建的 IDC 和中小型公有云厂商不具备网络跨地域调度能力,更无 Anycast 能力,显然无法满足客户需求。易被如下问题困扰:

区分多个外网 IP,每个地域都部署集群,维护多个逻辑层,数据层跨地域读写,一致性和实时性较差。
只能寄希望于运营商链路质量。首尔某运营商网络故障导致 A、U 等多家服务商 BGP 网络异常,部分地区无法访问,该游戏的用户流失严重。
DDoS 攻击流量集中在一个 IP 上,影响巨大。

方案说明
针对客户需求,腾讯云帮助客户实现以下方案,方案示意图如下:

方案重点如下:

使用 Anycast 的 EIP,该 IP 同时在多地 Anycast,实现多地同服。
用户后端集中维护一套集群,然后绑定 Anycast 类型的 EIP。该 EIP 借助腾讯云内网和 POP 点,多地发路由。
客户不用感知网络路径的选择,无需手动指定 IP 的发布位置,流量就近完成了全局负载均衡,从最优的地域进出,后端得到简化。同时,客户的 IP 得到收敛,无需每个地域配一个 IP 和 DNS 规则,在备案和管理上得到简化。
传输质量得到提高。
多个 IP 发布地,实现了多路径,增加了网络的容错能力。此外,就近接入后走的是专线传输,比公网传输更可靠、更低延时,提升了玩家的体验。

BGP AnyCast 原理要点

  • 任播(Anycast),又称为选播、泛播或任意播

  • 利用一个(多个) as号码在不同的地区广播相同的一个ip段。
    利用bgp的寻路原则,短的as path 会选成最优路径(bgp寻路原则之n),从而优化了访问速度。
    其实bgp anycast是不同服务器用了相同的ip地址。

  • Anycast技术也存在一定的局限性:
    使用Anycast中的共享单播地址不能作为客户端发起请求,因为请求的响应不一定能返回到发起的Anycast单播地址。因此,目前Anycast仅适合一些特定的上层协议,从目前的实际应用来看, Anycast最广泛的应用是DNS的部署。

  • IP Anycast+BGP的部署必须使用能够运行BGP的设备与其他自治域进行路由交换,通常使用的设备是路由器或三层交换机。然后将目标主机直接接入路由器或通过负载均衡设备将多台主机接入路由器

  • 在IP Anycast+BGP整体部署之前应多方面考虑各种因素,着重考虑自治域号申请、IP地址规划等问题

  • Anycast IP,则是集Multicast和Unicast特性于一身的特殊IP地址类型

  • Anycast实质上是一种网络技术,它借助于网络中动态路由协议实现服务的负载均衡和冗余,从实现类型上分,可以分为subnet Anycast和Global Anycas: Subnet Anycast是指所有目的主机都位于同一网段,此方式仅提供负载均衡和冗余,对安全度提升没有实质效果; Global Anycast是指目的主机处于不同网段,可能处于不同城市,甚至分布在全球各地,在实际应用中Global Anycast中目标主机的部署除地理位置的考虑外,多接入不同自治域的网络中。

  • 当使用Anycast的目标主机接入到不同自治域时,因为难以使用某一自治域的IP地址,所以通常使用Anycast的共享单播地址拥有独立的自治域号,并通过BGP协议与不同自治域网络交换路由,即IP Anycast+BGP。

  • 在实际应用中,任播 (Anycast) 是一种网络寻址和路由的策略。Anycast 采用将一个单播地址分配到处于 Internet 中多个不同物理位置的主机上,发送到这个主机的报文被网络路由到路由协议度量的最近的目标主机上。
    例如:在 IP 网络上通过一个 Anycast 地址标识一组提供特定服务的主机,同时服务访问方并不关心提供服务的具体是哪一台主机(比如:DNS 或者镜像服务),访问该地址的报文可以被 IP 网络路由到这一组目标中的任何一台主机上。

  • 使用anycast,数据传输路径:client -> anycast ip -> 内网ip -> 内网机器

Reference