写点什么

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

2020 年 3 月 15 日

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

一、前言

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


本文以云智开放平台为例,将为您揭开 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 年 3 月 15 日 10:00990

评论

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

Android开发经验谈:2021最新Android常用开源库总结,成功收获美团,小米安卓offer

欢喜学安卓

android 程序员 面试 移动开发

SourceTree 如何连接 GitLab

TroyLiu

git gitlab SSH sourcetree

大数据分析决策平台建设方案,警务情报研判系统搭建

t13823115967

Pulsar 2.7.0 新增特性概览:事务支持、Topic 级别策略配置等

Apache Pulsar

大数据 开源 pulsar Apache Pulsar 消息中间件

稻盛和夫《干法》| 教你做快乐的打工人

小匚

读书笔记 程序员 个人成长

Ubuntu 使用 Iptables 做网络转发

wong

iptables Ubuntu20.04

币币交易所系统开发详情说明

系统开发咨询:I76-883I-5I52 邓森

使用 iTerm2 打造美观高效的 Mac 终端

郭旭东

Mac 终端 iterm2

《数据挖掘:实用的机器学习工具和技术,第4版》PDF版免费下载

计算机与AI

数据挖掘 机器学习 数据科学

RocketMQ消息模型

废材姑娘

Java RocketMQ

ChaosBlade 在工商银行混沌工程体系中的应用实践

阿里巴巴云原生

云计算 高可用 开发者 云原生 实践

甲方日常 79

句子

工作 随笔杂谈 日常

区块链app开发要多少钱?如何根据项目需求了解价格?

系统开发咨询:I76-883I-5I52 邓森

区块链数字货币交易所开发的简介

系统开发咨询:I76-883I-5I52 邓森

数字银行成长性和盈利能力可期

CECBC区块链专委会

数字化转型

【薪火计划】07 - 与领导沟通的方法

brave heart

管理

数仓缓慢变化维深层讲解

大数据老哥

大数据 数据仓库 数仓

大作业1

钟杰

区块链钱包开发的功能与特点

系统开发咨询:I76-883I-5I52 邓森

数字货币交易所开发的功能与特点

系统开发咨询:I76-883I-5I52 邓森

Spring 源码学习 13:initMessageSource

程序员小航

spring 源码 源码解析

mysql binlog轻量同步工具binlog portal

dothetrick

Java MySQL springboot Binlog spring Boot Starter

涨知识!一个三非渣本的Android校招秋招之路,赶紧收藏!

欢喜学安卓

android 程序员 面试 移动开发

Arthas 定位 Dubbo 手动注册 Eureka 异常

阿里巴巴云原生

阿里云 云原生 dubbo 工具 征文大赛

面试官:不会真有人不知道什么是线程池吧?

Java鱼仔

Java 线程池 并发

区块链挖矿系统开发功能方案

系统开发咨询:I76-883I-5I52 邓森

区块链钱包开发的核心优势

系统开发咨询:I76-883I-5I52 邓森

阿里巴巴云原生的 2020,注定不凡的一年

阿里巴巴云原生

阿里云 容器 开发者 云原生 年终总结

程序员如何解决中年危机?资深Android开发带你入门Framework,醍醐灌顶!

欢喜学安卓

android 程序员 面试 移动开发

区块链商城系统开发技术详解

系统开发咨询:I76-883I-5I52 邓森

影像恋上智能:麒麟9000中的高甜CP创新

脑极体

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