Przypadki użycia silnika przepływu pracy


90

Chciałbym wiedzieć o konkretnych problemach, które Ty - czytelnik SO - rozwiązałeś za pomocą silników przepływu pracy i jakich bibliotek / frameworków użyłeś, jeśli nie stworzyłeś własnych. Chciałbym również wiedzieć, kiedy silnik przepływu pracy nie był najlepszym wyborem i czy / jak wybrałeś coś prostszego, na przykład aplikację typu TaskList / WorkList / Task-Management wykorzystującą maszyny stanu.

Pytania:

  • Jakie problemy rozwiązałeś za pomocą silników przepływu pracy?
  • Z jakich bibliotek / frameworków korzystałeś?
  • Kiedy wystarczyła prostsza maszyna stanowa / zarządzanie zadaniami, taka jak system?
  • Bonus: W jaki sposób dokonałeś / dokonałeś rozróżnienia między zarządzaniem zadaniami a mechanizmem przepływu pracy ?

Szukam doświadczeń z pierwszej ręki.

Niektóre z zasobów, które sprawdziłem:

Odpowiedzi:


61

Jestem również stronniczy, ponieważ jestem głównym autorem StonePath .

Opracowałem aplikacje przepływu pracy dla Departamentu Stanu USA, Centrum Humanitarnego Rozminowywania w Genewie, kilku klientów z listy Fortune 500, a ostatnio systemu szkół publicznych w Waszyngtonie. Za każdym razem, gdy widziałem „silnik przepływu pracy”, który starał się być jedynym głównym punktem odniesienia dla procesów biznesowych, widziałem organizację walczącą o obejście tego narzędzia. Może to wynikać z faktu, że rozwiązania te zawsze były ukierunkowane na sprzedawcę / produkt, a następnie kończyły się na taktycznym zespole `` konsultantów '' stale zasilających aplikację ... ale z tego powodu zwykle reaguję negatywnie, gdy słyszę korzyści wynikające z narzędzi opartych na procesach, które obiecują „scentralizować definicje przepływu pracy w jednym miejscu i zapewnić ich powtarzalność”.

To powiedziawszy, bardzo lubię Ruote - śledzę ten projekt od jakiegoś czasu i gdybym potrzebował takiego rozwiązania, będzie to następne narzędzie, które będę chciał wypróbować. StonePath ma zupełnie inny cel niż ruote - tam, gdzie Ruote jest ogólnie przydatne dla Rubiego, StonePath jest skierowane do Rails, frameworka internetowego napisanego w Rubim. Tam, gdzie Ruote dotyczy długotrwałych procesów biznesowych i związanych z nimi definicji, StonePath zajmuje się zarządzaniem przepływem pracy i zadaniami opartymi na stanie. Szczerze mówiąc, myślę, że rozróżnienie z zewnątrz, patrząc do środka, może być subtelne - często te same rodzaje procesów biznesowych mogą być reprezentowane w obie strony - jednak model oparty na stanie i zadaniach ma tendencję do mapowania na mój model mentalny.

Pozwólcie, że opiszę najważniejsze cechy przepływu pracy opartego na stanie. Krótko mówiąc, wyobraź sobie przepływ pracy obracający się wokół przetwarzania czegoś takiego jak pożyczka hipoteczna lub odnowienie paszportu. Gdy dokument przemieszcza się „po biurze”, przechodzi od stanu do stanu. Wyobraź sobie, że jesteś odpowiedzialny za dokument, a Twój szef prosił Cię co kilka godzin o aktualizację statusu i chciał krótkiej odpowiedzi ... powiedziałbyś na przykład „To jest we wpisie danych” ... ”Sprawdzamy referencje kandydata teraz „…” czekamy na ocenę jakości ”…„ Skończyliśmy ”… i tak dalej. Są to stany w przepływie pracy opartym na stanach. Przechodzimy od stanu do stanu poprzez przejścia - takie jak „zatwierdź”, „zastosuj”, „odrzuć”, „odmów” itd. Zwykle są to czasowniki określające czynności.

Kolejną częścią przepływu pracy opartego na stanach / zadaniach jest tworzenie zadań. Zadanie to jednostka pracy, zwykle z terminem wykonania i instrukcjami dotyczącymi obsługi, która łączy element pracy (na przykład wniosek o pożyczkę lub odnowienie paszportu) z użytkownikiem „w skrzynce”. Zadania mogą być wykonywane równolegle lub sekwencyjnie, a my możemy tworzyć zadania automatycznie, gdy wchodzimy w stany, tworzyć zadania ręcznie, gdy ludzie zdają sobie sprawę, że praca musi zostać wykonana, i wymagać zakończenia zadań, zanim będziemy mogli przejść do nowego stanu. Wszystkie tego rodzaju zachowania są opcjonalne i stanowią część definicji przepływu pracy.

Królicza nora może sięgać znacznie głębiej i napisałem o tym artykuł w numerze 4 PragPub, Pragmatic Programmer's Magazine. Sprawdź powyższy link do ponownego odtworzenia, aby uzyskać zaktualizowany plik PDF tego artykułu.

Pracując z StonePath w ciągu ostatnich kilku miesięcy, odkryłem, że model oparty na stanie naprawdę dobrze odwzorowuje spokojne architektury internetowe - w szczególności zadania i przejścia stanów ładnie odwzorowują się jako zagnieżdżone zasoby. Spodziewaj się, że w przyszłości napiszę ode mnie na ten temat.


2
niesamowite! nie mogę się doczekać, aby dowiedzieć się więcej o subtelnych różnicach między silnikami przepływu pracy, takimi jak ruote i silnikami stanu / zadań, takimi jak stonepath, ponieważ nie przechodząc wcześniej przez to, trudno jest zobaczyć, od czego zacząć. Przeczytałem wszystko, co udało mi się znaleźć na temat stonepath i ruote oraz milion innych białych ksiąg na temat BPM i przepływów pracy, więc trochę wiedzy z pierwszej ręki, takiej jak ta, NAPRAWDĘ zmniejszy krzywą początkową. dzięki jeszcze raz.
Lance Pollard

31

Jestem stronniczy, jestem jednym z autorów ruote .

wariant 1) stan maszyny dołączony do zasobu (dokument, zamówienie, faktura, książka, mebel).

wariant 2) maszyna stanowa dołączona do zasobu wirtualnego o nazwie zadanie

wariant 3) silnik workflow interpretujący definicje workflow

Teraz Twoje pytanie jest oznaczone jako „BPM” i możemy rozszerzyć je na „Zarządzanie procesami biznesowymi”. Jak przebiega tego rodzaju zarządzanie w każdym z wariantów?

W wariancie 1 proces biznesowy (lub workflow) jest rozproszony w aplikacji. Maszyna stanu dołączona do zasobu wymusza niektóre aspekty przepływu pracy, ale tylko te związane z zasobem. Mogą istnieć inne zasoby z własnym automatem stanowym wykonującym ten sam proces biznesowy.

W wariancie 2 przepływ pracy może być skoncentrowany wokół zasobu zadania i reprezentowany przez automat stanowy wokół tego zasobu.

W wariancie 3 przepływ pracy jest uchwalany poprzez interpretację zasobu zwanego definicją przepływu pracy (lub definicją procesu biznesowego).

Co się dzieje, gdy zmienia się proces biznesowy? Czy warto mieć silnik przepływu pracy, w którym procesy biznesowe są zarządzalnymi zasobami?

Większość bibliotek automatów stanów ma 1 zestaw stanów + przejścia. Silniki przepływu pracy to w większości interpretery definicji przepływu pracy i pozwalają na jednoczesne działanie wielu różnych przepływów pracy.

Jaki będzie koszt zmiany przepływu pracy?

Warianty nie wykluczają się wzajemnie. Widziałem wiele przykładów, w których silnik przepływu pracy zmienia stan wielu zasobów, z których część jest chroniona przez maszyny stanu.

Często też używam wariantu 3 + 2 do zadań personelu: silnik workflow, w niektórych momentach podczas uruchamiania instancji procesu, przekazuje zadanie (element roboczy) uczestnikowi ludzkiemu (zadanie zasobu jest tworzone i ustawiane w stanie „gotowe”) .

Możesz przejść długą drogę z samym wariantem 2 (wariant menedżera zadań).

Można również wspomnieć o wariancie 0), w którym nie ma automatu stanowego, silnika przepływu pracy, a procesy biznesowe są rozproszone i / lub zakodowane na stałe w aplikacji.

Możesz zadawać wiele pytań, ale jeśli nie poświęcisz czasu na przeczytanie odpowiedzi i nie poświęcisz czasu na wypróbowywanie i eksperymentowanie, nie zajdziesz zbyt daleko i nigdy nie zdobędziesz sprytu, kiedy używać to czy tamto narzędzie.


bardzo dziękuję za tę odpowiedź, to trochę wyjaśnia. nie ma wystarczających rozróżnień, aby nowicjusz mógł przyzwoicie zrozumieć formalne modelowanie przepływu pracy i zacząć bawić się kodem; Wygląda na to, że to wszystko białe księgi java z późnych lat 90. ty i David ze stonepath zaczynacie bardzo pokonywać tę barierę. pewnego dnia może to być tak proste, jak nauka szyn. Za kilka dni zacznę bawić się wariantem menedżera zadań. dzięki.
Lance Pollard

link wygląda na martwy?
rogerdpack

projekt jest teraz martwy
Jeshan Babooa

4

W poprzednim projekcie, nad którym pracowałem, dodałem kilka reguł typu przepływu pracy do zestawu formularzy rządowych w branży Healhcare.

Formularze musiały zostać wypełnione przez użytkownika końcowego, aw zależności od niektórych odpowiedzi zaplanowano wypełnienie innych formularzy w późniejszym terminie. Były też wydarzenia zewnętrzne, które anulowały zaplanowane formularze lub zaplanowały nowe.

Przepływ próbki:

Pacjent przyjęty -> Zaplanuj ocenę wstępną -> Zaplanuj formularz kwartalnej oceny -> Pacjent zmarł -> Anuluj przegląd -> Zaplanuj formularz oceny wypisu

Wiele innych zasad opierało się na takich kwestiach, jak wiek pacjentów, miejsce ich przyjęcia itp.

To była aplikacja ASP.NET, reguły były w zasadzie tabelą w bazie danych. Dodałem skrypty, aby skrypt był uruchamiany po wypełnieniu formularza, aby określić, co dalej. To był okropny projekt i byłby idealny dla prawidłowego silnika przepływu pracy.


3

Jestem jednym z autorów Cadence Workflow Engine, który opracowaliśmy w Uber. Różnica między Cadence a większością istniejących silników przepływu pracy polega na tym, że jest skoncentrowany na programistach oraz jest niezwykle elastyczny i skalowalny (do dziesiątek tysięcy aktualizacji na sekundę i do miliardów otwartych przepływów pracy). Przepływy pracy są zapisywane jako programy obiektowe, a silnik zapewnia pełne zachowanie stanu obiektów przepływu pracy, w tym stosów wątków i zmiennych lokalnych, w przypadku awarii hosta.

Jakie problemy rozwiązałeś za pomocą silników przepływu pracy? Rytm jest używany praktycznie w każdej aplikacji zaplecza, która żyje poza pojedynczą odpowiedzią na żądanie. Przykłady użycia:

  • Rozproszone zadania CRON
  • Zarządzanie potokami ML / danych
  • Reagowanie na wydarzenia biznesowe. Na przykład imprezy wycieczkowe w Uber. Przepływ pracy może gromadzić stan na podstawie otrzymanych zdarzeń i wykonywać działania, gdy jest to konieczne.
  • Wdrażanie usług w Mesos / Kubernetes
  • Wdrożenie rurociągu CI
  • Zapewnienie zakończenia wielu zgłoszeń serwisowych po odebraniu żądania. W tym implementacja wzorca SAGA
  • Zarządzanie zadaniami pracowników (podobne do Amazon MTurk )
  • Przetwarzanie mediów
  • Routing zgłoszeń do działu obsługi klienta
  • Przetwarzanie zamówienia
  • Usługa testowania podobna do ChaosMonkey

i wiele innych

Drugi zestaw przypadków użycia opiera się na przenoszeniu istniejących silników przepływu pracy do działania w systemie Cadence. Praktycznie każdy istniejący język specyfikacji przepływu pracy silnika może zostać przeniesiony do pracy w Cadence. Istnieje wiele wewnętrznych systemów Uber, które zostały przeniesione. W ten sposób pojedyncza usługa zaplecza może obsługiwać wiele systemów przepływu pracy specyficznych dla domeny.

Z jakich bibliotek / frameworków korzystałeś?

Cadence to samodzielna usługa napisana w bibliotekach Go with Go i Java po stronie klienta. Jedyną zależnością zewnętrzną jest pamięć masowa. Obsługiwane są bazy danych Cassandra i SQL.

Cadence obsługuje również asynchroniczną replikację między regionami (przy użyciu terminologii AWS).

Kiedy wystarczyła prostsza maszyna stanowa / zarządzanie zadaniami, taka jak system?

Wewnątrz Ubera usługą Cadence zarządza nasz zespół. Zatem koszt tworzenia dowolnej niestandardowej maszyny stanu / zarządzania zadaniami jest zawsze wyższy niż przy użyciu Cadence. Poza firmą należy skonfigurować obsługę i magazynowanie. Jeśli masz już bazę danych SQL, wdrożenie usługi jest proste dzięki obrazowi platformy Docker. Docker jest również używany do uruchamiania lokalnej usługi Cadence do programowania na komputerze osobistym lub laptopie.



2

Jestem jednym z autorów Imixs-Workflow . Imixs-Workflow to silnik przepływu pracy typu open source oparty na BPMN 2.0 iw pełni zintegrowany ze stosem technologii Java EE.
Samodzielnie rozwijam silniki workflow od ponad 10 lat. Spróbuję w skrócie odpowiedzieć na Twoje pytanie:

> Jakie problemy rozwiązałeś za pomocą silników przepływu pracy?

Moim osobistym celem, kiedy zacząłem myśleć o silnikach przepływu pracy, było uniknięcie sztywnego kodowania logiki biznesowej w mojej aplikacji. Wiele rzeczy w aplikacji biznesowej można ponownie wykorzystać, dlatego warto zachować możliwość ich konfiguracji. Na przykład:

  • wysłanie powiadomienia
  • wyświetl otwarte zadania
  • przydzielono zadanie osobie
  • opis bieżącego zadania

Na tej liście funkcji widać, że mówię o przepływach pracy skoncentrowanych na człowieku. W skrócie: silnik przepływu pracy zorientowany na człowieka odpowiada na pytania: Kto jest odpowiedzialny za zadanie i kogo należy informować w następnej kolejności? I to są typowe pytania dotyczące wymagań biznesowych.

> Z jakich bibliotek / frameworków korzystałeś?

5 lat temu zaczęliśmy ponownie wdrażać silnik Imixs-Workflow, koncentrując się na BPMN 2.0 . BPMN to wspólny standard modelowania procesów. Zaskakujące było dla mnie to, że nagle byliśmy w stanie opisać nawet bardzo złożone procesy biznesowe, które można było wizualizować i wykonywać. Polecam wszystkim korzystanie z BPMN do modelowania procesów biznesowych.

> Kiedy wystarczył prostszy system zarządzania automatami / zadaniami, taki jak system?

Prosty automat stanów jest wystarczający, jeśli chcesz tylko śledzić status obiektu biznesowego. Dzieje się tak, gdy zaczynasz wprowadzać atrybut „status” do modelu obiektów. Ale jeśli potrzebujesz procesów biznesowych z obowiązkami, rejestrowaniem i kontrolą przepływu, maszyna stanu nie jest już wystarczająca.

> Premia: Jak dokonałeś / rozróżniłeś zarządzanie zadaniami i mechanizm przepływu pracy?

To jest dokładnie punkt, w którym wiele wymienionych tutaj silników przepływu pracy się różni. W przypadku przepływu pracy zorientowanego na człowieka zwykle potrzebne jest zarządzanie zadaniami, aby rozdzielić zadania między aktorami ludzkimi. W przypadku automatyzacji procesów ten punkt nie jest tak istotny. Wystarczy, że silnik wykona określone zadania. Nie można porównywać mechanizmów zarządzania zadaniami i silników przepływu pracy, ponieważ zarządzanie zadaniami jest zawsze funkcją silnika przepływu pracy.


1

Włączyłem własny silnik workflow do obsługi etapowego przetwarzania dokumentów - katalogowanie, wysyłanie do obróbki obrazu (pracujemy z redakcją), w razie potrzeby wysyłanie do walidacji, następnie wydawanie i wreszcie wysyłka z powrotem do klienta. W naszym przypadku mamy mnóstwo dokumentów do przetworzenia, więc czasami musimy uruchomić każdą usługę oddzielnie, aby kontrolować dostawy i wykorzystanie zasobów. Prosta koncepcja, ale potrzebna była wysoka wydajność i przetwarzanie rozproszone, i nie mogliśmy znaleźć żadnego gotowego produktu, który pasowałby do nas.


1

Mam doświadczenie z wykorzystaniem silnika Activiti BPMN 2.0 do obsługi wysokowydajnych i wysokoprzepustowych procesów przesyłania danych w infrastrukturze węzłów sieciowych. Podstawowym zadaniem było umożliwienie konfiguracji i monitorowania takich procesów przesyłania oraz sterowanie każdym węzłem sieci (tj. Żądanie node1, aby wysłał plik danych do węzła2 za pośrednictwem określonej warstwy transportowej).

W tym samym czasie mogą być uruchomione tysiące procesów i ogólnie dziesiątki lub setki tysięcy procesów dziennie.

Istniało wiele różnych definicji procesów, ale niekoniecznie było wymagane, aby operator systemu mógł tworzyć niestandardowe przepływy pracy. Tak więc podstawowym przypadkiem użycia samego silnika BPM było zapewnienie solidności, skalowalności i umożliwienie monitorowania każdego przebiegu procesu.

W końcu to w zasadzie zadziałało, ale z tego projektu dowiedzieliśmy się, że platforma BPMN, a raczej silnik Activiti, nie była najlepszym rozwiązaniem dla tak wysokoprzepustowego systemu.

Głównymi wyzwaniami były priorytetyzacja wykonywania zadań, blokowanie bazy danych, próby wykonania, aby wymienić tylko kilka z nich dotyczących samego BPM. Musieliśmy więc opracować niestandardową obsługę tych, na przykład:

  • Obsługa ponownych prób w BPM w przypadkach, gdy węzeł nie miał wolnego procesu roboczego dla danego zadania lub gdy węzeł w ogóle nie działał.
  • Wykonywanie równoległych zadań transferowych w jednym procesie i synchronizacja wyników (sukces / porażka).

Nie wiem, czy inne silniki BPMN byłyby bardziej odpowiednie dla takiego scenariusza, ponieważ BPMN jest głównie przeznaczony do długotrwałych zadań biznesowych obejmujących interakcję z użytkownikiem, gdzie wydajność prawdopodobnie nie jest tym samym problemem, co w naszym przypadku.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.