簡體   English   中英

如何通過 API 網關使用 docker-compose 進行擴展

[英]How to scale with docker-compose with an API gateway

我很難弄清楚如何做到這一點!

所以我正在開發一個多語言聊天機器人解決方案。 我有 4 種語言,每種語言都是不同的機器人(docker 容器),我還有一個連接到所有 4 個 docker 容器的 DB 容器。 (在 Ubuntu EC2 AWS 實例上運行)。

當用戶發送消息時,它會進入“API 網關”一個簡單的 flask 應用程序,該應用程序接受消息輸入,使用語言檢測,然后“選擇”正確的 API,如下所示:

from flask import Flask, request, jsonify
from flask_restful import Resource, Api
from langdetect import detect 



def bot_response(message,url,user=""):
    """ 
        Gets chatbot response from Rasa Server API

        Parameters:                     # container URL # 
            url(str): URL link ie http://project_rasa_1:5005/webhooks/rest/webhook
            message(str): User's message 
            user(str): user (optional)
        Returns:
            (request) : response object from rasa 
    """

    data = {"sender": user, "message": message }
    json_data = json.dumps(data)

    r = requests.post(url, data = json_data)

    return r


URL_ENGLISH = "http://project_rasa_1:5005/webhooks/rest/webhook"
URL_SPANISH = "http://project_rasa-es_1:5005/webhooks/rest/webhook"
URL_CHINESE = "http://project_rasa-zh_1:5005/webhooks/rest/webhook"
URL_ARABIC = "http://project_rasa-ar_1:5005/webhooks/rest/webhook"

app = Flask(__name__)
api = Api(app)


class ReceiveMessage(Resource):
    def get(self):
        return {'hello': 'world'}

    def post(self):
        
        message = request.json['message']
        lang = detect(lang) # "en" "es" ....
        if lang == "en":
            rasa_response =bot_response(message,URL_ENGLISH,user="")
        
        elif lang == "es":
            rasa_response =bot_response(message,URL_SPANISH,user="")

        elif lang == "ar":
            rasa_response =bot_response(message,URL_ARABIC,user="")
        
        elif lang == "ZH":
            rasa_response =bot_response(message,URL_CHINESE,user="")

        return rasa_response


api.add_resource(ReceiveMessage, '/')


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=7000)

因此,我將所有內容與 docker-compose.yml 文件聯系起來(以便 API 可以通過容器名稱調用 URL。

version: '3'
services:
  rasa:
    image: rasa/rasa:latest-full
    user: root
    volumes:
      - ./rasa-en:/app
    command:
      - run
      - --debug


  
  rasa-ar:
    image: rasa/rasa:latest-full
    user: root
    volumes:
      - ./rasa-ar:/app
    command:
      - run
      - --debug



  rasa-es:
    image: rasa-spacy-es:1.11
    user: root

    volumes:
      - ./rasa-es:/app
    command:
      - run 
      - --debug

        
  rasa-zh:
    image: rasa/rasa:latest-full
    user: root

    volumes:
      - ./rasa-zh:/app
    command:
      - run 
      - --debug


  mongo:
    image: mongo
    restart: always

    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: example
    ports:
      - "27017:27017"



  flask:
    image: flask-gate:3.2.1
    environment:
      PYTHONIOENCODING: utf-8

    ports: 
      - "7000:7000"

我想擴大規模,假設我想要 3 個英語機器人。 通常我會使用:

docker-compose scale rasa=4

但是由於我對容器 URL 進行了硬編碼,所以它們一文不值? 如何在 api 內擴展和執行負載均衡器? 問題是我需要 API 來檢測語言!

歡迎任何建議,或者任何提示/方向都會很棒,我不介意從頭開始嘗試,我完全不依賴這個解決方案! 歡迎使用任何其他技術提出任何其他建議!

對不起,很長的帖子

最佳何塞

有一個 Rasa Kubernetes 安裝解決了這個問題。 此處對其進行了描述。

您可以在此配置下運行英語機器人來處理縮放。

格雷格

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM