ຄວາມຢືດຢຸ່ນໃນຊອບແວຫມາຍເຖິງຄວາມສາມາດຂອງແອັບພລິເຄຊັນທີ່ຈະສືບຕໍ່ເຮັດວຽກໄດ້ອຍ່າງລຽບງ່າຍແລະເຊື່ອຖືໄດ້, ເຖິງແມ່ນວ່າຈະປະເຊີນກັບບັນຫາທີ່ບໍ່ຄາດຄິດຫຼືຄວາມລົ້ມເຫລວ. ໃນໂຄງການ Fintech ຄວາມຢືດຢຸ່ນແມ່ນມີຄວາມສໍາຄັນສູງໂດຍສະເພາະຍ້ອນເຫດຜົນຫຼາຍຢ່າງ. ກ່ອນອື່ນ ໝົດ, ບໍລິສັດມີພັນທະທີ່ຈະປະຕິບັດຕາມຂໍ້ກໍານົດດ້ານກົດລະບຽບແລະຜູ້ຄວບຄຸມທາງດ້ານການເງິນເນັ້ນຫນັກໃສ່ຄວາມຢືດຢຸ່ນຂອງການດໍາເນີນງານເພື່ອຮັກສາສະຖຽນລະພາບພາຍໃນລະບົບ. ຍິ່ງໄປກວ່ານັ້ນ, ການແຜ່ຂະຫຍາຍຂອງເຄື່ອງມືດິຈິຕອລແລະການເອື່ອຍອີງຈາກຜູ້ໃຫ້ບໍລິການພາກສ່ວນທີສາມເຮັດໃຫ້ທຸລະກິດ Fintech ມີໄພຂົ່ມຂູ່ຕໍ່ຄວາມປອດໄພເພີ່ມຂຶ້ນ. ຄວາມຢືດຢຸ່ນຍັງຊ່ວຍຫຼຸດຜ່ອນຄວາມສ່ຽງຂອງການເກີດອັກຄີໄພທີ່ເກີດຈາກປັດໃຈຕ່າງໆເຊັ່ນ: ໄພຂົ່ມຂູ່ທາງອິນເຕີເນັດ, ໂລກລະບາດ, ຫຼືເຫດການທາງພູມສາດ, ການປົກປ້ອງການດໍາເນີນທຸລະກິດຫຼັກແລະຊັບສິນທີ່ສໍາຄັນ.
ໂດຍຮູບແບບການຢືດຢຸ່ນ, ພວກເຮົາເຂົ້າໃຈຊຸດຂອງການປະຕິບັດທີ່ດີທີ່ສຸດ ແລະຍຸດທະສາດທີ່ອອກແບບມາເພື່ອຮັບປະກັນວ່າຊອບແວສາມາດທົນຕໍ່ການຂັດຂວາງ ແລະຮັກສາການດໍາເນີນງານຂອງມັນ. ຮູບແບບເຫຼົ່ານີ້ປະຕິບັດຄືກັບຕາຫນ່າງຄວາມປອດໄພ, ສະຫນອງກົນໄກໃນການຈັດການຄວາມຜິດພາດ, ການຄຸ້ມຄອງການໂຫຼດ, ແລະຟື້ນຕົວຈາກຄວາມລົ້ມເຫລວ, ດັ່ງນັ້ນການຮັບປະກັນວ່າຄໍາຮ້ອງສະຫມັກຍັງຄົງແຂງແຮງແລະເຊື່ອຖືໄດ້ພາຍໃຕ້ເງື່ອນໄຂທີ່ບໍ່ດີ.
ຍຸດທະສາດຄວາມຢືດຢຸ່ນທົ່ວໄປທີ່ສຸດລວມມີ bulkhead, cache, fallback, retry, ແລະ circuit breaker. ໃນບົດຄວາມນີ້, ຂ້າພະເຈົ້າຈະປຶກສາຫາລືໃຫ້ເຂົາເຈົ້າໃນລາຍລະອຽດເພີ່ມເຕີມ, ມີຕົວຢ່າງຂອງບັນຫາທີ່ເຂົາເຈົ້າສາມາດຊ່ວຍແກ້ໄຂ.
ໃຫ້ພວກເຮົາພິຈາລະນາການຕັ້ງຄ່າຂ້າງເທິງ. ພວກເຮົາມີແອັບພລິເຄຊັນທົ່ວໄປຫຼາຍທີ່ມີ backends ຫຼາຍອັນຢູ່ຫລັງພວກເຮົາເພື່ອເອົາຂໍ້ມູນບາງຢ່າງຈາກ. ມີລູກຄ້າ HTTP ຫຼາຍອັນທີ່ເຊື່ອມຕໍ່ກັບ backends ເຫຼົ່ານີ້. ມັນ turns ໃຫ້ເຫັນວ່າທັງຫມົດຂອງເຂົາເຈົ້າແບ່ງປັນສະນຸກເກີການເຊື່ອມຕໍ່ດຽວກັນ! ແລະຊັບພະຍາກອນອື່ນໆເຊັ່ນ CPU ແລະ RAM.
ຈະເກີດຫຍັງຂຶ້ນ, ຖ້າຫນຶ່ງໃນ backends ປະສົບບັນຫາບາງອັນທີ່ເຮັດໃຫ້ເກີດຄວາມລ່າຊ້າຂອງຄໍາຮ້ອງຂໍສູງ? ເນື່ອງຈາກເວລາຕອບສະຫນອງສູງ, ສະນຸກເກີການເຊື່ອມຕໍ່ທັງຫມົດຈະກາຍເປັນຄອບຄອງຢ່າງເຕັມທີ່ໂດຍການຮ້ອງຂໍລໍຖ້າຄໍາຕອບຈາກ backend1. ດັ່ງນັ້ນ, ການຮ້ອງຂໍທີ່ມີຈຸດປະສົງສໍາລັບ backend2 ແລະ backend3 ທີ່ມີສຸຂະພາບດີຈະບໍ່ສາມາດດໍາເນີນການໄດ້ເພາະວ່າສະນຸກເກີຫມົດແລ້ວ. ນີ້ຫມາຍຄວາມວ່າຄວາມລົ້ມເຫລວໃນຫນຶ່ງຂອງ backend ຂອງພວກເຮົາສາມາດເຮັດໃຫ້ຄວາມລົ້ມເຫຼວໃນທົ່ວຄໍາຮ້ອງສະຫມັກທັງຫມົດ. ໂດຍຫລັກການແລ້ວ, ພວກເຮົາຕ້ອງການພຽງແຕ່ການທໍາງານທີ່ກ່ຽວຂ້ອງກັບ backend ທີ່ລົ້ມເຫລວທີ່ຈະປະສົບກັບການເຊື່ອມໂຊມ, ໃນຂະນະທີ່ສ່ວນທີ່ເຫຼືອຂອງຄໍາຮ້ອງສະຫມັກຍັງສືບຕໍ່ດໍາເນີນການຕາມປົກກະຕິ.
ຮູບແບບ Bulkhead ແມ່ນຫຍັງ?
ຄໍາວ່າ, ຮູບແບບ Bulkhead, ມາຈາກການກໍ່ສ້າງເຮືອ, ມັນກ່ຽວຂ້ອງກັບການສ້າງຫ້ອງທີ່ໂດດດ່ຽວຫຼາຍພາຍໃນເຮືອ. ຖ້າຫາກວ່າການຮົ່ວໄຫລເກີດຂຶ້ນຢູ່ໃນຊ່ອງຫນຶ່ງ, ມັນເຕັມໄປດ້ວຍນ້ໍາ, ແຕ່ຊ່ອງອື່ນໆຍັງບໍ່ໄດ້ຮັບຜົນກະທົບ. ການໂດດດ່ຽວນີ້ປ້ອງກັນບໍ່ໃຫ້ເຮືອທັງ ໝົດ ຈົມລົງຍ້ອນການລະເມີດຄັ້ງດຽວ.
ຮູບແບບ Bulkhead ສາມາດຖືກນໍາໃຊ້ເພື່ອແຍກປະເພດຕ່າງໆຂອງຊັບພະຍາກອນພາຍໃນແອັບພລິເຄຊັນ, ປ້ອງກັນຄວາມລົ້ມເຫລວໃນສ່ວນຫນຶ່ງຈາກຜົນກະທົບຕໍ່ລະບົບທັງຫມົດ. ນີ້ແມ່ນວິທີທີ່ພວກເຮົາສາມາດໃຊ້ມັນກັບບັນຫາຂອງພວກເຮົາ:
ໃຫ້ສົມມຸດວ່າລະບົບ backend ຂອງພວກເຮົາມີຄວາມເປັນໄປໄດ້ຕໍ່າທີ່ຈະພົບຄວາມຜິດພາດສ່ວນບຸກຄົນ. ຢ່າງໃດກໍຕາມ, ເມື່ອການດໍາເນີນງານກ່ຽວຂ້ອງກັບການສອບຖາມ backends ທັງຫມົດເຫຼົ່ານີ້ໃນຂະຫນານ, ແຕ່ລະຄົນສາມາດສົ່ງຄືນຄວາມຜິດພາດເປັນເອກະລາດ. ເນື່ອງຈາກວ່າຄວາມຜິດພາດເຫຼົ່ານີ້ເກີດຂຶ້ນຢ່າງເປັນເອກະລາດ, ຄວາມເປັນໄປໄດ້ໂດຍລວມຂອງຄວາມຜິດພາດໃນຄໍາຮ້ອງສະຫມັກຂອງພວກເຮົາແມ່ນສູງກວ່າຄວາມເປັນໄປໄດ້ຂອງຄວາມຜິດພາດຂອງ backend ໃດດຽວ. ຄວາມເປັນໄປໄດ້ຂອງຄວາມຜິດພາດສະສົມສາມາດຄິດໄລ່ໄດ້ໂດຍໃຊ້ສູດ P_total=1−(1−p)^n, ເຊິ່ງ n ແມ່ນຈຳນວນຂອງລະບົບ backend.
ຕົວຢ່າງ, ຖ້າພວກເຮົາມີສິບ backends, ແຕ່ລະຄົນມີຄວາມເປັນໄປໄດ້ຂອງຄວາມຜິດພາດຂອງ p = 0.001 (ກົງກັນກັບ SLA ຂອງ 99.9%), ຄວາມເປັນໄປໄດ້ຂອງຄວາມຜິດພາດແມ່ນ:
P_total=1−(1−0.001)^10=0.009955
ນີ້ຫມາຍຄວາມວ່າ SLA ປະສົມປະສານຂອງພວກເຮົາຫຼຸດລົງປະມານ 99%, ສະແດງໃຫ້ເຫັນເຖິງຄວາມຫນ້າເຊື່ອຖືໂດຍລວມຫຼຸດລົງເມື່ອສອບຖາມ backend ຫຼາຍຂະຫນານ. ເພື່ອຫຼຸດຜ່ອນບັນຫານີ້, ພວກເຮົາສາມາດປະຕິບັດ cache ໃນຫນ່ວຍຄວາມຈໍາ.
ແຄດໃນຫນ່ວຍຄວາມຈໍາເຮັດຫນ້າທີ່ເປັນຕົວເກັບຂໍ້ມູນຄວາມໄວສູງ, ເກັບຮັກສາຂໍ້ມູນທີ່ເຂົ້າເຖິງເລື້ອຍໆແລະກໍາຈັດຄວາມຈໍາເປັນທີ່ຈະເອົາມັນມາຈາກແຫຼ່ງທີ່ອາດຈະຊ້າທຸກຄັ້ງ. ເນື່ອງຈາກແຄສທີ່ເກັບໄວ້ໃນຫນ່ວຍຄວາມຈໍາມີໂອກາດ 0% ຂອງຄວາມຜິດພາດເມື່ອທຽບກັບການດຶງຂໍ້ມູນຜ່ານເຄືອຂ່າຍ, ພວກມັນເພີ່ມຄວາມຫນ້າເຊື່ອຖືຂອງຄໍາຮ້ອງສະຫມັກຂອງພວກເຮົາຢ່າງຫຼວງຫຼາຍ. ຍິ່ງໄປກວ່ານັ້ນ, caching ຫຼຸດຜ່ອນການຈະລາຈອນເຄືອຂ່າຍ, ຫຼຸດລົງໂອກາດຂອງຄວາມຜິດພາດ. ດັ່ງນັ້ນ, ໂດຍການນໍາໃຊ້ cache ໃນຫນ່ວຍຄວາມຈໍາ, ພວກເຮົາສາມາດບັນລຸອັດຕາຄວາມຜິດພາດຕ່ໍາກວ່າໃນຄໍາຮ້ອງສະຫມັກຂອງພວກເຮົາເມື່ອທຽບກັບລະບົບ backend ຂອງພວກເຮົາ. ນອກຈາກນັ້ນ, ແຄດໃນຫນ່ວຍຄວາມຈໍາສະເຫນີໃຫ້ດຶງຂໍ້ມູນໄວກວ່າການດຶງຂໍ້ມູນຜ່ານເຄືອຂ່າຍ, ດັ່ງນັ້ນການຫຼຸດຜ່ອນຄວາມລ່າຊ້າຂອງແອັບພລິເຄຊັນ - ປະໂຫຍດທີ່ໂດດເດັ່ນ.
ສໍາລັບຂໍ້ມູນສ່ວນບຸກຄົນ, ເຊັ່ນໂປຣໄຟລ໌ຜູ້ໃຊ້ຫຼືຄໍາແນະນໍາ, ການນໍາໃຊ້ cache ໃນຫນ່ວຍຄວາມຈໍາສາມາດປະສິດທິພາບສູງ. ແຕ່ພວກເຮົາຈໍາເປັນຕ້ອງຮັບປະກັນການຮ້ອງຂໍທັງຫມົດຈາກຜູ້ໃຊ້ຢ່າງຕໍ່ເນື່ອງໄປຫາຕົວຢ່າງຄໍາຮ້ອງສະຫມັກດຽວກັນເພື່ອນໍາໃຊ້ຂໍ້ມູນທີ່ເກັບໄວ້ສໍາລັບພວກເຂົາ, ເຊິ່ງຮຽກຮ້ອງໃຫ້ມີກອງປະຊຸມຫນຽວ. ການປະຕິບັດກອງປະຊຸມຫນຽວສາມາດເປັນສິ່ງທ້າທາຍ, ແຕ່ສໍາລັບສະຖານະການນີ້, ພວກເຮົາບໍ່ຕ້ອງການກົນໄກທີ່ສັບສົນ. ການດຸ່ນດ່ຽງການຈາລະຈອນເລັກນ້ອຍແມ່ນຍອມຮັບໄດ້, ດັ່ງນັ້ນລະບົບການດຸ່ນດ່ຽງການໂຫຼດທີ່ຄົງທີ່ເຊັ່ນ: hashing ທີ່ສອດຄ່ອງຈະພຽງພໍ.
ສິ່ງທີ່ເພີ່ມເຕີມ, ໃນກໍລະນີຂອງຄວາມລົ້ມເຫຼວຂອງ node, hashing ສອດຄ່ອງໃຫ້ແນ່ໃຈວ່າພຽງແຕ່ຜູ້ໃຊ້ທີ່ກ່ຽວຂ້ອງກັບ node ລົ້ມເຫລວ undergo rebalancing, ຫຼຸດຜ່ອນການລົບກວນຂອງລະບົບ. ວິທີການນີ້ເຮັດໃຫ້ການຄຸ້ມຄອງຂອງຖານຄວາມຈໍາສ່ວນບຸກຄົນງ່າຍແລະເພີ່ມຄວາມຫມັ້ນຄົງແລະປະສິດທິພາບໂດຍລວມຂອງຄໍາຮ້ອງສະຫມັກຂອງພວກເຮົາ.
ຖ້າຂໍ້ມູນທີ່ພວກເຮົາຕັ້ງໃຈຈະ cache ແມ່ນສໍາຄັນແລະຖືກນໍາໃຊ້ໃນທຸກຄໍາຮ້ອງຂໍທີ່ລະບົບຂອງພວກເຮົາຈັດການ, ເຊັ່ນ: ນະໂຍບາຍການເຂົ້າເຖິງ, ແຜນການສະຫມັກ, ຫຼືຫນ່ວຍງານທີ່ສໍາຄັນອື່ນໆໃນໂດເມນຂອງພວກເຮົາ - ແຫຼ່ງຂໍ້ມູນນີ້ສາມາດເຮັດໃຫ້ເກີດຄວາມລົ້ມເຫຼວທີ່ສໍາຄັນໃນລະບົບຂອງພວກເຮົາ. ເພື່ອແກ້ໄຂສິ່ງທ້າທາຍນີ້, ວິທີການຫນຶ່ງແມ່ນເພື່ອ replicate ຂໍ້ມູນນີ້ຢ່າງເຕັມສ່ວນໂດຍກົງໃນຄວາມຊົງຈໍາຂອງຄໍາຮ້ອງສະຫມັກຂອງພວກເຮົາ.
ໃນສະຖານະການນີ້, ຖ້າປະລິມານຂໍ້ມູນໃນແຫຼ່ງສາມາດຈັດການໄດ້, ພວກເຮົາສາມາດເລີ່ມຕົ້ນຂະບວນການໂດຍການດາວໂຫລດຮູບພາບຂອງຂໍ້ມູນນີ້ໃນຕອນເລີ່ມຕົ້ນຂອງຄໍາຮ້ອງສະຫມັກຂອງພວກເຮົາ. ຫຼັງຈາກນັ້ນ, ພວກເຮົາສາມາດໄດ້ຮັບເຫດການອັບເດດເພື່ອຮັບປະກັນວ່າຂໍ້ມູນ cache ຍັງຄົງ synchronized ກັບແຫຼ່ງ. ໂດຍການໃຊ້ວິທີການນີ້, ພວກເຮົາເສີມຂະຫຍາຍຄວາມຫນ້າເຊື່ອຖືຂອງການເຂົ້າເຖິງຂໍ້ມູນທີ່ສໍາຄັນນີ້, ຍ້ອນວ່າການດຶງຂໍ້ມູນແຕ່ລະຄັ້ງເກີດຂື້ນໂດຍກົງຈາກຫນ່ວຍຄວາມຈໍາທີ່ມີຄວາມເປັນໄປໄດ້ຂອງຄວາມຜິດພາດ 0%. ນອກຈາກນັ້ນ, ການດຶງຂໍ້ມູນຈາກຫນ່ວຍຄວາມຈໍາແມ່ນໄວເປັນພິເສດ, ດັ່ງນັ້ນການເພີ່ມປະສິດທິພາບຂອງຄໍາຮ້ອງສະຫມັກຂອງພວກເຮົາ. ຍຸດທະສາດນີ້ຫຼຸດຜ່ອນຄວາມສ່ຽງທີ່ກ່ຽວຂ້ອງກັບການອີງໃສ່ແຫຼ່ງຂໍ້ມູນພາຍນອກຢ່າງມີປະສິດທິພາບ, ຮັບປະກັນການເຂົ້າເຖິງຂໍ້ມູນທີ່ສໍາຄັນທີ່ສອດຄ່ອງ ແລະເຊື່ອຖືໄດ້ສໍາລັບການປະຕິບັດງານຂອງແອັບພລິເຄຊັນຂອງພວກເຮົາ.
ຢ່າງໃດກໍ່ຕາມ, ຄວາມຕ້ອງການທີ່ຈະດາວໂຫລດຂໍ້ມູນໃນການເລີ່ມຕົ້ນແອັບພລິເຄຊັນ, ດັ່ງນັ້ນການຊັກຊ້າຂອງຂະບວນການເລີ່ມຕົ້ນ, ລະເມີດຫຼັກການຫນຶ່ງຂອງ 'ຄໍາຮ້ອງສະຫມັກ 12 ປັດໃຈ' ທີ່ສະຫນັບສະຫນູນການເລີ່ມຕົ້ນຄໍາຮ້ອງສະຫມັກຢ່າງໄວວາ. ແຕ່, ພວກເຮົາບໍ່ຕ້ອງການທີ່ຈະສູນເສຍຜົນປະໂຫຍດຂອງການນໍາໃຊ້ຖານຄວາມຈໍາ. ເພື່ອແກ້ໄຂຄວາມຫຍຸ້ງຍາກນີ້, ໃຫ້ຄົ້ນຫາວິທີແກ້ໄຂທີ່ເປັນໄປໄດ້.
ການເລີ່ມຕົ້ນໄວແມ່ນສໍາຄັນ, ໂດຍສະເພາະສໍາລັບແພລະຕະຟອມເຊັ່ນ Kubernetes, ເຊິ່ງອີງໃສ່ການຍ້າຍແອັບພລິເຄຊັນໄວໄປສູ່ໂຫນດທາງດ້ານຮ່າງກາຍທີ່ແຕກຕ່າງກັນ. ໂຊກດີ, Kubernetes ສາມາດຈັດການແອັບພລິເຄຊັນທີ່ເລີ່ມຊ້າໂດຍໃຊ້ຄຸນສົມບັດຕ່າງໆ ເຊັ່ນ: ການສືບສວນການເລີ່ມຕົ້ນ.
ສິ່ງທ້າທາຍອີກອັນໜຶ່ງທີ່ພວກເຮົາອາດຈະປະເຊີນແມ່ນການປັບປຸງການຕັ້ງຄ່າໃນຂະນະທີ່ແອັບພລິເຄຊັນກຳລັງເຮັດວຽກຢູ່. ເລື້ອຍໆ, ການປັບເວລາ cache ຫຼືການຮ້ອງຂໍການຫມົດເວລາແມ່ນມີຄວາມຈໍາເປັນເພື່ອແກ້ໄຂບັນຫາການຜະລິດ. ເຖິງແມ່ນວ່າພວກເຮົາສາມາດນໍາໄປໃຊ້ໄຟລ໌ການຕັ້ງຄ່າທີ່ປັບປຸງໃຫ້ທັນກັບຄໍາຮ້ອງສະຫມັກຂອງພວກເຮົາ, ໂດຍທົ່ວໄປແລ້ວການນໍາໃຊ້ການປ່ຽນແປງເຫຼົ່ານີ້ຮຽກຮ້ອງໃຫ້ມີການເລີ່ມຕົ້ນໃຫມ່. ດ້ວຍການຂະຫຍາຍເວລາເລີ່ມຕົ້ນຂອງແຕ່ລະແອັບພລິເຄຊັນ, ການຣີສະຕາດແບບມ້ວນສາມາດຊັກຊ້າໃນການນຳໃຊ້ການແກ້ໄຂໃຫ້ກັບຜູ້ໃຊ້ຂອງພວກເຮົາ.
ເພື່ອແກ້ໄຂບັນຫານີ້, ການແກ້ໄຂຫນຶ່ງແມ່ນເພື່ອເກັບຮັກສາການຕັ້ງຄ່າຢູ່ໃນຕົວແປພ້ອມໆກັນແລະມີກະທູ້ພື້ນຫລັງການປັບປຸງເປັນໄລຍະໆ. ຢ່າງໃດກໍຕາມ, ຕົວກໍານົດການສະເພາະໃດຫນຶ່ງເຊັ່ນ: ການຫມົດເວລາການຮ້ອງຂໍ HTTP, ອາດຈະຮຽກຮ້ອງໃຫ້ມີການ reinitialing HTTP ຫຼືລູກຄ້າຖານຂໍ້ມູນໃນເວລາທີ່ການປ່ຽນແປງການຕັ້ງຄ່າທີ່ສອດຄ້ອງກັນ, posing ສິ່ງທ້າທາຍທີ່ເປັນໄປໄດ້. ແຕ່, ລູກຄ້າບາງຄົນ, ເຊັ່ນຄົນຂັບ Cassandra ສໍາລັບ Java, ສະຫນັບສະຫນູນການໂຫຼດໃຫມ່ຂອງການຕັ້ງຄ່າອັດຕະໂນມັດ, ເຮັດໃຫ້ຂະບວນການນີ້ງ່າຍຂຶ້ນ.
ການປະຕິບັດການຕັ້ງຄ່າທີ່ສາມາດໂຫຼດຄືນໄດ້ສາມາດຫຼຸດຜ່ອນຜົນກະທົບທາງລົບຂອງເວລາເລີ່ມຕົ້ນຄໍາຮ້ອງສະຫມັກທີ່ຍາວນານແລະສະເຫນີຜົນປະໂຫຍດເພີ່ມເຕີມ, ເຊັ່ນ: ການອໍານວຍຄວາມສະດວກໃນການປະຕິບັດທຸງຄຸນນະສົມບັດ. ວິທີການນີ້ຊ່ວຍໃຫ້ພວກເຮົາຮັກສາຄວາມຫນ້າເຊື່ອຖືຂອງຄໍາຮ້ອງສະຫມັກແລະການຕອບສະຫນອງໃນຂະນະທີ່ການຄຸ້ມຄອງການປັບປຸງການຕັ້ງຄ່າຢ່າງມີປະສິດທິພາບ.
ຕອນນີ້ໃຫ້ພວກເຮົາພິຈາລະນາບັນຫາອື່ນອີກ: ໃນລະບົບຂອງພວກເຮົາ, ເມື່ອຄໍາຮ້ອງຂໍຂອງຜູ້ໃຊ້ໄດ້ຮັບແລະດໍາເນີນການໂດຍການສົ່ງຄໍາຖາມໄປຫາ backend ຫຼືຖານຂໍ້ມູນ, ບາງຄັ້ງ, ຄໍາຕອບຂອງຄວາມຜິດພາດແມ່ນໄດ້ຮັບແທນທີ່ຈະເປັນຂໍ້ມູນທີ່ຄາດໄວ້. ຫຼັງຈາກນັ້ນ, ລະບົບຂອງພວກເຮົາຕອບສະຫນອງຜູ້ໃຊ້ດ້ວຍ 'ຄວາມຜິດພາດ'.
ຢ່າງໃດກໍຕາມ, ໃນຫຼາຍໆສະຖານະການ, ມັນອາດຈະດີກວ່າທີ່ຈະສະແດງຂໍ້ມູນລ້າສະໄຫມເລັກນ້ອຍພ້ອມກັບຂໍ້ຄວາມທີ່ຊີ້ໃຫ້ເຫັນວ່າມີການຊັກຊ້າການໂຫຼດຫນ້າຈໍຄືນຂໍ້ມູນ, ແທນທີ່ຈະເຮັດໃຫ້ຜູ້ໃຊ້ມີຂໍ້ຄວາມສະແດງຂໍ້ຜິດພາດສີແດງໃຫຍ່.
ເພື່ອແກ້ໄຂບັນຫານີ້ແລະປັບປຸງພຶດຕິກໍາຂອງລະບົບຂອງພວກເຮົາ, ພວກເຮົາສາມາດປະຕິບັດຮູບແບບ Fallback ໄດ້. ແນວຄວາມຄິດທີ່ຢູ່ເບື້ອງຫລັງຮູບແບບນີ້ກ່ຽວຂ້ອງກັບການມີແຫຼ່ງຂໍ້ມູນຮອງ, ເຊິ່ງອາດມີຂໍ້ມູນທີ່ມີຄຸນນະພາບຕ່ໍາຫຼືຄວາມສົດໃຫມ່ເມື່ອທຽບກັບແຫຼ່ງຕົ້ນຕໍ. ຖ້າແຫຼ່ງຂໍ້ມູນຕົ້ນຕໍບໍ່ສາມາດໃຊ້ໄດ້ຫຼືສົ່ງຄືນຂໍ້ຜິດພາດ, ລະບົບສາມາດກັບຄືນໄປຫາການດຶງຂໍ້ມູນຈາກແຫຼ່ງຮອງນີ້, ໃຫ້ແນ່ໃຈວ່າຂໍ້ມູນບາງຮູບແບບຖືກນໍາສະເຫນີໃຫ້ຜູ້ໃຊ້ແທນທີ່ຈະສະແດງຂໍ້ຄວາມສະແດງຂໍ້ຜິດພາດ.
ຖ້າທ່ານເບິ່ງຮູບຂ້າງເທິງ, ທ່ານຈະສັງເກດເຫັນຄວາມຄ້າຍຄືກັນລະຫວ່າງບັນຫາທີ່ພວກເຮົາກໍາລັງປະເຊີນໃນຕອນນີ້ແລະສິ່ງທີ່ພວກເຮົາພົບກັບຕົວຢ່າງ cache.
ເພື່ອແກ້ໄຂມັນ, ພວກເຮົາສາມາດພິຈາລະນາການປະຕິບັດຮູບແບບທີ່ເອີ້ນວ່າ retry. ແທນທີ່ຈະອີງໃສ່ຖານຄວາມຈໍາ, ລະບົບສາມາດຖືກອອກແບບເພື່ອສົ່ງຄໍາຮ້ອງຂໍຄືນໃຫມ່ໂດຍອັດຕະໂນມັດໃນກໍລະນີທີ່ມີຂໍ້ຜິດພາດ. ຮູບແບບການລອງອີກຄັ້ງນີ້ສະເໜີທາງເລືອກທີ່ງ່າຍກວ່າ ແລະສາມາດຫຼຸດຜ່ອນຄວາມເປັນໄປໄດ້ຂອງຄວາມຜິດພາດໃນແອັບພລິເຄຊັນຂອງພວກເຮົາໄດ້ຢ່າງມີປະສິດທິພາບ ບໍ່ເຫມືອນກັບຖານຄວາມຈໍາ, ເຊິ່ງມັກຈະຕ້ອງການກົນໄກການກວດສອບ cache ທີ່ສັບສົນເພື່ອຈັດການກັບການປ່ຽນແປງຂໍ້ມູນ, ການພະຍາຍາມຄືນຄໍາຮ້ອງຂໍທີ່ລົ້ມເຫລວແມ່ນຂ້ອນຂ້າງກົງໄປກົງມາເພື່ອປະຕິບັດ. ເນື່ອງຈາກການບໍ່ຖືກຕ້ອງ cache ໄດ້ຖືກພິຈາລະນາຢ່າງກວ້າງຂວາງວ່າເປັນຫນຶ່ງໃນວຽກງານທີ່ທ້າທາຍທີ່ສຸດໃນວິສະວະກໍາຊອບແວ, ການໃຊ້ຍຸດທະສາດການລອງໃຫມ່ສາມາດປັບປຸງການຈັດການຄວາມຜິດພາດແລະປັບປຸງຄວາມຢືດຢຸ່ນຂອງລະບົບ.
ຢ່າງໃດກໍ່ຕາມ, ການໃຊ້ຍຸດທະສາດການລອງຄືນໃຫມ່ໂດຍບໍ່ຄໍານຶງເຖິງຜົນສະທ້ອນທີ່ອາດຈະເກີດຂຶ້ນສາມາດນໍາໄປສູ່ຄວາມສັບສົນຕື່ມອີກ.
ຂໍໃຫ້ຈິນຕະນາການຫນຶ່ງໃນ backends ຂອງພວກເຮົາປະສົບກັບຄວາມລົ້ມເຫລວ. ໃນສະຖານະການດັ່ງກ່າວ, ການລິເລີ່ມການພະຍາຍາມກັບຄືນໄປບ່ອນທີ່ລົ້ມເຫລວອາດຈະເຮັດໃຫ້ປະລິມານການຈະລາຈອນເພີ່ມຂຶ້ນຢ່າງຫຼວງຫຼາຍ. ການຈະລາຈອນທີ່ເພີ່ມຂຶ້ນຢ່າງກະທັນຫັນນີ້ອາດຈະ overwhelm backend, exacerbating ຄວາມລົ້ມເຫຼວແລະອາດຈະເຮັດໃຫ້ເກີດຜົນກະທົບເປັນ cascade ໃນທົ່ວລະບົບ.
ເພື່ອຮັບມືກັບສິ່ງທ້າທາຍນີ້, ມັນເປັນສິ່ງສໍາຄັນທີ່ຈະເສີມສ້າງຮູບແບບການລອງຄືນໃຫມ່ດ້ວຍຮູບແບບຕົວຕັດວົງຈອນ. ເຄື່ອງຕັດວົງຈອນເຮັດຫນ້າທີ່ເປັນກົນໄກປ້ອງກັນທີ່ຕິດຕາມອັດຕາຄວາມຜິດພາດຂອງການບໍລິການລົງລຸ່ມ. ເມື່ອອັດຕາຄວາມຜິດພາດເກີນຂອບເຂດທີ່ກໍານົດໄວ້ກ່ອນ, ຕົວຕັດວົງຈອນຂັດຂວາງການຮ້ອງຂໍໃຫ້ການບໍລິການທີ່ໄດ້ຮັບຜົນກະທົບໃນໄລຍະເວລາທີ່ກໍານົດໄວ້. ໃນລະຫວ່າງໄລຍະເວລານີ້, ລະບົບປະຕິເສດການສົ່ງຄໍາຮ້ອງຂໍເພີ່ມເຕີມເພື່ອໃຫ້ເວລາການບໍລິການທີ່ລົ້ມເຫລວໃນການຟື້ນຕົວ. ຫຼັງຈາກໄລຍະເວລາທີ່ກໍານົດ, breaker ວົງຈອນລະມັດລະວັງອະນຸຍາດໃຫ້ຈໍານວນຈໍາກັດຂອງການຮ້ອງຂໍຜ່ານ, ກວດສອບວ່າການບໍລິການໄດ້ສະຖຽນລະພາບ. ຖ້າການບໍລິການຟື້ນຟູການສັນຈອນປົກກະຕິແມ່ນຄ່ອຍໆຟື້ນຟູ; ຖ້າບໍ່ດັ່ງນັ້ນ, ວົງຈອນຍັງເປີດຢູ່, ສືບຕໍ່ປິດການຮ້ອງຂໍຈົນກ່ວາການບໍລິການຈະດໍາເນີນການປົກກະຕິ. ໂດຍການລວມເອົາຮູບແບບຕົວຕັດວົງຈອນພ້ອມກັບເຫດຜົນການລອງອີກຄັ້ງ, ພວກເຮົາສາມາດຈັດການສະຖານະການຄວາມຜິດພາດໄດ້ຢ່າງມີປະສິດທິພາບ ແລະ ປ້ອງກັນການໂຫຼດຂອງລະບົບຫຼາຍເກີນໄປໃນລະຫວ່າງຄວາມລົ້ມເຫຼວຂອງ backend.
ສະຫຼຸບແລ້ວ, ໂດຍການຈັດຕັ້ງປະຕິບັດຮູບແບບການຢືດຢຸ່ນເຫຼົ່ານີ້, ພວກເຮົາສາມາດສ້າງຄວາມເຂັ້ມແຂງໃຫ້ກັບຄໍາຮ້ອງສະຫມັກຂອງພວກເຮົາຕໍ່ກັບເຫດການສຸກເສີນ, ຮັກສາຄວາມພ້ອມໃຫ້ສູງ, ແລະສົ່ງປະສົບການທີ່ບໍ່ມີຮອຍຕໍ່ໃຫ້ກັບຜູ້ໃຊ້. ນອກຈາກນັ້ນ, ຂ້າພະເຈົ້າຕ້ອງການເນັ້ນຫນັກວ່າ telemetry ແມ່ນຍັງເປັນເຄື່ອງມືທີ່ບໍ່ຄວນເບິ່ງຂ້າມໃນເວລາທີ່ສະຫນອງຄວາມຢືດຢຸ່ນຂອງໂຄງການ. ບັນທຶກແລະການວັດແທກທີ່ດີສາມາດປັບປຸງຄຸນນະພາບຂອງການບໍລິການຢ່າງຫຼວງຫຼາຍແລະໃຫ້ຄວາມເຂົ້າໃຈທີ່ມີຄຸນຄ່າໃນການປະຕິບັດຂອງພວກເຂົາ, ຊ່ວຍໃຫ້ການຕັດສິນໃຈທີ່ມີຂໍ້ມູນເພື່ອປັບປຸງພວກມັນຕື່ມອີກ.