如何解决kongfirst reqtest延迟问题,如何限制某些路由的访问,如何做instrumentaion

2023-12-04

我有一个微服务结构,其中包含一些基于 python/Django 的服务

结构如下:

用户kong阿尔法kong 测试版 kong 伽玛

这是我的kong.yml声明式配置:

_format_version: "2.1"
_transform: true

services:
  - name: alpha-beta-gamma-live
    host: alpha
    port: 8000
    protocol: http
    path: /beta/gamma/live
    routes:
      - name: alpha-beta-gamma-live
        methods:
          - GET
        paths:
          - /alpha/beta/gamma/live
        strip_path: true

  - name: beta-gamma-live
    host: beta
    port: 8000
    protocol: http
    path: /gamma/live
    routes:
      - name: beta-gamma-live
        methods:
          - GET
        paths:
          - /beta/gamma/live
        strip_path: true

  - name: gamma-live
    host: gamma
    port: 8000
    protocol: http
    path: /live
    routes:
      - name: gamma-live
        methods:
          - GET
        paths:
          - /gamma/live
        strip_path: true
plugins:
  - name: correlation-id
    config:
      header_name: X-Kong-Correlation-ID
      generator: uuid
      echo_downstream: true
  - name: zipkin
    config:
      local_service_name: kong
      http_endpoint: http://zipkin:9411/api/v2/spans
      sample_ratio: 1
      include_credential: true
      traceid_byte_count: 16
      header_type: preserve
      default_header_type: b3
      tags_header: Zipkin-Tags

这是运行 kong 的 docker-compose 文件

version: "3.8"

networks:
 kong-net:
  name: kong-net
  driver: bridge
  ipam:
    config:
      - subnet: 172.1.1.0/24

services:
  kong:
    container_name: kong
    build:
      context: .
      dockerfile: Dockerfile
    restart: unless-stopped
    networks:
      kong-net:
        ipv4_address: 172.1.1.40
    healthcheck:
      test: [ “CMD”, “curl”, “-f”, “http://kong:8000” ]
      interval: 5s
      timeout: 2s
      retries: 15
    environment:
      - KONG_DATABASE=off
      - KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl
      - KONG_PROXY_ACCESS_LOG=/dev/stdout
      - KONG_ADMIN_ACCESS_LOG=/dev/stdout
      - KONG_PROXY_ERROR_LOG=/dev/stderr
      - KONG_ADMIN_ERROR_LOG=/dev/stderr
      - KONG_DECLARATIVE_CONFIG=/kong/declarative/kong.yml
    ports:
      - "8444:8444"
      - "80:8000"
      - "443:8443"

从 alpha 服务中我使用 python 的requests库来调用使用 python 的 beta 端点requests要调用的库/livegamma 的终点如下

alpha

version: '3'

networks:
 kong-net:
  name: kong-net
  driver: bridge
  ipam:
    config:
      - subnet: 172.1.1.0/24

services:
  alpha:
    container_name: alpha
    build:
      context: .
      dockerfile: Dockerfile
    restart: unless-stopped
    networks:
      kong-net:
        ipv4_address: 172.1.1.11
    ports:
      - "8011:8000"
    environment:
      SECRET_KEY: secret-key
      DEBUG: 'true'
    command: python manage.py runserver 0.0.0.0:8000
@api_view(["GET"])
def beta_gamma_live(request):

    res_kong = requests.get("http://kong:8000/beta/gamma/live")

    return Response({
        "chained-alpha-beta-gamma-status-check-through-kong": res_kong.status_code,
    }, status.HTTP_200_OK)

beta

version: '3'

networks:
 kong-net:
  name: kong-net
  driver: bridge
  ipam:
    config:
      - subnet: 172.1.1.0/24

services:
  beta:
    container_name: beta
    build:
      context: .
      dockerfile: Dockerfile
    restart: unless-stopped
    networks:
      kong-net:
        ipv4_address: 172.1.1.12
    ports:
      - "8012:8000"
    environment:
      SECRET_KEY: secret-key
      DEBUG: 'true'
    command: python manage.py runserver 0.0.0.0:8000
@api_view(["GET"])
def gamma_live(request):

    res_kong = requests.get("http://kong:8000/gamma/live")

    return Response({
        "chained-beta-gamma-status-check-through-kong": res_kong.status_code,
    }, status.HTTP_200_OK)

gamma

version: '3'

networks:
 kong-net:
  name: kong-net
  driver: bridge
  ipam:
    config:
      - subnet: 172.1.1.0/24

services:
  gamma:
    container_name: gamma
    build:
      context: .
      dockerfile: Dockerfile
    restart: unless-stopped
    networks:
      kong-net:
        ipv4_address: 172.1.1.13
    ports:
      - "8013:8000"
    environment:
      SECRET_KEY: secret-key
      DEBUG: 'true'
    command: python manage.py runserver 0.0.0.0:8000
@api_view(["GET"])
def live(request):
    return Response({"status": "Success"}, status.HTTP_200_OK)

第一个问题

  • 当我发送请求时http://127.0.0.1/gamma/live返回响应需要 20 秒。 但从第二次开始,就需要几毫秒了

  • 所有请求发送至http://127.0.0.1/alpha/beta/gamma/live需要 40 秒

我发现了这个问题

https://github.com/Kong/kong/issues/3058

有没有办法解决/解决这个问题?


第二个问题

我使用 docker 容器运行 Zipkin UI,如下所示

version: '3'

networks:
 kong-net:
  name: kong-net
  driver: bridge
  ipam:
    config:
      - subnet: 172.1.1.0/24

services:
  zipkin:
    container_name: zipkin
    build:
      context: .
      dockerfile: Dockerfile
    restart: unless-stopped
    networks:
      kong-net:
        ipv4_address: 172.1.1.41
    ports:
      - "9411:9411"

当我打开 Zipkin UI 时http://127.0.0.1:9411,跟踪显示了三个请求,如下所示:

  • ########################## ~ 60 秒
  • ################ ~ 40 秒
  • ####### ~ 20 秒

enter image description here

虽然它应该是这样的

  • ######### ~ 20 秒
  • -.-.-.-.-.-.- ######### ~ 20 秒
  • -.-.-.-.--.-.-.-.-.-.-.- ######### ~ 20 秒

为了实现这一目标,我需要使用下面列表中的库来检测每个服务:

https://zipkin.io/pages/tracers_instrumentation

问题 2 第 1 部分:如何才能让Python变得干净又好用呢?

问题 2 第 2 部分: 有没有办法不用这么做?我正在寻找与语言无关的延迟跟踪,并且可以通过 kong 完成,这样我就不必向服务 alpha、beta、gamma 添加任何内容


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何解决kongfirst reqtest延迟问题,如何限制某些路由的访问,如何做instrumentaion 的相关文章

随机推荐

  • 循环设置对选定的 Outlook 文件夹的监视

    我正在 Outlook 中的 VBA 中执行以下操作 将 Outlook 项目拖到指定文件夹后 我将此 Outlook 项目保存到我的计算机 即文件系统 Private WithEvents Items As Outlook Items P
  • 在 Freepascal 编译的 DLL 和 Delphi 编译的 EXE 之间交换字符串 (PChar)

    经过大量实验 我找到了一种将 FreePascal 编译的 DLL 中的 PChar 与 Delphi 编译的 EXE 交换的方法 我负责 DLL 和 EXE 源代码 但其中一个必须在 FreePascal 中 另一个在 Delphi 中
  • 创建平铺多维数组,同时删除 axis0 第 I 个索引的子元素?

    我试图平铺一个数组 其中每个索引都是多维的 然后我从每个索引中删除第 i 个子元素 例如 从这个数组开始 gt gt gt a np array 1 7 0 2 7 0 3 7 0 gt gt gt a np tile a a shape
  • 如何在 Perl 中对浮点数进行四舍五入?

    如何将小数 浮点 四舍五入到最接近的整数 e g 1 2 1 1 7 2 输出perldoc q round Does Perl have a round function What about ceil and floor Trig fu
  • JavaScript if 语法

    当我尝试运行简单的 if 语句时出现语法错误 中断此错误 左侧赋值无效 中断此错误 容器 我有什么问题 以及我如何制作 if this ewCount 0 then elseif NotDoneh 0 then ELSE 这是我当前的代码
  • 音频文件获取左/右声道

    经过大量研究 我找不到明确的答案 我想要实现的是 取一个mp3 wav文件并将其左右声道保存为2字节 然后我可以操作每个通道 然后再次将它们添加并创建一个新的 wav 文件 最好是Java的解决方案 相关问题是分割CHANNEL IN ST
  • 在 Fabric.js 中全屏显示画布

    我希望我的画布元素始终具有相同的大小 独立于客户端的屏幕分辨率 如果用户使用浏览器进行缩放 则画布元素应始终具有相同的大小 此外 纵横比应始终相同 我想要 1920 1080 点的坐标空间 如果浏览器没有相同的比例 则画布元素的侧面可能有边
  • 如何使用 date-fns 更正时区?

    网上看这个例子 https stackblitz com edit date fns playground zeitzonen file index ts gt 控制台输出 以下情况 时间为上午 11 54 Setup const date
  • pythonic 方法在没有索引变量的情况下执行 N 次某事? [复制]

    这个问题在这里已经有答案了 我有一些代码 例如 for i in range N do something 我想做某事N次 循环内的代码不依赖于i 是否可以在不创建无用的索引变量的情况下完成这个简单的任务 或者以其他更优雅的方式完成 如何
  • 迭代 list_iterator 两次[重复]

    这个问题在这里已经有答案了 我希望迭代 list iterator 两次 当我当前尝试执行此操作时 迭代器没有任何内容可在第二次迭代 我可以重置它吗 l iter 1 2 3 4 for i in l print i for i in l
  • Xamarin Forms Shell TitleView 不使图像居中

    我有一个在 Xamarin Forms 中使用新 Shell 的应用程序 我将以下代码添加到我的页面之一 试图使用 TitleView 区域居中显示我的应用程序标题图像 仅供参考 我已经尝试过居中对齐这两个选项 但没有什么区别
  • 为什么通过括号访问Symbol.iterator?

    例如 如果我创建了一个数组 var array 1 2 3 4 返回一个迭代器我会做var iterator array Symbol iterator 我不明白为什么你通过括号访问 Symbol iterator 属性 为什么不只是arr
  • Android Studio C++ NDK 库示例

    我想下载一些使用 C 或 C 的 Android Studio NDK 项目的工作示例 它将被编译为 so 库 或我可以从中提取 so 的 APK 我已经尝试过使用 Android mk 构建 ndkbuild 以及使用 CMakeList
  • gltf 光标侦听器 A 框架中的单击事件

    我无法弄清楚为什么游标侦听器适用于除我的 gltf 模型之外的所有实体 这是我的html div div
  • 使用正则表达式拆分算术表达式

    我想拆分一个表达式 例如 1 0 8 5 5 into 1 0 8 5 5 1 0 8 5 5 这就是我现在得到的expression split g 对此有何建议 这是一个解决方案 它正确检测到 并接受空格的使用 b s b s var
  • Mysqli 回滚不起作用

    我有一个 MySQL 数据库并且正在使用mysqli 由于某种原因 我无法让交易正常进行 如果我打电话 mysqli gt rollback 它不会回滚 示例代码 mysqli gt autocommit false sql INSERT
  • Android BroadcastReceiver 安装后不工作

    问候 我正在开发一个应用程序 它有一个 BroadcastReceiver 监听 android intent action PHONE STATE 该应用程序在手机状态更改时运行 我用它在检测到来电时运行代码 这在我的大多数测试手机上运行
  • 如何在MySQL中复制一行并插入到具有自动增量字段的同一个表中?

    在 MySQL 中 我试图复制一行自动递增 column ID 1 and insert将数据作为新行放入同一个表中column ID 2 我如何在单个查询中执行此操作 Use INSERT SELECT insert into your
  • 将 EDX:EAX 中存储的 64 位数字打印到标准输出

    我有一个大的 64 位数字存储在 EDX EAX 中 分别为 21C3677C 82B40000 我正在尝试将数字以十进制形式打印到控制台 2432902008176640000 是否有系统调用可以让我完成此操作 必须有人怜悯这个人和他的同
  • 如何解决kongfirst reqtest延迟问题,如何限制某些路由的访问,如何做instrumentaion

    我有一个微服务结构 其中包含一些基于 python Django 的服务 结构如下 用户kong阿尔法kong 测试版 kong 伽玛 这是我的kong yml声明式配置 format version 2 1 transform true