加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 云计算 > 正文

部署微服务于容器云平台,API网关应如何选择?

发布时间:2018-08-14 03:01:45 所属栏目:云计算 来源:talkwithtrend
导读:前言: 微服务越来越火,越来越多的公司开始采用微服务架构。今天还有人让我帮推荐好的微服务实施厂商。但采用微服务并不容易,实施微服务可能不可或缺的一个很重要的组件就是API 网关。微服务若要部署于容器云平台,API网关的实现能力、部署方式、产品选

使用API网关层构建组合服务——业务服务,这涉及到API网关的开发能力,也就是服务编排能力,大部分开源的API网关是不支持的。我们在《容器云之服务编排设计》一文中也讨论过。不过有个问题需要考虑,采用微服务架构,服务部署时可能部署多个服务实例,是每个服务实例都在注册中心注册,还是所有的服务实例只注册一个服务?这是我们曾经遇到的问题。

如果采用商用的API网关产品,基本上都有服务编排和服务注册能力,可以利用API网关的服务注册能力,在API网关层实现服务注册,而不用在每个微服务代码里实现服务注册。这样既可以在API网关层实现服务的编排,也可以充分利用容器云的负载均衡和弹性伸缩等特性,微服务实例不需要注册到注册中心,每个微服务(一到多个微服务实例)仅在注册中心注册一次。

1

这样,也简化了微服务开发,更多的关注微服务业务实现,把服务的注册、编排、流控等等都交给API网关层去实现。

服务注册

API网关层提供服务编排能力,编排的服务也需要注册到注册中心,成为一个新的服务。API网关需要提供服务注册的能力。

我们遇到过这样一个问题:一个服务分别部署于容器云平台和虚拟机,分别注册于容器云平台内部注册中心和容器云平台外部注册中心,如何实现这个服务的调用?这是我们一个开发团队面临的问题。一方面希望利用容器云平台的便捷的持续集成持续部署特性,另一方面也不太相信容器云平台的可靠性和稳定性,所以希望在虚拟机环境同时备份。同样面临着多服务实例的问题,弹性伸缩的问题。如果在服务Client端实现负载均衡,明显要复杂很多。虚拟机和容器云平台如果都部署网关服务,也比较麻烦。最好的方式就是通过统一的API网关,实现路由配置,也可实现流量分配,这样一个API入口可以路由到不同的服务或服务实例(虚拟机或容器云平台上)。在API网关层通过配置来实现,API网关作为一个独立的组件来部署。比如Nginx plus其支持eureka、consul、etcd、等服务注册机制,作为整个平台独立的一个API网关独立部署。

API管理

通常情况下, API网关层需要考虑实现对API生命周期的管理、配置、监控等能力,也就是API管理的能力。API也可分为private API和 Open API。我们在讨论微服务阶段模型中提到生态级,就是提供OpenAPI与合作伙伴等共同构建服务生态系统。

商用API的管理产品通常包括API网关、API开发工具、管理控制台等组件,提供API开发、配置、部署、监控、更新等整个API生命周期管理。开源的API网关通常比较简单。提供API网关的基础能力或者仅API网关实施框架。

API网关部署

采用微服务部署于容器云平台,API网关作为重要的基础组件,其部署也需要认真考虑。前期的文章中我们也讨论过,就目前阶段而言,采用容器云也不是所有组件都容器化部署,在都热衷于讨论去中心化的今天也不是没有中心,所以我们建议采用中心化非容器化部署,采用双机集群多活高可用模式部署,不要采用主备模式,也不要单机部署,虽然商用的产品处理能力足够强,也要避免可能单点故障,单点瓶颈问题,难以扩展的问题。

1

在负载压力大的需求下,可以考虑分渠道部署方式,比如Web、手机App、PC App等分别部署API网关。

1

API网关选择开源

越来越多的企业采用微服务,越来越多的人认识到微服务API网关的重要性,API网关的发展和完善也越来越好。很多开源的产品功能也很强大,足以满足大部分企业的部署需求。基于这些开源产品,可以定制扩展一些功能,更好的满足业务需求。

Tyk(https://tyk.io/)是一个开放源码的API网关、面板和API管理平台,由Tyk公司开发和支持。Try 是一个基于Go实现的网关服务。包括Tyk API Gateway,Tyk Dashboard, Tyk Developer Portal, Tyk Pump, Tyk Identity Broker等组件。Tyk开源API Gateway对实际上的请求管理做了重大的提升:路由、访问控制、数据转换、日志等等。Tyk可以完全独立运行,只需要有效的Redis数据库,可以横向扩展(如下图)

1

Kong(https://getkong.org/)是一个可扩展的开源微服务API网关,Kong 在任何RESTful API的前面运行,通过插件扩展,它提供了超越核心平台的额外功能和服务。它基于nginx 上进行的开发。Kong部署于可靠的技术之上,比如NGINX和Apache Cassandra或者PostgreSQL,提供易用的RESTful API来操作和配置应用服务。

1

Zuul是Netflix出品的一个基于JVM路由和服务端的负载均衡器。它的主要功能有:认证、动态路由、监视、弹性、压力测试、金丝雀测试、负载削减、安全、静态响应处理和主动/主动交换管理。被用来作为上Spring Cloud的API网关组件,可以和spring cloud的各个组件结合使用。

Spring Cloud Gateway是构建于Spring Frameworks 5, Factor项目和Spring Boot 2.0之上的可编程路由器。能够匹配任何请求属性的路由,熔断、过滤、服务发现集成、限流、转换等能力。它采用反应式编程,比较新,我们尝试用但由于时间紧,难以学习这么多新的技术,最后不得不依旧采用zuul暂时方案。

NGINX或NGINX Plus提供一个成熟的、可扩展的、高性能web服务器和反向代理,它们均容易部署、配置和二次开发。Nginx可以结合Lua脚本实现一个API网关能力,NGINX Plus可以管理授权、权限控制、负载均衡、缓存并提供应用健康检查和监控等。

还有很多其他的一些开源API网关,有兴趣可以搜索查阅相关资料。

自研

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读