写点什么

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

  • 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:002097

评论

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

linux 工具之perf

webrtc developer

模块五作业

燕燕 yen yen

架构实战营

区块链钱包系统开发,imtoken去中心化钱搭建

0代码之缘

明道云

RunC TOCTOU逃逸CVE-2021-30465分析

腾讯安全云鼎实验室

容器 漏洞分析

不会被开除吧?一顿饭换来“字节”面试题库Java岗,刷完直接入职大厂

Java架构师迁哥

终于学完国内算法第一人10年经验总结的数据结构与算法详解文档

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

终于拿到了深入Java虚拟机:JVMG1GC的算法与实现文档

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

leetcode 最常见的前端基础算法面试题(上)

前端依依

面试 大前端 力扣 算法题 初阶

Handler简单入门

W🌥

android 8月日更 Handler

架构实战营模块 5 作业指导

华仔

#架构实战营

干货|后互联网时代,运维工程师的必备性能优化指北

阿里巴巴中间件

阿里云 云原生 中间件

音视频demo| 不一样的AR Call

anyRTC开发者

uni-app 音视频 移动开发 uni-app demo

面面俱到!腾讯大牛把源码分析、基础案例、实战案例、面试、系统架构,全部总结到这份Java多线程与高并发里面了

Java 编程 程序员 面试 多线程

架构实战训练营模块五作业

Clarke

我们可能是被工具耽误的一代

非著名程序员

深度思考 认知提升 成长笔记 8月日更

抖音快手截流获客系统软件开发

薇電13242772558

获客达人

我爬取了爬虫岗位薪资,分析后发现爬虫真香

Python研究者

8月日更

Vue进阶(四十二):var、let、const 三者区别

No Silver Bullet

Vue var const let 8月日更

crudapi增删改查接口零代码产品成功案例之金茶王投票系统

crudapi

Vue API crud crudapi 投票

模块五设计微博评论高性能高可用计算架构

kitten

「模块化安装」,定义你自己的CloudQuery

BinTools图尔兹

sql 数据安全 数据库管理 polarDB

灵活且有趣,10分钟落地翻译能力,1分钟插件化

明道云

谷歌架构师分享gRPC与云原生应用开发Go和Java为例文档

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

linux 工具之pstack/gstack

webrtc developer

Nebula Operator 云上实践

NebulaGraph

阿里云 云原生 k8s 图数据库 分布式图数据库

前端基础三之JavaScript基础

ベ布小禅

8月日更

ipfs矿机配置标准如何?ipfs矿机配置带宽要求是什么?

ipfs矿机配置标准如何 ipfs矿机配置带宽要求

校招失败,在小公司熬了2年后我终于进了字节跳动,竭尽全力(Java岗)

今晚早点睡

Java 编程 字节跳动 面试 计算机

架构实战营1期模块5作业——高性能计算架构

tt

架构实战营

阿里 Java 二面必问:8张图带你解决所有TCP可靠传输问题

编程 面试 TCP 网络 计算机

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