[英]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 來檢測語言!
歡迎任何建議,或者任何提示/方向都會很棒,我不介意從頭開始嘗試,我完全不依賴這個解決方案! 歡迎使用任何其他技術提出任何其他建議!
對不起,很長的帖子
最佳何塞
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.