Kwa nini ukaguzi wa barua pepe unaoendeshwa na cron huenda mrama

Kuendesha kazi kila baada ya saa chache huonekana rahisi kwenye karatasi, lakini uhalisia wa uzalishaji (production) ni mchafuko. Mzunguko wa mwisho unaweza kuacha ujumbe uliotangatanga; majaribio ya marudio yanaweza kujikusanya; mfanyakazi (worker) aliyepolepole anaweza kuchukua ujumbe uliowasili dakika kumi na tano zilizopita. Mabaki hayo yanavunja kanuni rahisi ya "barua pepe ya mwisho ndiyo inayoshinda" ambayo skripti nyingi hutegemea.

Majaribio ya ndani (local) hufanikiwa kwa sababu huanza na sanduku la barua pepe safi na muda unaotabirika. Katika uzalishaji, kodi hiyo hiyo inaweza kuchukua ujumbe usio sahihi, kupoteza taarifa bila kutoa habari, au kutoa arifa nyingi kwa wakati mmoja. Timu mara nyingi hurekebisha tatizo kwa ucheleweshaji wa kiholela, lakini ucheleweshaji huo unaficha tu hali ya mashindano (race condition) na hivi karibuni hufeli chini ya mzigo mkubwa au mabadiliko katika ucheleweshaji wa barua pepe (latency).

Dhana ya lease: kugeuza sanduku la barua pepe kuwa rasilimali inayoweza kutumika na kutupwa

Lease ya sanduku la barua pepe ni mkataba mdogo ambao kila mzunguko wa cron lazima aufuatilie:

  • Umiliki wa kipekee – mzunguko mmoja unapata sanduku moja la barua pepe (au nafasi ya kipekee ndani yake).
  • Imepangwa kwa muda – lease huandika muda wa kuanza na muda wa kumalizika.
  • Uhakiki wa lebo – kila barua pepe inayotarajiwa hubeba lebo ambayo kazi hiyo huikagua.
  • Kinga dhidi ya ujumbe wa zamani – kazi hiyo hupuuza barua pepe yoyote inayotoka nje ya dirisha la lease yake, hata kama mada inafanana.

Badala ya kuuliza "je, barua pepe imewasili?", kazi sasa huuliza "je, barua pepe yangu imewasili wakati wa dirisha langu la lease?". Mabadiliko hayo hulazimisha kodi kuhakiki kuwa ujumbe huo ni wa utekelezaji wa sasa, hivyo kuondoa uchafuzi wa mzunguko mmoja na mwingine.

Jinsi ya kuunganisha mfumo huu kwenye cron ya kawaida ya saa nne

  1. Tengeneza ID ya lease mwanzoni mwa mzunguko na uihifadhi pamoja na ID ya sanduku la barua pepe lililochaguliwa.
  2. Tumia kichujio kikali wakati wa ukaguzi (polling): linganisha kwa lebo ya lease, upekee wa mpokeaji, mada maalum, na, muhimu zaidi, muda wa kupokelewa.
  3. Andika metadata ya lease kwenye logi – ID ya lease, ID ya sanduku la barua pepe, na muda kamili wa kupokelewa wa ujumbe wowote uliolinganishwa.

Ukiwa na vipengele hivyo vitatu kwenye logi, hitilafu itaonyesha lease iliyokosekana, sanduku la barua pepe lililoelekezwa vibaya, au barua pepe iliyo nje ya dirisha, badala ya ujumbe usio na maelezo wa "hakuna barua pepe iliyopatikana".

Mitego ya kawaida inayoweza kuharibu otomatiki

  1. Kutumia tena majina ya sanduku la barua pepe kwa ajili ya dashibodi safi – majina yanayosomika kwa urahisi ni mazuri, lakini yanarudisha hali ya pamoja (shared state).
  2. Kusambaza sheria za ukaguzi (polling) kwenye faili tofauti – tafsiri zisizo na msimamo za "upya" (freshness) huruhusu ujumbe wa zamani kupita.
  3. Kuruka uandikaji wa ID ya lease kwenye logi – bila utambulisho huo, kutatua hitilafu (debugging) kunageuka kuwa kubahatisha, hali inayofanya ukaguzi usioaminika kudumu.

Kuepuka makosa haya huifanya mifumo iwe ya kuaminika na logi ziwe na manufaa.

Wakati utengaji hauwezekani, kaza vichujio

Ikiwa kutengeneza sanduku la barua pepe maalum kwa kila mzunguko si jambo linalowezekana, fidia kwa kutumia vigezo vikali zaidi:

  • Dirisha la muda wa kupokelewa – kataa barua pepe yoyote ya zamani kuliko mwanzo wa lease.
  • Upekee wa mpokeaji – tumia anwani ya kila mzunguko au jina la kipekee (alias) ikiwa mtoa huduma anaruhusu.
  • Alama ya kipekee ya mada (subject fingerprint) – weka token maalum ya mzunguko kwenye mstari wa mada.

Hata utekelezaji wa sehemu ya lease unapunguza kwa kiasi kikubwa mabadiliko ya hali (state drift) kabla ya kuwa gharama kubwa kutatua.

Hoja kinyume: kwa nini "ongeza tu ucheleweshaji" bado hujitokeza

Baadhi ya timu wanahoji kuwa sekunde chache za kusubiri (sleep) kati ya mizunguko inatosha. Ucheleweshaji huo hufanya kazi wakati ucheleweshaji wa mtoa huduma unapoendelea ndani ya mpaka uliowekwa, lakini kuongezeka kwa ucheleweshaji wa mtoa huduma, foleni ya muda, au tukio la kutanuka (scaling event) kunavunja dhana hiyo mara moja.

Hitimisho

Kwa kuunganisha kila mzunguko na sanduku lake la barua pepe (au nafasi ya kipekee), kuweka lebo kwenye ujumbe unaotarajiwa, na kuandika utambulisho wa lease kwenye logi, unaondoa uchafuzi wa mzunguko mmoja na mwingine, unafanya hitilafu zionekane, na hatimaye unapata uaminifu unaohitajika na arifa zilizopangwa.