એજન્ટ્સ માટે સુરક્ષિત ડિલિવરી પાઇપલાઇન બનાવવી
મોટાભાગના એજન્ટ ડેમો એક મહત્વપૂર્ણ પ્રશ્ન અવગણે છે. તમે ડબલ-સેન્ડિંગ (બે વાર મોકલવું) અથવા મંજૂર ન કરેલું કામ મોકલ્યા વિના, એક સ્વાયત્ત સિસ્ટમને તમારા વતી વસ્તુઓ મોકલવા કેવી રીતે આપો?
ડબલ-સેન્ડિંગ એ કોઈ દુર્લભ ભૂલ નથી. જ્યારે કોઈ વર્કર કામની વચ્ચે જ અટકી જાય (crash થાય), ત્યારે સાદી ક્યુ (queue) નું તે ડિફોલ્ટ વર્તન છે. એક વર્કર મેસેજ મોકલે છે અને પછી સફળતાની નોંધ કરતા પહેલા જ ક્રેશ થઈ જાય છે. સિસ્ટમ વિચારે છે કે કાર્ય નિષ્ફળ ગયું છે અને નવા વર્કરને ફરીથી પ્રયાસ કરવા કહે છે. ગ્રાહકને બે ઈમેલ મળે છે અને તમને સપોર્ટ ટિકિટ મળે છે.
તમે દરેક ક્રેશને રોકી શકતા નથી. તમારે એક્શન (કાર્ય) અને રેકોર્ડ (નોંધ) વચ્ચેના અંતરાલમાં થતા ક્રેશ માટે ડિઝાઇન કરવી જોઈએ.
વાસ્તવિક પરિણામો ધરાવતા કોઈપણ એજન્ટ આઉટપુટ માટે આ છ-તબક્કાની પાઇપલાઇનનો ઉપયોગ કરો:
• Produce: એજન્ટ સંપૂર્ણ આર્ટિફેક્ટ (artifact) જનરેટ કરે છે. તે હજી કંઈપણ મોકલતું નથી. • Persist: પહેલા ઈન્ટેન્ટ (ઈરાદો) અને આર્ટિફેક્ટને ટકાઉ સ્ટોરેજમાં લખો. • Score: આઉટપુટ સાથે કોન્ફિડન્સ સ્કોર જોડો. • Review: ઓછી કોન્ફિડન્સ ધરાવતી વસ્તુઓને માનવીય સમીક્ષા માટે મોકલો. • Approve: 'fail-closed' ગેટનો ઉપયોગ કરો. જ્યાં સુધી માનવી સ્પષ્ટ અધિકૃતતા ન આપે ત્યાં સુધી સિસ્ટમ તમામ મોકલવા (sends) ને બ્લોક કરે છે. • Send and Attest: લીઝ (lease) હેઠળ આઇટમ મોકલો, પછી પુરાવા તરીકે તેની રસીદ (receipt) લખો.
દરેક તબક્કો એક અલગ ટકાઉ ટ્રાન્ઝિશન હોવો જોઈએ. સ્ટેટ (સ્થિતિ) તમારા ડેટાબેઝમાં હોવી જોઈએ, વર્કરની મેમરીમાં નહીં.
ડુપ્લીકેટ્સ રોકવા માટે, row-level leasing નો ઉપયોગ કરો. Postgres માં, SELECT ... FOR UPDATE SKIP LOCKED નો ઉપયોગ કરો. આ સુનિશ્ચિત કરે છે કે એક સમયે માત્ર એક જ વર્કર પાસે કાર્ય હોય.
સૌથી મહત્વનો નિયમ એ છે કે તમે એક્સપાયર થયેલી લીઝને કેવી રીતે હેન્ડલ કરો છો. જો કોઈ વર્કર એક્સટર્નલ મેસેજ મોકલતી વખતે ક્રેશ થાય, તો તેને આપમેળે ફરીથી પ્રયાસ (retry) કરશો નહીં. તેના બદલે, માનવીય સમીક્ષા માટે કાર્યને અટકી જતું (strand) છોડી દો. અદ્રશ્ય ડબલ-સેન્ડિંગ કરતા દેખીતી રીતે અટકેલું કાર્ય વધુ સારું છે.
તમારે 'fail-closed' સિદ્ધાંતોનું પણ પાલન કરવું જોઈએ:
- મોકલવાનું ડિફોલ્ટ રીતે બંધ હોય છે. તમામ આઉટબાઉન્ડ ટ્રાફિકને સક્ષમ કરવા માટે એક સિંગલ ફ્લેગ હોવો જોઈએ.
- ઓળખની તપાસ કરવામાં આવે છે. મોકલવાના ક્ષણે સિસ્ટમે મોકલનારનું સરનામું અને ટ્રાન્સપોર્ટ સિક્યુરિટી વેરિફાય કરવી જોઈએ.
- દરેક વસ્તુની રસીદ મળે છે. બિન-નોંધાયેલ મોકલવું એ નિષ્ફળતા છે.
આને ઇન્ટરનલ લોગ્સ જેવા ઓછા જોખમવાળા કાર્યો માટે ન બનાવો. તેનો ઉપયોગ ત્યારે કરો જ્યારે ભૂલથી પૈસાનું નુકસાન થાય, કાનૂની સમસ્યા ઊભી થાય અથવા સપોર્ટ ટિકિટની જરૂર પડે.
Optional learning community: https://t.me/GyaanSetuAi
