写点什么

电影垂直行业的云智开放平台如何炼成?

  • 2020-03-15
  • 本文字数:2545 字

    阅读完需:约 8 分钟

电影垂直行业的云智开放平台如何炼成?

一、前言

云智是阿里影业旗下的影院数字化经营管理开放平台,主要负责影院管理及影票卖品的售卖。


本文以云智开放平台为例,将为您揭开 B 端垂类电影行业开放系统的 高性能 API 网关、高可靠消息服务、高安全性数据服务 等技术内幕。



(图 1.1 云智开放平台生态)

二、开放平台架构大图

1.开放平台技术大图



(图 2.1 开放平台技术大图)


开放平台的组成包括:泛 ISV 的调用方、综管门户、网关和业务系统,业务系统通过网关开放业务给到 ISV 调用方,网关与业务系统使用泛化调用,综管主要包括对 API 生命周期管理等功能。


2.开放平台部署架构图



(图 2.2 部署架构图)


部署架构包括:网关集群、综管平台集群、云智各个业务集群,对于开放平台,核心关注网关和综管集群,为了网关的高性能,在云数据存储这块引入分布式缓存。

三、如何搭建高性能的 API 网关

1.网关总体技术架构图



(图 3.1 API 网关技术架构图)


架构图中的 5 层是网关真正的应用层功能,每一层都解决一个核心问题:


1)协议层:解决客户端/调用方如何来连接网关的问题,主要做的事情,按照某种协议去监听,数据协议是怎么样的,最终转换成网关内部私有协议;


2)控制层:一个请求过来之后,网关如何认证这个请求是合法的,是经过认证的请求,保证每个请求都是安全的请求;


3)调度层:针对一些异常处理,流程路由的处理,这里做的是要怎么样去处理的问题;


4)服务编排:API 和 Server 之间的映射和编排,复杂的场景都是在这层进行处理的;


5)调用执行:拿到这个请求之后,最终是调用外部的一个服务,是如何调用的,在这层实现。


2.网关的缓存模式


1)网关缓存模式:



(图 3.2 网关缓存示意图)


2)流程说明:


a)网关会对缓存进行分级存储,以保证最快的访问速度,数据访问的时候,访问顺序依次是本地缓存->分布式缓存->数据库;


b)在保证数据一致性方面,由于缓存的是元数据,元数据的特性决定了其变动少,时效性要求低的特性,因此,网关采取了分布式缓存主动失效,本地缓存被动失效的策略,已减少代码复杂度。


3.多维度的流量控制


流量控制:既控制 API 在单位时间内允许被通过调用的次数,简称流控。


1)流量控制的原理



(图 3.3 流量控制流程)


2)工作流程单机阀值策略:总阀值/机器数 * 80%;


全局流控策略:低于单机阀值:走内存计数;高于单机阀值:走分布式缓存计数。


3)流控类型



(图 3.4 流量控制类型)


目前云智开放平台提供了以下流控方式,(1)API 的滑动窗口时间内的全局流量控制;(2) API 支持定制 APPKEY 进行流量控制;(3)基于 APP 维度的流控,对 APPKEY 访问平台 API 的流量进行控制。

四、高可靠的消息服务

1.总体架构



(图 4.1 消息服务架构图)


2.消息模式


1)网关的消息通知是通过异步的 HTTP 回调+消费方的主动确认两种方式来确保消息的可达,异步的 http 回调可以理解为消息的推模式,而消费方主动确认则可以理解为消息的拉模式;


2)目前消息模式的使用场景主要是在异业会员之间信息拉通,例如会员消息注册,会员信息变更,积分变更等,均会使用消息来进行内部与外部系统信息的同步。


3.如何保证消息不丢失?


1)利用消息中间件本身的重试机制,确保网关能至少正确消费一次消息(at lease once);


2)接收消息后,持久化到磁盘,留待后续追溯与重试;


3)根据消息的订阅关系投递到对应的订阅者,成功则更新消息状态,失败则留待定时任务扫描;


4)对投递失败的消息,进行间隔 10,20,40 分钟的重试,三次重试均失败后,则标记为失败,不再主动投递;


5)消息消费方根据业务需要定期主动发起失败消息的查询以防止消息的遗漏。

五、高安全性的数据服务

1.API 授权方式


云智开放平台采用 OAuth2.0 作为授权协议,授权流程可以简单归纳为:


1)获取临时令牌 code;


2)用临时令牌 code 换取长时令牌(refreshToken)以及访问令牌(accessToken);


3)访问令牌过期后用长时令牌(refreshToken)刷新访问令牌(accessToken)。


授权及使用授权时序图如下:



(图 5.1 API 授权时序图)


2.API 访问控制


用于 API 访问权限控制,可限制 API 只对部分商户开放,或者不允许 APPKEY 跨商户、跨渠道等访问。


在云智开放平台中,访问控制主要由:权限组和访问控制水平鉴权配合组成,开放网关增加了访问控制水平鉴权的功能,达到控制商户访问隔离、数据隔离。访问控制原理如下:



(图 5.2 API 访问控制图)


对 APPKEY 进行访问控制的设置,配置访问策略,访问策略可以配置为 API 接口的请求参数,开放平台网关会根据访问策略判断用户的请求是否合法,不合法则抛出错误。


配置示例:


{"商户":["yunzhi"],"影院":["test1","test2"],"渠道":[H5]}
复制代码


3.API 返回数据控制


1)对于分配的每个 APPKEY,网关都会给其定义一个相应的数据访问等级,目前一共存在从 L1~L4 四个级别,安全等级从低到高递增;


2)对于需要严格管控的高危接口,在配置的时候,需要明确每一个字段的定义,从低到高同样分别为 L1~L4;


3)通过插件机制对每个出参进行字段匹配的过滤,不符合权限等级的出参将被直接摘除。

六、可扩展、可维护

1.可维护性-API 的生命周期



(图 6.1 API 生命周期管理图)


2.可扩展性-API 的插件机制


网关的协议监听与解析层、API 逻辑处理层、调用协议与执行层,都作为组件,可插拔的集成到网关内核中。


1)插件原理-类加载



(图 6.2 插件机制类加载图)


云智开放平台新增的,有电影行业特色的插件包括:API 访问权限控制-水平鉴权、支持云效环境项目标。

七、总结

云智开放平台是 https 通讯协议,多级缓存,消息中间件等技术的融合,专门为高性能数据访问与数据安全性把控而生的系统。达到了极速的访问与全方位的数据安全管控,回顾从系统的选型到诞生的整个过程,网关的演化也经历了下面三个阶段:


  • 具备基础核心能力,基础核心 = 服务访问 + 稳定运行;

  • 具备平台化能力,平台化 = 高性能 + 数据安全 + API 规范与审核;

  • 垂类平台特色能力,垂类化 = 插件化定制。


在这个过程中,沉淀核心技术,深入了解和落地这些技术细节,在每一次的演进中,都思考是否可以在现有技术上面,再进一步地优化,让网关可以不但高效安全,并且易于维护,虽然过程困难重重,但是只要不畏艰难,必定可以攀上高峰,在这个过程中,团队的技术思想也在不断的变化,系统也炼出了垂类平台的特色。


作者介绍


阿里文娱高级开发工程师 念贤、阿里文娱高级开发工程师 宵征


2020-03-15 10:002009

评论

发布
暂无评论
发现更多内容

没内鬼,来点干货!SQL优化和诊断

Kerwin

MySQL

当我们在谈架构时,我们谈的是什么?

冯文辉

架构 企业架构 系统架构

秒懂云通信:通信圈黑话大盘点

阿里云Edge Plus

云通信 通信云

6 个珍藏已久 IDEA 小技巧,这一波全部分享给你!

楼下小黑哥

Java IDEA

简述 CAP 原理

不在调上

因为 Django ORM update,我今天差点「从删库到跑路」

AlwaysBeta

数据库 django 编程 程序员

Mybatis执行流程浅析(附深度文章推荐&面试题集锦)

Kerwin

Java mybatis

没内鬼,来点干货!volatile和synchronized

Kerwin

Java volatile synchronized

nginx在重定向时端口出错的问题

烫烫烫个喵啊

nginx

Hello!GitHub 好用好玩值得收藏的开源项目集合~

Kerwin

开源

30岁+程序员职场攻略:找到自己的“职业锚”乘风破浪

华为云开发者联盟

程序员 AI 开发者 职场

前端杂记-&&和||

阡陌r

JavaScript && ||

Java8——方法引用

Java旅途

java8 方法引用

开发框架文档体系化的思考

vivo互联网技术

框架开发

ARTS - Week 5

Khirye

ARTS 打卡计划

日记一则

progyoung

Docker网络学习第一篇:Linux虚拟网络

Lazy

Docker Linux 网络

Docker网络学习第二篇-认识iptables

Lazy

Docker Linux 网络

redis系列之——一致性hash算法

诸葛小猿

redis 一致性hash redis集群

SpringBoot代码生成器

Kerwin

Java 开源

Elasticsearch从入门到放弃:再聊搜索

Jackey

elasticsearch

疫情年逆风翻盘

Kerwin

程序员

纯CSS实现自定义单选框和复选框

爱嘤嘤嘤斯坦

CSS Java 编程语言 标签

week6 总结

不在调上

关于如何判断一个list是否为空的思考

Leetao

Python Python基础知识 列表

一张PDF了解JDK10 GC调优秘籍-附PDF下载

程序那些事

Java jdk JVM GC JDK10

5万字、97 张图总结操作系统核心知识点

苹果看辽宁体育

操作系统 计算机

6种快速统计代码执行时间的方法,真香!

王磊

Java

【计算机网络】你需要知道的链路层知识

烫烫烫个喵啊

计算机网络 链路层 交换机

程序员的时间管理

Kerwin

程序员

设计模式总篇:从为什么需要原则到实际落地(附知识图谱)

Kerwin

Java 设计模式

电影垂直行业的云智开放平台如何炼成?_文化 & 方法_阿里巴巴文娱技术_InfoQ精选文章