最近微服务架构在项目中的应用越来越多,我们知道在微服务架构风格中,一个大应用被拆分成为了多个小的服务系统提供出来,这些小的系统他们可以自成体系,也就是说这些小系统可以拥有自己的数据库,框架甚至语言等,这些小系统通常以提供 Rest Api 风格的接口来被 H5, Android, IOS 以及第三方应用程序调用。
但是在UI上进行展示的时候,我们通常需要在一个界面上展示很多数据,这些数据可能来自于不同的微服务中,举个例子。
在一个电商系统中,查看一个商品详情页,这个商品详情页包含商品的标题,价格,库存,评论等,这些数据对于后端来说可能是位于不同的微服务系统之中,可能我后台的系统是这样来拆分我的服务的:
产品服务 – 负责提供商品的标题,描述,规格等。
价格服务 – 负责对产品进行定价,价格策略计算,促销价等。
库存服务 – 负责产品库存。
评价服务 – 负责用户对商品的评论,回复等。
现在,商品详情页需要从这些微服务中拉取相应的信息,问题来了?
问题由于我们使用的服务系统架构,所以没办法像传统单体应用一样依靠数据库的 join 查询来得到最终结果,那么如何才能访问各个服务呢?9 K” t# ~5 z: h/ x( T2 b
按照微服务设计的指导原则,我们的微服务可能存在下面的问题:) r0 w7 \0 ? o/ d6 ?5 d+ o
服务使用了多种协议,因为不同的协议有不同的应场景用,比如可能同时使用 HTTP, AMQP, gRPC 等。+ z! r- F o) P8 j n, _
服务的划分可能随着时间而变化。
服务的实例或者Host+端口可能会动态的变化。
那么,对于前端的UI需求也可能会有以下几种:+ W’ u” s2 ~$ _1 B’ H2 y: D; J
粗粒度的API,而微服务通常提供的细粒度的API,对于UI来说如果要调用细粒度的api可能需要调用很多次,这是个不小的问题。 c3 C/ e! Y6 S# G% g2 H9 O
不同的客户端设备可能需要不同的数据。Web,H5,APP
不同设备的网络性能,对于多个api来说,这个访问需要转移的服务端会快得多
以上,就是我们构建微服务的过程中可能会遇到的问题。那么如何解决呢?( y3 C8 A- ^% [4 d! i1 z! D
这种情况下, API 网关(API Gataway)诞生了。% S* E) k” z% N/ S6 e
API 网关API网关是一个服务器,是系统的唯一入口。从面向对象设计的角度看,它与外观模式类似。API网关封装了系统内部架构,为每个客户端提供一个定制的API。它可能还具有其它职责,如身份验证、监控、负载均衡、缓存、请求分片与管理、静态响应处理。
API网关方式的核心要点是,所有的客户端和消费端都通过统一的网关接入微服务,在网关层处理所有的非业务功能。通常,网关也是提供REST/HTTP的访问API。服务端通过API-GW注册和管理服务。5 |* N6 @) I/ g, H# l0 l
API网关网关的价值:$ D# h. D6 _! ?4 `
网关层对外部和内部进行了隔离,保障了后台服务的安全性。
对外访问控制由网络层面转换成了运维层面,减少变更的流程和错误成本
减少客户端与服务的耦合,服务可以独立发展。通过网关层来做映射。
通过网关层聚合,减少外部访问的频次,提升访问效率。/ L& C0 y0 `0 |) a; d- S
节约后端服务开发成本,减少上线风险。
为服务熔断,灰度发布,线上测试提供简单方案。9 a3 H/ g) X# A2 y% r
当然现在市面上的Api网关开源项目,有以下项目9 l9 u2 `” ?! H& k
Tyk:Tyk是一个开放源码的API网关,它是快速、可扩展和现代的。Tyk提供了一个API管理平台,其中包括API网关、API分析、开发人员门户和API管理面板。Try 是一个基于Go实现的网关服务。1 F’ S- F0 x% x
Kong:Kong是一个可扩展的开放源码API Layer(也称为API网关或API中间件)。Kong 在任何RESTful API的前面运行,通过插件扩展,它提供了超越核心平台的额外功能和服务。+ U5 v2 v8 f0 h4 W/ }$ ~
Orange:和Kong类似也是基于OpenResty的一个API网关程序,是由国人开发的。
Netflix zuul:Zuul是一种提供动态路由、监视、弹性、安全性等功能的边缘服务。Zuul是Netflix出品的一个基于JVM路由和服务端的负载均衡器。
apiaxle: Nodejs 实现的一个 API 网关。
api-umbrella: Ruby 实现的一个 API 网关。6 |$ Y% ?0 o4 Y2 `+ p0 C& C
这套课程就给大家介绍一下 nignx + lua方式的网关框架,也是很多公司常用的网关框架
〖课程目录〗:1 a7 J0 C’ L; U% j5 O; R
第1节漫谈网关架构: @1 D7 Y2 L’ _7 O
第2节网关技术选型
第3节nginx下载安装
第4节正向代{过}{滤}理、反向代{过}{滤}理
第5节nginx命令、信号控制& F, W c: d2 O6 Y1 U
第6节nginx平滑升级
第7节nginx配置文件说明
第8节nginx配置连接数
第9节nginx虚拟主机5 {/ M+ B” _9 b
第10节nginx日志以及切割* q7 Z7 Y- q: `, x” y7 S& j
第11节nginx的location详解
第12节nginx的负载均衡
第13节nginx的echo模块安装
第14节openresty背景介绍
第15节openresty安装
第16节openresty的helloworld
第17节lua介绍以及helloworld
第18节lua基本语法一8 i: U” X4 L/ \: _” f2 @+ O4 }
第19节lua基本语法二
第20节lua基本语法三0 [, g0 w% M/ U! X
第21节lua基本语法四
第22节lua运算符
第23节lua控制结构一7 T3 u8 } n” @% g+ J1 a
第24节lua控制结构二
第25节lua的正则表达式
第26节lua的string操作
第27节lua的table操作
第28节lua变量% f” D) H. K8 U1 t9 ^+ d
第29节lua时间操作
第30节lua模块
第31节lua元表1 [0 R3 r @$ a7 ?! [- u }
第32节lua面向对象* T1 W+ o& @; [‘ G
第33节openresty中使用lua
第34节openresty中使用json模块2 [: g1 f3 Y. m0 x” R
第35节openresty中使用redis模块
第36节openresty中封装redis操作, G8 Z- A: A4 r
第37节openresty中使用mysql0 ], F$ V8 K% B! V! Q: q: \% }
第38节lua发起http请求2 [$ e. _ h9 x9 s
第39节openresty中使用http模块
第40节openresty中使用全局缓存
第41节openresty执行流程
第42节openresty执行详解之初始化阶段
第43节openresty执行详解之重写赋值阶段
第44节openresty执行详解之重写url阶段
第45节openresty执行详解之访问阶段
第46节openresty执行详解之内容阶段# c0 o3 x5 s+ B0 f% \” M. D
第47节openresty执行详解之响应阶段
第48节openresty实现访问频率控制/ p6 ~6 o% \8 Z p& k
第49节openresty实现黑名单控制. ^: x1 r; u1 W1 d7 G
第50节openresty实现接口签名验证
第51节openresty实现网关框架7 u- Y5 {/ g+ b$ x |
第52节openresty实现网关主入口0 K. q5 a4 G1 W’ H, I: c: f
第53节openresty实现网关插件可配置
第54节openresty实现网关插件加载) I6 c! t6 s; H6 [9 Z7 Q’ O! Y
第55节openresy实现网关之签名验证插件+ l’ N’ ]. Q: @# J* S3 F
第56节openresy实现网关之黑名单插件
第57节openresty实现网关之频率插件4 H% p2 q/ J1 d, b$ r
第58节网关框架总结
版权声明
版权说明: 仅限用于学习和研究目的;不得将上述内容用于商业和非法用途!否则一切后果自负。我们非常重视版权问题,如有侵权请邮件至(171373236#qq.com)与我们联系处理,敬请谅解!