Apollo Router Core — это настраиваемый высокопроизводительный графовый маршрутизатор , написанный на Rust для запуска федеративного суперграфа, использующего Apollo Federation 2.
Apollo Router Core хорошо протестирован, регулярно тестируется, включает в себя большинство основных функций Apollo Gateway и способен обслуживать рабочие нагрузки промышленного масштаба.
Новые выпуски и примечания к ним (вместе с примечаниями о критических изменениях) можно найти на странице «Релизы», а последний выпуск всегда можно найти на последней странице. CHANGELOG.md
в корне этого репозитория также содержит невыпущенные изменения в дополнение к полной истории изменений.
В настоящее время мы публикуем новые выпуски каждые 1-2 недели.
Следуйте краткому руководству, чтобы приступить к работе с маршрутизатором.
Более подробную информацию смотрите в документации.
Apollo Router Core требует, чтобы файл суперграфа был передан в качестве аргумента --supergraph
и необязательный файл конфигурации. быть поставлено. Они либо расположены в текущем каталоге, либо явно указаны с помощью флага, либо по абсолютному пути, либо по пути относительно текущего каталога.
Usage:
Commands:
config Configuration subcommands
help Print this message or the help of the given subcommand(s)
Options:
--log
Log level (off|error|warn|info|debug|trace) [env: APOLLO_ROUTER_LOG=] [default: info]
--hot-reload
Reload locally provided configuration and supergraph files automatically. This only affects watching of local files and does not affect supergraphs and configuration provided by GraphOS through Uplink, which is always reloaded immediately [env: APOLLO_ROUTER_HOT_RELOAD=]
-c, --config
Configuration location relative to the project directory [env: APOLLO_ROUTER_CONFIG_PATH=]
--dev
Enable development mode [env: APOLLO_ROUTER_DEV=]
-s, --supergraph
Schema location relative to the project directory [env: APOLLO_ROUTER_SUPERGRAPH_PATH=]
--apollo-uplink-endpoints
The endpoints (comma separated) polled to fetch the latest supergraph schema [env: APOLLO_UPLINK_ENDPOINTS=]
--apollo-uplink-poll-interval
The time between polls to Apollo uplink. Minimum 10s [env: APOLLO_UPLINK_POLL_INTERVAL=] [default: 10s]
--anonymous-telemetry-disabled
Disable sending anonymous usage information to Apollo [env: APOLLO_TELEMETRY_DISABLED=]
--apollo-uplink-timeout
The timeout for an http call to Apollo uplink. Defaults to 30s [env: APOLLO_UPLINK_TIMEOUT=] [default: 30s]
--listen
The listen address for the router. Overrides `supergraph.listen` in router.yaml [env: APOLLO_ROUTER_LISTEN_ADDRESS=]
-V, --version
Display version and exit
-h, --help
Print help
Apollo создает инструменты и коммерческие услуги с открытым исходным кодом, чтобы сделать разработку приложений проще, лучше и доступнее для большего числа людей. Мы помогаем вам доставлять товары быстрее благодаря:
Посетите обучающую платформу Odyssey — идеальное место, чтобы начать свое путешествие по GraphQL с видео и интерактивными задачами по написанию кода. Присоединяйтесь к сообществу Apollo, чтобы взаимодействовать и получать техническую помощь от сообщества GraphQL.
Разработка ядра маршрутизатора Apollo основана на следующих принципах проектирования, которые определяют архитектурные решения и реализацию.
Корректность: роутер стремится быть максимально корректной реализацией GraphQL и Federation, мы заботимся о тестировании и документировании всего, что подразумевается спецификацией, вплоть до случаев сбоя. Поведение роутера должно соответствовать принципу наименьшего удивления для разработчиков.
Надежность: маршрутизатор является важной частью API-интерфейсов GraphQL, поэтому он должен быть одной из самых сильных частей инфраструктуры. Это подразумевает стабильность его поведения (отсутствие сбоев, бесконечных циклов, утечек и т. д.), доступность (предсказуемая задержка, использование ОЗУ и ЦП, масштабируемость) и наблюдаемость (метрики, оповещения). Это должно вселить в людей, занимающихся инфраструктурой, твердую уверенность в том, что они смогут изучить ее пределы и безопасно ее эксплуатировать.
Безопасное экспериментирование: маршрутизатор будет поддерживать всю будущую работу в рамках Federation, поэтому он должен позволять новые идеи и исследования, не нарушая существующие функции. Проект все еще в движении, мы не можем допустить, чтобы он выкристаллизовался слишком рано, сохраняя при этом принципы корректности и надежности.
Удобство использования: маршрутизатор должен быть простым в эксплуатации. Предпочитайте расширяемость параметрам конфигурации и убедитесь, что у пользователя достаточно информации, чтобы помочь себе, если что-то пойдет не так. Например:
Руководствуются следующие принципы:
Возможность модульного тестирования: весь новый код должен быть доступным для модульного тестирования или иметь вескую причину, почему это не так. Это может означать, что придется потратить немного больше времени, чтобы убедиться, что код можно тестировать изолированно. Не полагайтесь исключительно на интеграционное тестирование.
Набор интеграционных тестов: мы проведем интеграцию с набором тестов шлюза и поможем улучшить его для проверки всех аспектов спецификаций. В частности, этот набор тестов будет проверять случаи сбоев, такие как неверные запросы или проблемы с сетью. Интеграционные тесты должны быть надежными и не должны давать сбоев в случае медленного выполнения теста или условий гонки.
Измерение и обучение: надежность необходимо тестировать и измерять с помощью тестов, профилирования и изучения ограничений маршрутизатора. Хотим узнать, как работать с роутером и какова его номинальная точка. С этой целью маршрутизатор должен быть детально оснащен, что позволит нам измерить, как изменения кода влияют на него. Мы особенно заботимся об измерении накладных расходов новых функций, чтобы минимизировать задержки и использование ресурсов.
Расширяемость: позволяя расширениям и директивам изменять поведение маршрутизатора, мы можем проводить эксперименты и тестировать новые функции, не влияя на конкретные запросы или конечные точки. Кроме того, эти эксперименты легко деактивировать во время выполнения (флаги функций, канарейки и т. д.).
Аполло Граф, Инк.
Исходный код в этом репозитории защищен лицензией Elastic License 2.0. По умолчанию во всем репозитории используется лицензия Elastic License 2.0, если только в заголовке файла или файле лицензии в подкаталоге не указана другая лицензия. Полный текст лицензии см. в ЛИЦЕНЗИИ.