背景

公司的一些团队想将他们的服务已容器的方式进行快速部署交付。对于一些简单的单体应用,直接通过公司的负载均衡就可以了。但是如果想要将多个小的应用(如:人脸检测,图片检测等)最终归类为一个大的应用来对外提供服务的话,就需要网关来做这件事情。基于该背景,我们调研了下比较流行的微服务网关(Kong)。

什么是微服务架构

微服务是一种构建软件的架构和方法。在微服务中将以前的单体应用被拆分成多个小的组件,并彼此独立。不同于将所有组件内置于一个架构中的传统单体式应用的构建方法,在微服务架构中,所有的部分都是相互独立的(可以使用不同的语言,不同团队来开发不同的服务模块)。通过合作来完成相同的任务。其中的每一个组件或流程都是微服务。总结微服务的特点就是:更小, 更快更强

可能通过上面对微服务的描述还是不是特别的直观,将传统的单体应用架构和微服务架构进行下比较,就比较直观了。

1.单体应用架构

最早对于web程序的开发(比如JAVA),通常将整个程序打包到一个WAR文件中,然后直接部署到服务器即可。


microservices

单体应用架构易于测试和部署,但是在服务的可伸缩性可靠性系统迭代跨语言程序团队协作等方便没有微服务方便。

2.微服务架构

为了解决单体应用架构的这些诸多弊端(不是说单体应用架构不好,需要根据不同的业务场景选择不同的服务架构)。可以将单体应用架构拆分成多个独立的小的组件。
这样就可以每个团队使用自己的技术栈来实现自己的组件,并在系统迭代的时候独立的进行迭代而不影响整个应用的整体使用。


microservices

关于微服务的更多信息可以看下面的参考文档。

为什么需要微服务网关

首先介绍下什么是API网关,API网关可以提供一个单独且统一的API入口用于访问内部一个或多个API服务。API网关常会提供负载均衡访问频率限制认证授权监控缓存等功能。

通过API网关,可以将内部服务对外部用户隐藏,而暴露给外部用户真实需要的API,并可以对外部访问进行访问频率的限制同时还可以对外部的用户设置认证授权。来保证应用整体的稳定及安全等等。而网关内部的服务则可以根据自己的需求通过相关的协议(REST API, GRPC)进行通信。


microservices

微服务网关(kong)介绍

kong是一款基于nginx_lua模块写的高可用,易扩展的API网关。由于kong是基于nginx的,所以可以水平的扩展多个kong服务实例,通过前置的负载均衡配置把请求均匀地分到各个server,来应对大批量的网络请求。

kong网关组成:

  • Kong server: 基于nginx的服务器,接收外部的api请求。
  • PostgreSQL: 用来存储操作的数据。

并且kong采用插件机制进行功能的定制,插件集在API请求响应循环的生命周期中被执行。插件使用lua编写。


microservices

部署kong服务参考官方文档:https://konghq.com/install/

使用kong服务参考官方文档:https://docs.konghq.com/

微服务网关(kong)如何与容器服务结合使用

通过一个具体的例子来描述部署到容器上的服务是如何与微服务网关结合使用的。比如我们现在有人脸检测宠物检测鉴黄服务等将这个单独的服务组成一个完成的应用实体来对外提供多功能的服务。

1.首先在容器服务平台上部署我的三个服务实例(人脸检测,宠物检测,鉴黄服务)。并为这些服务实例申请vip。


microservices

2.服务注册完成之后,管理端将这三个服务注册到微服务网关(kong),kong会将注册的信息持久化到PostgreSQL数据库。并可以根据不同的业务为各个服务已插件的形式注册认证授权访问频率限制CORS等插件。


microservices

3.当服务注册完成之后,用户端可以基于被授权的用户token去访问他们想要使用的服务。


microservices

整体简单的流程就是这样,我只是简单地介绍了下整体的流程。但是每一个部分都需要想要使用的用户自己去深入了解了:)

参考

https://konghq.com/kong-community-edition/
https://martinfowler.com/articles/microservices.html?spm=a2c4e.11153940.blogcont2764.12.61092766Awrptv
https://www.infoq.com/articles/microservices-intro?spm=a2c4e.11153940.blogcont2764.11.61092766Awrptv
https://www.redhat.com/zh/topics/microservices
https://www.nginx.com/blog/introduction-to-microservices/
https://github.com/Kong/kong
https://www.ibm.com/developerworks/cn/cloud/library/cl-microservices-in-action-part-1/index.html