背景说明
API网关的作用不言而喻,在微服务架构下多个微服务接口需要一个网关来协调,从而实现拦截器、代理转发、流量控制、负载均衡、熔断等机制;有许多成熟的第三方网关中间件,比如Zuul, Kong等,如果没有一个可配置化的方式去管理路由,则每新增一个接口就要到API服务中增加相应的代码,从而达到代理转发请求到后端服务的目的,导致开发人员要分别维护微服务和API网关两套代码,繁琐而低效。
当然,在不想引入第三方网关组件的情况下,我们还是可以自己来手写一个简单的网关组件,从而实现配置化的路由管理功能,大致思路如下:
- 路由配置:通过配置文件管理微服务的路由
- 实现代理:用户请求 -> 输入拦截 -> 服务发现 -> 向上游转发请求 -> 输出拦截 -> 返回信息
- 监听路由:通过
Flask.route
函数注册路由,绑定每个路由的代理