每天响应数亿次请求,腾讯云如何提供高可用API服务? https://mp.weixin.qq.com/s/OPwlHcqkaTT_gcwHfr5Shw

李阳 云加社区 2020-09-16

导语 | 微服务时代,每个服务有各自的发布、运维功能,服务的调用和接入需要依赖一个统一的出入口,那就是 API 网关。API 网关是业务与用户联通的 API 入口,是所有服务的大门。文本将介绍腾讯云 API 3.0 网关的探索和思考,希望与大家一同交流。文章作者:李阳,腾讯云产品研发工程师。

一、API 网关的定义与职能

1. API网关是什么?
在日常工作中,我们经常会听到网关这个名称,这里说的网关特指 API 网关。字面意思是指将所有 API 的调用统一接入 API 网关层,由网关层负责接入和输出。
API 网关是业务与用户联通的 API 入口,是所有服务的大门。
2. 什么情况下需要API网关?
单体应用时代,在业务简单的时候,我们常常把功能都集中在一个应用中。但随着业务功能日益增多,将所有的功能集中在一个程序的时候,每更新一个功能模块,势必要更新整个程序,牵一发而动全身,系统将很难维护。
这个时候,微服务出现了。微服务有各自的发布、运维等功能,解决了单体应用的弊端。微服务化后就必须有统一的出入口,于是,API 网关就出现了。
API 网关很好的解决了微服务下调用、统一接入等问题,如下图所示:

有了 API 网关之后,各个 API 服务提供团队可以专注于自己的业务逻辑处理,而其他公共功能可以交给API网关。
3. API 网关需要覆盖哪些功能?
首先做为一个网关,可以处理一些非业务的逻辑,比如安全,流控,请求路由等等。其次能够管理API的全生命周期,包括创建、维护、发布、运行、下线等功能。如下图所示:

二、腾讯云 API 3.0

腾讯云每天有数亿的 API 请求,百万级的用户,数百款产品,为了提供更加安全,规范,易用,高可用的 API 服务,腾讯云 API 应运而生。
腾讯云 API 自 2013 年诞生以来,经过了 1.0->2.0->3.0 的迭代演变,1.0 已经完全退出了历史舞台,2.0 也在逐步退出历史的舞台,腾讯云 API 3.0 (以下简称云API 3.0)经历了 2 年多的发展,已经形成了一整套具备 API 生命周期管理,请求接入,业务聚合,安全可流控的 API 产品,已成为腾讯云的 API 标准。

云 API 的产品形态如下图所示:

提供了控制台,SDK,命令行,小程序,API 等多种接入方式,为 Iaas,Paas,Saas 以及平台服务提供了统一的对外体验。
云 API 包含了云 API 核心框架,云 API 管理系统和云 API 监控运营系统三大模块。系统架构如下图所示:

其中,API 核心框架承载着海量流量的输入输出,流控,协议转换,路由等;API 管理系统是业务录入接口,负责进行 API 全生命周期管理和路由策略配置;API 监控运营系统提供了 API 各种运营数据以及画像。
云 API 3.0 覆盖以下功能:

1. 安全性
HTTPS 支持,保证 API 的安全通讯。有基础的抗 DDos 攻击的能力,采用安全可靠的认证方式,可使用 SecretId + SecretKey 的方式或者 token 的方式进行用户认证。
支持 V1,V3(TC3-HMAC-SHA256)多种签名方案,更加安全,支持内部调用和全程票据功能,进一步加强了安全性。
2. 接口规范
云 API 3.0 制定并落地了统一的接口规范,得到用户的一直好评。之前的云 API 1.0,2.0 没有统一的规范,接口定义百花齐放。比如有的接口使用匈牙利命名法,有的接口使用大小驼峰,有的接口使用全小写如 resource_id。
接口类型也是灵活可变,可以从 int 转成 string,可返回也可不返回,用户的使用体验不统一,也因此遇到很多问题。比如接口名理解门槛高,返回参数和文档不一致无所适从,业务不兼容修改参数造成存量用户调用失败等等。
为此,云 API 3.0 的设计理念就是要充分保证用户的体验,制定了一整套统一的接口的标准规范,使得文档与接口行为必须严格一致,用户不需要根据不同的接口去理解和适配规则,充分保障用户的体验。

 
 

每天响应数亿次请求,腾讯云如何提供高可用API服务?的更多相关文章

  1. 腾讯云部署keepalived高可用

    使用背景: 通过调用python SDK在腾讯云手动部署keepalived高可用 部署环境 系统:centos7.3 Master:192.168.0.100 Slave:192.168.0.14 ...

  2. 腾讯云:ubuntu搭建 FTP 文件服务

    搭建 FTP 文件服务 安装并启动 FTP 服务 任务时间:5min ~ 10min 安装 VSFTPD 使用 apt-get 安装 vsftpd: sudo apt-get install vsft ...

  3. 剑指Kubernetes 揭秘腾讯云的PaaS技术选型策略

    1.前言 Kubernetes 很火,一大批互联网公司早已领先一步,搭建起专有的 PaaS平台,传统企业们看到的 Kubernetes的趋势,亦不甘落后,在试水的道上一路狂奔-- 虽然,Kuberne ...

  4. 国内云存储对比: 阿里云、腾讯云、Ucloud、首都在线

    阿里云的数据存储<http://www.aliyun.com/product/rds/> RDS — 关系型数据库服务(Relational Database Service,简称RDS) ...

  5. 如何用腾讯云打造一款微视频APP

    版权声明:本文由腾讯云原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/196 来源:腾云阁 https://www.qclo ...

  6. 磊哥测评之数据库SaaS篇:腾讯云控制台、DMC和小程序

    本文由云+社区发表 作者:腾讯云数据库 随着云计算和数据库技术的发展,数据库正在变得越来越强大.数据库的性能如处理速度.对高并发的支持在节节攀升,同时分布式.实时的数据分析.兼容主流数据库等强大的性能 ...

  7. 如何优雅地使用腾讯云COS-.NET篇

    如何优雅地使用腾讯云COS-.NET篇 代码下载地址 https://github.com/whuanle/txypx20190809 前提 创建子账号 打开 https://console.clou ...

  8. 腾讯云Redis全面升级,性能提升400%,可用性高达5个9

    2022年6月,腾讯云Redis全新升级,发布高性能版本,单节点可提供50W+吞吐,性能是原生Redis的4倍.同时,腾讯云Redis推出全球复制功能,解决原生Redis诸多痛点问题,可用性升级高达9 ...

  9. 腾讯云TDSQL审计原理揭秘

    版权声明:本文由孙勇福原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/244 来源:腾云阁 https://www.qclo ...

随机推荐

  1. SVN 使用教程 命令 visual studio 使用SVN

    首先推荐大家一个应该是国内外最好的SVN仓库,不限私有,不限成员:https://svnbucket.com/ SVN官网 https://tortoisesvn.net/downloads.html ...

  2. MySQL如何优雅的删除大表

    前言 删除表,大家下意识想到的命令可能是直接使用DROP TABLE "表名",这是初生牛犊的做法,因为当要删除的表达空间到几十G,甚至是几百G的表时候.这样一条命令下去,MySQ ...

  3. SpringBoot全局异常拦截

    SpringBoot全局异常捕获 使用到的技能 @RestControllerAdvice或(@ControllerAdvice+@ResponseBody) @ExceptionHandler 代码 ...

  4. SpringBoot 2.X以上集成redis

    在网上看到的教程和资料大多数都是2.X以下的版本.使用起来会出现各种问题,通过百度,最后终于弄好了. 2.x以上使用的是 spring-boot-starter-data-redis 2.x一下使用的 ...

  5. 当layui与分页相遇--bootstrap何去何从

    用了一段时间,感觉layui比bootstrap 方便了很多.在js操作上比bootstrap减少了许多的代码量. 今天遇到需要前台分页.当然,不是表格,如果是表格的话.使用yalui table和b ...

  6. 自动化运维工具-Ansible之4-变量

    自动化运维工具-Ansible之4-变量 目录 自动化运维工具-Ansible之4-变量 变量概述 变量的定义和调用 变量优先级测试 变量优先级测试二 变量注册 facts缓存 变量概述 ​ 变量提供 ...

  7. 图解SparkStreaming与Kafka的整合,这些细节大家要注意!

    前言 老刘是一名即将找工作的研二学生,写博客一方面是复习总结大数据开发的知识点,一方面是希望帮助更多自学的小伙伴.由于老刘是自学大数据开发,肯定会存在一些不足,还希望大家能够批评指正,让我们一起进步! ...

  8. 使用postman添加cookie失败和cookie消失问题

    例如 groupId=2; path=/; domain=.www.baidu.com; HttpOnly; Expires=Tue, 16 Jul 2019 03:42:12 GMT; 添加失败和c ...

  9. python之shutil 模块

    一.shutil 高级的 文件.文件夹.压缩包 处理模块 shutil.copyfileobj(fsrc, fdst[, length]) 将文件内容拷贝到另一个文件中 import shutil s ...

  10. Java菜鸟在IP问题踩坑了

    之前有做过获取客户端公网IP的项目 一般都是 正常的request.getRemoteAddr 或者request.getRemoteHost 可获取到客户端的公网IP, 或者项目部署在有nginx代 ...