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.
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.
źródło
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.
źródło
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.
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.
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).
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.
źródło
Sprawdź klejnot rails_workflow - myślę, że jest blisko tego, czego szukasz.
źródło
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:
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.
źródło
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.
źródło
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:
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.
źródło