360 私有云容器服务团队和人工智能研究院团队一起配合, 在云端提升机器学习的效能方面进行了深入的研究和实践, 本篇文章主要介绍实践中涉及的 "微服务网关与容器服务" 技术.
360 私有云容器服务团队和人工智能研究院团队一起配合, 在云端提升机器学习的效能方面进行了深入的研究和实践, 为业务提供了 "人脸检测","花屏检测","色情检测","宠物检测","图片风格化","文字识别","智能裁图" 等多种深度学习服务.
下面主要介绍实践中涉及的 "微服务网关与容器服务" 技术.
一, 什么是微服务架构
微服务是一种构建软件的架构和方法. 在微服务中将以前的单体应用拆分成多个小的组件, 并彼此独立. 不同于将所有组件内置于一个架构中的传统单体式应用的构建方法, 在微服务架构中, 所有的部分都是相互独立的(可以使用不同的语言, 不同团队来开发不同的服务模块). 通过合作来完成相同的任务. 其中的每一个组件或流程都是微服务. 总结微服务的特点就是: 更小, 更快, 更强.
可能通过上面对微服务的描述还是不是特别的直观, 将传统的单体应用架构和微服务架构进行下比较, 就比较直观了.
1. 单体应用架构
最早对于 web 程序的开发(比如 JAVA), 通常将整个程序打包到一个 WAR 文件中, 然后直接部署到服务器即可.
单体应用架构易于测试和部署, 但是在服务的可伸缩性, 可靠性, 系统迭代, 跨语言程序, 团队协作等方便没有微服务方便.
2. 微服务架构
为了解决单体应用架构的这些诸多弊端(不是说单体应用架构不好, 需要根据不同的业务场景选择不同的服务架构), 可以将单体应用架构拆分成多个独立的小的组件. 这样就可以每个团队使用自己的技术栈来实现自己的组件, 并在系统迭代的时候独立地进行迭代而不影响整个应用的整体使用.
二, 为什么需要微服务网关
首先介绍下什么是 API 网关, API 网关可以提供一个单独且统一的 API 入口用于访问内部一个或多个 API 服务. API 网关常会提供负载均衡, 访问频率限制, 认证授权, 监控, 缓存等功能.
通过 API 网关, 可以将内部服务对外部用户隐藏, 而暴露给外部用户真实需要的 API, 并可以对外部访问进行访问频率的限制同时还可以对外部的用户设置认证授权. 来保证应用整体的稳定及安全等等. 而网关内部的服务则可以根据自己的需求通过相关的协议 (REST API, GRPC) 进行通信.
三, 微服务网关 (kong) 介绍
kong 是一款基于 nginx_lua 模块写的高可用, 易扩展的 API 网关. 由于 kong 是基于 nginx 的, 所以可以水平的扩展多个 kong 服务实例, 通过前置的负载均衡配置把请求均匀地分到各个 server, 来应对大批量的网络请求.
kong 网关组成:
Kong server: 基于 nginx 的服务器, 接收外部的 API 请求.
PostgreSQL: 用来存储操作的数据.
并且 kong 采用插件机制进行功能的定制, 插件集在 API 请求响应循环的生命周期中被执行. 插件使用 lua 编写.
四, 微服务网关与容器服务结合使用
通过一个具体的例子来描述部署到容器上的服务是如何与微服务网关结合使用的. 比如我们现在有人脸检测, 宠物检测, 鉴黄服务等将这个单独的服务组成一个完成的应用实体来对外提供多功能的服务.
首先在容器服务平台上部署我的三个服务实例(人脸检测, 宠物检测, 鉴黄服务). 并为这些服务实例申请 vip.
服务注册完成之后, 管理端将这三个服务注册到微服务网关(kong),kong 会将注册的信息持久化到 PostgreSQL 数据库. 并可以根据不同的业务为各个服务已插件的形式注册认证授权, 访问频率限制, CORS 等插件.
当服务注册完成之后, 用户端可以基于被授权的用户 token 去访问他们想要使用的服务.
本文只是简单地介绍了下整体的流程. 但是每一个部分都需要用户自己去深入了解了~~
- https://konghq.com/kong-community-edition/
- https://martinfowler.com/articles/microservices.html?spm=a2c4e.11153940.blogcont2764.12.61092766Awrptv
- https://github.com/Kong/kong
- https://www.redhat.com/zh/topics/microservices
- https://www.nginx.com/blog/introduction-to-microservices/
来源: http://zhuanlan.51cto.com/art/201904/594752.htm