苏宁云台助手多端设计实践

原创
开发 架构
云台助手是苏宁面向商家和供应商推出的一款多端产品包括iOS版、Android版和PC客户端,旨在方便服务各种模式的商户和供应商,店铺信息随时管理,经营信息实时掌握,让好生意不难做。

【51CTO.com原创稿件】1. 云台助手介绍

1.1 基本介绍

云台助手是苏宁面向商家和供应商推出的一款多端产品包括iOS版、Android版和PC客户端,旨在方便服务各种模式的商户和供应商,店铺信息随时管理,经营信息实时掌握,让好生意不难做。它支持多端每端的模式众多,每个模式又有很多功能模块,各种功能模块怎么在客户端中集成和展示,中间又面临着哪些产品和设计的挑战。

1.2 业务特点

云台助手,支持多种合作模式,每个模式又有很多功能模块。  

平台

自营

特卖

零售云

拼购

商品管理

商品库

 

商品管理

商品管理

营销管理

营销管理

     

订单管理

订单管理

订单管理

交易管理

 

退款管理

退款管理

退款管理

退款管理

 

投诉管理

投诉管理

投诉管理

   

评价管理

评价管理

     

数据管理

 

数据管理

数据管理

数据管理

行业纵览

   

行业纵览

 
 

采购订单

     
 

预约管理

     
  • 支持多种合作模式,每个模式又有很多功能模块,功能多涉及的业务线多;
  • 对系统稳定性安全性要求高;
  • 818,双11,促销节点,系统承压时间比较长;
  • 涉及开发团队多,各业务系统版本交织。

2. 系统设计

2.1 系统上下文

注:RSF为苏宁RPC远程服务调用服务框架(下文同)

接入网关,它是整个系统的核心组件,一方面负责将客户端的请求转发给内部业务系统,包括协议的转换(http -> hessian、rsf、tcp)、接口合并等,同时将内部接口的响应报文转换成MSOP固定结构的响应报文格式,并封装成统一响应对象。内部服务包括商家交易和财务及商品模块等。

同时负责将各个业务内部系统产生的通知型消息,主动推送给客户端。客户端多端只接入网关服务,接入网关组装内部各业务系统的微服务

各层业务功能如下所示:

2.2 接入层设计

一个APP,最核心的东西就是数据,而数据的来源就是接口。

刚开始针对每一个内部服务相应的服务端也要开发一个接口,随着APP功能越来越丰富,开发周期变长、响应业务时间逐渐变慢了。 所以通过统一规范,提供接口配置方式提高客户端接口开发效率。同时提供MOCK功能减少客户端开发对接口提供方的依赖。

接入层主要功能如下:

  • 标准化的配置流程,免发布,即配即生效;
  • 灵活的版本管理,方便客户端版本的各种兼容和升级;
  • 每个接口单独的mock,减少客户端开发对接口提供方的依赖,可独立开发和调试;
  • 提高客户端接口开发效率,规范客户端接口;

不以规矩,不能成方圆,首先我们定义了以下规范:

基本规范

接口参数的数据结构设计:

一些常用的公共入参和返回参数的名称提高客户端接口开发效率。

比如:列表接口中的当前页,每页条数,总条数等。

接口名称规范:

服务上下文/gateway /插件英文名/业务名称/操作类型组成。

异常提示可配置:

有些内部接口返回的报错提示不可直接用于显示在客户端页面,需接入层转换成用户友好的提示。

接口的合并:

为了减少客户端和服务器建立连接和断开连接消耗的时间,资源,电量,尽量避免频繁的间隔网络请求。在业务场景允许的情况下,尽量1个页面对应1个接口。接入层需要做好接口的合并,提升用户体验。

接口文档的标准化:

生成可读性的标准化文档方便客户端开发理解接口的用途,掌握接口的使用。

接口配置

在以上标准化的基础上,为了缩短开发周期,我们实现了接口配置化,能支持自动发布接口、动态修改配置项实现接口的治理。

MOCK功能

接口mock,在内部系统服务无法提供的情况下,可以使用mock接口。在接口列表页面打开mock配置即可。

内部业务系统给出接口文档后,客户端就可以按照接口文档进入开发阶段,减少对接口的依赖提高开发效率。每个接口都支持模拟数据的修改,满足客户端的开发需求。

 

2.3 权限管理

由上文提到过的云台助手的业务特点,支持多种合作模式,每个模式又有很多功能模块。这是通过权限管理来实现的。同时整个客户端的权限可以分为两种:合作模式权限 、 主子账号权限。

合作模式权限就是根据用户合作模式来控制不同类型的用户可以操作的数据项、功能模块,以及消息推送和按钮操作等功能。这些功能权限控制在全局的拦截器中都做了判断。

同时用户合作模式更新(包含增加、删除)可以实时更新合作模式所属数据项、功能模块及其他所涉及到的模块的权限更新。合作模式权限是通过权限中心和云台运营后台进行双向控制。

主子账号权限就是主账号拥有当前合作模式的最大权限,但同时还可以管理控制自己所属子账号的权限。主子账号权限是通过权限中心进行集中管理。

2.4 多端消息推送设计

消息推送这块系统刚上线阶段时间紧,需求也没有那么复杂。为了提高上线速度,所以复用了公司的推送系统实现了简单的推送消息功能。

缺点:

无法满足APP这边个性化的推送需求(消息需要有过期时间,有返回值等)。

MQ消费消息有延迟,和别的系统共有一个推送源,大促数据量大是会受到其他系统的影响。

没有完善的监控日志等,导致出现问题时常常一脸懵逼。

无法兼容满足PC客户端的推送需求。

随着APP的活跃度上升,推送也是越来越重要,所以我们自己基于Netty实现了消息推送。

主要功能如下:

  • 安全性高,基于RSA精简的加密握手协议,简单,高效,安全。
  • 支持断线重连,及弱网下的快速重连,无网络下自动休眠节省电量和资源。
  • 集群部署,路由功能基于Redis的PUB/SUB机制实现,性能好,可用性高。
  • 协议简洁,支持多数据类型(JSON二进制等)以及压缩,更加节省流量。
  • 支持http代理,一个长链接也可用于请求业务数据,让APP请求更加及时。
  • 高度可配置化,基本上通过修改配置可满足大部分场景。
  • 监控完善,日志详细,可快速排查线上问题及服务调优。

处理流程:

1. 各个业务系统通过RSF将产生的消息实时发送给客户端消息处理系统。

2. 消息处理系统按照配置规则处理消息内容,并往Redis发布消息。

3. 推送系统订阅了Redis相关主题消息,收到消息后检查通道可用性及发送推送消息。

4. 无可用通道的消息会由定时任务从HBase拉数据按配置逻辑执行消息推送。

5. 各个环节都有详细的日志记录,可快速定位问题及性能调优。

后期规划:

技术上基于Redis的PUB/SUB机制实现的路由,会造成资源的浪费,因为订阅了主题的容器都会接受到消息,尽管本地可能不存在该消息的长连接。后期准备为指向存在该长连接的容器发送消息。同时目前的推送系统没有基于SSL通信,也存在安全隐患。

2.5 高可靠高可用

可靠的系统是业务稳定、快速发展的基石。要求高可用系统需要确保每个部署单元在物理上和逻辑上都是高可用的,不允许有单点故障风险存在。每个模块需要是集群架构、主备架构或双活架构。

当一个节点不可用时,其他集群节点或备机节点需要能接管服务请求,并且容量是充足的。

物理机肯定会出故障;单个物理机宕机后,系统必须保证服务仍然可用,且必须保证系统容量充足。所以系统部署图如下:

上图中Web服务器、应用服务器、内存数据库、关系数据库都是集群架构部署,符合系统高可用原则。

2.6 全链路监控

苏宁有如下告警平台和告警机制,能够准确地通知开发及运维人员系统的异常状况,有助于快速定位问题和解决问题。

1. 穆加:苏宁智能告警平台,整合了硬件监控、云迹服务端性能监控、Kafka后台管理系统、决策分析平台、机器学习平台、准实时计算平台监控来源,提供更细致化的、丰富的指标种类,提供豆芽(苏宁自研的实时通讯工具)通知、短信、邮件、语言等多种告警方式。

2. 云迹—异常监管系统:能针对某个系统的某种异常,在单位时间内异常量或环比增长量超过配置的阀值,则进行短信或者邮件告警。

3. 云迹—APP性能监控:云迹APP性能监控是下一代移动应用性能监测管理解决方案。专注于帮助开发者解决应用上线后性能问题。通过内嵌云迹APP SDK来获取真实用户访问体验、及时发现使用过程中的崩溃、连接超时、内存泄漏等问题,帮助开发者第一时间发现APP的性能问题。

2.7 安全

客户端的安全性一般来说分为以下三类:

  • 客户端的代码安全,包括代码混淆,加密等。
  • 客户端数据存储安全,主要是App本地存储的数据是否有相应的安全措施。
  • 客户端数据传输安全,指数据从客户端传到服务端的过程中,数据有没有被抓取篡改等;

第一第二点主要是客户端相关的安全问题,在此不做讨论。

数据传输安全主要是通过HTTPS通信保证的,商家端全站HTTPS改造工作2017年上半年已经全部完成,所以现在客户端和服务端的通信都是Https保证了通信的安全性。技术方案是:在CDN和WAF层做HTTPS的卸载,到达应用服务器都是HTTP请求,这样后期HTTPS的优化,证书管理,安全升级等工作就集中在CDN和WAF两层。

同时WAF层通过黑、白名单配置IP、User-Agent、Referer、URL等相关规则提供接口级别的访问控制;提供接口级别的流量控制,限制接口访问流量和用户访问频率,防护CC攻击,保证业务稳定;攻击防护,证书卸载,负载均衡等安全策略来专门为Web应用提供保护。

另外苏宁注重保护用户隐私,结合客户端开发,主要体现在以下几方面:

  • 响应数据中包含用户隐私的字段数据,需要加*号。如:手机号,身份证,用户邮箱,支付账号,邮寄地址等。
  • 请求参数中包含用户隐私的字段参数,如:登陆接口的密码字段,需要进行加密传输,避免被代理捕捉请求后获取明文密码。
  • 客户端和服务器通过约定的算法,对传递的参数值进行签名匹配,防止参数在请求过程中被抓取篡改。
  • 接入公司的风控系统,通过灵活的配置具体风控规则,保证风险措施应用,进一步保证系统的安全稳定。

3 未来发展和挑战

SaaS化:提供应用市场平台,商户可以直接定制微应用

未来云台助手将致力于与服务商共同打造面向所有商家提供丰富的业务经营插件。为了实现这个目标,插件服务市场为开发者提供了插件运营平台。同时星河为开发者提供插件开发及服务部署环境。

云台助手插件从上线到使用的主要流程如下:

(1)插件管理

插件统一由服务商和开发者在应用中心创建,运营在服务市场运营平台进行审核后上线,

服务商可以在应用中心管理自己创建的应用。

(2)插件使用

客户端通过云台助手服务端来调用服务市场插件列表进行插件选择、订购。插件使用授权通过应用中心进行。

(3) 插件权限

账号及子账号的使用权限由权限中心统一维护,客户端启动插件调用服务时由云台助手服务端判断账号是否有使用权限。

作者:陆跃跃,苏宁易购IT总部供应商及商户平台研发中心高级技术经理,多年互联网移动应用服务端技术开发经验,从事云台助手APP的架构,开发及维护。

【51CTO原创稿件,合作站点转载请注明原文作者和出处为51CTO.com】

责任编辑:庞桂玉 来源: 51CTO
相关推荐

2013-02-20 10:07:29

苏宁电器苏宁云商云服务

2018-04-16 08:30:07

AI设计师苏宁

2019-12-24 09:30:59

苏宁高可用高并发

2017-08-21 09:03:43

2019-02-19 09:00:00

深度学习知识抽取苏宁

2018-05-09 14:45:50

苏宁前端Nodejs

2019-04-09 08:00:00

苏宁发票中心系统

2016-11-10 19:31:00

苏宁双11

2013-11-07 13:22:09

电商云阿里云京东云

2013-11-07 12:24:41

苏宁云商阿里巴巴

2013-09-18 08:34:55

2013-11-07 12:27:07

2013-10-29 09:28:38

苏宁云商

2013-10-31 09:49:07

2018-06-25 08:00:18

Spring Clou架构数据中台

2018-05-25 22:56:14

AI技术短视频苏宁易购

2014-02-25 16:26:48

云服务

2020-12-16 10:01:32

智能苏宁木牛工具

2020-03-24 14:10:46

苏宁美团云计算

2013-08-22 09:51:20

苏宁云商电商
点赞
收藏

51CTO技术栈公众号