序言
背景简介
工作近十年,也做过许许多多各种形态的业务系统,主要如下:
经验
- 某出行平台订单系统
- 某出行平台账单系统
- 某出行平台只付系统
- 某房产平台的基础数据系统
- 某房产平台的VR三维系统
服务的客户包括 :
- toG : 政府客户
- toB : 企业客户
- toC : C端个人用户
服务形态包括:
- 云端分布式服务
- Saas服务
- 私有化部署服务
- 单兵便携服务
为什么选择应用网关
在上述工作经验中, 具体的业务形态下,对于具体业务的考量,可以说区别相当之大,对于具体业务的思考,再换了一个行业之后,并不具有太多的可参考价值.而对于具体业务思考,锻炼的是思考方式与思考模型, 难以量化以及具象化, 是一种向虚但是很实用的锻炼, 此处不做过多赘述。
但是, 虽然业务形态服务的客户迥异, 在剥离业务形态, 想更深一层看去, 依旧存在大量共通之处, 且这些共同之处与业务形态、服务的客户等无关, 可以视为各种业务系统之上的一种通用能力. 而种种能力的汇总与应用, 便是聚合成 应用网关服务
, 从纯粹的技术视角来看, 应用网关是很典型且有代表性的一种服务系统。
通用能力分析
一般而言, 开发一个业务系统我们通常会考虑以下问题:
身份认证
: 包括但不限于登录Token
、接口签名等
访问权限
: 包括但不限于对API的访问权限
、对API接口输出字段的访问权限
流量控制
: 用于保护服务不会因为流量过载导致的服务不可用, 常用流控算法 :计数器
、漏桶
、令牌桶等
服务性能
: 为提高接口响应时效性, 往往会为接口数据做缓存处理, 用于提高响应效率系统安全
: 一个业务系统, 往往会被外部 黑帽子、白帽子 各种尝试攻击破解, 如果所在团队基础建设比较完善, 往往可以从接入层进行统一拦截, 而在公共接入层相对没有这么晚上的情况下, 应用网关将是业务无系统最后一道安全屏障。- ...... 等等其他考量
基于上述考量, 我们在设计开发一个业务系统时, 往往会出现以下逻辑:
if 没有剩余流量可用 {
return 命中流控限制, 稍后重试
}
if token 非法 {
return 非法身份
}
if 无接口访问权限 {
return 无权限访问
}
if 命中缓存 {
return 缓存数据
}
执行业务逻辑
if 有a字段权限 {
a字段放入输出数据
}
if 有b字段权限 {
b字段放入输出数据
}
....字段权限判断
设置结果缓存
return 输出数据
而业务网关的意义便在于此: 将业务开发人员从繁琐复杂的基础逻辑中抽离出来, 无需关注基础验证, 专注于实现自身的业务逻辑即可
后续将逐一介绍如何从零搭建一个业务应用网关