2 Star 1 Fork 0

zhrun8899 / learning-notes

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
短信主备线路方案.md 7.83 KB
一键复制 编辑 原始数据 按行查看 历史

一.涉及的系统及目标

涉及的系统包括:

  • 银行前置 empi
  • 短信核心 uaop
  • 短信网关 gateway
  • 客服中心

目标:

  • 银行侧empi

    实现双活,在有银行系统连接empi时,提供vip供银行连接,真实的服务做主备;

    能根据线路等设置主备uaop,并能在主uaop失效时进行检测,一旦恢复,则切换回主UAOP;

    为银行提供多种短信接口,包括http,socket,文件接口等;

  • uaop与网关

    实现多路,并部署在不同的机房;

    各机房UAOP双活,负载均衡;

    网关与uaop做整体的跨机房主备部署,即不支持uaop跨机房连接网关;

    重要的网关可在同一机房做多活,负载均衡;

  • 服务中心

    能提供短信发送报告功能;

    短信补发功能;

二.技术要点

2.1 双机负载均衡+备份

银行系统连接EMPI的主备容灾

2.1.1 keepalived+Nginx Upstream 实现简单双机负载均衡及备份

upstream testproxy { server 192.168.1.4:7099;

​ server 192.168.1.4:7099;

​ server 192.168.1.6:7099 backup; }

在希望成为后备的服务器ip后面多添加一个backup参数,这台服务器就会成为备份服务器。 在平时不使用,nginx不会给它转发任何请求。只有当其他节点全部无法连接的时候,nginx才会启用这个节点。 一旦有可用的节点恢复服务,该节点则不再使用,又进入后备状态。

2.1.2 keepalived+lvs 实现简单双机负载均衡及备份

其中的sorry_server与niginx中的backup配置项是相同的

virtual_server 192.168.9.200 8021 {
    delay_loop 10                     # 设置健康检查时间,单位是秒
    lb_algo rr                      # 设置负载调度的算法为wlc(最小加权算法)
    lb_kind DR                       # 设置LVS负载均衡模式为dr机制(NAT、TUN、DR)
    persistence_timeout 50           # 会话保持时间
    protocol TCP                     # 指定转发协议类型(TCP、UDP)
sorry_server   127.0.0.1 8021      # 当所有的real_server都不可用时将请求转发到该server上

real_server 192.168.9.82 8021 {  # 设置真实的后端server
    weight 5                     # 配置节点权值,数字越大权重越高
    TCP_CHECK {                  # 健康检查方式
        connect_timeout 10       # 连接超时
        # nb_get_retry 3           # 重试次数
        delay_before_retry 3     # 重试间隔
        connect_port 8021          # 检查时连接的端口
    }
}

real_server 192.168.9.87 8021 {  # 设置真实的后端server
    weight 5                     # 配置节点权值,数字越大权重越高
    TCP_CHECK {                  # 健康检查方式
        connect_timeout 10       # 连接超时
        # nb_get_retry 3           # 重试次数
        delay_before_retry 3     # 重试间隔
        connect_port 8021          # 检查时连接的端口
    }
}
virtual_server 192.168.9.200 8021 {
    delay_loop 10                     # 设置健康检查时间,单位是秒
    lb_algo rr                      # 设置负载调度的算法为wlc(最小加权算法)
    lb_kind DR                       # 设置LVS负载均衡模式为dr机制(NAT、TUN、DR)
    persistence_timeout 50           # 会话保持时间
    protocol TCP                     # 指定转发协议类型(TCP、UDP)

    sorry_server   127.0.0.1 8021      # 当所有的real_server都不可用时将请求转发到该server上

    real_server 192.168.9.82 8021 {  # 设置真实的后端server
        weight 5                     # 配置节点权值,数字越大权重越高
        TCP_CHECK {                  # 健康检查方式
            connect_timeout 10       # 连接超时
            # nb_get_retry 3           # 重试次数
            delay_before_retry 3     # 重试间隔
            connect_port 8021          # 检查时连接的端口
        }
    }

    real_server 192.168.9.87 8021 {  # 设置真实的后端server
        weight 5                     # 配置节点权值,数字越大权重越高
        TCP_CHECK {                  # 健康检查方式
            connect_timeout 10       # 连接超时
            # nb_get_retry 3           # 重试次数
            delay_before_retry 3     # 重试间隔
            connect_port 8021          # 检查时连接的端口
        }
    }
}

2.2 银行系统连接EMPI的主备容灾

银行系统连接EMPI的主备容灾

2.3 短信报告的处理及客服中心

报告回送机制:

empi下发短信: uaopId+msg

网关短信下发: pushSequence+msg

网关resp: pushsequence+respSequence+respInfo

网关report: respSequence+reportSequence+reportInfo

移动:运营商的报告会随机回到所连接的任何网关上,因此需要客服中心汇接处理,查找上下文,将报告与uaopId对应起来;

电信及联通:报告会发送到SP登记的地址,即指定地址;

需要消息队列支持;

各empi可根据empiId订阅相应的topic,取回报告;

或者uaop根据连接自己的empi取回报告,发送回empi;

客服中心功能:

需要提供跨机房的服务;

uaop在将所有消息送往网关时,需要向客服中心发送一份;

网关下发短信时,msgSequence与uaopId可能不一致,因此需要将uaopId与msgSequence的对应关系发送到客服中心;

网关收到resp消息,需要将resp上送到UAOP,由UAOP发送到客服中心;

网关收到报告消息,上送到UAOP,由UAOP发送到客服中心;

客服中心将原始消息的报告发布到kafka;

2.4 程序所需修改

empi

提供多种短信接入方式,http,socket,文件,消息队列等;

在银行端实现主备,向银行开放的IP为虚拟IP;

主备的两个empi可以设置多个uaop的地址,根据权重,优先级,状态等选择一个连接发送消息;

  • 地址池可配置,包括权重,优先级等,一般应该支持一主一备;-
  • 提供故障报警功能;
  • 主服务故障能自动切换到备用服务;

收到MO消息 或报告消息需要入库,为客服等系统提供数据支持;

uaop

部署上实现主备机房;

各机房做负载均衡,向empi开放的IP为虚拟IP;

kafka订阅功能;

将收到的uaopId与pushSequence对应消息发送到客服中心;

收到resp,将pushSequence与respSequence对应消息发送到客服中心;

收到report,需要发送到客服中心;

由于负载均衡,各EMPI可能连接到任一UAOP,报警机制需要修改(方案未定);

网关:

需要支持多个uaop的连接;

向网关发送push消息 时,将uaopId与pushSequence对应消息发送到UAOP;

收到resp,将pushSequence与respSequence对应消息发送到UAOP;

收到report,需要发送到UAOP;

收到resp,mo或报告消息向所有连接的uaop发送;

客服中心

补发功能:需要保留补发信息;

自主发送短信功能:可向指定的手机号码发送短信;

报告查询展示报表功能;

接收处理各种消息功能;

收到report消息时的kafka发布功能;

三.实施可能会遇到的问题

银行方面:

  • 操作系统的版本不一致,实施过程可能会遇到各种问题;
  • 可能无法上网,所有需要的包需提前下载;

公司方面

  • 生产连续性的问题:旧有的EMPI可以照旧连接原有的UAOP,负载均衡完成后可切换到VIP.不切也没问题;
  • 备用机房(暂定二枢纽)需要确定资源是否够用;
  • 需要向运营商注册新连接地址;
  • 各相关程序需要修改;
1
https://gitee.com/zhrun8899/learning-notes.git
git@gitee.com:zhrun8899/learning-notes.git
zhrun8899
learning-notes
learning-notes
master

搜索帮助