使用函数计算构建健壮、高并发、稳定的第三方 Token 缓存服务

本文涉及的产品
函数计算FC,每月15万CU 3个月
简介: 本服务作为获取其它服务商 Api Token 的桥梁,提供 Token 的获取和缓存等功能,并内嵌灵活的配置以覆盖大部分的从其他服务商获取 Token 的场景。

使用 Serverless 构建第三方 Token 缓存服务

通常地,第三方平台 API 认证采用 OIDC 协议,应用需要携带 Token 访问资源 API,资源服务 API 会通过拦截器查验 Token 中的 scope 字段是否包含特定的权限项目,从而决定是否返回资源。第三方平台通常会对 Token 的获取限制频率。

本服务作为获取其它服务商 Api Token 的桥梁,提供 Token 的获取和缓存等功能,并内嵌灵活的配置以覆盖大部分的从其他服务商获取 Token 的场景。

项目使用阿里巴巴出品的函数计算开发框架 MidwayJs 进行函数开发、构建、发布,支持腾讯云、阿里云等多个云服务提供商部署,本服务的开源地址:https://github.com/Geeeeeeeeeek/serverless-token-server

特性

  • Serverless 部署,零成本部署和运维
  • 灵活的服务商配置、自定义密钥存储、Token 等信息通过 mysql 进行持久化
  • 缓存官方返回的数据,在有效时间内复用
  • 防集中过期导致的爆发性请求

服务拓扑

graph.png

graph TB
App(使用 Token Server 服务的外部应用) --> token-server-cache
Admin(Token Server 管理端) --> token-server
App --> token-server(serverless-token-server)
token-server-cache --token,expires_in--> App
token-server --token,expires_in--> App

token-server-cache(serverless-token-server-cache) ---> token-server
token-server --> cache{Cache}
cache --hit--> Database((Datebase))
cache --miss--> Upstream
cache --token,expires_in--> token-server
Upstream --token,expires_in--> Database

classDef box stroke:#333,stroke-width:4px;
classDef orange fill:#f96,stroke:#333,stroke-width:4px;
class cache orange
class Upstream box

测试结果(ab 测试、监控指标、费用预估)

1.使用 ab 测试工具并发设置 300,连续请求 5s,粗略得到 QPS 为 1700:

  • 为什么设置并发数为 300,因为阿里云函数计算默认最大并发为 300

ab

2.阿里云函数计算监控指标:

  • 请求次数约 1 万次
  • 函数并发实例 250 个
  • 函数错误次数 0 次

faas

3.函数计算费用预估

  • 1 万次函数调用费用预估约 1.39 元

cost

支持平台(已验证)

企业微信 API-企业内部开发

curl -H 'Content-Type: application/json' --data-binary '
{
  "id": "qywx_qynbkf",
   "config": {
           "url": "https://qyapi.weixin.qq.com/cgi-bin/gettoken",
           "method": "GET",
           "arguments": [
               {
                   "name": "corpid",
                   "place": "url",
                   "value": "$key_1"
               },
               {
                   "name": "corpsecret",
                   "place": "url",
                   "value": "$key_2"
               }
           ],
           "token_path": "access_token",
           "content_type": "json",
           "expires_in_path": "expires_in"
           }
}
' /api/realm

微信公众号 API-微信公众号开发

  • 创建平台信息
curl -H 'Content-Type: application/json' --data-binary '
{
  "id": "wxgzh",
   "config": {
           "url": "https://api.weixin.qq.com/cgi-bin/token",
           "method": "GET",
           "arguments": [
               {
                   "name": "appid",
                   "place": "url",
                   "value": "$key_1"
               },
               {
                   "name": "secret",
                   "place": "url",
                   "value": "$key_2"
               },
               {
                   "name": "grant_type",
                   "place": "url",
                   "value": "$key_3"
               }
           ],
           "token_path": "access_token",
           "content_type": "json",
           "expires_in_path": "expires_in"
           }
}
' /api/realm

RoadMap

🚀 表示已经实现的功能,👷 表示进行中的功能,⏳ 表示规划中的功能,🏹 表示技术方案设计中的功能。

功能 状态 发布版本
上游服务商并发限制,超时设计 👷 进行中
token 控制台管理页面(react) 🏹 设计中
日志记录 🏹 设计中
支持固定 token 模式 ⏳ 规划中
serverless 函数计算部署 🚀 已完成 V1.0
token 获取、缓存机制 🚀 已完成 V1.0
realm 服务商、secret 应用密钥 crud 管理 🚀 已完成 V1.0

使用方式(API 文档)

1.查看是否有对应的 Token 上游提供服务商信息

Request

  • Method: GET
  • URL: /api/realm

Response

  • Body
{
  "data": {
      "list": object[]
      "total": number
  },
  "success": "ok"
}

2.新建 Secret

Request

  • Method: POST
  • URL: /api/secret
  • Data:
{
  "realm": "wxgzh", // Token 上游服务提供商 id
  "key": "wxgzh_secret", // 获取本 Token Server 的 Token 唯一标识
  "key_1": "******************",
  "key_2": "******************",
  "key_3": "client_credential"
}

Response

  • Body
{
  "realm": "wxgzh",
  "key": "wxgzh_secret",
  "key_1": "******************",
  "key_2": "******************",
  "key_3": "client_credential"
}

示例(以微信公众号 API 为例)

curl -H 'Content-Type: application/json' --data-binary '
{
    "realm": "wxgzh",
    "key": "wxgzh_secret",
    "key_1": "******************",
    "key_2": "******************",
    "key_3": "client_credential"
}
' /api/secret

3.获取 Token

Request

  • Method: GET
  • URL: /api/token
  • Data:
{
  "realm": "wxgzh", // Token 上游服务提供商 id
  "key": "wxgzh_secret", // 获取本 Token Server 的 Token 标识
  "flush": false // 强制刷新 token,立即从上游服务商获取最新的 token
}

Response

  • Body
{
  "token": "***",
  "expires_in": 7200000, // 毫秒级单位
  "source": "database"
}
相关实践学习
【文生图】一键部署Stable Diffusion基于函数计算
本实验教你如何在函数计算FC上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。函数计算提供一定的免费额度供用户使用。本实验答疑钉钉群:29290019867
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
相关文章
|
2月前
|
缓存 NoSQL Java
Redis+Caffeine构建高性能二级缓存
大家好,我是摘星。今天为大家带来的是Redis+Caffeine构建高性能二级缓存,废话不多说直接开始~
325 0
|
4月前
|
存储 缓存 人工智能
阿里云Tair KVCache:打造以缓存为中心的大模型Token超级工厂
Tair KVCache 是阿里云推出的面向大语言模型推理场景的缓存加速服务,基于分布式内存池化和分级缓存体系,解决显存墙与带宽瓶颈问题。为万亿参数模型的高效推理提供技术保障,推动 AI 算力进化与规模化应用。
|
6月前
|
弹性计算 运维 监控
阿里云 Serverless 助力盟主直播:高并发下的稳定性和成本优化
通过阿里云的 Serverless 产品和技术,盟主直播实现了核心直播平台的云原生架构升级,不仅解决了盟主直播现有业务面临的挑战,还面向未来为盟主直播的平台扩展性提供了技术基础,有效提升了行业竞争力。
|
6月前
|
存储 缓存 NoSQL
云端问道21期方案教学-应对高并发,利用云数据库 Tair(兼容 Redis®*)缓存实现极速响应
云端问道21期方案教学-应对高并发,利用云数据库 Tair(兼容 Redis®*)缓存实现极速响应
162 1
|
6月前
|
缓存 NoSQL 关系型数据库
云端问道21期实操教学-应对高并发,利用云数据库 Tair(兼容 Redis®)缓存实现极速响应
本文介绍了如何通过云端问道21期实操教学,利用云数据库 Tair(兼容 Redis®)缓存实现高并发场景下的极速响应。主要内容分为四部分:方案概览、部署准备、一键部署和完成及清理。方案概览中,展示了如何使用 Redis 提升业务性能,降低响应时间;部署准备介绍了账号注册与充值步骤;一键部署详细讲解了创建 ECS、RDS 和 Redis 实例的过程;最后,通过对比测试验证了 Redis 缓存的有效性,并指导用户清理资源以避免额外费用。
124 1
|
8月前
|
缓存 NoSQL 中间件
redis高并发缓存中间件总结!
本文档详细介绍了高并发缓存中间件Redis的原理、高级操作及其在电商架构中的应用。通过阿里云的角度,分析了Redis与架构的关系,并展示了无Redis和使用Redis缓存的架构图。文档还涵盖了Redis的基本特性、应用场景、安装部署步骤、配置文件详解、启动和关闭方法、systemctl管理脚本的生成以及日志警告处理等内容。适合初学者和有一定经验的技术人员参考学习。
661 7
|
8月前
|
缓存 NoSQL 数据库
运用云数据库 Tair 构建缓存为应用提速,完成任务得苹果音响、充电套装等好礼!
本活动将带大家了解云数据库 Tair(兼容 Redis),通过体验构建缓存以提速应用,完成任务,即可领取罗马仕安卓充电套装,限量1000个,先到先得。邀请好友共同参与活动,还可赢取苹果 HomePod mini、小米蓝牙耳机等精美好礼!
|
8月前
|
存储 缓存 前端开发
利用 Webpack 5 的持久化缓存来提高构建效率
【10月更文挑战第23天】利用 Webpack 5 的持久化缓存是提高构建效率的有效手段。通过合理的配置和管理,我们可以充分发挥缓存的优势,为项目的构建和开发带来更大的便利和效率提升。你可以根据项目的实际情况,结合以上步骤和方法,进一步优化和完善利用持久化缓存的策略,以达到最佳的构建效果。同时,不断探索和实践新的方法和技术,以适应不断变化的前端开发环境和需求。
|
9月前
|
缓存 弹性计算 NoSQL
新一期陪跑班开课啦!阿里云专家手把手带你体验高并发下利用云数据库缓存实现极速响应
新一期陪跑班开课啦!阿里云专家手把手带你体验高并发下利用云数据库缓存实现极速响应
|
9月前
|
存储 缓存 NoSQL
大数据-38 Redis 高并发下的分布式缓存 Redis简介 缓存场景 读写模式 旁路模式 穿透模式 缓存模式 基本概念等
大数据-38 Redis 高并发下的分布式缓存 Redis简介 缓存场景 读写模式 旁路模式 穿透模式 缓存模式 基本概念等
222 4

热门文章

最新文章