微信开放了公众平台消息接口后,很多企业开始利用消息接口开展相关业务方式的探索,招商银行首次推出微信银行业务,微信银行覆盖了更广阔的服务范围,不仅可以实现借记卡账户查询、转账汇款、信用卡账单查询、信用卡还款、积分查询等卡类业务,更可以实现招行网点查询,贷款申请、办卡申请、手机充值、生活缴费、预约办理专业版和跨行资金归集等多种便捷服务。此外,微信银行的在线智能客服更可实现在线实时解答客户咨询,为客户提供了非常方便的咨询通道,“微信银行”是手机银行的延伸,也是继、电话银行、手机银行之后又一种方便银行用户的业务服务方式。
数据显示,数据流量占主导的时代已经开始,类微信的产品正在分流短信。招商银行相关人士表示:鉴于微信具备信息表现形式丰富、拓展性好、延展性好等特点,同时可支持视频通话等创新功能,微信将会为银行客服带来更广阔的发展空间,并降低银行业的运营成本。
在微信银行业务中,客户端的的来源为微信公众平台的服务器,在银行侧的数据模型为单客户端短连接业务,从高安全性和高处理性角度出发,在银行侧部署多台服务器处理微信公众平台服务器的流量是必须的配置 ,目前架构中存在的问题有:
· 客户端来源单一IP地址
· 微信公众平台应用不支持Cookie会话保持
通过传统配置无法实现银行侧服务器的性能负载均衡,在这样的情况下,会造成:
· 单台服务器故障会造成所有的用户会话失败
· 设备升级成本非常高,已有设备无法添加为集群
我们可以通过F5 BIGIP LTM产品的iRule特性,针对微信报文进行解析,实现根据用户ID号进行负载均衡,从而搭建高性能微信银行平台。
实施前数据流程
实施后数据流程
一、 配置步骤
1. 微信数据格式
当普通微信用户向公众账号发消息时,微信服务器将POST该消息到填写的URL上,并将消息发送到银行侧接口服务器,结构如下:
<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1348831860</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[this is a test]]></Content> <MsgId>1234567890123456</MsgId> </xml> |
参数 | 描述 |
ToUserName | 开发者微信号 |
FromUserName | 发送方帐号(一个OpenID) |
CreateTime | 消息创建时间 (整型) |
MsgType | text |
Content | 文本消息内容 |
MsgId | 消息id,64位整型 |
其中FromUserName可作为负载均衡依据,所有的微信报文消息都包含ToUserName以及FromUserName两个字段,用以鉴别微信开发者以及微信公众号的使用者。
2. F5侧配置
在F5侧,微信接受端VS采用universal 会话保持方式,如下
并且创建下面的iRule
when HTTP_REQUEST { if {([HTTP::method] eq "POST") && [HTTP::header exists "Expect"] } { HTTP::header remove "Expect" HTTP::collect 200 TCP::respond "HTTP/1.1 100 Continue\r\n\r\n" LB::detach } } when HTTP_REQUEST_DATA { set open_id [findstr [HTTP::payload] "<FromUserName><!\[CDATA\[" 23 "]]></FromUserName>" ] log local0. "open_id is $open_id" persist uie $open_id 720 HTTP::release } |
上述iRule中,下面的iRule 语句将提取用户的id号
set open_id [findstr [HTTP::payload] "<FromUserName><!\[CDATA\[" 23 "]]></FromUserName>" ]
|
下面的iRule 语句根据提取用户的id号,实现会话保持
persist uie $open_id 720 |
此后将上述iRule配置到微信接口VS
由此完成配置。
由于存在IHS 集合腾讯平台的时候存在将多个request放在一个连接的情况,需要在VS中添加OneConnect Profile,强制LTM对每一个Request都单独进行处理。
通过F5独有的iRule技术,使得微信银行可以使用较廉价的开放平台构建高性能高可用性的系统,银行可以依据业务量的对基础架构进行灵活升级。极大的提升系统的可维护性,有效降低微信银行的启动成本和运维成本,推动微信银行这一金融服务创新手段的尽快普及。