分布式API网关初步了解

1 背景

每个微服务常用的功能,例如鉴权,限流,日志,监控等功能放在一个地方实现,于是可以使用分布式API网关去实现,

vxlan分布式网关动态 分布式api网关_java

2 传统和分布式API网关做法

vxlan分布式网关动态 分布式api网关_API_02

将客户端以及service需要访问后端的服务,统一通过分布式API网关,将具体的请求进行代理到后端的web服务器

3 kong请求流程

  1. 总体流程

vxlan分布式网关动态 分布式api网关_微服务_03

客户端请求发起然后到达分布式API网关,API网关进行安全校验鉴权等操作,再把具体的请求在路由到后端的微服务当中,理解为反向代理即可

  1. 架构设计

kong是在nginx基础上开发的,具体是nginx上层嵌入形成openresty,再上层进行一个开发变成kong

vxlan分布式网关动态 分布式api网关_分布式_04

4 API网关功能

vxlan分布式网关动态 分布式api网关_vxlan分布式网关动态_05

  1. 后端web服务器功能

work进程4个,connection是1024,http服务器中有server并且listen端口是7001,请求应答式

实现的功能是请求过来后,会打印出请求的远端的ip地址

vxlan分布式网关动态 分布式api网关_API_06

启动下服务

vxlan分布式网关动态 分布式api网关_微服务_07

  1. nginx

监听端口,转发上游服务器处理

vxlan分布式网关动态 分布式api网关_分布式_08

vxlan分布式网关动态 分布式api网关_API_09

  1. openresty

master进程结束后调用init_by_lua的接口,然后fork出四个不同的进程,初始化后调用init_worker_by_lua接口,现在就是openresty启动完毕

当客户端发起请求,nginx把http请求分成11个阶段,openresty就是在nginx上嵌入了一些lua代码,例如在握手阶段修改证书,设置具体属性,重写url,进行鉴权(黑白名单,用户认证token),而后才开始处理请求,请求内容本地生成(heade和body可以用来过滤),或者内容生成依赖于upstream上游服务器,转发给到上游服务器

最终打印日志

总结就是openresty在nginx上面嵌入了lua动态语言代码

vxlan分布式网关动态 分布式api网关_API_10

lua协程

原来是需要主线程多次使用callback回调完成功能,通过协程可以一起实现

vxlan分布式网关动态 分布式api网关_vxlan分布式网关动态_11

  1. kong

在openresty上实现应用

vxlan分布式网关动态 分布式api网关_微服务_12

vxlan分布式网关动态 分布式api网关_分布式_13

插件机制

vxlan分布式网关动态 分布式api网关_微服务_14

kong的抽象

路由route,service,upstream,target

vxlan分布式网关动态 分布式api网关_java_15

vxlan分布式网关动态 分布式api网关_vxlan分布式网关动态_16

5 kong操作

  1. 配置upstreams

vxlan分布式网关动态 分布式api网关_微服务_17

vxlan分布式网关动态 分布式api网关_分布式_18

加一个target

vxlan分布式网关动态 分布式api网关_API_19

  1. 配置services

vxlan分布式网关动态 分布式api网关_java_20

填写route

vxlan分布式网关动态 分布式api网关_java_21

  1. 配置插件plugins

vxlan分布式网关动态 分布式api网关_API_22

  1. consumer

用于用户安全认证

vxlan分布式网关动态 分布式api网关_API_23