প্রসঙ্গ সংরক্ষণ করার সময় ব্যতিক্রম রেকর্ড করার জন্য একটি পাইথন ডেকোরেটর তৈরি করা

প্রসঙ্গ সংরক্ষণ করার সময় ব্যতিক্রম রেকর্ড করার জন্য একটি পাইথন ডেকোরেটর তৈরি করা
Exception

Azure ফাংশন ইভেন্ট প্রসেসিং-এ স্ট্রীমলাইনিং এরর হ্যান্ডলিং

স্কেলযোগ্য সিস্টেম তৈরি করার সময়, ব্যতিক্রমগুলিকে সুন্দরভাবে পরিচালনা করা অত্যন্ত গুরুত্বপূর্ণ, বিশেষ করে Azure ফাংশনের মতো পরিষেবাগুলিতে। এই ফাংশনগুলি প্রায়শই ইনকামিং ইভেন্টগুলির সাথে মোকাবিলা করে, যেখানে ক্ষণস্থায়ী সমস্যা বা ত্রুটিপূর্ণ পেলোড থেকে ত্রুটি দেখা দিতে পারে। 🛠️

সাম্প্রতিক একটি প্রকল্পে, আমি এমন একটি দৃশ্যের সম্মুখীন হয়েছি যেখানে আমার পাইথন-ভিত্তিক Azure ফাংশনটি একাধিক JSON ইভেন্ট প্রক্রিয়া করার প্রয়োজন ছিল। প্রতিটি ইভেন্টকে যাচাই করা এবং প্রক্রিয়া করা উচিত ছিল, কিন্তু `JSONDecodeError` বা `ValueError` এর মতো ত্রুটি ঘটতে পারে, যা সমগ্র প্রবাহকে ব্যাহত করে। আমার চ্যালেঞ্জ? মূল বার্তা এবং প্রসঙ্গ সংরক্ষণ করার সময় সমস্ত ব্যতিক্রম মোড়ানোর জন্য একটি ডেকোরেটর প্রয়োগ করুন।

শত শত ইভেন্ট বার্তা পাওয়ার কল্পনা করুন, যেখানে একটি একক সমস্যা পাইপলাইনকে থামিয়ে দেয়। পেলোডে একটি অনুপস্থিত ক্ষেত্র বা এমনকি একটি বহিরাগত API অপ্রত্যাশিতভাবে ব্যর্থ হওয়ার কারণে এটি ঘটতে পারে। লক্ষ্যটি কেবল ত্রুটিটি লগ করাই নয় বরং মূল বার্তা এবং ব্যতিক্রমটিকে একটি সামঞ্জস্যপূর্ণ বিন্যাসে এনক্যাপসুলেট করা, সনাক্তযোগ্যতা নিশ্চিত করা।

এটি সমাধান করার জন্য, আমি পাইথনের ডেকোরেটর ব্যবহার করে একটি সমাধান তৈরি করেছি। এই পদ্ধতিটি শুধুমাত্র কোন উত্থাপিত ব্যতিক্রমগুলিকে ক্যাপচার করেনি বরং আরও প্রক্রিয়াকরণের জন্য প্রাসঙ্গিক ডেটাও ফরোয়ার্ড করেছে। আপনার ডেটার অখণ্ডতা বজায় রেখে এই প্রয়োজনীয়তাগুলি পূরণ করে এমন একটি শক্তিশালী ত্রুটি-হ্যান্ডলিং প্রক্রিয়া কীভাবে বাস্তবায়ন করা যায় সে সম্পর্কে আমাকে আপনাকে গাইড করতে দিন। 🚀

আদেশ ব্যবহারের উদাহরণ
functools.wraps এটি ডেকোরেটরগুলিতে মূল ফাংশনের মেটাডেটা সংরক্ষণ করতে ব্যবহৃত হয়, যেমন এর নাম এবং ডকস্ট্রিং। এটি নিশ্চিত করে যে র্যাপার ফাংশন মূল বৈশিষ্ট্যগুলিকে ওভাররাইড করে না।
json.loads একটি JSON স্ট্রিংকে একটি পাইথন অভিধানে রূপান্তর করে, যা Azure ফাংশনে ইনকামিং ইভেন্ট বার্তাগুলিকে ডিসিরিয়ালাইজ করার জন্য প্রয়োজনীয়।
logging.error ব্যতিক্রম পরিচালনার সময় ত্রুটি বার্তা লগ করতে ব্যবহৃত হয়, যা উত্পাদন সিস্টেমে সমস্যাগুলি ডিবাগিং এবং ট্র্যাক করার জন্য গুরুত্বপূর্ণ।
raise Exception স্পষ্টভাবে একটি ব্যতিক্রম উত্থাপন করে, মূল ব্যতিক্রম বার্তাটিকে অতিরিক্ত প্রসঙ্গের সাথে একত্রিত করে, যেমন মূল বার্তাটি প্রক্রিয়া করা হচ্ছে।
async def একটি অ্যাসিঙ্ক্রোনাস ফাংশন সংজ্ঞায়িত করে, পাইথনে একযোগে একাধিক অনুরোধ পরিচালনা করার মতো নন-ব্লকিং ক্রিয়াকলাপগুলিকে সক্ষম করে।
httpx.AsyncClient অ্যাসিঙ্ক্রোনাস HTTP অনুরোধ করার জন্য একটি নির্দিষ্ট HTTP ক্লায়েন্ট, Azure ফাংশনে বহিরাগত API-এর সাথে ইন্টারঅ্যাক্ট করার সময় বিশেষভাবে সহায়ক।
@ErrorHandler ত্রুটি পরিচালনা এবং প্রসঙ্গ ধরে রাখার জন্য ফাংশনগুলি মোড়ানোর জন্য ক্লাস-ভিত্তিক সমাধানের একটি ডেকোরেটর।
middleware একটি কাস্টম মিডলওয়্যার ফাংশন একটি কেন্দ্রীভূত পদ্ধতিতে একাধিক ফাংশন কলের জন্য ব্যতিক্রম এবং লগ বার্তাগুলি পরিচালনা করতে একটি স্তর হিসাবে কাজ করে।
asyncio.run একটি সিঙ্ক্রোনাস প্রেক্ষাপটে অ্যাসিঙ্ক্রোনাস ফাংশন চালানোর জন্য ব্যবহৃত হয়, যা স্ক্রিপ্টে অ্যাসিঙ্ক পদ্ধতির সহজ পরীক্ষার অনুমতি দেয়।
KeyError একটি অভিধানে প্রয়োজনীয় কী অনুপস্থিত থাকলে স্পষ্টভাবে উত্থাপিত হয়, যেমন JSON পেলোডে একটি অনুপস্থিত ক্ষেত্র।

পাইথনে একটি শক্তিশালী ব্যতিক্রম হ্যান্ডলিং মেকানিজম তৈরি করা

পাইথনে, ডেকোরেটররা ফাংশনগুলির আচরণকে উন্নত বা সংশোধন করার একটি শক্তিশালী উপায় প্রদান করে, যা তাদেরকে কেন্দ্রীভূত পদ্ধতিতে ব্যতিক্রমগুলি পরিচালনা করার জন্য আদর্শ করে তোলে। উপরের উদাহরণগুলিতে, ডেকোরেটর ব্যতিক্রমগুলিকে আটকাতে লক্ষ্য ফাংশনটি মোড়ক করে। যখন একটি ব্যতিক্রম উত্থাপিত হয়, ডেকোরেটর ত্রুটিটি লগ করে এবং মূল প্রসঙ্গ সংরক্ষণ করে, যেমন ইনকামিং ইভেন্ট বার্তা। এটি নিশ্চিত করে যে এক্সিকিউশন প্রবাহের সময় ত্রুটির তথ্য হারিয়ে যাবে না। এটি বিশেষত Azure ফাংশনের মতো পরিষেবাগুলিতে কার্যকর, যেখানে ক্ষণস্থায়ী ত্রুটি এবং অবৈধ পেলোডগুলি ডিবাগ করার জন্য প্রসঙ্গ বজায় রাখা অত্যন্ত গুরুত্বপূর্ণ। 🛠️

এর ব্যবহার সমাধানের আরেকটি গুরুত্বপূর্ণ দিক। `async def` এর সাথে ফাংশন সংজ্ঞায়িত করে এবং `asyncio` লাইব্রেরি ব্যবহার করে, স্ক্রিপ্টগুলি প্রধান থ্রেড ব্লক না করে একসাথে একাধিক অপারেশন পরিচালনা করে। উদাহরণস্বরূপ, ইভেন্ট হাব থেকে বার্তাগুলি প্রক্রিয়া করার সময়, স্ক্রিপ্টটি পেলোড যাচাই করতে পারে, API কলগুলি সম্পাদন করতে পারে এবং একই সাথে ত্রুটিগুলি লগ করতে পারে৷ এই নন-ব্লকিং আচরণ কর্মক্ষমতা এবং মাপযোগ্যতা বাড়ায়, বিশেষ করে উচ্চ-থ্রুপুট পরিবেশে যেখানে বিলম্ব ব্যয়বহুল।

মিডলওয়্যার এবং ক্লাস-ভিত্তিক ডেকোরেটর সমাধানগুলি নমনীয়তার একটি অতিরিক্ত স্তর নিয়ে আসে। মিডলওয়্যার একাধিক ফাংশন কলের জন্য একটি কেন্দ্রীভূত ত্রুটি-হ্যান্ডলিং স্তর হিসাবে কাজ করে, সামঞ্জস্যপূর্ণ লগিং এবং ব্যতিক্রম ব্যবস্থাপনা নিশ্চিত করে। ইতিমধ্যে, ক্লাস-ভিত্তিক ডেকোরেটর যেকোন ফাংশন মোড়ানোর জন্য একটি পুনঃব্যবহারযোগ্য কাঠামো প্রদান করে, যা অ্যাপ্লিকেশনের বিভিন্ন অংশে কাস্টম ত্রুটি-হ্যান্ডলিং যুক্তি প্রয়োগ করা সহজ করে তোলে। উদাহরণস্বরূপ, JSON বার্তাগুলির একটি ব্যাচ প্রক্রিয়া করার সময়, মিডলওয়্যার প্রতিটি বার্তার জন্য পৃথকভাবে সমস্যাগুলি লগ করতে পারে যখন সম্পূর্ণ প্রক্রিয়াটি একটি একক ত্রুটি দ্বারা বন্ধ না হয় তা নিশ্চিত করে৷ 🚀

অবশেষে, সমাধানগুলি পাইথনের উন্নত লাইব্রেরিগুলি ব্যবহার করে অ্যাসিঙ্ক্রোনাস HTTP অনুরোধের জন্য। এই লাইব্রেরিটি স্ক্রিপ্টটিকে এক্সটার্নাল এপিআইগুলির সাথে পারস্পরিক যোগাযোগ করতে সক্ষম করে, যেমন অ্যাক্সেস ম্যানেজার, দক্ষতার সাথে। এই API কলগুলিকে ডেকোরেটরে মোড়ানোর মাধ্যমে, যেকোন এইচটিটিপি-সম্পর্কিত ত্রুটিগুলি ক্যাপচার করা হয়, লগ করা হয় এবং মূল বার্তার সাথে পুনরায় উত্থাপন করা হয়। এটি নিশ্চিত করে যে এমনকি যখন একটি বহিরাগত পরিষেবা ব্যর্থ হয়, সিস্টেমটি কী ভুল হয়েছে এবং কেন সে সম্পর্কে স্বচ্ছতা বজায় রাখে। এই কৌশলগুলি, একত্রিত, পাইথনে শক্তিশালী ব্যতিক্রম পরিচালনার জন্য একটি ব্যাপক কাঠামো তৈরি করে।

প্রসঙ্গ সহ ব্যতিক্রমগুলি ক্যাপচার এবং লগ করার জন্য একটি পাইথন ডেকোরেটর ডিজাইন করা

এই সমাধানটি ব্যাকএন্ড স্ক্রিপ্টিংয়ের জন্য পাইথন ব্যবহার করে, মূল প্রসঙ্গ ধরে রেখে ব্যতিক্রমগুলি পরিচালনা করার জন্য মডুলার এবং পুনঃব্যবহারযোগ্য নকশা নীতিগুলিতে ফোকাস করে।

import functools
import logging
# Define a custom decorator for error handling
def error_handler_decorator(func):
    @functools.wraps(func)
    async def wrapper(*args, kwargs):
        original_message = kwargs.get("eventHubMessage", "Unknown message")
        try:
            return await func(*args, kwargs)
        except Exception as e:
            logging.error(f"Error: {e}. Original message: {original_message}")
            # Re-raise with combined context
            raise Exception(f"{e} | Original message: {original_message}")
    return wrapper
# Example usage
@error_handler_decorator
async def main(eventHubMessage):
    data = json.loads(eventHubMessage)
    logging.info(f"Processing data: {data}")
    # Simulate potential error
    if not data.get("RequestID"):
        raise ValueError("Missing RequestID")
    # Simulate successful processing
    return "Processed successfully"
# Test
try:
    import asyncio
    asyncio.run(main(eventHubMessage='{"ProductType": "Test"}'))
except Exception as e:
    print(f"Caught exception: {e}")

ক্লাস ব্যবহার করে একটি স্ট্রাকচার্ড ত্রুটি হ্যান্ডলিং পদ্ধতি তৈরি করা

এই সমাধানটি আরও কাঠামোগত উপায়ে ব্যতিক্রমগুলি পরিচালনা করার জন্য মডুলারিটি এবং পুনঃব্যবহারযোগ্যতা উন্নত করতে একটি পাইথন ক্লাস-ভিত্তিক ডেকোরেটর ব্যবহার করে।

import logging
# Define a class-based decorator
class ErrorHandler:
    def __init__(self, func):
        self.func = func
    async def __call__(self, *args, kwargs):
        original_message = kwargs.get("eventHubMessage", "Unknown message")
        try:
            return await self.func(*args, kwargs)
        except Exception as e:
            logging.error(f"Error: {e}. Original message: {original_message}")
            raise Exception(f"{e} | Original message: {original_message}")
# Example usage
@ErrorHandler
async def process_event(eventHubMessage):
    data = json.loads(eventHubMessage)
    logging.info(f"Data: {data}")
    if "RequestType" not in data:
        raise KeyError("Missing RequestType")
    return "Event processed!"
# Test
try:
    import asyncio
    asyncio.run(process_event(eventHubMessage='{"RequestID": "123"}'))
except Exception as e:
    print(f"Caught exception: {e}")

গ্লোবাল এক্সেপশন হ্যান্ডলিং-এর জন্য মিডলওয়্যারের সুবিধা

এই সমাধানটি পাইথনে একটি মিডলওয়্যার-এর মতো কাঠামো প্রয়োগ করে, একাধিক ফাংশন কল জুড়ে ব্যতিক্রমগুলির কেন্দ্রীভূত পরিচালনার অনুমতি দেয়।

import logging
async def middleware(handler, message):
    try:
        return await handler(message)
    except Exception as e:
        logging.error(f"Middleware caught error: {e} | Message: {message}")
        raise
# Handlers
async def handler_one(message):
    if not message.get("ProductType"):
        raise ValueError("Missing ProductType")
    return "Handler one processed."
# Test middleware
message = {"RequestID": "123"}
try:
    import asyncio
    asyncio.run(middleware(handler_one, message))
except Exception as e:
    print(f"Middleware exception: {e}")

ডিস্ট্রিবিউটেড সিস্টেমে ব্যতিক্রম হ্যান্ডলিং উন্নত করা

ডিস্ট্রিবিউটেড সিস্টেমগুলির সাথে ডিল করার সময়, যেমন Azure ফাংশন ইভেন্ট হাব বিষয়গুলি শোনা, শক্তিশালী ব্যতিক্রম হ্যান্ডলিং সিস্টেমের নির্ভরযোগ্যতার ভিত্তি হয়ে ওঠে। একটি গুরুত্বপূর্ণ দিক যা প্রায়ই উপেক্ষা করা হয় তা হল ব্যতিক্রমগুলিকে ট্র্যাক করার এবং মূল প্রেক্ষাপটের সাথে সম্পর্কযুক্ত করার ক্ষমতা যেখানে তারা ঘটেছে। এই প্রেক্ষাপটে প্রসেস করা পেলোড এবং টাইমস্ট্যাম্প বা শনাক্তকারীর মতো মেটাডেটা অন্তর্ভুক্ত রয়েছে। উদাহরণস্বরূপ, একটি বিকৃত JSON পেলোড সহ একটি ইভেন্ট প্রক্রিয়া করার কল্পনা করুন। সঠিক ব্যতিক্রম হ্যান্ডলিং ছাড়া, এই ধরনের পরিস্থিতি ডিবাগ করা একটি দুঃস্বপ্ন হয়ে উঠতে পারে। মূল বার্তাটি ধরে রেখে এবং ত্রুটির লগের সাথে একত্রিত করে, আমরা একটি স্বচ্ছ এবং দক্ষ ডিবাগিং ওয়ার্কফ্লো তৈরি করি। 🛠️

আরেকটি মূল বিবেচ্য বিষয় হল ক্ষণস্থায়ী ত্রুটি সত্ত্বেও সিস্টেমটি স্থিতিস্থাপক থাকা নিশ্চিত করা। ক্ষণস্থায়ী ত্রুটি, যেমন নেটওয়ার্ক টাইমআউট বা পরিষেবা অনুপলব্ধতা, ক্লাউড পরিবেশে সাধারণ। কেন্দ্রীভূত ত্রুটি লগিংয়ের জন্য ডেকোরেটরগুলির পাশাপাশি এক্সপোনেনশিয়াল ব্যাকঅফ সহ পুনঃপ্রচারগুলি বাস্তবায়ন করা, ত্রুটি সহনশীলতাকে ব্যাপকভাবে উন্নত করতে পারে। উপরন্তু, লাইব্রেরি পছন্দ অ্যাসিঙ্ক্রোনাস ক্রিয়াকলাপগুলিকে সমর্থন করে, বহিরাগত API কলগুলির জন্য নন-ব্লকিং পুনঃপ্রচারগুলি সক্ষম করে৷ এটি নিশ্চিত করে যে সাময়িক বাধাগুলি ইভেন্ট প্রক্রিয়াকরণ পাইপলাইনে সম্পূর্ণ ব্যর্থতার দিকে পরিচালিত করে না।

অবশেষে, JSON লগের মতো কাঠামোবদ্ধ লগিং ফর্ম্যাটগুলিকে অন্তর্ভুক্ত করা ত্রুটিগুলির দৃশ্যমানতা এবং সনাক্তকরণকে উল্লেখযোগ্যভাবে উন্নত করতে পারে৷ লগগুলিতে ব্যতিক্রম প্রকার, মূল বার্তা এবং একটি টাইমস্ট্যাম্পের মতো ক্ষেত্র অন্তর্ভুক্ত থাকতে পারে। এই কাঠামোবদ্ধ লগগুলিকে কেন্দ্রীভূত লগিং সিস্টেমে ফরোয়ার্ড করা যেতে পারে, যেমন Azure মনিটর বা ইলাস্টিকসার্চ, রিয়েল-টাইম পর্যবেক্ষণ এবং বিশ্লেষণের জন্য। এইভাবে, উন্নয়ন দলগুলি দ্রুত নিদর্শনগুলি সনাক্ত করতে পারে, যেমন নির্দিষ্ট পেলোডগুলির সাথে পুনরাবৃত্তি ত্রুটিগুলি, এবং সক্রিয়ভাবে তাদের সমাধান করতে পারে। 🚀

  1. ব্যতিক্রম পরিচালনার জন্য একটি ডেকোরেটর ব্যবহার করার উদ্দেশ্য কি?
  2. একটি ডেকোরেটর, যেমন , একাধিক ফাংশন জুড়ে ত্রুটি লগিং এবং পরিচালনাকে কেন্দ্রীভূত করে। এটি ব্যতিক্রমগুলির ধারাবাহিক প্রক্রিয়াকরণ নিশ্চিত করে এবং মূল বার্তার মতো গুরুত্বপূর্ণ প্রসঙ্গ ধরে রাখে।
  3. কিভাবে করে API মিথস্ক্রিয়া উন্নত?
  4. এটি অ্যাসিঙ্ক্রোনাস HTTP অনুরোধগুলিকে সক্ষম করে, প্রোগ্রামটিকে একসাথে একাধিক API কল পরিচালনা করার অনুমতি দেয়, যা Azure ফাংশনের মতো উচ্চ-থ্রুপুট সিস্টেমের জন্য অত্যন্ত গুরুত্বপূর্ণ।
  5. কাঠামোবদ্ধ লগিং এর সুবিধা কি?
  6. স্ট্রাকচার্ড লগিং ফরম্যাট, যেমন JSON লগ, Azure মনিটর বা স্প্লঙ্কের মতো টুল ব্যবহার করে রিয়েল-টাইমে ত্রুটিগুলি বিশ্লেষণ এবং নিরীক্ষণ করা সহজ করে তোলে।
  7. কিভাবে ক্ষণস্থায়ী ত্রুটি কার্যকরভাবে পরিচালিত হতে পারে?
  8. ব্যর্থতা ক্যাপচার করার জন্য ডেকোরেটরের সাথে সূচকীয় ব্যাকঅফের সাথে পুনরায় চেষ্টা করার যুক্তি প্রয়োগ করা নিশ্চিত করে যে অস্থায়ী সমস্যাগুলি স্থায়ী ত্রুটির দিকে নিয়ে যায় না।
  9. ব্যতিক্রম পরিচালনায় মূল প্রসঙ্গ বজায় রাখা কেন গুরুত্বপূর্ণ?
  10. মূল বার্তা সংরক্ষণ করা, যেমন পেলোড প্রক্রিয়া করা হচ্ছে, ডিবাগিং এবং ট্রেসিং সমস্যাগুলির জন্য অমূল্য তথ্য প্রদান করে, বিশেষ করে বিতরণ করা সিস্টেমে।

নিরবচ্ছিন্ন ক্রিয়াকলাপ নিশ্চিত করার জন্য Azure ফাংশনের মতো বিতরণ করা সিস্টেমগুলিতে ব্যতিক্রম পরিচালনা করা গুরুত্বপূর্ণ। একটি ডেকোরেটরে ত্রুটিগুলি মোড়ানো এবং মূল প্রসঙ্গ ধরে রাখার মাধ্যমে, বিকাশকারীরা ডিবাগিং সহজ করে এবং সিস্টেমের স্বচ্ছতা প্রবাহিত করে। এই পদ্ধতিটি গতিশীল, বাস্তব-বিশ্বের পরিবেশে বিশেষভাবে সহায়ক যেখানে সমস্যাগুলি অনিবার্য।

অ্যাসিঙ্ক্রোনাস প্রোগ্রামিং এবং স্ট্রাকচার্ড লগিংয়ের মতো উন্নত কৌশলগুলিকে একত্রিত করে, পাইথন স্থিতিস্থাপক সিস্টেম তৈরির জন্য একটি শক্তিশালী হাতিয়ার হয়ে ওঠে। এই সমাধানগুলি সমস্যা সমাধানের সময় সময় বাঁচায় এবং ক্ষণস্থায়ী ত্রুটিগুলিকে কার্যকরভাবে মোকাবেলা করে কর্মক্ষমতা উন্নত করে। এই অনুশীলনগুলি অবলম্বন করা ডেভেলপারদেরকে শক্তিশালী এবং মাপযোগ্য অ্যাপ্লিকেশন তৈরি করার ক্ষমতা দেয়, যা দৈনন্দিন চ্যালেঞ্জগুলিকে পরিচালনাযোগ্য করে তোলে। 🛠️

  1. পাইথনে ব্যতিক্রমগুলি পরিচালনার বিষয়বস্তু অফিসিয়াল পাইথন ডকুমেন্টেশন দ্বারা অনুপ্রাণিত হয়েছিল। আরও তথ্যের জন্য, দেখুন পাইথন ব্যতিক্রম ডকুমেন্টেশন .
  2. অ্যাসিঙ্ক্রোনাস HTTP ক্লায়েন্ট সম্পর্কে বিশদগুলি এর উপর ভিত্তি করে ছিল httpx লাইব্রেরি অফিসিয়াল ডকুমেন্টেশন , যা নন-ব্লকিং HTTP অনুরোধের জন্য এর ক্ষমতা ব্যাখ্যা করে।
  3. কাঠামোবদ্ধ লগিংয়ের নীতিগুলি অন্তর্দৃষ্টি দ্বারা পরিচালিত হয়েছিল আজুর মনিটর , বিতরণ করা সিস্টেমে কেন্দ্রীভূত লগিংয়ের জন্য একটি টুল।
  4. পাইথন ফাংশন মোড়ানোর জন্য ডেকোরেটরদের নির্দেশিকা একটি টিউটোরিয়াল দ্বারা জানানো হয়েছিল রিয়েল পাইথন .
  5. ক্ষণস্থায়ী ত্রুটি এবং পুনরায় চেষ্টা করার প্রক্রিয়া বোঝার নিবন্ধগুলির উপর ভিত্তি করে AWS আর্কিটেকচার ব্লগ , যা বিতরণ করা পরিবেশে ত্রুটি স্থিতিস্থাপকতা নিয়ে আলোচনা করে।