Lijevki in sprožilci
Lijevk je graf. Zagon je vrstica. Čakanje je čas.
To je celoten model, in vsaka težka lastnost tega izdelka izhaja iz teh treh stavkov. Urejanje živega lijka je varno zaradi njih. Ponovni poskus ne more dvakrat poslati zaradi njih. Oseba, ki se odjavi v torek, v četrtek ne sliši ničesar zaradi njih.
Kaj se dejansko zgodi, ko se zažene
Objava lijaka zapiše nespremenljivo različico. Nekdo vstopi in pojavi se vrstica: en zagon, za ta kontakt, pripet na to različico, ki hrani trenutno vozlišče, čas prebujenja in svoj lasten kontekst.
Delavec si izposodi zagonе, katerih čas prebujenja je že potekel, in jih prevzame s SKIP LOCKED, tako da dva delavca ne moreta prevzeti istega. Izvaja vozlišča, dokler ne pride do čakanja ali končnega vozlišča, nato zapiše naslednji čas prebujenja in spusti.
Vozlišče je čista funkcija zagona, kontakta in vozlišča — in njegovi učinki se potrdijo v isti transakciji kot napredovanje zagona samega. Ta ena lastnost je tista, ki naredi ponovni poskus varen. Delavec, ubit v pol sekundi med »pošlji« in »napreduj«, pusti ali oboje ali nič, nikoli eno.
In ker aplikacija podaja čas namesto baze, je vrstica, zapisana zdaj, zapadla zdaj. Stolpec za razporejanje s privzeto vrednostjo iz ure baze v trenutku zapisa še ni zapadel in zamudi prav tikt, ki ga je ustvaril — napaka, ki ne izgleda kot nič, dokler sporočilo ne pride eno uro pozno.
- 1Izposoja
wake_at <= now(),FOR UPDATE SKIP LOCKED. Vrsta brez izposoj dvakrat pošilja privzeto. - 2IzvedbaVozlišča po vrsti, dokler ne pride do čakanja ali končnega vozlišča. Vsako zapiše korak: kaj se je odločilo, kaj je oddalo.
- 3UveljaviteUčinki in napredovanje, ena transakcija. To je celoten trik.
- 4SpeZapisan naslednji
wake_at. Nadaljnjih vrstic še ni, in nobena ni potrebna.
En zagon na kontakt na različico
Štirinajst sprožilcev
Kaj lahko zažene zagon
Nekatere od teh stvari storite vi. Večina jih stori vaša stranka, ali pa jih ne stori — in odsotnost dejanja je enako dober sprožilec kot dejanje samo.
Prihajajo
form_submit, list_join, contact_created, tag_added in segment_enter. Segment je živ predikat, zato »vstopi v segment« pokrije vsak »je postal«, ki ga lahko izrazite — tri naročila, devetdeset dni tišine, poraba nad pragom.
Naredijo nekaj
page_visit s strani spletnega odsevka, message_opened, link_clicked, booking_made in payment_made. Odprto sporočilo je samo po sebi dogodek na kontaktu, zato lahko en lijak čaka na odziv na zadnje, kar je poslal.
Čas, ali vi
date_field z odmikom — rojstni dan, obnova, »leto od takrat«, sedem dni pred ali tri dni po. schedule za ponavljajoče se. manual za napoved, ki jo pošljete, ker ste se tako odločili.
Vaša lastna aplikacija
api_event je dogodek po meri, ki ga objavite iz lastne kode s svojim žetonom. Vse, kar vaš izdelek ve, postane sprožilec: aktiviran, povabil sodelavca, dosegel omejitev, preklical, izvozil. To je tisti, ki iz orodja za pošiljanje sporočil naredi del vašega izdelka.
Ponovni vstop, odločen enkrat
Lijak je bodisi ponovno vstopen bodisi ni, in baza to zagotavlja: en zagon na kontakt na lijak, razen če ste rekli drugače. Isti sprožilec, ki se sproži dvakrat v isti sekundi, ne more po nesreči ustvariti dveh zagonov.
Pogoji vstopa
Sprožilec se zažene in specifikacija vstopa odloči, ali je ta konkretni kontakt upravičen — predikat segmenta pred vrati. Ceneje kot vozlišče pogoja na prvem koraku, in graf ostane o tem, kaj se zgodi, ne o tem, kdo sme noter.

Štirinajst stvari ga lahko zažene. Šestnajst stvari se lahko zgodi naprej.
Šestnajst dejanj in sedem vozlišč poteka
Kaj lahko lijak naredi in kako se odloča
Pošlji nekaj
send_email, send_sms, send_push, send_letter — štirje kanali, en graf — plus notify_team, ko oseba, ki jo je treba obvestiti, dela za vas.
Spremeni kontakt
add_tag, remove_tag, add_to_list, remove_from_list, set_field. Označevanje med potjo je tisto, kar naredi segment naslednjega lijaka preprost.
Dosezite navzven
http_request na karkoli želite, create_payment na vaš lasten povezani račun in book_slot na vir za rezervacije. Plačnik ostane vaš; nihče ne postane naša stranka.
Premikanje med lijaki
enter_funnel in exit_funnel. Zgradite eno dobrodošlico in jo pokličite s štirih mest, namesto da vzdržujete štiri kopije, ki do marca zdrsnejo narazen.
Ustvari ob času pošiljanja
ai_generate izpolni spremenljivke za spajanje za vsak kontakt, se šteje v vašo kvoto in se predpomni po zgoščenem vrednosti ustvarjalnega vsebine in atributov kontakta — sicer bi plačevali za vsakega prejemnika pri vsakem pošiljanju.
Čakanje, vejanje, razdelitev, združitev
wait sprejme trajanje, točen datum in čas, dan v tednu s časom ali polje datuma z odmikom. condition je predikat segmenta z veji da in ne. split je A/B/n z utežmi. join spet združi veje.
goal — tisti, ki šteje
Cilj konča potek za vsakogar, ki ga doseže. Rezervirali so, kupili, odgovorili: preostanek zaporedja se za njih prekliče. Nikomur ne pride »pogrešamo vas« dan po tem, ko se je vrnil — in to je vozlišče, ki to prepreči.
throttle in quiet_hours
Omejevalnik tempira izbruh, da nabiralnik z nizko omejitvijo hitrosti ne bo zasut v suspenz. Tihe ure zadržijo sporočilo do primerne ure — veljajo na ravni sporočila, ne da bi jih bilo treba kopirati v vsako vejo grafa.
Preverjeno, preden lahko teče
Preverjevalnik vam in UI istim stvarem ugovarja
Graf se preveri, preden ga je mogoče objaviti, in preverjanje ni le nasvet. Poteka po isti kodi, ne glede na to, ali je lijak narisal človek ali ga ustvaril model — in samo zato so ustvarjeni lijaki sploh zaupanja vredni.
Natanko en vstop
Dva vstopna vozlišča sta dvoumnost, ki je nihče ne opazi, dokler napačna polovica seznama ne dobi napačnega zaporedja.
Vsako vozlišče dosegljivo
Osirojena veja je bodisi napaka bodisi sporočilo, za katerega mislite, da gre ven, a ne gre. Oboje je vredno, da vam je povedano.
Cikel mora vsebovati čakanje
Zanka brez čakanja je neskončna zanka s pošiljanjem v sredini. To pravilo je razlika med lijakom in incidentom.
Vsako pošiljanje ima svojo vsebino
Vozlišča send_email brez vsebine in zadeve ni mogoče objaviti. Sporočilo s pravo zadevo in praznim telesom je resničen način odpovedi; tu se zavrne.
Vsaka spremenljivka je znana
Spremenljivke za spajanje se preverijo ob objavi. {{frist_name}} je tipkarska napaka, ki jo vidite med urejanjem, ne »Pozdravljeni ,«, ki prispe v štirideset tisoč nabiralnikov.
Nato jo simulirajte
Izvedite poskusni tek pravega kontakta skozi celoten graf in preberite pot ter vsako sporočilo, ki bi bilo poslano, z njegovim dnem. Nič ne zapusti stavbe.
Neprijetni primeri
Sedem stvari, ki pokvarijo naivni pogon
Vsaka od teh je test z določeno uro v ozadju, ker vsaka pokvari izvedbo, ki je videti popolnoma pravilna, dokler ne sreča resničnosti.
- 1Lijak, ki se zapelje vaseZakonito, pogosto in v redu — pod pogojem, da cikel vsebuje čakanje, kar preverjevalnik zahteva.
- 2Nekdo se odjavi med potekomIzključitev se preveri ob pošiljanju, ne ob vstavljanju v vrsto. Preverjanje ob vstavljanju pošlje pošto tistim, ki so odšli med čakanjem.
- 3Lijak se uredi, ko je znotraj deset tisoč ljudiTi nadaljujejo po različici, v katero so vstopili, do konca. Novi vstopajoči hodijo po novi.
- 4Isti sprožilec se sproži dvakrat v eni sekundiEn potek, ker je edinstvenost indeks in ne preverjanje, ki mu sledi vstavljanje.
- 5Kontakt se izbriše med potekomPotek se konča. Izbris, po katerem zaporedje še vedno naslavlja nekoga, ni izbris.
- 6Čakanje prečka spremembo časa»Trije dnevi ob devih zjutraj« pomeni devih zjutraj na obeh straneh spremembe ure.
- 7Delavec umre med pošiljanjem in napredovanjemUčinki in napredovanje so ena transakcija. Zgodila sta se bodisi oba bodisi noben.
Deterministična uraVsak test pokvari verjetno implementacijo
Kampanje so druga polovica
Lijak reagira. Kampanja je enkratna oddaja: občinstvo, urnik, omejitev hitrosti in pošiljanje. To je drugačna oblika stvari in je namenoma ločena, namesto da bi se pretvarjala, da je lijak z enim vozliščem.
Varnost zagotavljata dve pravili. Občinstvo se materializira enkrat in zavrni ponovni zagon — ponovna razrešitev bi tiho dodala vse, ki so se pridružili od začetka pošiljanja, a bi to skril indeks za odstranjevanje podvojenih, ker bi preprečil podvojitve, ki jih je sam ustvaril. Števci pa se preračunajo iz dogodkov dostave, nikoli ne se povečajo na mestu, tako da ponovljen webhook ne more napihniti poročila.
Kdaj uporabiti kaj: če se zgodi zaradi nečesa, kar je oseba storila, je to lijak. Če se zgodi zaradi odločitve, ki ste jo sprejeli v torek, je to kampanja. Presenetljivo veliko tržne avtomatizacije gre narobe, ker drugo prisili v obliko prvega.