O la matou kamupani e faʻapitoa i le atinaʻeina o fofo faʻapitoa a le ERP-vasega, o le leona o loʻo nofoia e faiga faʻapisinisi ma se aofaʻiga tele o pisinisi faʻatatau ma faʻasalalauga pepa a la EDMS. O fa'aliliuga o lo'o i ai nei oa matou oloa e fa'avae i luga o tekinolosi JavaEE, ae o lo'o matou fa'ata'ita'i malosi fo'i i microservices. O se tasi o itu sili ona fa'afitauli o ia fofo o le tu'ufa'atasia lea o subsystems 'ese'ese o lo'o i totonu o pitonu'u lata ane. O faʻafitauli tuʻufaʻatasia e masani lava ona tatou maua ai le tiga tele, e tusa lava po o le a le fausaga o sitaili, tekinolosi faʻapipiʻi ma faʻavae tatou te faʻaogaina, ae talu ai nei na i ai le alualu i luma i le foia o ia faʻafitauli.
I le tusiga ou te aumaia i lou mafaufau, o le a ou talanoa e uiga i le poto masani ma suʻesuʻega fausaga o loʻo i ai i le NPO "Krista" i le nofoaga atofaina. O le a tatou vaʻavaʻai foʻi i se faʻataʻitaʻiga o se fofo faigofie i se faʻafitauli tuʻufaʻatasia mai le manatu o se tagata faʻapipiʻi talosaga ma saili mea o loʻo natia i tua o lenei faigofie.
Fa'ailoga
O faʻataʻitaʻiga faʻataʻitaʻiga ma faʻamatalaga faʻapitoa o loʻo faʻamatalaina i totonu o le tusiga o loʻo tuʻuina mai e aʻu e faʻavae i luga o le poto masani a le tagata lava ia i le tulaga o galuega faʻapitoa. O nei fofo e le fai mai e lautele ma atonu e le sili ona lelei i lalo o isi tulaga o le faʻaaogaina.
O le a le mea e fai i ai le BPM?
Ina ia taliina lenei fesili, e tatau ona tatou suʻesuʻe loloto teisi i faʻamatalaga patino o faʻafitauli faʻaaogaina oa tatou fofo. O le vaega autu o le pisinisi faʻatatau i la tatou faiga masani fefaʻatauaʻiga o loʻo tuʻuina atu faʻamatalaga i totonu o faʻamaumauga e ala i fesoʻotaʻiga faʻaoga, tusi lesona ma faʻamaonia otometi o lenei faʻamaumauga, faʻatinoina e ala i nisi o galuega, lolomiina i se isi faiga / faʻamaumauga faʻamaumauga / faʻamaumauga, fatuina lipoti . O le mea lea, o le galuega autu a le faiga mo tagata faʻatau o le faʻaogaina o latou faiga pisinisi i totonu.
Mo le faʻafaigofie, matou te faʻaogaina le faaupuga "pepa" i fesoʻotaʻiga e pei o se faʻamatalaga o se seti o faʻamaumauga tuʻufaʻatasia e se ki masani e mafai ai ona "sootai" se faʻasologa o galuega.
Ae fa'afefea le manatu fa'atasi? A uma mea uma, o le tuʻufaʻatasiga galuega e faʻatupuina e le fausaga o le faiga, lea e "tipi" i ni vaega E LEʻI i luga o le talosaga a le tagata faʻatau, ae i lalo o le faatosinaga a mea eseese:
i lalo o le tulafono a Conway;
o se taunuuga o le toe faʻaaogaina o subsystems na fausia muamua mo isi oloa;
i le faitalia a le tufuga, e fa'atatau i mana'oga e le fa'atinoina.
O loʻo i ai se faʻaosoosoga tele e vavae ese le faʻaogaina o manatu mai le pisinisi pisinisi o le galuega autu, ina ia aua neʻi faʻaleagaina le faʻaogaina o pisinisi faʻatasi ai ma mea faʻapipiʻi tuʻufaʻatasia ma faʻamalolo ai le tagata faʻapipiʻi talosaga mai le manaʻoga e suʻesuʻe i faʻamatalaga patino o le fausaga fausaga o le faiga. O lenei faiga e iai le tele o mea lelei, ae o le faʻataʻitaʻiga e faʻaalia ai lona le aoga:
foia faʻafitauli tuʻufaʻatasia e masani lava ona toe foʻi i tua i filifiliga sili ona faigofie i le tulaga o fesoʻotaʻiga fesoʻotaʻiga ona o le faʻatapulaʻaina o vaega faʻalauteleina i le faʻatinoga o le galuega autu (o le le lelei o le tuʻufaʻatasiga faʻatasi o loʻo talanoaina i lalo);
tu'ufa'atasiga tu'ufa'atasiga o lo'o a'afia pea i manatu autu pisinisi pe a mana'omia ni fa'amatalaga mai se isi faiga fa'avae;
e le amana'ia e le tagata fa'apipi'i talosaga le tu'ufa'atasiga ma e faigofie ona motusia e ala i le suia o le galuega;
o le faiga e le toe avea ma se tasi atoa mai le manatu o le tagata e faaaogāina, "suiga" i le va o subsystems e avea ma iloa, ma le toe faia o tagata faaaoga e aliali mai, amataina le fesiitaiga o faamatalaga mai le tasi subsystem i le isi.
O le isi auala o le mafaufau lea i fegalegaleaiga tuʻufaʻatasia o se vaega taua o le manatu autu pisinisi ma le faʻaogaina o galuega. Ina ia taofia le fa'atupuina o tusi pasi mai le si'itia, o le fa'atupuina o feso'ota'iga tu'ufa'atasiga fou e tatau ona faigofie ma leai se taumafaiga, ma sina avanoa e filifili ai se fofo. E sili atu le faigata ona fai nai lo le mea e foliga mai: o le meafaigaluega e tatau ona lava le malosi e tuʻuina atu ai i le tagata faʻaoga le manaʻomia o filifiliga eseese mo lona faʻaaogaina, e aunoa ma le faʻatagaina o ia e "fanaina o ia i le vae." E tele fesili e tatau ona taliina e se inisinia i le tulaga o galuega tuʻufaʻatasia, ae e le tatau ona mafaufau i ai se tagata faʻapipiʻi talosaga i ana galuega i aso taʻitasi: tuaoi o fefaʻatauaiga, tutusa, atomicity, saogalemu, scaling, uta ma le tufatufaina o punaoa, taʻavale, faʻatautaia, tufatufaina ma fesuia'i tulaga, ma isi. E tatau ona ofoina atu i le au atina'e talosaga ni fa'ata'ita'iga faigofie o fofo lea ua natia ai tali i ia fesili uma. O nei faʻataʻitaʻiga e tatau ona matua saogalemu: suiga faʻapisinisi e masani ona suia, lea e faʻateleina ai le lamatiaga o le faʻaalia o mea sese, o le tau o mea sese e tatau ona tumau i se tulaga maualalo.
Ae o le a le mea e fai i ai le BPM? E tele avanoa mo le fa'atinoina o galuega...
O le mea moni, o le isi faʻatinoga o faiga faʻapisinisi e sili ona lauiloa i a tatou fofo - e ala i le faʻamatalaga faʻamatalaga o se faʻataʻitaʻiga suiga o le setete ma le fesoʻotaʻiga o tagata faʻatautaia ma faʻamatalaga pisinisi mo suiga. I lenei tulaga, o le setete e fuafuaina le tulaga o loʻo i ai nei o le "pepa" i le pisinisi pisinisi o se uiga o le "pepa" lava ia.
O le mea lea e foliga mai o le faagasologa i le amataga o se poloketi
O le taʻutaʻua o lenei faʻatinoga e mafua ona o le faigofie ma le saoasaoa o le fatuina o faiga pisinisi laina. Peita'i, a'o fa'aauau pea ona lavelave faiga fa'akomepiuta, o le vaega otometi o le fa'agasologa o pisinisi e fa'atupula'ia ma fa'alavelave. O loʻo manaʻomia le faʻaleagaina, toe faʻaaogaina o vaega o faʻagasologa, faʻapea foʻi ma faʻagasologa faʻasolosolo ina ia faʻatinoina lala taʻitasi i le tutusa. I lalo o ia tulaga, o le meafaigaluega e le faigofie, ma o le faʻasologa o suiga o le setete e leiloa ana faʻamatalaga faʻamatalaga (o fegalegaleaiga faʻatasi e le o atagia i le ata).
E fa'apea le fa'agasologa o le fa'agasologa pe a mae'a le tele o fa'amatalaga o mana'oga fa'amalamalamaga.
O le auala e alu ese ai mai lenei tulaga o le tuufaatasia o le afi jBPM i nisi o oloa e sili ona lavelave faiga pisinisi. I se taimi puʻupuʻu, o lenei fofo na i ai se manuia: na mafai ai ona faʻatinoina faiga faʻalavelave faʻapisinisi aʻo tausia se faʻamatalaga talafeagai ma talafeagai i le faʻamatalaga BPMN2.
O se vaega itiiti o se faiga pisinisi lavelave
I se taimi umi, o le fofo e leʻi ola e tusa ai ma faʻamoemoega: o le maualuga o le galue malosi o le fatuina o pisinisi faʻagasologa e ala i meafaigaluega vaʻaia e leʻi faʻatagaina ai le ausiaina o faʻamaoniga o le gaosiga o oloa, ma o le meafaigaluega lava ia na avea ma se tasi o mea e sili ona le fiafia i ai le au atinaʻe. Sa i ai foi faitioga e uiga i le fausaga o totonu o le afi, lea na mafua ai ona foliga mai o le tele o "patches" ma "tootoo".
O le itu lelei autu o le faʻaaogaina o le jBPM o le faʻalauiloaina lea o faʻamanuiaga ma faʻaleagaina o le i ai o se faiga pisinisi faʻataʻitaʻiga o lona lava tulaga tumau. Na matou vaʻaia foʻi le avanoa e faʻaogaina ai se faiga faʻagasologa e faʻatino ai faʻasalalauga tuʻufaʻatasia lavelave i le va o talosaga eseese e faʻaaoga ai fegalegaleaiga asynchronous e ala i faʻailoga ma feʻau. O le iai o se tulaga tumau e iai sona sao taua i lenei mea.
Faʻavae i luga, e mafai ona tatou faʻauʻuina: O le faʻagasologa o le faiga o le BPM e mafai ai ona tatou foia le tele o galuega e faʻaaogaina ai le faʻatupulaia o pisinisi faʻalavelave, faʻafetaui lelei gaioiga tuʻufaʻatasia i nei faiga ma faʻatumauina le mafai ona faʻaalia le faʻatinoina o le faagasologa i se faʻamatalaga talafeagai.
Le lelei o telefoni faʻatasi e avea o se mamanu tuʻufaʻatasia
Fa'atasi fa'atasi e fa'atatau i le vala'au poloka sili ona faigofie. E tasi le subsystem e galue o le itu o le server ma faʻaalia le API i le auala manaʻomia. O le isi subsystem e galue o le itu o le kalani ma i le taimi sa'o e fai ai se telefoni ma fa'atali mo le i'uga. Fa'alagolago i le fa'atulagaina o faiga, o le kalani ma le 'au'aunaga e mafai ona maua i totonu o le fa'aoga tutusa ma le fa'agasologa, po'o le eseese. I le tulaga lona lua, e tatau ona e faʻaaogaina nisi o faʻatinoga RPC ma tuʻuina atu le faʻavasegaina o tapulaʻa ma le iʻuga o le valaau.
O lenei faʻataʻitaʻiga tuʻufaʻatasia o loʻo i ai se seti tele o mea le lelei, ae o loʻo faʻaaogaina lautele i le faʻatinoga ona o lona faigofie. O le saoasaoa o le faʻatinoga e faʻafeiloaʻi ma faʻamalosia oe e faʻaaogaina pea lava pea i le feagai ai ma taimi faigata, faʻamaumau le fofo e pei o aitalafu faʻapitoa. Ae e tupu foʻi e faʻaaogaina e le au atinaʻe e leai se poto masani, naʻo le le iloa o aʻafiaga leaga.
I le faʻaopoopoga i le faʻateleina o le faʻateleina o fesoʻotaʻiga i lalo o le system, o loʻo i ai foi faʻafitauli faʻapitoa i le "tuputupu" ma le "faʻalauteleina" fefaʻatauaiga. O le mea moni, afai e faia e le pisinisi pisinisi ni suiga, ona le mafai lea ona aloese mai fefaʻatauaiga, ma o fefaʻatauaiga, i le isi itu, poloka nisi punaoa talosaga e aʻafia i nei suiga. O lona uiga, se'ia o'o ina fa'atali le isi subsystem mo se tali mai le isi, o le a le mafai ona fa'amae'aina le fefa'atauaiga ma aveese loka. O lenei mea e matua faʻateleina ai le lamatiaga o aʻafiaga eseese:
Ua leiloa le tali atu o le faiga, o tagata e faʻatali mo se taimi umi mo tali i fesili;
e masani lava ona taofia e le server le tali atu i talosaga a tagata ona o le tumu o filo filo: o le tele o filo o loʻo lokaina i luga o se punaoa o loʻo nofoia e se fefaʻatauaiga;
Ua amata ona aliali mai faʻalavelave faʻafuaseʻi: o le ono tupu mai e faʻalagolago lava i le umi o fefaʻatauaiga, le aofaʻi o pisinisi faʻatau ma loka o loʻo aʻafia i le fefaʻatauaiga;
e aliali mai ni mea sese i le taimi o fefa'atauaiga;
le 'auʻaunaga "faʻaletonu" ma OutOfMemory pe afai e manaʻomia e le galuega le faʻaogaina ma le suia o le tele o faʻamaumauga, ma o le i ai o faʻatasi faʻatasi e faigata tele ona vaeluaina le gaioiga i fefaʻatauaiga "mama".
Mai se vaaiga faufale, o le faʻaogaina o le polokaina o telefoni i le taimi o le tuʻufaʻatasia e oʻo atu ai i le leiloa o le puleaina o le lelei o subsystems taʻitasi: e le mafai ona faʻamautinoa le faʻamoemoeina o le lelei o le tasi subsystem i le vavae ese mai faʻailoga lelei o le isi subsystem. Afai o subsystems e atiaʻe e 'au eseese, o se faʻafitauli tele lea.
E sili atu le manaia o mea pe a fai o loʻo tuʻufaʻatasia vaega laiti o loʻo i totonu o talosaga eseese ma e manaʻomia le faia o suiga faʻatasi i itu uma e lua. E faʻapefea ona faʻamautinoa le faʻatauga o nei suiga?
Afai e faia suiga i fefaʻatauaʻiga eseese, ona e manaʻomia lea e tuʻuina atu faʻamaonia tuusaunoaga taulimaina ma taui, ma o lenei mea e faʻaumatia atoa ai le aoga autu o tuʻufaʻatasiga faʻatasi - faigofie.
O fefaʻatauaiga faʻasalalau e oʻo mai foi i le mafaufau, ae matou te le faʻaaogaina ia matou fofo: e faigata ona faʻamautinoa le faʻamaoni.
"Saga" o se fofo i le faʻafitauli tau fefaʻatauaiga
Faatasi ai ma le faatupulaia o le lauiloa o microservices, o le manaoga mo Mamanu Saga.
O lenei mamanu e foia atoatoa ai faafitauli o loʻo taʻua i luga o fefaʻatauaiga umi, ma faʻalauteleina ai le gafatia o le puleaina o le tulaga o le faiga mai le itu o le pisinisi faʻatauvaʻa: taui pe a maeʻa se fefaʻatauaiga ua le mafai ona toe faʻafoʻi le faiga i lona tulaga muamua, ae tuʻuina atu. se isi auala e fa'agasolo ai fa'amaumauga. Ole mea lea e mafai ai ona e aloese mai le toe faia ma le manuia faʻamaeʻaina faʻasologa o faʻamaumauga pe a taumafai e aumai le faagasologa i se faʻaiʻuga "lelei".
O le mea e malie ai, i faiga monolithic e talafeagai foi lenei mamanu pe a oʻo mai i le tuʻufaʻatasia o vaega laiti faʻatasi ma aʻafiaga leaga e mafua mai i fefaʻatauaiga umi ma loka punaoa talafeagai e matauina.
E tusa ai ma a tatou faiga pisinisi i le BPM style, e foliga mai e matua faigofie lava le faʻatinoina o le "Sagas": o laasaga taʻitasi o le "Saga" e mafai ona faʻamaonia o ni gaioiga i totonu o le pisinisi, ma le tulaga faifaipea o le pisinisi pisinisi foi. fuafua le tulaga totonu o le "Saga". O lona uiga, matou te le mana'omia so'o se faiga fa'aopoopo fa'aopoopo. Pau lava le mea e te manaʻomia o se fefaʻatauaʻiga feʻau e lagolagoina "ia le itiiti ifo ma le tasi" faʻamaoniga o se felauaiga.
Ae o lenei fofo e iai foi lona lava "tau":
ua sili atu ona lavelave le manatu faapisinisi: e manaʻomia ona fai se taui;
e tatau ona lafoaʻia le faʻamaoni atoatoa, lea e mafai ona sili ona maaleale mo faiga monolithic;
Ua fai si lavelave teisi le fausaga, ma ua aliali mai ai se mana'oga faaopoopo mo se faife'au fe'au;
o le a manaʻomia ni mea faigaluega faʻapitoa e mataʻituina ma pulega (e ui o le tulaga lautele e lelei lenei: o le a faʻateleina le lelei o le auaunaga faʻapitoa).
Mo faiga monolithic, o le faʻamaoniga mo le faʻaaogaina o le "Sag" e le o manino. Mo microservices ma isi SOA, lea e foliga mai o loʻo i ai se tagata faʻatau oloa, ma o loʻo tuʻufaʻatasia atoatoa i le amataga o le poloketi, o faʻamanuiaga o le faʻaaogaina o lenei mamanu e mafai ona sili atu nai lo le le lelei, aemaise lava pe afai o loʻo i ai se API talafeagai i le pisinisi pisinisi. tulaga.
Encapsulating manatu pisinisi i microservices
Ina ua amata ona matou faʻataʻitaʻiina i microservices, na tulaʻi mai se fesili talafeagai: o fea e tuʻu ai le faʻaogaina o pisinisi pisinisi e fesoʻotaʻi ma le auaunaga e faʻamautinoa ai le faʻaauau pea o faʻamaumauga a le domain?
Pe a vaʻavaʻai i le fausaga o BPMS eseese, atonu e foliga mai e talafeagai le tuʻufaʻatasia o pisinisi faʻatauvaʻa mai le faʻaauau: fatuina se faʻavae o faʻavae ma vaega-tutoʻatasi microservices e fausia ai se siosiomaga ma pusa mo le faʻatinoina o faʻamatalaga pisinisi, ma mamanuina le faʻaauauina o faʻamatalaga faʻamaumauga e pei o. se isi vaega o auaunaga laiti faigofie ma mama. Fa'agasologa o pisinisi i lenei tulaga e fa'atino ai le fa'atulagaina o au'aunaga o le fa'aputuga tumau.
O lenei faiga e i ai se aoga tele: e mafai ona e faʻateleina le faʻatinoga o le faʻavae i le tele e te manaʻo ai, ma naʻo le vaega tutusa o microservices platform o le a avea ma "gaʻo" mai lenei mea. O faiga fa'apisinisi mai so'o se vaega e vave ona mafai ona fa'aogaina le galuega fou o le fa'avae i le taimi lava e fa'afou ai.
O se suʻesuʻega faʻapitoa na faʻaalia ai le le lelei tele o lenei auala:
o se auaunaga fa'avae e fa'atino ai le fa'atatauga fa'apisinisi o le tele o fa'alapotopotoga i le taimi e tasi o lo'o i ai ni fa'alavelave tetele e pei o se tasi o le fa'aletonu. O suiga faifaipea i mafaufauga faapisinisi e faateleina ai le tulaga lamatia o mea sese e mafua ai le faaletonu o le polokalama;
fa'afitauli fa'atinoga: fa'atatau pisinisi e galue ma ana fa'amaumauga e ala i se va'aiga vaapiapi ma fa'agesegese:
o faʻamatalaga o le a toe faʻapipiʻiina ma pamu i totonu o le upega o fesoʻotaʻiga;
o le a masani ona tu'uina atu e se 'au'aunaga fa'apitoa le tele o fa'amatalaga nai lo le mea e mana'omia mo le fa'aogaina o pisinisi ona o le le lava o le gafatia mo le fa'avasegaina o talosaga ile tulaga ole API i fafo ole auaunaga;
le tele o vaega tuto'atasi o pisinisi fa'atatau e mafai ona toe talosagaina fa'amatalaga tutusa mo le fa'agaioiga (o lenei fa'afitauli e mafai ona fa'aitiitia e ala i le fa'aopoopoina o vaega o le sauniga e fa'apipi'i ai fa'amaumauga, ae o lenei mea e atili fa'alavelaveina ai le fausaga ma fa'atupuina ai fa'afitauli o fa'amatalaga talafeagai ma le fa'aleaogaina o le cache);
fa'afitauli tau fefa'atauaiga:
faiga pisinisi ma tulaga faifai pea, lea e teuina e se auaunaga tulaga, e le ogatasi ma faʻamaumauga faʻamaumauga, ma e leai ni auala faigofie e foia ai lenei faʻafitauli;
tu'uina le poloka o fa'amaumauga i fafo atu o le fefa'ataua'iga: afai e mana'omia e le pisinisi fa'atauva'a ona faia ni suiga pe a uma ona siaki muamua le sa'o o fa'amaumauga o lo'o i ai nei, e tatau ona fa'ate'aina le avanoa o se suiga fa'atauva i fa'amaumauga fa'agasolo. O le polokaina o faʻamatalaga mai fafo e mafai ona fesoasoani e foia le faʻafitauli, ae o sea fofo e maua ai faʻalavelave faʻaopoopo ma faʻaitiitia ai le faʻalagolago atoa o le faiga;
faʻafitauli faʻaopoopo pe a faʻafouina: i nisi tulaga, o le auaunaga faʻaauau ma le faʻatatau pisinisi e manaʻomia ona faʻafouina faʻatasi poʻo se faʻasologa saʻo.
Mulimuli ane, e tatau ona matou toe foʻi i faʻavae: faʻapipiʻi faʻamaumauga faʻamaumauga ma faʻamatalaga pisinisi pisinisi i totonu o le tasi microservice. O lenei faiga e faʻafaigofie ai le manatu o se microservice o se vaega taua o le faiga ma e le faʻaalia ai faʻafitauli o loʻo i luga. E le maua fua foi lenei mea:
E mana'omia le fa'avasegaina o le API mo le fegalegaleai ma manatu fa'apisinisi (aemaise lava, e tu'uina atu ai galuega fa'aoga o se vaega o faiga fa'apisinisi) ma auaunaga fa'avae API; e manaʻomia le faʻaeteete atili i suiga API, fesoʻotaʻiga i luma ma tua;
e mana'omia le fa'aopoopoina o faletusi ta'avale fa'aopoopo e fa'amautinoa ai le fa'agaioiina o pisinisi fa'atatau o se vaega o ia auaunaga laiti ta'itasi, ma o lea e tula'i mai ai mana'oga fou mo ia faletusi: mama ma le la'ititi o fa'alagolagoga fa'asolo;
e mana'omia e le au atina'e fa'atauva'a pisinisi ona mata'ituina fa'aliliuga a le faletusi: afai e le'i fa'amae'aina se microservice mo se taimi umi, e foliga mai o le a iai se fa'amatalaga tuai o faletusi. E mafai ona avea lenei mea ma fa'alavelave fa'afuase'i i le fa'aopoopoina o se vaega fou ma e ono mana'omia ai le si'itia o le manatu fa'apisinisi tuai o lea auaunaga i fa'aliliuga fou o faletusi pe a iai ni suiga le fetaui i le va o fa'aliliuga.
O loʻo iai foʻi se vaega o auaunaga faʻavae i totonu o sea fausaga, ae o lenei laulau e le o toe fausia ai se atigipusa mo le faʻatinoina o pisinisi pisinisi, ae naʻo lona siosiomaga, e tuʻuina atu ai galuega fesoasoani "platform". E mana'omia se fa'apena e le gata ina ia fa'atumauina ai le mama mama ole vaega ole microservices, ae fa'apea fo'i ile fa'atotonugalemu o le pulega.
Mo se faʻataʻitaʻiga, o gaioiga a tagata faʻaoga i faiga faʻapisinisi e maua ai galuega. Ae peitaʻi, pe a galue i galuega, e tatau i le tagata faʻaoga ona vaʻai i galuega mai vaega uma i le lisi lautele, o lona uiga e tatau ona i ai se auaunaga faʻamautu galuega faʻatulagaina, faʻamalo mai le faʻaogaina o pisinisi pisinisi. O le fa'atumauina o le fa'avasegaina o manatu fa'apisinisi i se tulaga fa'apea e fai si fa'afitauli, ma o le isi lea fetuutuuna'iga o lenei fausaga.
Tu'ufa'atasiga o faiga fa'apisinisi e ala i mata o se tagata fa'apipi'i talosaga
E pei ona taʻua i luga, e tatau ona aveese le tagata e faia talosaga mai le tulaga faʻainisinia ma faʻainisinia o le faʻatinoina o fegalegaleaiga o le tele o talosaga ina ia mafai ai e se tasi ona faʻamoemoe i le gaosiga lelei o atinaʻe.
Sei o tatou taumafai e foia se faʻafitauli faigata tuʻufaʻatasia, faʻapitoa faʻapitoa mo le tusiga. Ole a avea lea ma se "taaloga" galuega e aofia ai ni talosaga se tolu, lea e faʻamatalaina ai e latou taʻitasi se igoa faʻapitoa: "app1", "app2", "app3".
I totonu o talosaga taʻitasi, o loʻo faʻalauiloaina pisinisi e amata ona "taʻalo polo" e ala i le pasi tuʻufaʻatasia. O fe'au e iai le igoa "Polo" o le a avea ma polo.
Tulafono o le taaloga:
o le tagata taalo muamua o le amataga. Na te valaaulia isi tagata taaalo i le taaloga, amata le taaloga ma mafai ona faamutaina i soo se taimi;
o isi tagata taaalo latou te tautino atu lo latou auai i le taaloga, "ia iloa" e le tasi le isi ma le tagata taalo muamua;
a uma ona maua le polo, ona filifili lea e le tagata taalo se isi tagata taalo e auai ma pasi atu le polo ia te ia. Le aofa'i o fa'asalalauga e faitaulia;
E tofu tagata ta'alo ma "malosi" e fa'aitiitia i pasi ta'itasi o le polo a le tagata ta'alo. A uma le malosi, ona alu ese lea o le tagata taalo mai le taaloga, ma faailoa atu lona faamavae;
afai e tuua na o le tagata taalo, e vave lava ona ia faailoa atu lona alu ese;
A fa'ate'a uma ta'aalo, e ta'u atu e le tagata ta'amua ua uma le ta'aloga. Afai na te tuua vave le taaloga, e tumau pea o ia e mulimuli i le taaloga e faauma ai.
Ina ia foia lenei faʻafitauli, o le a ou faʻaogaina la matou DSL mo pisinisi faʻagasologa, lea e mafai ai ona matou faʻamatalaina le faʻaogaina i Kotlin faʻatasi, faʻatasi ai ma le laʻititi o le boilerplate.
O le pisinisi pisinisi a le tagata taalo muamua (aka le amataga o le taaloga) o le a galue i le app1 talosaga:
vasega InitialPlayer
import ru.krista.bpm.ProcessInstance
import ru.krista.bpm.runtime.ProcessImpl
import ru.krista.bpm.runtime.constraint.UniqueConstraints
import ru.krista.bpm.runtime.dsl.processModel
import ru.krista.bpm.runtime.dsl.taskOperation
import ru.krista.bpm.runtime.instance.MessageSendInstance
data class PlayerInfo(val name: String, val domain: String, val id: String)
class PlayersList : ArrayList<PlayerInfo>()
// Это класс экземпляра процесса: инкапсулирует его внутреннее состояние
class InitialPlayer : ProcessImpl<InitialPlayer>(initialPlayerModel) {
var playerName: String by persistent("Player1")
var energy: Int by persistent(30)
var players: PlayersList by persistent(PlayersList())
var shotCounter: Int = 0
}
// Это декларация модели процесса: создается один раз, используется всеми
// экземплярами процесса соответствующего класса
val initialPlayerModel = processModel<InitialPlayer>(name = "InitialPlayer",
version = 1) {
// По правилам, первый игрок является инициатором игры и должен быть единственным
uniqueConstraint = UniqueConstraints.singleton
// Объявляем активности, из которых состоит бизнес-процесс
val sendNewGameSignal = signal<String>("NewGame")
val sendStopGameSignal = signal<String>("StopGame")
val startTask = humanTask("Start") {
taskOperation {
processCondition { players.size > 0 }
confirmation { "Подключилось ${players.size} игроков. Начинаем?" }
}
}
val stopTask = humanTask("Stop") {
taskOperation {}
}
val waitPlayerJoin = signalWait<String>("PlayerJoin") { signal ->
players.add(PlayerInfo(
signal.data!!,
signal.sender.domain,
signal.sender.processInstanceId))
println("... join player ${signal.data} ...")
}
val waitPlayerOut = signalWait<String>("PlayerOut") { signal ->
players.remove(PlayerInfo(
signal.data!!,
signal.sender.domain,
signal.sender.processInstanceId))
println("... player ${signal.data} is out ...")
}
val sendPlayerOut = signal<String>("PlayerOut") {
signalData = { playerName }
}
val sendHandshake = messageSend<String>("Handshake") {
messageData = { playerName }
activation = {
receiverDomain = process.players.last().domain
receiverProcessInstanceId = process.players.last().id
}
}
val throwStartBall = messageSend<Int>("Ball") {
messageData = { 1 }
activation = { selectNextPlayer() }
}
val throwBall = messageSend<Int>("Ball") {
messageData = { shotCounter + 1 }
activation = { selectNextPlayer() }
onEntry { energy -= 1 }
}
val waitBall = messageWaitData<Int>("Ball") {
shotCounter = it
}
// Теперь конструируем граф процесса из объявленных активностей
startFrom(sendNewGameSignal)
.fork("mainFork") {
next(startTask)
next(waitPlayerJoin).next(sendHandshake).next(waitPlayerJoin)
next(waitPlayerOut)
.branch("checkPlayers") {
ifTrue { players.isEmpty() }
.next(sendStopGameSignal)
.terminate()
ifElse().next(waitPlayerOut)
}
}
startTask.fork("afterStart") {
next(throwStartBall)
.branch("mainLoop") {
ifTrue { energy < 5 }.next(sendPlayerOut).next(waitBall)
ifElse().next(waitBall).next(throwBall).loop()
}
next(stopTask).next(sendStopGameSignal)
}
// Навешаем на активности дополнительные обработчики для логирования
sendNewGameSignal.onExit { println("Let's play!") }
sendStopGameSignal.onExit { println("Stop!") }
sendPlayerOut.onExit { println("$playerName: I'm out!") }
}
private fun MessageSendInstance<InitialPlayer, Int>.selectNextPlayer() {
val player = process.players.random()
receiverDomain = player.domain
receiverProcessInstanceId = player.id
println("Step ${process.shotCounter + 1}: " +
"${process.playerName} >>> ${player.name}")
}
I le faʻaopoopoga i le faʻatinoina o pisinisi, o le tulafono o loʻo i luga e mafai ona maua ai se faʻataʻitaʻiga faʻataʻitaʻiga o se pisinisi pisinisi, lea e mafai ona faʻaalia i foliga o se ata. Matou te leʻi faʻatinoina le vaʻaia, o lea e tatau ai ona matou faʻaalu sina taimi e tusi ai (iinei na ou faʻafaigofieina le faʻamatalaga BPMN e uiga i le faʻaogaina o faitotoʻa e faʻaleleia atili ai le tutusa o le ata ma le tulafono ua tuʻuina atu):
app2 o le a aofia ai le pisinisi pisinisi a le isi tagata taalo:
vasega RandomPlayer
import ru.krista.bpm.ProcessInstance
import ru.krista.bpm.runtime.ProcessImpl
import ru.krista.bpm.runtime.dsl.processModel
import ru.krista.bpm.runtime.instance.MessageSendInstance
data class PlayerInfo(val name: String, val domain: String, val id: String)
class PlayersList: ArrayList<PlayerInfo>()
class RandomPlayer : ProcessImpl<RandomPlayer>(randomPlayerModel) {
var playerName: String by input(persistent = true,
defaultValue = "RandomPlayer")
var energy: Int by input(persistent = true, defaultValue = 30)
var players: PlayersList by persistent(PlayersList())
var allPlayersOut: Boolean by persistent(false)
var shotCounter: Int = 0
val selfPlayer: PlayerInfo
get() = PlayerInfo(playerName, env.eventDispatcher.domainName, id)
}
val randomPlayerModel = processModel<RandomPlayer>(name = "RandomPlayer",
version = 1) {
val waitNewGameSignal = signalWait<String>("NewGame")
val waitStopGameSignal = signalWait<String>("StopGame")
val sendPlayerJoin = signal<String>("PlayerJoin") {
signalData = { playerName }
}
val sendPlayerOut = signal<String>("PlayerOut") {
signalData = { playerName }
}
val waitPlayerJoin = signalWaitCustom<String>("PlayerJoin") {
eventCondition = { signal ->
signal.sender.processInstanceId != process.id
&& !process.players.any { signal.sender.processInstanceId == it.id}
}
handler = { signal ->
players.add(PlayerInfo(
signal.data!!,
signal.sender.domain,
signal.sender.processInstanceId))
}
}
val waitPlayerOut = signalWait<String>("PlayerOut") { signal ->
players.remove(PlayerInfo(
signal.data!!,
signal.sender.domain,
signal.sender.processInstanceId))
allPlayersOut = players.isEmpty()
}
val sendHandshake = messageSend<String>("Handshake") {
messageData = { playerName }
activation = {
receiverDomain = process.players.last().domain
receiverProcessInstanceId = process.players.last().id
}
}
val receiveHandshake = messageWait<String>("Handshake") { message ->
if (!players.any { message.sender.processInstanceId == it.id}) {
players.add(PlayerInfo(
message.data!!,
message.sender.domain,
message.sender.processInstanceId))
}
}
val throwBall = messageSend<Int>("Ball") {
messageData = { shotCounter + 1 }
activation = { selectNextPlayer() }
onEntry { energy -= 1 }
}
val waitBall = messageWaitData<Int>("Ball") {
shotCounter = it
}
startFrom(waitNewGameSignal)
.fork("mainFork") {
next(sendPlayerJoin)
.branch("mainLoop") {
ifTrue { energy < 5 || allPlayersOut }
.next(sendPlayerOut)
.next(waitBall)
ifElse()
.next(waitBall)
.next(throwBall)
.loop()
}
next(waitPlayerJoin).next(sendHandshake).next(waitPlayerJoin)
next(waitPlayerOut).next(waitPlayerOut)
next(receiveHandshake).next(receiveHandshake)
next(waitStopGameSignal).terminate()
}
sendPlayerJoin.onExit { println("$playerName: I'm here!") }
sendPlayerOut.onExit { println("$playerName: I'm out!") }
}
private fun MessageSendInstance<RandomPlayer, Int>.selectNextPlayer() {
val player = if (process.players.isNotEmpty())
process.players.random()
else
process.selfPlayer
receiverDomain = player.domain
receiverProcessInstanceId = player.id
println("Step ${process.shotCounter + 1}: " +
"${process.playerName} >>> ${player.name}")
}
Ata:
I le app3 talosaga o le a matou faia se tagata taʻalo e fai sina uiga ese: nai lo le filifilia faʻafuaseʻi o le isi tagata taalo, o le a ia galue e tusa ai ma le round-robin algorithm:
vasega RoundRobinPlayer
import ru.krista.bpm.ProcessInstance
import ru.krista.bpm.runtime.ProcessImpl
import ru.krista.bpm.runtime.dsl.processModel
import ru.krista.bpm.runtime.instance.MessageSendInstance
data class PlayerInfo(val name: String, val domain: String, val id: String)
class PlayersList: ArrayList<PlayerInfo>()
class RoundRobinPlayer : ProcessImpl<RoundRobinPlayer>(roundRobinPlayerModel) {
var playerName: String by input(persistent = true,
defaultValue = "RoundRobinPlayer")
var energy: Int by input(persistent = true, defaultValue = 30)
var players: PlayersList by persistent(PlayersList())
var nextPlayerIndex: Int by persistent(-1)
var allPlayersOut: Boolean by persistent(false)
var shotCounter: Int = 0
val selfPlayer: PlayerInfo
get() = PlayerInfo(playerName, env.eventDispatcher.domainName, id)
}
val roundRobinPlayerModel = processModel<RoundRobinPlayer>(
name = "RoundRobinPlayer",
version = 1) {
val waitNewGameSignal = signalWait<String>("NewGame")
val waitStopGameSignal = signalWait<String>("StopGame")
val sendPlayerJoin = signal<String>("PlayerJoin") {
signalData = { playerName }
}
val sendPlayerOut = signal<String>("PlayerOut") {
signalData = { playerName }
}
val waitPlayerJoin = signalWaitCustom<String>("PlayerJoin") {
eventCondition = { signal ->
signal.sender.processInstanceId != process.id
&& !process.players.any { signal.sender.processInstanceId == it.id}
}
handler = { signal ->
players.add(PlayerInfo(
signal.data!!,
signal.sender.domain,
signal.sender.processInstanceId))
}
}
val waitPlayerOut = signalWait<String>("PlayerOut") { signal ->
players.remove(PlayerInfo(
signal.data!!,
signal.sender.domain,
signal.sender.processInstanceId))
allPlayersOut = players.isEmpty()
}
val sendHandshake = messageSend<String>("Handshake") {
messageData = { playerName }
activation = {
receiverDomain = process.players.last().domain
receiverProcessInstanceId = process.players.last().id
}
}
val receiveHandshake = messageWait<String>("Handshake") { message ->
if (!players.any { message.sender.processInstanceId == it.id}) {
players.add(PlayerInfo(
message.data!!,
message.sender.domain,
message.sender.processInstanceId))
}
}
val throwBall = messageSend<Int>("Ball") {
messageData = { shotCounter + 1 }
activation = { selectNextPlayer() }
onEntry { energy -= 1 }
}
val waitBall = messageWaitData<Int>("Ball") {
shotCounter = it
}
startFrom(waitNewGameSignal)
.fork("mainFork") {
next(sendPlayerJoin)
.branch("mainLoop") {
ifTrue { energy < 5 || allPlayersOut }
.next(sendPlayerOut)
.next(waitBall)
ifElse()
.next(waitBall)
.next(throwBall)
.loop()
}
next(waitPlayerJoin).next(sendHandshake).next(waitPlayerJoin)
next(waitPlayerOut).next(waitPlayerOut)
next(receiveHandshake).next(receiveHandshake)
next(waitStopGameSignal).terminate()
}
sendPlayerJoin.onExit { println("$playerName: I'm here!") }
sendPlayerOut.onExit { println("$playerName: I'm out!") }
}
private fun MessageSendInstance<RoundRobinPlayer, Int>.selectNextPlayer() {
var idx = process.nextPlayerIndex + 1
if (idx >= process.players.size) {
idx = 0
}
process.nextPlayerIndex = idx
val player = if (process.players.isNotEmpty())
process.players[idx]
else
process.selfPlayer
receiverDomain = player.domain
receiverProcessInstanceId = player.id
println("Step ${process.shotCounter + 1}: " +
"${process.playerName} >>> ${player.name}")
}
A leai, e le ese le amio a le tagata taalo mai le muamua, o lea e le suia ai le ata.
O lea la e mana'omia se su'ega e fa'atino uma ai nei mea. O le a ou tuʻuina atu naʻo le faʻailoga o le suʻega lava ia, ina ia aua neʻi faʻapipiʻiina le tusiga i se pusa (o le mea moni, na ou faʻaogaina le siosiomaga o suʻega na faia muamua e suʻe ai le tuʻufaʻatasia o isi pisinisi pisinisi):
testGame()
@Test
public void testGame() throws InterruptedException {
String pl2 = startProcess(app2, "RandomPlayer", playerParams("Player2", 20));
String pl3 = startProcess(app2, "RandomPlayer", playerParams("Player3", 40));
String pl4 = startProcess(app3, "RoundRobinPlayer", playerParams("Player4", 25));
String pl5 = startProcess(app3, "RoundRobinPlayer", playerParams("Player5", 35));
String pl1 = startProcess(app1, "InitialPlayer");
// Теперь нужно немного подождать, пока игроки "познакомятся" друг с другом.
// Ждать через sleep - плохое решение, зато самое простое.
// Не делайте так в серьезных тестах!
Thread.sleep(1000);
// Запускаем игру, закрывая пользовательскую активность
assertTrue(closeTask(app1, pl1, "Start"));
app1.getWaiting().waitProcessFinished(pl1);
app2.getWaiting().waitProcessFinished(pl2);
app2.getWaiting().waitProcessFinished(pl3);
app3.getWaiting().waitProcessFinished(pl4);
app3.getWaiting().waitProcessFinished(pl5);
}
private Map<String, Object> playerParams(String name, int energy) {
Map<String, Object> params = new HashMap<>();
params.put("playerName", name);
params.put("energy", energy);
return params;
}
Mai nei mea uma e mafai ona tatou maua ni fa'ai'uga taua:
faʻatasi ai ma meafaigaluega talafeagai, e mafai e tagata faʻapipiʻi talosaga ona fatuina fegalegaleaiga tuʻufaʻatasia i le va o talosaga e aunoa ma le faʻalavelaveina o faʻamatalaga pisinisi;
o le lavelave o se galuega tu'ufa'atasiga e mana'omia ai tomai fa'ainisinia e mafai ona natia i totonu o le fa'ava'a pe'ā fa'aulu muamua i totonu o le fausaga o le fa'avae. O le faigata o se faʻafitauli e le mafai ona natia, o lea o le fofo i se faʻafitauli faigata i le code o le a foliga mai;
Pe a atiaʻe manatu faʻapipiʻi, e manaʻomia le amanaʻia o le tutusa ma le leai o se laina laina o suiga i le tulaga o tagata auai uma. O lenei mea e faʻamalosia ai i tatou e faʻalavelaveina le manatu ina ia faʻafefe i le faʻasologa o mea e tutupu i fafo. I la tatou faʻataʻitaʻiga, e faʻamalosia le tagata taʻalo e auai i le taʻaloga pe a uma ona ia faʻaalia lona alu ese mai le taʻaloga: o isi tagata taʻalo o le a faʻaauau pea ona pasi atu le polo ia te ia seia oʻo i le faʻamatalaga e uiga i lona alu ese ma faʻatautaia e tagata auai uma. O lenei manatu e le mulimulitaʻi mai tulafono o le taʻaloga ma o se fofo fetuutuunai i totonu o le faʻavae o le fausaga filifilia.
Sosoo ai, o le a tatou talanoa e uiga i le lavelave eseese o la tatou fofo, fetuunaiga ma isi manatu.
O fe'au uma o lo'o i totonu o le laina e tasi
O fa'aoga tu'ufa'atasi uma e galulue fa'atasi ma le tasi pasi tu'ufa'atasiga, lea e tu'uina atu i le tulaga o se faioloa i fafo, tasi le BPMQueue mo fe'au ma le tasi BPMTopic autu mo fa'ailoga (mea tutupu). O le tu'uina atu o fe'au uma i le laina e tasi, o se fetuutuuna'i. I le tulaga tau pisinisi, e mafai nei ona e faʻalauiloa le tele o ituaiga feʻau fou e te manaʻo ai e aunoa ma le faia o suiga i le fausaga o le faiga. O se fa'afaigofie tele lea, ae o lo'o i ai ni fa'alavelave fa'apitoa, lea i le tulaga oa tatou galuega masani e foliga mai e le taua tele ia i tatou.
Ae ui i lea, o loʻo i ai se faʻamatalaga faʻapitoa iinei: o talosaga taʻitasi e faʻamamāina "ana" savali mai le laina i le faitotoa, i le igoa o lona vaega. E mafai foi ona faʻamaonia le vaega i faʻailoga pe afai e te manaʻomia le faʻatapulaʻaina o le "lautele o le vaʻaia" o le faailo i se tasi talosaga. O lenei mea e tatau ona faʻateleina ai le pasi, ae o le pisinisi pisinisi e tatau nei ona faʻaogaina i igoa ole igoa: mo le faʻasalalauina o feʻau - faʻamalosia, mo faʻailoga - manaʻomia.
Fa'amautinoaina le Fa'atuatuaina o Pasi Tu'ufa'atasi
O le faʻamaoni e aofia ai ni nai vaega:
O le tagata e faia fefa'ataua'iga o fe'au filifilia o se vaega taua o le fausaga ma se tasi itu o le toilalo: e tatau ona lava le fa'apalepale masei. E tatau ona e faʻaaogaina naʻo faʻataʻitaʻiga faʻataʻitaʻi taimi, ma le lagolago lelei ma se faʻalapotopotoga tele;
e manaʻomia le faʻamautinoaina o le maualuga o le avanoa o le tagata fai fefaʻatauaʻiga, lea e tatau ona vavae ese mai le tino mai faʻaoga tuʻufaʻatasia (maualuga le maua o talosaga ma faʻaoga pisinisi faʻatatau e sili atu ona faigata ma taugata e faʻamautinoa);
e tatau i le tagata fai pisinisi ona tu'uina atu "ia le itiiti ifo ma le tasi" fa'amaoniga o le tu'uina atu. Ole mana'oga fa'atulafonoina lea mo le fa'atinoina fa'atuatuaina ole pasi tu'ufa'atasi. E leai se mea e manaʻomia mo le "tasi tonu" faʻamautinoaga tulaga: pisinisi pisinisi, e pei o se tulafono, e le maaleale i le toe oʻo mai o feʻau poʻo mea na tutupu, ma i galuega faʻapitoa e taua tele, e sili atu ona faigofie le faʻaopoopoina o siaki faaopoopo i le pisinisi. manatu nai lo le fa'aaogaina pea lava pea o fa'amaoniga "taugata";
o le auina atu o fe'au ma faailo e tatau ona aofia ai i se fefa'ataua'iga lautele ma suiga i le tulaga o faiga fa'apisinisi ma fa'amaumauga a le vaega. O le filifiliga e sili ona lelei o le faʻaaogaina lea o se mamanu Pusa fafo Fefa'ataua'iga, ae o le a manaʻomia se laulau faʻaopoopo i totonu o faʻamaumauga ma se toe fai. I talosaga a le JEE, e mafai ona faafaigofieina lenei mea e ala i le faʻaaogaina o se pule o le JTA i le lotoifale, ae o le fesoʻotaʻiga i le tagata fai pisinisi filifilia e tatau ona mafai ona galue i totonu. XA;
e tatau fo'i ona galulue fa'atasi ma fe'au o lo'o o'o mai ma mea e tutupu i se fefa'ataua'iga e suia ai le tulaga o se faiga fa'apisinisi: afai e toe fa'afo'i atu sea fefa'ataua'iga, e tatau loa ona fa'aleaogaina le mauaina o le fe'au;
o fe'au e le'i mafai ona tu'uina atu ona o mea sese e tatau ona teuina i se isi mea e teu ai D.L.Q. (Tili Tusi Mate). Mo lenei fa'amoemoe, na matou faia ai se fa'avae tu'ufa'atasi microservice e teu ai ia fe'au i lona teuina, fa'asino i uiga (mo le fa'avasega vave ma le su'esu'ega), ma fa'aalia se API mo le va'aiga, toe lafo i le tuatusi taunu'u, ma le tapeina o fe'au. E mafai e fa'atonu fa'atonu ona galulue fa'atasi ma lenei 'au'aunaga e ala i la latou 'upega tafa'ilagi;
i totonu o le au fai pisinisi, e tatau ona e fetuutuunai le numera o toe faʻafeiloaʻi ma faʻatuai i le va o tiliva ina ia faʻaitiitia ai le avanoa o feʻau e oʻo atu i totonu o le DLQ (e toetoe lava a le mafai ona faʻatusatusa le sili ona lelei, ae e mafai ona e galue faʻamalosi ma fetuunai i le taimi o le taotoga. );
E tatau ona mata'ituina pea le faleoloa o le DLQ, ma e tatau i le faiga o le mata'itūina ona fa'ailoa le fa'atonuina o le faiga ina ia o'o mai fe'au e le'i tu'uina atu, e mafai ona latou tali vave atu. O lenei mea o le a faʻaitiitia ai le "aʻafiaga o le aʻafiaga" o se toilalo poʻo se mea sese faʻatau pisinisi;
o le pasi tu'ufa'atasiga e tatau ona le mautonu i le toesea le tumau o talosaga: o le lesitala i se autu e tatau ona umi, ma le igoa ole igoa ole talosaga e tatau ona tulaga ese ina ia a'o toesea le talosaga, o le a le taumafai se isi e fa'agasolo ana fe'au mai le laina.
Faʻamautinoaina le saogalemu o filo o faʻamatalaga pisinisi
Ole fa'ata'ita'iga lava lea ole faiga pisinisi e mafai ona maua ni fe'au ma mea e tutupu i le taimi e tasi, o le faagasologa o le a amata tutusa. I le taimi lava e tasi, mo se tagata faʻapipiʻi talosaga, o mea uma e tatau ona faigofie ma saogalemu-saogalemu.
O le fa'atatauga fa'apisinisi o se fa'agasologa o lo'o fa'agasolo ai fa'alavelave ta'itasi i fafo e a'afia ai le fa'agasologa o pisinisi ta'ito'atasi. O mea faapena e mafai ona:
fa'alauiloaina o se faiga fa'apisinisi;
tagata fa'aoga gaioiga e feso'ota'i ma gaioiga i totonu o se fa'agasologa pisinisi;
mauaina o se fe'au po'o se fa'ailo o lo'o fa'amauina ai se fa'ata'ita'iga fa'apisinisi;
fa'aosoina o se taimi fa'atulagaina e se fa'ata'ita'iga fa'agaioiga pisinisi;
fa'atonuga e ala ile API (fa'ata'ita'iga, fa'alavelave fa'agasolo).
O ia mea e tutupu e mafai ona suia ai le tulaga o se faʻataʻitaʻiga pisinisi faʻataʻitaʻiga: o nisi gaioiga e mafai ona muta ae o isi e mafai ona amata, ma e ono suia le tau o meatotino tumau. O le tapunia o so'o se gaioiga e mafai ona fa'agaoioia ai se tasi pe sili atu o gaioiga nei. O i latou, i le isi itu, e mafai ona taofi le faʻatali mo isi mea tutupu pe, afai latou te le manaʻomia ni faʻamatalaga faaopoopo, e mafai ona faʻamaeʻaina i le fefaʻatauaiga tutusa. Aʻo leʻi tapunia le fefaʻatauaʻiga, o le tulaga fou o le pisinisi pisinisi o loʻo faʻasaoina i totonu o faʻamaumauga, lea o le a faʻatali mo le isi mea i fafo e tupu.
O fa'amaumauga fa'agasolo pisinisi faifaipea o lo'o teuina i totonu o fa'amaumauga tu'ufa'atasiga ose nofoaga e sili ona faigofie mo le fa'agaoioiga o gaioiga pe afai e te fa'aogaina FILIFILI MO FA'AIGA. Afai na mafai e se tasi fefaʻatauaiga ona maua le tulaga o se pisinisi pisinisi mai le faavae mo le suia, ona leai lea o se isi fefaʻatauaiga tutusa o le a mafai ona maua le tulaga tutusa mo se isi suiga, ma a maeʻa le fefaʻatauaiga muamua, o le lona lua o le fa'amaonia e maua le tulaga ua uma ona suia.
Faʻaaogaina loka faʻaletonu i le itu DBMS, matou te faʻataunuʻuina uma manaʻoga manaʻomia ACID, ma fa'atumauina fo'i le agava'a e fa'afua ai le talosaga ma le fa'atauva'a pisinisi e ala i le fa'ateleina o le numera o fa'ata'ita'iga.
Ae ui i lea, o loka fa'aletonu e fa'amata'u ai i tatou i le fa'aletonu, o lona uiga o le FILIFILI MO FA'AIGA E tatau lava ona fa'atapula'aina i nisi taimi talafeagai ina ne'i tupu fa'alavelave i nisi o mataupu mata'utia i le fa'atatau o pisinisi.
O le isi faʻafitauli o le faʻamaopoopoina o le amataga o se pisinisi pisinisi. E ui e leai se faʻataʻitaʻiga o se pisinisi pisinisi, e leai se setete i totonu o faʻamaumauga, o lea o le a le aoga le auala faʻamatalaina. Afai e te manaʻomia le faʻamautinoaina o le tulaga ese o se faʻataʻitaʻiga pisinisi i se tulaga faʻapitoa, ona e manaʻomia lea o se ituaiga o mea faʻapipiʻi e fesoʻotaʻi ma le vasega faʻagasologa ma le lautele tutusa. Ina ia foia lenei faʻafitauli, matou te faʻaogaina se masini loka ese e mafai ai ona matou lokaina se punaoa faʻapitoa e faʻamaonia e se ki i le URI format e ala i se auaunaga i fafo.
I a matou faʻataʻitaʻiga, o le InitialPlayer pisinisi faʻagasologa o loʻo i ai se taʻutinoga
uniqueConstraint = UniqueConstraints.singleton
O le mea lea, o le ogalaau o loʻo i ai feʻau e uiga i le aveina ma le tatalaina o le loka o le ki fetaui. E leai ni fe'au fa'apea mo isi faiga pisinisi: uniqueConstraint e le'i setiina.
Faʻafitauli o faiga faʻapisinisi ma le tulaga faifai pea
O nisi taimi o le i ai o se tulaga tumau e le gata e fesoasoani, ae e matua faʻalavelave foi i le atinaʻe.
E amata fa'afitauli pe a mana'omia ona fai ni suiga ile fa'atatau o pisinisi ma/po'o le fa'ata'ita'iga o faiga fa'apisinisi. E le o tutusa uma ia suiga ma le tulaga tuai o faiga pisinisi. Afai e tele taimi ola i totonu o faʻamaumauga, ona faia lea o suiga le fetaui e mafai ona mafua ai le tele o faʻalavelave, lea e masani ona matou feagai pe a faʻaaoga le jBPM.
Faʻalagolago i le loloto o suiga, e mafai ona e galue i ni auala se lua:
fatuina se ituaiga faiga pisinisi fou ina ia aua nei faia ni suiga le fetaui i le mea tuai, ma faʻaaoga nai lo le mea tuai pe a faʻalauiloa mea fou. O kopi tuai o le a faaauau pea ona galue "pei o le taimi muamua";
femalaga'i le tulaga faifai pea o faiga fa'apisinisi pe a fa'afou le fa'atatau o pisinisi.
O le auala muamua e faigofie, ae o loʻo i ai ona tapulaʻa ma faʻaletonu, mo se faʻataʻitaʻiga:
fa'aluaina o fa'atauga fa'apisinisi i le tele o fa'ata'ita'iga fa'agasologa o pisinisi, fa'ateleina le tele o fa'atatau pisinisi;
E masani ona manaʻomia se suiga vave i pisinisi fou (i tulaga o galuega tuʻufaʻatasia - toetoe lava o taimi uma);
e le iloa e le atinaʻe poʻo le a le taimi e mafai ai ona tapeina faʻataʻitaʻiga tuai.
I le faʻataʻitaʻiga matou te faʻaogaina auala uma e lua, ae ua matou faia ni filifiliga e faʻafaigofie ai o matou olaga:
I totonu o faʻamaumauga, o le tulaga faifaipea o se pisinisi pisinisi o loʻo teuina i se faʻaoga faigofie ma faigofie ona faʻaogaina: i totonu o se manoa JSON format. Ole mea lea e mafai ai ona fa'atino femalagaiga i totonu ole talosaga ma fafo. I le tulaga mulimuli, e mafai ona e faʻasaʻo ma le lima (aemaise lava le aoga i le atinaʻe i le taimi o le debugging);
e le faʻaogaina e le faʻaogaina pisinisi faʻamatalaga igoa o pisinisi pisinisi, ina ia mafai ai i soo se taimi ona sui le faʻatinoga o se tasi o faʻagasologa o loʻo auai i se mea fou ma se igoa fou (mo se faʻataʻitaʻiga, "InitialPlayerV2"). O le fusia e tupu e ala i le savali ma igoa faailo;
o le faʻataʻitaʻiga faʻataʻitaʻiga o loʻo i ai se numera faʻasologa, lea tatou te faʻatuputeleina pe a tatou faia ni suiga le fetaui i lenei faʻataʻitaʻiga, ma o lenei numera e faʻasaoina faʻatasi ma le tulaga o le faʻataʻitaʻiga;
o le tulaga faifai pea o le faagasologa o loʻo faitau muamua mai le faʻamaumauga i totonu o se faʻataʻitaʻiga mea faʻaoga talafeagai, lea e mafai ona galue le faiga o femalagaiga pe afai ua suia le numera faʻataʻitaʻiga;
o le faʻasologa o femalagaiga o loʻo tuʻuina i tafatafa o le pisinisi pisinisi ma e taʻua o le "paie" mo faʻataʻitaʻiga taʻitasi o le pisinisi i le taimi o lona toe faʻaleleia mai le database;
afai e te manaʻomia le faʻafeiloaʻi vave ma faʻatasi le tulaga o faʻagasologa faʻasologa, sili atu faʻamatalaga faʻamatalaga femalagaiga fofo e faʻaaogaina, ae e tatau ona e galue ma JSON.
E te mana'omia se isi auivi mo faiga fa'apisinisi?
O fofo o loʻo faʻamatalaina i totonu o le tusiga na faʻatagaina ai i matou e faʻafaigofie tele o matou olaga, faʻalautele le tele o mataupu e foia i le tulaga o le atinaʻeina o talosaga, ma faia le manatu o le vavaeeseina o pisinisi pisinisi i microservices sili atu ona manaia. Ina ia ausia lenei mea, o le tele o galuega na faia, o se faʻatulagaga sili ona "mama" mo faiga faʻapisinisi na faia, faʻapea foʻi ma vaega o auaunaga e foia ai faʻafitauli faʻamaonia i le tulaga o le tele o faʻafitauli faʻaoga. O lo'o i ai so matou mana'oga e fa'asoa nei taunu'uga ma faia le atina'eina o vaega masani e tatala avanoa i lalo o se laisene e leai se totogi. O lenei mea o le a manaʻomia ai sina taumafaiga ma taimi. O le malamalama i le manaoga mo ia fofo e mafai ona avea ma se faaosofiaga faaopoopo mo i tatou. I totonu o le tusiga fuafuaina, e itiiti lava le gauai atu i le gafatia o le auivi lava ia, ae o nisi oi latou o loʻo vaaia mai faʻataʻitaʻiga na tuʻuina atu. Afai tatou te fa'asalalauina la tatou auivi, o le a tu'uina atu se isi tusitusiga i ai. I le taimi nei, matou te faʻafetai pe afai e te tuʻuina sina faʻamatalaga e ala i le taliina o le fesili:
Na'o tagata fa'aigoaina e mafai ona auai i le su'esu'ega. Saini ese j, faʻamolemole.
E te mana'omia se isi auivi mo faiga fa'apisinisi?
18,8%Ioe, ua leva ona ou su'eina se mea faapena
12,5%Ou te fia a'oa'o atili i lau fa'atinoga, atonu e aoga2
6,2%Matou te fa'aogaina se tasi o fa'avae o lo'o iai, ae o lo'o mafaufau e sui1
18,8%Matou te faʻaogaina se tasi o faʻavae o loʻo iai, o loʻo lelei mea uma3
18,8%matou te pulea e aunoa ma se auivi3
25,0%tusi lau4
16 tagata fa'aoga na palota. 7 tagata fa'aoga na le fa'aaogaina.