Как узнать, что делают Phoenix и Absinthe с точки зрения создания процессов и отправки сообщений?

У меня есть приложение Elixir Umbrella с Phoenix, Absinthe (graphQL). В AppWeb мой AppWeb.Router направляет запросы, обрабатывая /graphql с Absinthe.Plug и используя MyApp.Schema.

В AppWeb.Schema я импортирую объекты из множества разных схем в разные приложения OTP, используя import_types. Я буду использовать Users в качестве примера.

В Users.Schema есть объекты и поля, где в конечном итоге будет resolve &Resolvers.resolve_x/2

Я знаю, что Phoenix запускает новый процесс при каждом запросе, в hexdocs Absinthe.Schema указано, что В Absinthe 1.5 схемы создаются с использованием того же процесса, которым выполняются запросы. Означает ли это, что каждый новый процесс, созданный запрос phoenix взаимодействует с одним процессом schema (AppWeb.Schema)? Если да, то не создаст ли это узкое место? Если нет, то разве это не много кода (все преобразователи и соответствующие функции из всех приложений OTP), которые нужно перенести в новый процесс схемы, порождаемый каждый раз?


person jupiar    schedule 26.12.2020    source источник


Ответы (1)


В Absinthe 1.5 схемы строятся с использованием того же процесса, с помощью которого выполняются запросы.

Это относится не к процессу BEAM, а к тому, что схемы в Absinthe 1.5 строятся с использованием метода, аналогичного способу разрешения запросов.

Есть два способа построения схемы в Absinthe.

  1. Используя DSL на основе макросов, это то, что уже было доступно в Absinthe 1.4.
  2. Используя язык определения схемы Graphql (SDL), в этом случае Absinthe анализирует SDL и строит из него схему, преобразователи и т. д. могут быть присоединены с помощью конструкций гидратации.

После любого из этих способов построения схемы ее план (AST схемы) проходит через конвейер фаз, в которых, например. происходит валидация. Это то, что называется «тот же процесс», поскольку документ graphql в Absinthe также следует маршруту документ graphl —> синтаксический анализ в схему AST — › проверка —› другие этапы.

По умолчанию компиляция схемы по-прежнему происходит во время компиляции, поэтому для запроса не создаются дополнительные процессы.

person Maarten van Vliet    schedule 03.03.2021