સંદર્ભ સાચવતી વખતે અપવાદો રેકોર્ડ કરવા માટે પાયથોન ડેકોરેટર બનાવવું

સંદર્ભ સાચવતી વખતે અપવાદો રેકોર્ડ કરવા માટે પાયથોન ડેકોરેટર બનાવવું
Exception

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, જેમ કે એક્સેસ મેનેજર, સાથે કાર્યક્ષમ રીતે સંપર્ક કરવા માટે સ્ક્રિપ્ટને સક્ષમ કરે છે. આ 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}")

ડિસ્ટ્રિબ્યુટેડ સિસ્ટમ્સમાં અપવાદ હેન્ડલિંગને વધારવું

વિતરિત સિસ્ટમો સાથે કામ કરતી વખતે, જેમ કે એઝ્યુર ફંક્શન્સ ઇવેન્ટ હબ વિષયો સાંભળે છે, મજબૂત અપવાદ હેન્ડલિંગ એ સિસ્ટમની વિશ્વસનીયતાનો પાયો બની જાય છે. એક અગત્યનું પાસું જે ઘણીવાર અવગણવામાં આવે છે તે મૂળ સંદર્ભ સાથે અપવાદોને ટ્રૅક કરવાની અને સહસંબંધિત કરવાની ક્ષમતા છે જેમાં તેઓ આવ્યા હતા. આ સંદર્ભમાં પ્રક્રિયા થઈ રહેલ પેલોડ અને ટાઇમસ્ટેમ્પ અથવા ઓળખકર્તા જેવા મેટાડેટાનો સમાવેશ થાય છે. દાખલા તરીકે, દૂષિત JSON પેલોડ સાથે ઇવેન્ટની પ્રક્રિયા કરવાની કલ્પના કરો. યોગ્ય અપવાદ હેન્ડલિંગ વિના, આવા દૃશ્યોને ડિબગ કરવું એ દુઃસ્વપ્ન બની શકે છે. મૂળ સંદેશને જાળવી રાખીને અને તેને ભૂલ લોગ સાથે જોડીને, અમે પારદર્શક અને કાર્યક્ષમ ડીબગીંગ વર્કફ્લો બનાવીએ છીએ. 🛠️

અન્ય મુખ્ય વિચારણા એ સુનિશ્ચિત કરવાનું છે કે ક્ષણિક ભૂલો હોવા છતાં સિસ્ટમ સ્થિતિસ્થાપક રહે છે. ક્ષણિક ભૂલો, જેમ કે નેટવર્ક સમયસમાપ્તિ અથવા સેવાની અનુપલબ્ધતા, ક્લાઉડ વાતાવરણમાં સામાન્ય છે. કેન્દ્રીયકૃત ભૂલ લોગીંગ માટે ડેકોરેટર્સની સાથે, ઘાતાંકીય બેકઓફ સાથે પુનઃપ્રયાસોને અમલમાં મૂકવાથી, ફોલ્ટ સહિષ્ણુતામાં ઘણો સુધારો થઈ શકે છે. વધુમાં, પુસ્તકાલયો ગમે છે અસુમેળ કામગીરીને સમર્થન આપે છે, બાહ્ય API કૉલ્સ માટે બિન-અવરોધિત પુનઃપ્રયાસોને સક્ષમ કરીને. આ સુનિશ્ચિત કરે છે કે અસ્થાયી વિક્ષેપો ઇવેન્ટ પ્રોસેસિંગ પાઇપલાઇન્સમાં સંપૂર્ણ નિષ્ફળતા તરફ દોરી જતા નથી.

છેલ્લે, JSON લૉગ્સ જેવા સ્ટ્રક્ચર્ડ લૉગિંગ ફૉર્મેટનો સમાવેશ કરીને, ભૂલોની દૃશ્યતા અને ટ્રેસિબિલિટીને નોંધપાત્ર રીતે વધારી શકે છે. લોગમાં અપવાદ પ્રકાર, મૂળ સંદેશ અને ટાઇમસ્ટેમ્પ જેવા ફીલ્ડનો સમાવેશ થઈ શકે છે. આ સ્ટ્રક્ચર્ડ લૉગ્સને રિયલ-ટાઇમ મોનિટરિંગ અને એનાલિટિક્સ માટે કેન્દ્રિય લૉગિંગ સિસ્ટમ્સ, જેમ કે Azure Monitor અથવા Elasticsearch પર મોકલી શકાય છે. આ રીતે, વિકાસ ટીમો પેટર્નને ઝડપથી ઓળખી શકે છે, જેમ કે ચોક્કસ પેલોડ્સ સાથે રિકરિંગ ભૂલો, અને તેને સક્રિયપણે સંબોધિત કરી શકે છે. 🚀

  1. અપવાદ સંભાળવા માટે ડેકોરેટરનો ઉપયોગ કરવાનો હેતુ શું છે?
  2. એક સુશોભનકર્તા, જેમ કે , બહુવિધ કાર્યોમાં ભૂલ લોગીંગ અને હેન્ડલિંગને કેન્દ્રિય બનાવે છે. તે અપવાદોની સુસંગત પ્રક્રિયાને સુનિશ્ચિત કરે છે અને મૂળ સંદેશ જેવા મહત્વપૂર્ણ સંદર્ભને જાળવી રાખે છે.
  3. કેવી રીતે કરે છે API ક્રિયાપ્રતિક્રિયાઓ સુધારવા?
  4. તે અસુમેળ HTTP વિનંતીઓને સક્ષમ કરે છે, પ્રોગ્રામને એકસાથે બહુવિધ API કૉલ્સને હેન્ડલ કરવાની મંજૂરી આપે છે, જે Azure ફંક્શન્સ જેવી ઉચ્ચ-થ્રુપુટ સિસ્ટમ્સ માટે નિર્ણાયક છે.
  5. સ્ટ્રક્ચર્ડ લોગિંગનો ફાયદો શું છે?
  6. સ્ટ્રક્ચર્ડ લૉગિંગ ફોર્મેટ્સ, જેમ કે JSON લૉગ્સ, Azure Monitor અથવા Splunk જેવા ટૂલ્સનો ઉપયોગ કરીને રીઅલ-ટાઇમમાં ભૂલોનું વિશ્લેષણ અને નિરીક્ષણ કરવાનું સરળ બનાવે છે.
  7. ક્ષણિક ભૂલોને અસરકારક રીતે કેવી રીતે સંચાલિત કરી શકાય?
  8. નિષ્ફળતાઓ કેપ્ચર કરવા માટે ડેકોરેટર સાથે ઘાતાંકીય બેકઓફ સાથે પુનઃપ્રયાસ તર્કનો અમલ કરવો, ખાતરી કરે છે કે અસ્થાયી સમસ્યાઓ કાયમી ભૂલો તરફ દોરી જતી નથી.
  9. અપવાદ હેન્ડલિંગમાં મૂળ સંદર્ભ જાળવવો શા માટે મહત્વપૂર્ણ છે?
  10. મૂળ સંદેશને સાચવવા, જેમ કે પેલોડ પર પ્રક્રિયા કરવામાં આવી રહી છે, તે ડિબગીંગ અને ટ્રેસીંગ સમસ્યાઓ માટે અમૂલ્ય માહિતી પ્રદાન કરે છે, ખાસ કરીને વિતરિત સિસ્ટમોમાં.

ડિસ્ટ્રિબ્યુટેડ સિસ્ટમ્સમાં અપવાદ હેન્ડલિંગ, જેમ કે Azure ફંક્શન્સ, અવિરત કામગીરીને સુનિશ્ચિત કરવા માટે મહત્વપૂર્ણ છે. ડેકોરેટરમાં ભૂલોને લપેટીને અને મૂળ સંદર્ભને જાળવી રાખીને, વિકાસકર્તાઓ ડિબગીંગને સરળ બનાવે છે અને સિસ્ટમની પારદર્શિતાને સુવ્યવસ્થિત કરે છે. આ અભિગમ ખાસ કરીને ગતિશીલ, વાસ્તવિક-વિશ્વના વાતાવરણમાં મદદરૂપ છે જ્યાં સમસ્યાઓ અનિવાર્ય છે.

અસુમેળ પ્રોગ્રામિંગ અને સ્ટ્રક્ચર્ડ લોગિંગ જેવી અદ્યતન તકનીકોને જોડીને, પાયથોન સ્થિતિસ્થાપક સિસ્ટમો બનાવવા માટે એક શક્તિશાળી સાધન બની જાય છે. આ ઉકેલો મુશ્કેલીનિવારણ દરમિયાન સમય બચાવે છે અને ક્ષણિક ભૂલોને અસરકારક રીતે સંબોધીને પ્રદર્શનમાં સુધારો કરે છે. આ પ્રથાઓને અપનાવવાથી વિકાસકર્તાઓને રોજબરોજના પડકારોને વ્યવસ્થિત બનાવીને મજબૂત અને માપી શકાય તેવી એપ્લીકેશન બનાવવાની શક્તિ મળે છે. 🛠️

  1. પાયથોનમાં અપવાદોને હેન્ડલ કરવા માટેની સામગ્રી સત્તાવાર પાયથોન દસ્તાવેજીકરણ દ્વારા પ્રેરિત હતી. વધુ માહિતી માટે, મુલાકાત લો પાયથોન અપવાદો દસ્તાવેજીકરણ .
  2. અસુમેળ HTTP ક્લાયંટ વિશેની વિગતો પર આધારિત હતી httpx લાઇબ્રેરી સત્તાવાર દસ્તાવેજીકરણ , જે HTTP વિનંતીઓને અવરોધિત ન કરવા માટેની તેની ક્ષમતાઓને સમજાવે છે.
  3. સંરચિત લોગીંગના સિદ્ધાંતો ની આંતરદૃષ્ટિ દ્વારા માર્ગદર્શન આપવામાં આવ્યા હતા એઝ્યુર મોનિટર , વિતરિત સિસ્ટમોમાં કેન્દ્રિય લોગીંગ માટેનું સાધન.
  4. પરના ટ્યુટોરીયલ દ્વારા પાયથોન ફંક્શન્સને રેપિંગ કરવા માટે ડેકોરેટર્સ પર માર્ગદર્શન આપવામાં આવ્યું હતું વાસ્તવિક પાયથોન .
  5. ક્ષણિક ભૂલો અને પુનઃપ્રયાસ મિકેનિઝમ્સને સમજવું એ ના લેખો પર આધારિત હતું AWS આર્કિટેક્ચર બ્લોગ્સ , જે વિતરિત વાતાવરણમાં ભૂલ સ્થિતિસ્થાપકતાની ચર્ચા કરે છે.