python微服务之网关选择

引言

书接上文python微服务方案,上回书我们说到,python微服务方案我们的简单设想。设想归设想,终归是要落地的,经过近些时间的实验,我们也略有成效,再次不才,这次我们来聊聊从微服务的最上层组件—网关

1. 网关是什么?

当我们决定使用微服务时,不可避免的就会存在多个服务,每个服务都需要权限校验、限流以及监控等,显然,在每个服务中都实现一次“权限校验、限流以及监控”,显得有些ugly,且不符代码复用的方针。

网关就很好的解决了这个问题,它将“权限校验、限流以及监控”这些功能抽离解耦出来,以过滤器的方式放于网关。这样微服务只需要关注自己的核心功能就可以,权限相关的逻辑全全教育网关即可。

简单来说: 网关 = 路由转发 + 过滤器

2. 网关的作用?

  • 路由转发:接收一切外界请求,转发到后端的微服务上去
  • 过滤器:在服务网关中可以完成一系列的横切功能,例如权限校验、限流以及监控等,这些都可以通过过滤器完成(其实路由转发也是通过过滤器实现的)
  • 负责均衡:API网关结合负载均衡技术,利用Eureka或者Consul等服务发现工具,通过轮询、指定权重、IP地址哈希等机制实现下游服务的负载均衡
  • 安全认证:校验参数合法性,用户合法性
  • 日志监控:记录请求的出参、入参,响应时长等
  • 数据转换:对不同客户端请求数据加工等

3. 常用的网关有哪些?

主流的有nginx和java两大阵营

4. 我们选择的网关APISIX

4.1 技术栈

我们组主语言是python,关于java相关的组件没做太多考虑,维护和扩展对我们有较高的学习成本,所以我们对java相关的组件选型时,优先级会比较低。

Kong 和 Apisix就是我们的选择对象了。参考了对比微服务网关 Kong 和 APISIX后,我们决定选择了Apisix。

主要有三个原因:

  1. 在不开启插件的情况下,APISIX 的性能(QPS 和延迟)是 Kong 的2倍
  2. 开启了两个常用插件后,APISIX 性能就是 Kong 的十倍
  3. APISIX支持python插件
  4. APISIX 是国内公司贡献给Apache的,中文社区很活跃,文档也丰富(可以跟作者母语交流,舒坦)

4.2 选型声明

  1. 必须承认我们的选型并不严谨,其原因在于我们对网关的要求并不高,市面上常用的网关几乎都能满足我们的要求,因此我们主要从小组成员的技术栈和使用习惯上进行选型。
  2. 必须强调,要考虑网关的可维护性和扩展性,Nginx+Lua这个组合掌握的人不算多,java相关技术栈可能更稳妥些。

5. 如何使用APISIX

这里只简单介绍我们使用的基础功能路由和鉴权配置。关于简介、安装、集群模式以及其他功能,可参考APISIX官方githubAPISIX使用说明

5.1 架构说明

Apache APISIX 是一个动态、实时、高性能的 API 网关, 提供负载均衡、动态上游、灰度发布、服务熔断、身份认证、可观测性等丰富的流量管理功能。

你可以使用 Apache APISIX 来处理传统的南北向流量,以及服务间的东西向流量, 也可以当做 k8s ingress controller 来使用。

Apache APISIX 的技术架构如下图所示:

核心概念

  • 上游(Upstream):上游列表包含了已创建的上游服务(即后端服务),可以对上游服务的多个目标节点进行负载均衡和健康检查。
  • 路由(Route):通过定义一些规则来匹配客户端的请求,然后对匹配的请求执行配置的插件,并把请求转发给指定的上游。
  • 消费者(Consumer):消费者是路由的消费方,形式包括开发者、最终用户、API 调用等。创建消费者时,需绑定至少一个认证类插件。
  • 服务(Service): 可以理解为一组路由的抽象。它通常与上游是一一对应的,路由与服务之间,通常是多对一的关系。
  • 插件(Plugin):API网关对请求的增强操作,可以对请求增加限流、认证、黑名单等一系列功能。可以配置在消费者、服务和路由之上。

5.2 简单的安装

# 从github下载apisix源码
git clone https://github.com/apache/apisix-docker.git
cd apisix-docker/example
​
# 使用docker-compose启动
docker-compose -p docker-apisix up -d

安装后会获得四个地址:

  1. 前端地址为: http://192.168.2.128:9000
  2. 后端地址为: http://192.168.2.128:9080
  3. 测试服务1(web1):http://192.168.2.128:9081
  4. 测试服务2(web2):http://192.168.2.128:9082

注:192.168.2.128 为笔者测试环境的内网ip,使用时注意替换,且不要用127.0.0.1代替

5.3 配置上游(后端服务)

配置上游web1,如下图(web2同理)

5.3 配置路由

配置web2的路由,如下图(web1同理)

 配置好后可通过postman测试

5.4 配置鉴权

5.4.1 修改路由,增加鉴权插件

以jwt-auth举例,如图所示(注意key,要与5.4.2中的消费者对应)

5.4.2 增加消费者

创建消费者如图

5.4.3 增加创建token的接口

curl -X PUT 'http://192.168.2.128:9180/apisix/admin/routes/r1' \
   -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' \
   -H 'Content-Type: application/json' \
   -d '{
   "uri": "/apisix/plugin/jwt/sign",
   "plugins": {
       "public-api": {}
  }
}'

5.4.4 验证

1. 不使用token访问web1,需要JWT认证

​​​​​​​

2. 生成token

3. 使用token,访问web1,访问成功

6. 后记

今天的故事,到这里也就结束了,最后多啰嗦几句:

网关是流量的入口,除了做鉴权之外,还能做很多事情(限流、转发、监控等),本次只是抛砖引玉,简单分享下我们目前对网关的选型逻辑,以及简单的使用说明,仅供参考,望能帮助到需要的朋友。

7. 参考

  1. 微服务下的网关如何选择
  2. 对比微服务网关 Kong 和 APISIX
  3. APISIX官方github
  4. APISIX使用说明​​​​​​​
  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
建设微服务API网关微服务架构中重要的一环,它可以帮助我们将多个微服务组合成一个整体,提供更好的用户体验和更高的性能。以下是一些实践,可以帮助您建设微服务API网关: 1. 选择一个适合您的API网关:目前市场上有很多不同的API网关,如Kong、Apigee、Zuul等。您需要根据您的需求和团队的技术水平选择一个适合您的API网关。 2. 定义API网关的功能:API网关的功能包括路由、负载均衡、安全性、监控和日志记录等。您需要根据您的需求定义API网关的功能,以便您可以选择适合您的API网关。 3. 定义API网关的API:您需要定义API网关的API,以便您的开发团队可以使用它们。您需要考虑API的版本控制、文档和测试等。 4. 集成微服务:您需要将您的微服务集成到API网关中。您需要考虑微服务的版本控制、文档和测试等。 5. 确保安全性:您需要确保API网关的安全性,包括身份验证和访问控制等。您可以使用OAuth、JWT等技术来实现安全性。 6. 监控和日志记录:您需要监控和日志记录API网关的性能和错误。您可以使用ELK、Prometheus等工具来实现监控和日志记录。 7. 测试和部署:您需要测试和部署API网关。您可以使用CI/CD工具来自动化测试和部署过程。 总之,建设微服务API网关需要您考虑多个方面,如选择适合您的API网关、定义API网关的功能和API、集成微服务、确保安全性、监控和日志记录、测试和部署等。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值