Это первая часть введения в рабочие процессы Fission, состоящего из двух частей.

Fission предоставляет быстрые бессерверные функции в Kubernetes. Хотя функции отлично подходят для определенных частей бизнес-логики, любое нетривиальное приложение требует набора функций.

Существует множество способов составления функций. Вы можете напрямую вызывать функции друг из друга, но в этом есть некоторые недостатки. Во-первых, становится трудно понять структуру приложения; зависимости не очевидны; по сути, каждая функция становится API. Во-вторых, нет постоянного состояния; если произошел сбой или исключение, и вы хотите повторить попытку, вся функция должна запуститься снова.

В качестве альтернативы вы можете связать набор функций, используя очереди сообщений, чтобы отправить вывод одной функции в тему сообщения, которая запускает другую функцию. Хотя это помогает с настойчивостью и повторными попытками (поскольку вы можете повторять отдельные функции, а не всю композицию), это совсем не помогает сделать систему более понятной. Также сложно воспроизвести любой динамический поток управления (например, оператор if или цикл).

Рабочие процессы

Третий способ составления функций деления — использование рабочих процессов. Подумайте о блок-схеме: последовательность задач, решений, циклов и так далее. Блок-схема делает структуру сложной задачи очевидной.

Рабочие процессы похожи на блок-схемы для бессерверных функций, за исключением того, что они более мощные. Вы можете составлять вместе функции последовательно или параллельно, посылать вывод одной функции на входы другой, писать операторы if, циклы и даже функции, которые работают с другими функциями.

Варианты использования, демонстрации, примеры

В целом мы видим несколько областей, где рабочие процессы полезны:

  • Случаи использования автоматизации DevOps
  • Случаи использования обработки данных
  • Автоматизация бизнес-процессов

Демо

Больше интересных демонстраций/примеров приложений, созданных с использованием рабочих процессов Fission, можно найти здесь.

Терминология/Концепции

Вот несколько терминов и понятий, которые вам следует знать, чтобы лучше понимать рабочие процессы.

Задача – это единица вычислений в рабочем процессе. Чаще всего это вызов функции. Он принимает ввод данных и выводит результирующие данные или ошибку. Задача может указать свои входные данные с помощью выражения Javascript; это позволяет выполнять встроенные преобразования данных из вывода других задач. Рабочий процесс определяется как список задач.

Задача может иметь зависимость от одной или нескольких других задач. С помощью зависимостей вы можете манипулировать потоком управления внутри рабочего процесса.

Динамическая задача может управлять потоком управления. Например, это может быть оператор if, цикл и т. д. Динамическая задача — это обычная задача, которая вместо данных возвращает другую задачу. Пользователи могут расширять рабочие процессы, создавая собственные динамические задачи.

Конструкции потока управления доступны как динамические задачи. Например, динамическая задача «если» проверяет значение выражения и выполняет одну из двух заданных ей задач.

Сами рабочие процессы являются функциями Fission — это позволяет запускать рабочие процессы так же, как и любую другую функцию.

Рабочие процессы указаны в YAML.

Ниже приведен пример спецификации рабочего процесса из приложения Slack Weather в формате YAML.

Обоснование: код или данные?

Должен ли рабочий процесс быть указан как код или данные? Код обеспечивает большую гибкость: зачем кому-то писать оператор if в YAML?

Однако запись рабочего процесса в виде структуры данных имеет два больших преимущества:

  • Анализуемость. Произвольный код трудно анализировать. Но если рабочий процесс представляет собой структуру данных, система может анализировать ее и рассуждать о ней как о целом. Например, он заранее знает, какой набор функций составляет рабочий процесс, что значительно упрощает такие вещи, как обновления.
  • Удобство использования. Вы можете создать рабочий процесс, вообще не занимаясь программированием. Наряду с библиотекой функций деления это открывает возможность использования бессерверных функций большому количеству людей, которым неудобно писать большие объемы сложного кода.

Мы выбрали что-то вроде гибрида. Хотя определение рабочего процесса представляет собой статический список задач, в рабочих процессах есть два динамических свойства:

  1. Входные данные для задач указываются в виде выражений Javascript

2. Динамические задачи. Fission поставляется со встроенными циклами, условными выражениями и функцией карты. Пользователи также могут определять свои собственные динамические задачи.

Мы считаем, что этот подход является лучшим из обоих миров: мы получаем преимущества рабочих процессов как данных, но с гораздо большей гибкостью, чем простые статические рабочие процессы.

Оставайтесь с нами для Части 2 этого поста, где мы глубже погружаемся в потенциал рабочих процессов Fission, как выглядит реализация и как она значительно упрощает разработку бессерверных приложений.

А пока не стесняйтесь присоединиться к сообществу Fission!