网关相关

在一个大型的互联网架构中,网关是一个不可或缺的组成部分,往往与大流量、高并发的技术直接相关。本文介绍了网关技术的背景知识以及设计网关的基本原则和方法。

一、序

天猫精灵设备网关是阿里巴巴人工智实验室专门为天猫精灵提供的统一接入网关,涉及天猫精灵设备的上下行数据都会经过该网关,包括但不限于各设备模块状态变化(系统、闹钟、播放器、IoT设备等等)、用户唤醒天猫精灵后的语音流、以及云端对天猫精灵的控制指令、TTS音频流等。为什么需要设备网关?设备网关有哪些职责?设计设备网关时需要关注哪些问题?

二、为什么需要设备网关

随着互联网的发展,业务场景越来越复杂,单一Web应用已无法满足业务的发展诉求,微服务架构逐渐成为了主流。为了对客户端屏蔽服务端架构,实现服务端的快速迭代,API 网关基本成为了微服务架构的标配组件。API 网关作为客户端访问服务端的唯一入口,内部服务只需专注于业务逻辑,与业务无关的通用功能都提取到API 网关统一处理,使得搭建一个内部服务变得更加简单、高效。天猫精灵发展速度非常快,设备类型较多,认证鉴权方式有好几种,应用协议也有数个版本,如果没有网关,每个内部服务都需要支持多种认证鉴权方式、理解多个版本的应用协议,内部服务的开发成本会急剧上升。

天猫精灵设备既支持用户主动语音交互使用,也支持用户通过APP进行远程点播、远程控制。为保障用户体验,响应需要及时,设备端和服务端需要能够全天候全双工的通信通道。设备端可以主动给服务端发送数据,服务端也可以主动推送数据给设备端。如果没有网关,每个内部服务都需要与设备端维持这么一条全双工通道,对服务端、设备端的资源成本都是极大的浪费。

从安全性来看,如果没有网关,每个内部服务都需要对外部网络暴露以提供访问,大大增加了被黑客扫描攻击的几率,不利于内部服务的安全保障。

三、设备网关职责

设备网关也是一种API网关,API网关具有的职责也适用于设备网关,除此之外设备网关也有自己的一些特有职责,总的来看设备网关具备这些职责:

1.认证鉴权

作为服务端对外暴露的唯一入口,认证鉴权是非常必要的。通过认证鉴权,确保请求的用户、设备是合法的,请求的资源是有权限的,将不合法的设备请求在入口处就进行拦截丢弃,保障了内部服务、内部资源的访问安全。

2.协议适配

内部服务之间通常是基于高效RPC的方式进行通信,而对外与设备端交互使用的可能是其他协议。网关提供了协议适配的能力,将设备端的请求数据转成内部RPC的数据格式后再分发给内部服务,将内部服务下发的RPC数据转成设备端可理解的协议后再转发给设备端。另外,协议随着业务的发展在不断迭代,同一个功能的接口可能迭代了数个版本,数据结构可能也进行了调整,而设备端一旦流通出去后不一定能得到及时升级,可能还有相当一部分设备端在使用着旧版本的接口,为了减少内部服务的维护成本,网关也会提供新旧版本协议的适配翻译。

3.路由分发

路由分发可以说是网关最核心的职责,一个无法做路由分发的网关根本就称不上是个网关。设备端发送过来的请求,网关需要能根据请求信息进行正确的路由,将请求分发给合适的后端服务;后端服务发送过来的数据(对请求的响应或后端服务主动推送),网关需要能正确路由分发给指定的设备。路由分发通常还会具备负载均衡、流量灰度的特性,根据后端服务的健康状态、负载信息、机器权重、灰度分组等进行请求分发。

4.限流熔断

限流和熔断也是网关比较重要的能力。每个功能接口、每个内部服务都有自己正常合理的访问频次区间,超过阈值的通常是非授权使用,可能会导致内部服务超过安全水位影响服务的稳定性,网关提供通用的限流能力,将超过阈值的请求进行拦截处理。内部服务也可能因为各种原因临时出现不稳定的情况,比如某台机器可能因宿主机临时负载飙升导致响应时间拉长,若请求继续分发到这台有问题的机器上可能会使情况加剧恶化,严重时甚至形成雪崩效应。网关提供的熔断能力可以在机器或服务异常时自动将该机器该服务屏蔽,避免情况继续恶化,在机器服务恢复正常时,网关自动将该机器服务纳入到正常服务分组中。

5.日志审计

既然网关是设备端访问服务端的唯一入口,进出数据都会经过网关,网关进行日志审计也是顺理成章的。请求和响应都进行打点记录,服务访问的数据情况都可自动采集分析,如QPS、RT、成功率、设备端分布等,根据这些数据可以进行业务分析、监控告警、自动运维等等。

6.连接管理

前面提到了天猫精灵需要有全天候全双工的连接通道,网关作为设备端与服务端的唯一出入口,是连接通道的提供方。设备连接到哪一台网关机器上、当前连接是否存活都需要由网关进行管理。

7.音频流分发处理

天猫精灵是个智能语音设备,输入输出有很大一部分是语音流,而后端服务大部分不具备语音流处理的能力,网关还需要进行语音流的分发处理能力,例如将语音流转成文本、将文本转成语音流等。

四、如何设计一个网关

设计一个网关时,除上面提到的功能需求外,还需要考虑到运营需求、运维需求、性能需求。

功能需求

功能需求上面已经介绍过,这里不太细述。

运营需求

何为网关的运营需求呢?后端服务是会不断增加不断扩展的,面向开发者提供的平台能力我称之为网关的运营需求。

1、API生命周期管理

从API的定义、测试、灰度、上线到最终下线,支持日常管理、版本管理、快速回滚等,提供完善的平台管理能力。

2、流量控制

业务流量不是一成不变的,随着业务的发展、促销活动的投入等,流量可能时有变化;服务的优先等级也可能各有不同,在资源受限的情况下,优先保障高优先级的服务。在这些情况下,需要有能力提供给后端服务进行动态的流量控制。

3、拦截器管理

随着业务发展,功能接口可能需要不断迭代,前置参数校验、协议适配转换、错误处理等都可能会变化调整,网关平台需要能够让业务方自助修改拦截器,否则每次变动都需要依赖网关发布,网关会成为业务瓶颈,网关频繁发布对服务稳定性也有较大影响。

4、开发支持

提供在线调试工具,自动生成API文档、SDK,大大降低开发者的接入难度,提高开发效率。

5、监控告警

给业务方提供在线实时查询、订阅服务访问数据的能力,并可配置规则进行业务告警,让业务方随时掌握自己服务的运行情况。

运维需求

网关的运维需求主要表现在网关的稳定性、高可用上。网关作为设备端与服务端的唯一出入口,是逻辑上的单点,一旦发生故障将造成整个系统的不可用,对企业来说可能是致命的。如何保证网关能够7X24稳定运行就是必须考虑的问题。

1、水平扩展

业务访问量与发展情况、促销活动等高度相关,网关需要能够根据业务情况、负载情况进行动态扩缩容。

2、流量迁移

机器是不可靠的,在出现故障时或即将下线维护时,需要有机制能够将流量进行平滑迁移,避免用户受到影响。

3、优雅上线

服务刚上线时,可能会需要一段时间进行初始化准备工作(缓存加载预热、JIT等),在此期间服务可能负载会较高,若刚上线就分配太多流量可能会导致服务被压垮。为了避免这种情况,网关需要支持优雅上线的能力,即通过一段时间逐渐加量的方式加到预设的正常流量。

4、动态更新

网关的每一次变更都可能会对服务可用性带来影响,尽量将功能做成插件的形式支持热更新,可避免对网关的频繁改动,确保服务的稳定性。

性能需求

作为设备端与服务端的唯一出入口,所有流量都会经过网关,可想而知网关的压力是极大的。如果不能保证网关的高性能,随着业务的快速增长,网关可能会需要跟随后端服务的机器同步增长,带来成本的极大上升,这对企业是无法忍受的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342