网关的核心功能
动态路由
新开发的服务,动态把请求路径和服务的银蛇关系热加载到网关里去。服务的增减机器,网关能自动热感知。
前端请求服务接口,可以通过网关进行服务的路由,并通过负载均衡选择合适的机器。
灰度发布
针对新版本发布的代码,可以通过灰度发布的一些规则,将少部分流量信息请求到一个服务的测试机器上,在测试机器上验证新版本的功能开发情况,待验证新发布的代码没问题后,再将服务的代码进行版本的更新。
授权认证
系统统一的登录认证和权限授权。用户的请求过来时,需要鉴权系统是否允许请求服务,如果不允许,就会拦截请求。
性能监控
可以通过日志或者相关数据存储每个API接口的耗时、成功率、QPS。
系统日志
调用服务存储相关的服务日志信息。存储每个服务接口的请求参数和返回结果数据信息。
数据缓存
某些服务的接口返回的结果数据可以在网关做统一的数据缓存,后期再次调用相关服务接口的时候,就可以直接从缓存中拿数据。
限流熔断
假设经过压测一秒钟可以抗住1000个请求,如果某段时间内,一秒钟有请求2000个,此时网关就会做限流熔断的操作,控制请求只能有1000个请求成功,保证后端服务是安全的,不会因为过多的请求造成崩溃。
几种技术选型
Kong
Nginx里面的一个基于lua写的模块,实现了网关的功能
依托于Nginx实现,OpenResty,lua实现的模块,现成的一些插件,可以直接使用。
Zuul
多用于Spring Cloud微服务技术架构
基于Java开发,核心网关功能都比较简单。比如灰度发布、限流、动态路由之类的,都需要做二次开发。
高并发能力不强,同时需要基于Tomcat来部署,Spring Boot 用Tomcat把网关系统跑起来。
但是Zuul网关是基于Java语言开发的,可以直接把控源码,可以做二次开发封装各种需要的功能。
Nginx + Lua (OpenResty)
抗高并发的能力很强,少数几台机器部署一下,就可以抗很高的并发
但是Nginx使用C语言编写的,所以精通Nginx源码很难,也很难从Nginx内核层面做一些二次开发和源码定制
自研网关
基于Java、Servlet、Netty自研高并发、高性能的网关系统,同时能自己把控一切。