微服务之API网关设计

P60528-094513-01.jpeg

微服务除了互相之间调用,还需要将API提供给外部应用访问,像浏览器,移动app,第三合作方等等,这就需要前段路由来管理后端微服务提供的服务。提供类似功能的应用有着多样化的名称,比如前置服务器/前置机、路由服务器、(反向)代理服务器,API网关服务器也是其中的一个叫法,只是场景和侧重点不一样。

API网关,顾名思义,就是外部到内部的一道门,其主要功能:

  • 服务路由:将前段应用的调用请求路由定位并负载均衡到具体的后端微服务实例,对于前端应用看起来就是1个应用提供的服务,微服务对于前段应用来说就是黑盒,前段应用也不需要关心内部如何分布,由哪个微服务提供。主要有静态路由和动态路由。
    • 静态路由:有时候需要通过域名或者其他固定方式提供和配置路由表
    • 动态路由:通过服务发现服务,动态调整后端微服务的运行实例和路由表,为路由和负载均衡提供动态变化的服务注册信息。
  • 安全:统一集中的身份认证,安全控制。比如登录,签名,黑名单等等,还可以挖掘和开发更高级的安全策略。
  • 弹性:限流和容错,也是另一个层面的安全防护,防止突发的流量或者高峰流量冲击后端微服务而导致其服务不可用,另一方面可以在高峰期通过容错和降级保证核心服务的运行。
  • 监控:实时观察后端微服务的TPS、响应时间,失败数量等准确的信息。
  • 日志:记录所有请求的访问日志数据,可以为日志分析和查询提供统一支持。
  • 其他,当然还有很多需要统一集中管理的都可以在网关层解决。

在Spring Cloud Netflix中使用Zuul来作为API Gateway组件,并结合Undertow,可以满足大部分性能和网关功能需求了(更高要求可以参考:https://github.com/tietang/ngx-lua-zuul),Zuul + Undertow一般性能延迟,包括JVM和网络延迟在10%~20%,JVM延迟可以控制到10ms以内。另一方面,Zuul有强大的可定制化,通过ZuulFilter可以定制开发更多的网关功能。如下图所示:在Spring Cloud技术上,Zuul集成了Hystrix,Ribbon,Eureka Client等强大的技术栈,提供了开箱即用的Spring Cloud微服务网关功能。Zuul的强大之处是自由定制,这样对于很多老项目微服务化后,就不能按照Spring Cloud默认的动态路由规则运行,因此在其基础上定制了一些路由规则功能,更好的适应老项目微服务化。

API gateway
API gateway

定制的路由规则的主要功能:

  1. 路由表中包含源路径,微服务名称,目标路径。
  2. Endpoint粒度配置支持。
  3. 路由支持1对1精确路由。
  4. 源路径可以前缀/**格式来模糊路由。
  5. 目标路径可以使用前缀/**格式来装配目标路径。
  6. 保留默认动态路由规则:服务名称/** --> 是否截去前缀 --> 目标路径。
  7. 保留默认动态路由规则是否支持截去前缀的配置参数stripPrefix特性。
  8. 路由规则可以在不重启服务动态更新,这个功能通过外化配置来支持。
  9. 匹配股则采取谁先匹配路由谁,也就是说在路由表中有2个或以上的路由规则可能被匹配到时,匹配最先查询到的规则。

路由规则格式采用properties格式:

源路径 = 微服务名称, 目标路径

启动时读取配置并解析,放入路由表。请求时通过查询匹配到合适的路由转发。

例如:

/api/v1/trade=trade,/v1/trade
/api/customer/**=customer,/api/v1/**
/api/user/**=user

在上面的例子中:

  • /api/v1/trade会精确的路由到trade微服务的/v1/trade;
  • /api/customer/开头的api会路由转发到customer微服务的/api/v1/**,其中后面的**会被前面的**部分替换,比如/api/customer/card->/api/v1/card的转换。
  • /api/user/开头的api会路由转发到user微服务的/api/user/**,endppoint不变。

如果在Eureka Server中已经注册了微服务payment,那么在zuul启动后会自动添加路由规则,如果stripPrefix=false:

/payment/**=payment,/payment/**

如果stripPrefix=true:

/payment/**=payment,/payment/**

API网关通过部署多个实例来保证可用性,前端通过Nginx来负载均衡。

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

推荐阅读更多精彩内容