INTEGRITY Документация

Как работает Workers for Platforms

Архитектура

Если вы знакомы с Workers, Workers for Platforms включает четыре ключевых компонента: dispatch namespaces, динамические dispatch Workers, пользовательские Workers и, при необходимости, outbound Workers.

Архитектура Workers for Platforms

Dispatch namespace

Dispatch namespace представляет собой контейнер, который содержит все Workers ваших клиентов. Ваша платформа берёт код, написанный клиентами, а затем отправляет запрос API, чтобы развернуть этот код как пользовательский Worker в пространстве имён, например staging или production. По сравнению с Workers, это обеспечивает:

Динамический dispatch Worker

Dynamic dispatch Worker представляет собой точку входа для всех запросов к вашей платформе. Ваш dynamic dispatch Worker:

Dynamic dispatch Worker использует привязка dispatch namespace для вызова пользовательских Workers:

export default {
	async fetch(request, env) {
		// Determine which customer Worker to call
		const customerName = new URL(request.url).hostname.split(".")[0];

		// Get and invoke the customer's Worker
		const userWorker = env.DISPATCHER.get(customerName);
		return userWorker.fetch(request);
	},
};

User Workers

User Workers содержат код, написанный вашими клиентами. Клиент отправляет свой код на вашу платформу, после чего вы выполняете запрос API для развёртывания user Worker от его имени. User Workers развёртываются в dispatch namespace и вызываются вашим dynamic dispatch Worker. Вы можете предоставить user Workers привязки для доступа к KV, D1, R2 и другим ресурсам Cloudflare.

Процесс развёртывания и управления

Outbound Worker (необязательно)

Одна исходящий Worker перехватывает fetch() запросы, отправленные пользовательскими Workers. Используйте его для:

Шаблон контроля исходящего трафика с помощью Outbound Worker

Жизненный цикл запроса

  1. Запрос поступает на ваш dynamic dispatch Worker (например, customer-a.example.com/api)
  2. Ваш dynamic dispatch Worker определяет, какой user Worker должен обработать запрос
  3. Dynamic dispatch Worker вызывает env.DISPATCHER.get("customer-a") чтобы получить пользовательский Worker
  4. Пользовательский Worker выполняется. Если он делает внешние fetch() вызовов и настроен outbound Worker, эти запросы сначала проходят через outbound Worker.
  5. Пользовательский Worker возвращает ответ
  6. Ваш dynamic dispatch Worker может по желанию изменить ответ перед его возвратом

Workers for Platforms в сравнении с Service bindings

Как Workers for Platforms, так и Service bindings обеспечивают взаимодействие между Workers. Используйте Service bindings, если вы точно знаете, каким Workers нужно взаимодействовать друг с другом. Используйте Workers for Platforms, если user Workers загружаются вашими клиентами динамически.

Вы можете использовать оба варианта одновременно: ваш dynamic dispatch Worker может обращаться к внутренним службам через Service bindings и одновременно отправлять запросы user Workers в namespace.