You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository has been archived by the owner on Aug 25, 2021. It is now read-only.
У medea предусмотренно динамическое Control API. На данный момент есть имплементация только статичекого Control API.
Problem to solve
Требуется разработать gRPC интерфейс для динамического обновления Control API спеки. На данном этапе нужно реализовать методы Create, Delete, Get. Метод Apply не является частью этой issue и будет реализован позже.
Possible solution
Выбор крейта для реализации gRPC сервера
На данный момент существует только два относительно популярных и живых крейта для реализации gRPC. Это grpc и grpcio, поэтому выбор можно ограничить ими двумя.
есть внешние зависимости в виде go (в случае если мы используем secure feature)
Тут все довольно неоднозначно, но все же grpcio выглядит более симпатично из-за лучшей документации и производительности. Но вообще крейт можно будет, скорее всего, в любой момент сменить без сильной боли, поскольку для десериализации обоими крейтами используется rust-protobuf, а взаимодействие с самим сервером выглядит достаточно тривиально. Также в процессе реализации при надобности можно будет использовать абстракции в виде trait'ов, чтобы легко переехать на другой крейт в случае необходимости.
Интеграция с уже существующей реализацией Control API
Для начала требуется сделать абстракции над источником данных. На данный момент в статическом Control API используются структуры десериализуемые с помощью serde в случае с gRPC десериализация с помощью них не возможна, поэтому принято решение сделать trait'ы для всех необходимых на данный момент элементов, написать реализацию для уже существующих serde DTO и для gRPC DTO. Тут уже всплывает проблема, которая заключается в том, что DTO для grpcio генерируются автоматически и не очень хотелось бы дописывать что-то в автоматически сгенерированные файлы. Как вариант, конечно, не использовать build.rs, а генерировать DTO'шки с помощью protoc, но проблему пересборки protobuf спек с последующей перезаписью это не решает. UPD: Все же было выбрано решение с реализацией TryFrom для уже существующих элементов Control API, так как это позоволяет удобно прокидывать и обрабатывать ошибки в спеках.
Абстракции над элементами Control API
Это устаревший блок, поскольку была выбрана реализация с помощью TryFrom. Room:
- integrate gRPC Control API server
- imp 'Create', 'Delete', 'Get' methods of Control API
- add temporary client for manual tests of gRPC Control API
- create E2E tests for gRPC Control API
- add '[server.control.grpc]' section to configure Control API gRPC server
- rename '[server]' section of Client API HTTP server as '[server.client.http]'
- add 'server.client.http.public_url' option to configure public URL of Client API HTTP server
Additionally:
- expose configuration changes in 'medea-demo' Helm chart values and bump up its version to 0.2.0
- use tinyurl.com instead of tiny.cc in docs
- fix missing CMake installation in Dockerfile
- describe explicit env var names in configuration file
- provide global AppContext
- add module path and file line number to logs
- refactor types and attributes usage in 'conf' module and split tests by submodules
Sign up for freeto subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Labels
featureNew feature or requestk::apiRelated to API (application interface)
Part of 0.2.0 Roadmap (#27)
Background
У medea предусмотренно динамическое Control API. На данный момент есть имплементация только статичекого Control API.
Problem to solve
Требуется разработать gRPC интерфейс для динамического обновления Control API спеки. На данном этапе нужно реализовать методы
Create
,Delete
,Get
. МетодApply
не является частью этой issue и будет реализован позже.Possible solution
Выбор крейта для реализации gRPC сервера
На данный момент существует только два относительно популярных и живых крейта для реализации gRPC. Это grpc и grpcio, поэтому выбор можно ограничить ими двумя.
grpc
Плюсы:
Минусы:
grpcio
Плюсы:
Минусы:
Тут все довольно неоднозначно, но все же grpcio выглядит более симпатично из-за лучшей документации и производительности. Но вообще крейт можно будет, скорее всего, в любой момент сменить без сильной боли, поскольку для десериализации обоими крейтами используется rust-protobuf, а взаимодействие с самим сервером выглядит достаточно тривиально. Также в процессе реализации при надобности можно будет использовать абстракции в виде trait'ов, чтобы легко переехать на другой крейт в случае необходимости.
Интеграция с уже существующей реализацией Control API
Для начала требуется сделать абстракции над источником данных. На данный момент в статическом Control API используются структуры десериализуемые с помощьюserde
в случае с gRPC десериализация с помощью них не возможна, поэтому принято решение сделать trait'ы для всех необходимых на данный момент элементов, написать реализацию для уже существующих serde DTO и для gRPC DTO. Тут уже всплывает проблема, которая заключается в том, что DTO для grpcio генерируются автоматически и не очень хотелось бы дописывать что-то в автоматически сгенерированные файлы. Как вариант, конечно, не использоватьbuild.rs
, а генерировать DTO'шки с помощьюprotoc
, но проблему пересборки protobuf спек с последующей перезаписью это не решает.UPD: Все же было выбрано решение с реализацией
TryFrom
для уже существующих элементов Control API, так как это позоволяет удобно прокидывать и обрабатывать ошибки в спеках.Абстракции над элементами Control APIЭто устаревший блок, поскольку была выбрана реализация с помощью
TryFrom
.Room:
Member:
WebRtcPlayEndpoint:
WebRtcPublishEndpoint:
The text was updated successfully, but these errors were encountered: