Как пересылать запросы gRPC на прокси-сервере Ray?Python

Программы на Python
Anonymous
Как пересылать запросы gRPC на прокси-сервере Ray?

Сообщение Anonymous »

Я реализую обратный прокси-сервер для Рэя. Обратный прокси-сервер хорошо работает для HTTP-запросов, но некоторые соединения Ray используют gRPC. Например, обратный прокси-сервер получает такие запросы, как http://localhost:8265/ray.rpc.NodeInfoG ... tClusterId
Вот как я обрабатываю HTTP-запросы в прокси-сервере:

Код: Выделить всё

from flask import Flask, request, Response
import requests
import logging
import urllib.parse
import grpc

app = Flask(__name__)
logger = logging.getLogger(__name__)

RAY_DASHBOARD_URL = "http://localhost:8265"

@app.route('/
', methods=['GET', 'POST', 'PUT', 'DELETE', 'PATCH'])
def proxy(path):
url = f"{RAY_DASHBOARD_URL}/{path}"
headers = {key: value for key, value in request.headers if key != 'Host'}
query_string = urllib.parse.urlencode(request.args)
if query_string:
url = f"{url}?{query_string}"

logger.info(f"Proxying request to {url}")

if request.headers.get('Content-Type') == 'application/grpc':
# TODO: Add GRPC forwarding logic here
pass
else:
response = requests.request(
method=request.method,
url=url,
headers=headers,
data=request.get_data(),
cookies=request.cookies,
allow_redirects=False,
)

excluded_headers = ['content-encoding', 'content-length', 'transfer-encoding', 'connection']
headers = [(name, value) for name, value in response.raw.headers.items() if name.lower() not in excluded_headers]

return Response(response.content, response.status_code, headers)

if __name__ == '__main__':
app.run(debug=True)
Обратите внимание, что я избегаю части gRCP в этом фрагменте.
У меня есть доступ к сгенерированным файлам GRPC, скомпилированным из конфигураций прототипов на ray.core. .сгенерировано. Я думаю, что на этом можно было бы основывать реализацию, но, похоже, это будет переопределять каждый маршрут повсюду.
Как я могу просто переслать запрос gRPC от обратного прокси-сервера на этом этапе?< /п>

Подробнее здесь: https://stackoverflow.com/questions/787 ... er-for-ray

Вернуться в «Python»