kong学习(一)
为什么选择apigateway
当使用单体应用程序架构时,客户端(Web 或移动端)通过向后端应用程序发起一次 REST 调用来获取数据。负载均衡器将请求路由给 N 个相同的应用程序实例中的一个。然后应用程序会查询各种数据库表,并将响应返回给客户端。微服务架构下,单体应用被切割成多个微服务,如果将所有的微服务直接对外暴露,势必会出现安全方面的各种问题。
客户端可以直接向每个微服务发送请求,其问题主要如下:
- 客户端需求和每个微服务暴露的细粒度 API 不匹配。
- 部分服务使用的协议不是Web友好协议。可能使用 Thrift 二进制 RPC,也可能使用 AMQP 消息传递协议。
- 微服务难以重构。如果合并两个服务,或者将一个服务拆分成两个或更多服务,这类重构就非常困难了。
服务端的各个服务直接暴露给客户端调用势必会引起各种问题。同时,服务端的各个服务可扩展和伸缩性很差。API 网关是微服务架构中的基础组件,位于接入层之下和业务服务层之上,如前所述的这些功能适合在 API 网关实现。
当我们决定对应用进行微服务改造时,应用客户端如何与微服务交互的问题也随之而来,毕竟服务数量的增加会直接导致部署授权、负载均衡、通信管理、分析和改变的难度增加。面对以上问题,API GATEWAY是一个不错的解决方案,其所提供的访问限制、安全、流量控制、分析监控、日志、请求转发、合成和协议转换功能,可以解放开发者去把精力集中在具体逻辑的代码,而不是把时间花费在考虑如何解决应用和其他微服务链接的问题上。
什么是kong
Kong是一个在Nginx中运行的Lua应用程序,可以通过lua-nginx模块实现,Kong不是用这个模块编译Nginx,而是与OpenRestry一起发布,OpenRestry已经包含了lua-nginx-module,OpenRestry是Nginx的一组扩展功能模块。
为什么选择kong
可扩展:Kong只需添加更多计算机即可轻松地水平扩展,这意味着您的平台几乎可以处理任何负载,同时保持较低的延迟。
模块化:可以通过添加新的插件来扩展Kong,这些插件可以通过RESTful Admin API轻松配置。
可在任何基础架构上运行:Kong可在任何地方运行。您可以将Kong部署在云或本地环境中,包括单个或多个数据中心设置,以及公共,私有或仅邀请API。
如何工作
Kong运行后,对API的每个请求都会首先到达Kong,然后将其代理到最终的API。在请求和响应之间,Kong将执行您决定安装的所有插件,从而使您的API发挥作用。Kong有效地成为每个API请求的入口点。
与传统部署相比
Kong是一款基于Nginx_Lua模块写的高可用,由于Kong是基于Nginx的,所以可以水平扩展多个Kong服务器,通过前置的负载均衡配置把请求均匀地分发到各个Server,来应对大批量的网络请求。