作者 | 阿里文娱技术

责编 | 胡巍巍

出品 | CSDN(ID:CSDNnews)

前言

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

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

云智开放平台生态

 

开放平台架构大图

 

1.开放平台技术大图

开放平台技术大图

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

2.开放平台部署架构图

部署架构图

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

 

如何搭建高性能的 API 网关

1.网关总体技术架构图

API 网关技术架构图

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

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

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

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

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

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

2.网关的缓存模式

1)网关缓存模式:

网关缓存示意图

2)流程说明:a)网关会对缓存进行分级存储,以保证最快的访问速度,数据访问的时候,访问顺序依次

是本地缓存->分布式缓存->数据库;

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

3.多维度的流量控制

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

1)流量控制的原理

流量控制流程

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

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

3)流控类型

流量控制类型

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

高可靠的消息服务

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)。授权及使用授权时序图如下:

API 授权时序图

2.API 访问控制

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

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

API 访问控制图

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

配置示例:

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

3.API 返回数据控制

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

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

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

 

可扩展、可维护

 

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

API 生命周期管理图

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

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

1)插件原理-类加载

插件机制类加载图

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

 

总结

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

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

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

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

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

【End】

推荐阅读 

☞无代码时代来临,程序员如何保住饭碗?

☞不搞虚的!快速把你拉入Docker 的门里 | 原力计划

☞生物学的机器学习:使用K-Means和PCA进行基因组序列分析 COVID-19接下来如何突变?

☞字节跳动武汉招聘 2000 人,距离大厂 Offer,你还差这篇 Java 干货!| 原力计划

☞用Java开发自己的Kubernetes控制器,想试试吗?

☞人人都能读懂的「以太坊2.0分片设计」

你点的每一个在看,我认真当成了喜欢

阿里影业“云智开放平台”炼成记!相关推荐

  1. 阿里云智能开放平台团队何登成:解码云计算的 2B 服务基因 | 问底中国 IT 技术演进...

    受访者 | 何登成(花名圭多) 记者 | 胡巍巍 出品 | CSDN(ID:CSDNnews) 前阵子,笔者参加杭州云栖大会之余,一时兴起,去良渚博物院转了一圈,没错,就是国庆马云去参观的那家博物院. ...

  2. 阿里视觉AI的开放平台之路

    作者:星瞳 阿里达摩院 AI开放平台,探索让技术能力赋能更多行业,同时反推技术前行,推动AI的可持续发展.本文以阿里云视觉智能开放平台为例,讲述AI平台的定位.架构.实现.运营及进化. 一.阿里视觉A ...

  3. 重大升级!灵雀云发布全栈云原生开放平台ACP 3.0

    云原生技术的发展正在改变全球软件业的格局,随着云原生技术生态体系的日趋完善,灵雀云的云原生平台也进入了成熟阶段.近日,灵雀云发布重大产品升级,推出全栈云原生开放平台ACP 3.0.作为面向企业级用户的 ...

  4. 迅雷云加速开放平台接口说明文档

    迅雷云加速开放平台接口说明文档 全局接口 任务接口 接口详细说明 XL_Init BOOLXL_Init(void) XL_UnInit BOOL XL_UnInit(void) XL_CreateT ...

  5. 移动云API开放平台助力开发者驰骋云端

    作者:中国移动云能力中心  --王仁喜 概要:本篇文章带你深入了解移动云API开放平台如何助力开发者驰骋云端. 初识移动云API开放平台 随着移动云业务的不断发展,用户对移动云被集成能力的要求越来越高 ...

  6. 国内首家喵印云打印开放平台

    国内首家喵印云打印开放平台 外网打印:提供对打印机的云端打印开放能力,支持微信小程序,网页,客户端等外部的Api接口控制打印pdf办公文件的能力. 内网打印:局域网打印任务管理的解决方案,可控制打印任 ...

  7. 迅雷云加速开放平台学习笔记——说明

    最近在研究软件的自动更新功能,手动更新太麻烦而且对电脑小白来说容易出错.之前对自动更新没什么概念,不知道如何实现.简单百度之后,原来"更新"功能是一个单独的模块,在需要更新的时候启 ...

  8. 迅雷云加速开放平台c#demo

    迅雷云加速开放平台c#demo.很多人很遇到下载文件的问题.这个例子是调用迅雷云加速开放平台的dll,进行下载,速度很快,下载过程中可以获取到很全的下载信息,比如下载速度,进度,完成状态等. 例子中带 ...

  9. 灵雀云全栈云原生开放平台ACP登陆VMware云市场

    近日,国内企业级云原生解决方案的领军企业灵雀云,携全栈云原生开放平台ACP(Alauda Container Platform)正式登陆VMware云市场. VMware云市场(Cloud Marke ...

最新文章

  1. 《ELK Stack权威指南(第2版)》一3.8 Docker日志
  2. mxnet基础到提高(4)-- Dense层基础
  3. react监听input框里的值
  4. springboot思维导图
  5. Win32ASM学习[9]: 标志寄存器
  6. 解决:Could not find or load main class org.apache.rocketmq.example.quickstart.Producer
  7. Paddle 使用预训练模型 实现快递单信息抽取
  8. Python这11个奇特的库,你都认识吗?你还知道哪些?
  9. string s = new string(“xyz“);创建了几个对象_「005」-JavaSE面试题(五):String类
  10. 注意:ORACLE 11G ADG RAC 这个情况下并不能高可用
  11. Linux rescue救援(光盘修复)模式详解
  12. 狂神说Reids完结篇
  13. python大牛是什么水平_yield--Python大牛必须掌握的高端语法
  14. delphi mysql5_Delphi7连接MySql5.5.15
  15. 《黑客之道》- 全网最详细的kali系统安装教程
  16. 西电2021计算机考研大纲,2021年西安电子科技大学硕士研究生833计算机学科专业基础综合考试大纲...
  17. Sybase ASE 12.5.4数据库安装备份还原操作步骤
  18. PHP implode和explode用法
  19. CSO是什么?这家年增长48%的企业级软件公司告诉你
  20. 如何在阿里云(centos7)上面搭建fastdfs服务器(搭建篇)--保姆级超级详细

热门文章

  1. Fluent Ribbon 第八步 其他控件
  2. 2017.5.2AM
  3. javascript中级--运动二
  4. codeforces 776C Molly's Chemicals(连续子序列和为k的次方的个数)
  5. js解析网址获取需要的数据
  6. VC++中按钮,文本框,选择框的常用方法
  7. [论文阅读] Unifying Global-Local Representations in Salient Object Detection with Transformer
  8. python中的append()有什么功能_在python中append()函数能做什么
  9. Centos 7安装docker实战
  10. CV2/PIL/Matplotlib读取图片注意事项