Kasus penggunaan Mesin Alur Kerja

90

Saya ingin tahu tentang masalah spesifik yang Anda - pembaca SO - telah pecahkan menggunakan Workflow Engine dan library / framework apa yang Anda gunakan jika Anda tidak menggulung sendiri. Saya juga ingin tahu kapan Workflow Engine bukan pilihan terbaik dan jika / bagaimana Anda memilih sesuatu yang lebih sederhana, seperti aplikasi tipe TaskList / WorkList / Task-Management yang menggunakan mesin status.

Pertanyaan:

  • Masalah apa yang telah Anda gunakan untuk menyelesaikan mesin alur kerja?
  • Library / framework apa yang Anda gunakan?
  • Kapan sistem State Machine / Task Management yang lebih sederhana sudah cukup?
  • Bonus: Bagaimana / Anda membuat perbedaan antara Manajemen Tugas dan Mesin Alur Kerja ?

Saya mencari pengalaman langsung.

Beberapa sumber daya yang telah saya periksa:

Lance Pollard
sumber

Jawaban:

61

Saya juga bias, karena saya adalah penulis utama StonePath .

Saya telah mengembangkan aplikasi alur kerja untuk Departemen Luar Negeri AS, Pusat Penghapusan Ranjau Kemanusiaan Jenewa, beberapa klien keberuntungan 500, dan yang terbaru Sistem Sekolah Umum Washington DC. Setiap kali saya melihat 'mesin alur kerja' yang mencoba menjadi satu-satunya referensi utama untuk proses bisnis, saya telah melihat sebuah organisasi berjuang sendiri untuk bekerja di sekitar alat tersebut. Ini mungkin karena fakta bahwa solusi ini selalu didorong oleh vendor / produk, dan kemudian berakhir dengan tim taktis 'konsultan' yang terus-menerus memberi makan aplikasi ... tetapi karena ini, saya cenderung bereaksi negatif ketika saya mendengar manfaat alat berbasis proses yang menjanjikan untuk 'memusatkan definisi alur kerja di satu tempat dan membuatnya dapat diulang'.

Karena itu, saya sangat menyukai Ruote - saya telah mengikuti proyek itu selama beberapa waktu dan jika saya membutuhkan solusi semacam itu, itu akan menjadi alat berikutnya yang bersedia saya coba. StonePath memiliki tujuan yang sangat berbeda dari ruote - di mana Ruote berguna untuk Ruby secara umum, StonePath ditujukan untuk Rails, kerangka kerja web yang ditulis dalam Ruby. Jika Ruote adalah tentang proses bisnis jangka panjang dan definisi terkait, StonePath adalah tentang mengelola alur kerja dan penugasan berbasis Negara Bagian. Sejujurnya, saya pikir perbedaan dari luar melihat ke dalam mungkin tidak kentara - seringkali jenis proses bisnis yang sama dapat direpresentasikan dengan cara apa pun - model berbasis status dan tugas cenderung memetakan ke model mental saya.

Izinkan saya menjelaskan sorotan dari alur kerja berbasis negara bagian. Singkatnya, bayangkan alur kerja berputar di sekitar pemrosesan sesuatu seperti pinjaman hipotek atau pembaruan paspor. Saat dokumen berpindah 'di sekitar kantor', dokumen tersebut berpindah dari satu negara bagian ke negara bagian lain. Bayangkan jika Anda bertanggung jawab atas dokumen tersebut, dan atasan Anda meminta Anda setiap beberapa jam untuk pembaruan status, dan menginginkan jawaban singkat ... Anda akan mengatakan hal-hal seperti "Ada dalam entri data" ... "Kami sedang memeriksa kredensial pemohon sekarang "..." kami menunggu tinjauan kualitas "..." Kami selesai "... dan seterusnya. Ini adalah status dalam alur kerja berbasis negara bagian. Kami berpindah dari satu negara bagian ke negara lain melalui transisi - seperti "menyetujui", "menerapkan", kickback "," menyangkal ", dan seterusnya. Ini cenderung menjadi kata kerja tindakan.

Bagian selanjutnya dari alur kerja berbasis status / tugas adalah pembuatan tugas. Tugas adalah unit kerja, biasanya dengan tanggal jatuh tempo dan instruksi penanganan, yang menghubungkan item pekerjaan (aplikasi pinjaman atau perpanjangan paspor, misalnya), ke "kotak dalam" pengguna. Tugas dapat terjadi secara paralel satu sama lain atau secara berurutan, dan kita dapat membuat tugas secara otomatis saat kita memasuki status, membuat tugas secara manual saat orang menyadari pekerjaan harus diselesaikan, dan meminta tugas diselesaikan sebelum kita dapat pindah ke status baru. Semua jenis perilaku ini adalah opsional, dan bagian dari definisi alur kerja.

Lubang kelinci bisa masuk lebih dalam dari ini, dan saya menulis artikel tentangnya untuk Edisi # 4 PragPub, Majalah Programmer Pragmatis. Lihat tautan reo di atas untuk pembaruan PDF dari artikel itu.

Dalam bekerja dengan StonePath beberapa bulan terakhir, saya telah menemukan bahwa model berbasis negara memetakan dengan sangat baik ke arsitektur web yang tenang - khususnya, tugas dan transisi status dipetakan dengan baik sebagai sumber daya bersarang. Berharap untuk melihat tulisan masa depan dari saya tentang hal ini.

bokmann
sumber
2
luar biasa! sangat menantikan untuk mempelajari lebih lanjut tentang perbedaan halus antara mesin alur kerja seperti ruote dan mesin status / tugas seperti stonepath, karena belum pernah melewatinya sebelumnya, sulit untuk melihat apa yang harus dimulai. Saya telah membaca semua yang dapat saya temukan tentang batu dan ruote dan jutaan buku putih lainnya tentang BPM dan alur kerja, jadi beberapa pengetahuan seperti "pengalaman langsung" seperti ini BENAR-BENAR akan mengurangi kurva memulai. Terima kasih lagi.
Lance Pollard
31

Saya bias, saya salah satu penulis ruote .

varian 1) mesin negara yang dilampirkan ke sumber daya (dokumen, pesanan, faktur, buku, perabot).

varian 2) mesin status yang terpasang ke sumber daya virtual bernama tugas

varian 3) mesin alur kerja yang menafsirkan definisi alur kerja

Sekarang pertanyaan Anda diberi tag "BPM" kita dapat diperluas menjadi "Manajemen Proses Bisnis". Bagaimana manajemen semacam itu terjadi di setiap varian?

Dalam varian 1, proses bisnis (atau alur kerja) tersebar di aplikasi. Mesin status yang terpasang ke sumber daya memberlakukan beberapa aspek alur kerja, tetapi hanya yang terkait dengan sumber daya. Mungkin ada sumber daya lain dengan mesin negara mereka sendiri mengikuti proses bisnis yang sama.

Dalam varian 2, alur kerja dapat dikonsentrasikan di sekitar sumber daya tugas dan diwakili oleh mesin status di sekitar sumber daya itu.

Dalam varian 3, alur kerja diberlakukan dengan menafsirkan sumber daya yang disebut definisi alur kerja (atau definisi proses bisnis).

Apa yang terjadi ketika proses bisnis berubah? Apakah layak memiliki mesin alur kerja di mana proses bisnis adalah sumber daya yang dapat dikelola?

Sebagian besar library mesin status memiliki 1 set status + transisi. Mesin alur kerja, sebagian besar, adalah penerjemah definisi alur kerja dan memungkinkan beberapa alur kerja yang berbeda untuk berjalan bersama.

Berapa biaya untuk mengubah alur kerja?

Variannya tidak eksklusif satu sama lain. Saya telah melihat banyak contoh di mana mesin alur kerja mengubah status beberapa sumber daya beberapa di antaranya dijaga oleh mesin negara.

Saya juga banyak menggunakan varian 3 + 2, untuk tugas manusia: mesin alur kerja, di beberapa titik saat menjalankan contoh proses, menyerahkan tugas (workitem) kepada peserta manusia (tugas sumber daya dibuat dan ditempatkan dalam keadaan 'siap') .

Anda dapat menggunakan varian 2 saja (varian pengelola tugas).

Kami juga dapat menyebutkan varian 0), di mana tidak ada mesin status, tidak ada mesin alur kerja, dan proses bisnis tersebar dan / atau di-hardcode dalam aplikasi.

Anda dapat mengajukan banyak pertanyaan, tetapi jika Anda tidak meluangkan waktu untuk membaca jawaban dan tidak meluangkan waktu untuk mencoba dan bereksperimen, Anda tidak akan melangkah terlalu jauh, dan tidak akan pernah mengetahui kapan harus menggunakannya. alat ini atau itu.

jmettraux
sumber
terima kasih banyak atas jawaban ini, ini cukup menyelesaikan sedikit. tidak ada cukup perbedaan di luar sana bagi pendatang baru untuk mendapatkan pemahaman yang layak tentang pemodelan alur kerja formal untuk mulai bermain-main dengan kode; sepertinya itu semua whitepaper java dari akhir 90-an. Anda dan David dari stonepath mulai banyak mendobrak penghalang itu. suatu hari mungkin semudah belajar rel. Saya akan mulai bermain dengan varian pengelola tugas dalam beberapa hari. Terima kasih.
Lance Pollard
link tampaknya mati?
rogerdpack
proyek tersebut sekarang sudah mati
Jeshan Babooa
4

Pada proyek sebelumnya yang saya kerjakan, saya menambahkan beberapa aturan tipe Alur Kerja ke sekumpulan Formulir Pemerintah di industri Perawatan Kesehatan.

Formulir perlu diisi oleh pengguna akhir, dan tergantung pada beberapa jawaban, Formulir lain dijadwalkan untuk diisi di kemudian hari. Ada juga acara eksternal yang akan membatalkan Formulir terjadwal atau menjadwalkan yang baru.

Arus Sampel:

Pasien Diakui -> Jadwalkan FOrm Penilaian Awal -> Jadwalkan Formulir Tinjauan Kuartalan -> Pasien Meninggal -> Batalkan Tinjauan -> Jadwalkan Formulir Penilaian Pemulangan

Banyak aturan lain didasarkan pada hal-hal seperti usia pasien, di mana mereka dirawat, dll.

Ini adalah aplikasi ASP.NET, aturan pada dasarnya adalah tabel dalam database. Saya menambahkan skrip, sehingga skrip akan berjalan pada penyelesaian Formulir untuk menentukan apa yang harus dilakukan selanjutnya. Ini adalah desain yang mengerikan, dan akan sempurna untuk mesin Alur Kerja yang tepat.

Ben Dempsey
sumber
3

Saya salah satu penulis Cadence Workflow Engine yang kami kembangkan di Uber. Perbedaan antara Irama dan sebagian besar mesin alur kerja yang ada adalah bahwa ini berfokus pada pengembang dan sangat fleksibel serta dapat diskalakan (hingga puluhan ribu pembaruan per detik dan hingga miliaran alur kerja terbuka). Alur kerja ditulis sebagai program berorientasi objek dan mesin memastikan bahwa status objek alur kerja termasuk tumpukan benang dan variabel lokal sepenuhnya dipertahankan jika terjadi kegagalan host.

Masalah apa yang telah Anda gunakan untuk menyelesaikan mesin alur kerja? Irama digunakan untuk hampir semua aplikasi backend yang berada di luar balasan permintaan tunggal. Contoh penggunaannya adalah:

  • Pekerjaan CRON terdistribusi
  • Mengelola pipeline ML / Data
  • Bereaksi terhadap acara bisnis. Misalnya acara trip di Uber. Alur kerja dapat mengakumulasi status berdasarkan peristiwa yang diterima dan menjalankan aktivitas bila diperlukan.
  • Penyebaran Layanan ke Mesos / Kubernetes
  • Implementasi CI Pipeline
  • Memastikan bahwa beberapa panggilan layanan selesai saat permintaan diterima. Termasuk implementasi pola SAGA
  • Mengelola tugas pekerja manusia (mirip dengan Amazon MTurk )
  • Pemrosesan media
  • Perutean Tiket Dukungan Pelanggan
  • Proses pemesanan
  • Layanan pengujian yang mirip dengan ChaosMonkey

dan banyak lagi

Serangkaian kasus penggunaan lainnya didasarkan pada porting mesin alur kerja yang ada untuk dijalankan pada irama. Hampir semua bahasa spesifikasi alur kerja mesin yang ada dapat di-porting untuk dijalankan pada irama. Ada beberapa sistem Uber internal yang di-porting. Dengan cara ini, layanan backend tunggal dapat memberi daya pada beberapa sistem alur kerja khusus domain.

Library / framework apa yang Anda gunakan?

Irama adalah layanan mandiri yang ditulis dalam Go with Go dan perpustakaan sisi klien Java . Satu-satunya ketergantungan eksternal adalah penyimpanan. Database Cassandra dan SQL didukung.

Irama juga mendukung replikasi lintas wilayah asinkron (menggunakan terminologi AWS).

Kapan sistem State Machine / Task Management yang lebih sederhana sudah cukup?

Di dalam Uber, layanan Irama dikelola oleh tim kami. Jadi overhead pembuatan mesin status / manajemen tugas kustom selalu lebih tinggi daripada menggunakan Irama. Di luar perusahaan, layanan dan penyimpanan untuk itu perlu disiapkan. Jika Anda sudah memiliki database SQL penerapan layanan mudah dilakukan melalui gambar buruh pelabuhan. Buruh pelabuhan juga digunakan untuk menjalankan layanan irama lokal untuk pengembangan di komputer pribadi atau laptop.

Maxim Fateev
sumber
2

Saya adalah salah satu penulis Imixs-Workflow . Imixs-Workflow adalah mesin alur kerja open source berdasarkan BPMN 2.0 dan terintegrasi penuh ke dalam tumpukan teknologi Java EE.
Saya mengembangkan mesin alur kerja sendiri sejak lebih dari 10 tahun. Saya akan mencoba menjawab pertanyaan Anda secara singkat:

> Masalah apa yang telah Anda selesaikan dengan menggunakan mesin alur kerja?

Tujuan pribadi saya ketika saya mulai memikirkan mesin alur kerja adalah untuk menghindari kode logika bisnis yang sulit dalam aplikasi saya. Banyak hal dalam aplikasi bisnis dapat digunakan kembali sehingga masuk akal untuk membuatnya tetap dapat dikonfigurasi. Sebagai contoh:

  • mengirimkan pemberitahuan
  • lihat tugas terbuka
  • memberikan tugas kepada seseorang
  • menjelaskan tugas saat ini

Dari daftar fungsi ini Anda dapat melihat saya sedang berbicara tentang alur kerja yang berpusat pada manusia. Singkatnya: Mesin alur kerja yang berpusat pada manusia menjawab pertanyaan: Siapa yang bertanggung jawab atas tugas dan siapa yang perlu diberi tahu selanjutnya? Dan ini adalah pertanyaan tipikal dalam kebutuhan bisnis.

> Library / framework apa yang Anda gunakan?

5 tahun yang lalu kami mulai menerapkan ulang mesin Imixs-Workflow yang berfokus pada BPMN 2.0 . BPMN adalah standar umum untuk pemodelan proses. Dan hal yang mengejutkan bagi saya adalah kami tiba-tiba dapat menggambarkan proses bisnis yang sangat kompleks yang dapat divisualisasikan dan dijalankan. Saya merekomendasikan semua orang untuk menggunakan BPMN untuk memodelkan proses bisnis.

> Kapan sistem State Machine / Task Management yang lebih sederhana cukup?

Mesin status sederhana sudah cukup jika Anda hanya ingin melacak status objek bisnis. Ini adalah kasus ketika Anda mulai memperkenalkan atribut 'status' ke dalam model objek Anda. Tetapi jika Anda membutuhkan proses bisnis dengan tanggung jawab, logging dan kontrol aliran, maka mesin negara tidak lagi memadai.

> Bonus: Bagaimana / Anda membuat perbedaan antara Manajemen Tugas dan Mesin Alur Kerja?

Ini adalah titik di mana banyak mesin alur kerja yang disebutkan di sini berbeda. Untuk alur kerja yang berpusat pada manusia, Anda biasanya memerlukan manajemen tugas untuk mendistribusikan tugas antara aktor manusia. Untuk otomatisasi proses, poin ini tidak terlalu relevan. Sudah cukup jika mesin melakukan tugas tertentu. Manajemen tugas dan mesin alur kerja tidak dapat dibandingkan karena manajemen tugas selalu merupakan fungsi mesin alur kerja.

Muntah
sumber
1

Saya menggunakan mesin alur kerja saya sendiri untuk mendukung pemrosesan dokumen secara bertahap - membuat katalog, mengirim untuk pemrosesan gambar (kami bekerja dengan redaksi sw), jika perlu mengirim ke validasi, kemudian melepaskan dan akhirnya mengirim kembali ke klien. Dalam kasus kami, kami memiliki banyak sekali dokumen untuk diproses sehingga terkadang kami perlu menjalankan setiap layanan secara terpisah untuk mengontrol pengiriman dan penggunaan sumber daya. Sederhana dalam konsep tetapi diperlukan kinerja tinggi dan pemrosesan terdistribusi, dan kami tidak dapat menemukan produk dari rak yang sesuai dengan tagihan kami.

Otávio Décio
sumber
1

Saya memiliki pengalaman menggunakan Activiti mesin BPMN 2.0 untuk menangani proses transfer data berkinerja tinggi dan throughput tinggi dalam infrastruktur node jaringan. Tugas dasarnya adalah untuk memungkinkan konfigurasi dan pemantauan proses transfer tersebut dan mengontrol setiap node jaringan (mis. Meminta node1 untuk mengirim file data ke node2 melalui lapisan transport tertentu).

Mungkin ada ribuan proses yang berjalan pada satu waktu dan secara keseluruhan ada puluhan atau ratusan ribu proses per hari.

Ada banyak definisi proses yang berbeda tetapi tidak selalu diperlukan bahwa operator sistem dapat membuat alur kerja kustom. Jadi kasus penggunaan utama untuk mesin BPM itu sendiri harus kuat, dapat diskalakan dan memungkinkan pemantauan setiap aliran proses.

Pada akhirnya itu pada dasarnya bekerja tetapi apa yang kami pelajari dari proyek itu adalah bahwa platform BPMN, atau lebih tepatnya mesin Activiti secara khusus, bukanlah taruhan terbaik untuk sistem throughput tinggi seperti itu.

Tantangan utama adalah prioritas pelaksanaan tugas, penguncian DB, percobaan ulang eksekusi untuk beberapa nama yang berkaitan dengan BPM itu sendiri. Jadi kami harus mengembangkan penanganan khusus ini, misalnya:

  • Menangani percobaan ulang di BPM untuk kasus-kasus ketika sebuah node tidak memiliki pekerja gratis untuk tugas yang diberikan, atau ketika node tidak berjalan sama sekali.
  • Eksekusi tugas transfer paralel dalam satu proses dan sinkronisasi hasil (berhasil / gagal).

Saya tidak tahu apakah mesin BPMN lain akan lebih cocok untuk skenario seperti itu karena BPMN sebagian besar ditujukan untuk tugas bisnis yang berjalan lama yang melibatkan interaksi pengguna di mana kinerja mungkin bukan masalah yang sama seperti dalam kasus kami.

Adam Hošek
sumber