ಏಜೆಂಟ್ಗಳಿಗಾಗಿ ಸುರಕ್ಷಿತ ಡೆಲಿವರಿ ಪೈಪ್ಲೈನ್ ಅನ್ನು ನಿರ್ಮಿಸುವುದು
ಹೆಚ್ಚಿನ ಏಜೆಂಟ್ ಡೆಮೋಗಳು ಒಂದು ಪ್ರಮುಖ ಪ್ರಶ್ನೆಯನ್ನು ಬಿಟ್ಟುಬಿಡುತ್ತವೆ. ಅನುಮೋದಿಸದ ಕೆಲಸವನ್ನು ಕಳುಹಿಸದೆ ಅಥವಾ ಒಂದೇ ವಿಷಯವನ್ನು ಎರಡು ಬಾರಿ ಕಳುಹಿಸದೆ (double-sending), ನಿಮ್ಮ ಪರವಾಗಿ ಒಂದು ಸ್ವಾಯತ್ತ ವ್ಯವಸ್ಥೆಯು (autonomous system) ವಿಷಯಗಳನ್ನು ಕಳುಹಿಸಲು ನೀವು ಹೇಗೆ ಬಿಡುತ್ತೀರಿ?
ಡಬಲ್-ಸೆಂಡ್ (double-send) ಎಂಬುದು ಅಪರೂಪದ ದೋಷವಲ್ಲ. ಕೆಲಸದ ಮಧ್ಯದಲ್ಲಿ ಒಬ್ಬ ವರ್ಕರ್ (worker) ವಿಫಲವಾದಾಗ, ಒಂದು ಸರಳ ಕ್ಯೂ (queue) ಮಾಡುವ ಡಿಫಾಲ್ಟ್ ವರ್ತನೆಯೇ ಇದು. ಒಬ್ಬ ವರ್ಕರ್ ಸಂದೇಶವನ್ನು ಕಳುಹಿಸುತ್ತಾನೆ ಮತ್ತು ಯಶಸ್ಸನ್ನು ದಾಖಲಿಸುವ ಮೊದಲೇ ಕ್ರ್ಯಾಶ್ ಆಗುತ್ತಾನೆ. ವ್ಯವಸ್ಥೆಯು ಕಾರ್ಯವು ವಿಫಲವಾಗಿದೆ ಎಂದು ಭಾವಿಸುತ್ತದೆ ಮತ್ತು ಹೊಸ ವರ್ಕರ್ ಅನ್ನು ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಲು ಹೇಳುತ್ತದೆ. ಗ್ರಾಹಕರಿಗೆ ಎರಡು ಇಮೇಲ್ಗಳು ಬರುತ್ತವೆ ಮತ್ತು ನಿಮಗೆ ಸಪೋರ್ಟ್ ಟಿಕೆಟ್ (support ticket) ಬರುತ್ತದೆ.
ನೀವು ಪ್ರತಿಯೊಂದು ಕ್ರ್ಯಾಶ್ ಅನ್ನು ತಡೆಯಲು ಸಾಧ್ಯವಿಲ್ಲ. ಕ್ರಿಯೆ (action) ಮತ್ತು ದಾಖಲೆ (record) ನಡುವಿನ ಅಂತರದಲ್ಲಿ ಸಂಭವಿಸುವ ಕ್ರ್ಯಾಶ್ಗೆ ಅನುಗುಣವಾಗಿ ನೀವು ವಿನ್ಯಾಸಗೊಳಿಸಬೇಕು.
ನೈಜ ಪರಿಣಾಮಗಳನ್ನು ಹೊಂದಿರುವ ಯಾವುದೇ ಏಜೆಂಟ್ ಔಟ್ಪುಟ್ಗಾಗಿ ಈ ಆರು ಹಂತಗಳ ಪೈಪ್ಲೈನ್ ಅನ್ನು ಬಳಸಿ:
• Produce: ಏಜೆಂಟ್ ಸಂಪೂರ್ಣ ಆರ್ಟಿಫ್ಯಾಕ್ಟ್ ಅನ್ನು (artifact) ಸೃಷ್ಟಿಸುತ್ತದೆ. ಇದು ಇನ್ನೂ ಏನನ್ನೂ ಕಳುಹಿಸುವುದಿಲ್ಲ. • Persist: ಮೊದಲು ಉದ್ದೇಶ (intent) ಮತ್ತು ಆರ್ಟಿಫ್ಯಾಕ್ಟ್ ಅನ್ನು ಬಾಳಿಕೆ ಬರುವ ಸ್ಟೋರೇಜ್ಗೆ (durable storage) ಬರೆಯಿರಿ. • Score: ಔಟ್ಪುಟ್ಗೆ ಕಾನ್ಫಿಡೆನ್ಸ್ ಸ್ಕೋರ್ (confidence score) ಅನ್ನು ಜೋಡಿಸಿ. • Review: ಕಡಿಮೆ ಕಾನ್ಫಿಡೆನ್ಸ್ ಹೊಂದಿರುವ ಐಟಂಗಳನ್ನು ಮನುಷ್ಯನಿಗೆ (human) ವರ್ಗಾಯಿಸಿ. • Approve: 'ಫೇಲ್-ಕ್ಲೋಸ್ಡ್' (fail-closed) ಗೇಟ್ ಬಳಸಿ. ಮನುಷ್ಯನು ಸ್ಪಷ್ಟ ಅಧಿಕಾರ ನೀಡದ ಹೊರತು ವ್ಯವಸ್ಥೆಯು ಎಲ್ಲಾ ಕಳುಹಿಸುವಿಕೆಯನ್ನು ನಿರ್ಬಂಧಿಸುತ್ತದೆ. • Send and Attest: ಲೀಸ್ (lease) ಅಡಿಯಲ್ಲಿ ಐಟಂ ಅನ್ನು ಕಳುಹಿಸಿ, ನಂತರ ಸಾಕ್ಷ್ಯದ ರಸೀದಿಯನ್ನು (evidence receipt) ಬರೆಯಿರಿ.
ಪ್ರತಿ ಹಂತವು ಪ್ರತ್ಯೇಕವಾದ ಬಾಳಿಕೆ ಬರುವ ಪರಿವರ್ತನೆಯಾಗಿರಬೇಕು (durable transition). ಸ್ಟೇಟ್ (state) ನಿಮ್ಮ ಡೇಟಾಬೇಸ್ನಲ್ಲಿರಲಿ, ವರ್ಕರ್ನ ಮೆಮೊರಿಯಲ್ಲಿ ಅಲ್ಲ.
ಡೂಪ್ಲಿಕೇಟ್ಗಳನ್ನು ತಡೆಯಲು, ರೋ-ಲೆವೆಲ್ ಲೀಸಿಂಗ್ (row-level leasing) ಬಳಸಿ. Postgres ನಲ್ಲಿ, SELECT ... FOR UPDATE SKIP LOCKED ಬಳಸಿ. ಇದು ಏಕಕಾಲದಲ್ಲಿ ಕೇವಲ ಒಬ್ಬ ವರ್ಕರ್ ಮಾತ್ರ ಒಂದು ಕಾರ್ಯವನ್ನು ಹೊಂದಿದ್ದであることを ಖಚಿತಪಡಿಸುತ್ತದೆ.
ಅತ್ಯಂತ ಪ್ರಮುಖ ನಿಯಮವೆಂದರೆ ನೀವು ಎಕ್ಸ್ಪೈರ್ ಆದ ಲೀಸ್ಗಳನ್ನು ಹೇಗೆ ನಿರ್ವಹಿಸುತ್ತೀರಿ ಎಂಬುದು. ಬಾಹ್ಯ ಸಂದೇಶವನ್ನು ಕಳುಹಿಸುವಾಗ ವರ್ಕರ್ ವಿಫಲವಾದರೆ, ಅದನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಮರುಪ್ರಯತ್ನಿಸಬೇಡಿ (retry). ಬದಲಾಗಿ, ಮನುಷ್ಯನ ವಿಮರ್ಶೆಗಾಗಿ ಆ ಕಾರ್ಯವನ್ನು ಹಾಗೆಯೇ ಬಿಡಿ. ಅದೃಶ್ಯವಾದ ಡಬಲ್-ಸೆಂಡ್ ಅನ್ನು விட, ದೃಶ್ಯವಾಗಿ ಕಾಣುವ ಸಿಕ್ಕಿಹಾಕಿಕೊಂಡ ಕಾರ್ಯ (stuck task) ಉತ್ತಮವಾಗಿದೆ.
ನೀವು 'ಫೇಲ್-ಕ್ಲೋಸ್ಡ್' ತತ್ವಗಳನ್ನು ಸಹ ಅನುಸರಿಸಬೇಕು:
- ಕಳುಹಿಸುವುದು ಡಿಫಾಲ್ಟ್ ಆಗಿ ಆಫ್ ಆಗಿರುತ್ತದೆ. ಕೇವಲ ಒಂದು ಫ್ಲಾಗ್ (flag) ಎಲ್ಲಾ ಔಟ್ಬೌಂಡ್ ಟ್ರಾಫಿಕ್ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಬೇಕು.
- ಗುರುತನ್ನು ಪರಿಶೀಲಿಸಲಾಗುತ್ತದೆ. ಕಳುಹಿಸುವ ಕ್ಷಣದಲ್ಲಿ ವ್ಯವಸ್ಥೆಯು ಕಳುಹಿಸುವವರ ವಿಳಾಸ ಮತ್ತು ಟ್ರಾನ್ಸ್ಪೋರ್ಟ್ ಸೆಕ್ಯೂರಿಟಿಯನ್ನು (transport security) ಪರಿಶೀಲಿಸಬೇಕು.
- ಪ್ರತಿಯೊಂದೂ ರಸೀದಿಯನ್ನು ಬಿಡುತ್ತದೆ. ದಾಖಲಿಸದ ಕಳುಹುವು ವಿಫಲತೆಯಾಗಿದೆ.
ಇದನ್ನು ಇಂಟರ್ನಲ್ ಲಾಗ್ಸ್ನಂತಹ ಕಡಿಮೆ ಅಪಾಯವಿರುವ ಕಾರ್ಯಗಳಿಗಾಗಿ ನಿರ್ಮಿಸಬೇಡಿ. ತಪ್ಪು ಮಾಡುವುದರಿಂದ ಹಣದ ನಷ್ಟವಾಗುವಾಗ, ಕಾನೂನು ಸಮಸ್ಯೆ ಉಂಟಾಗುವಾಗ ಅಥವಾ ಸಪೋರ್ಟ್ ಟಿಕೆಟ್ ಅಗತ್ಯವಿರುವಾಗ ಇದನ್ನು ಬಳಸಿ.
Optional learning community: https://t.me/GyaanSetuAi
