#تصمیمهای_مهندسی (Engineering Decisions)
یکی از سختترین تصمیمهای مهندسی، انتخاب بین درست بودن و در دسترس بودن است.
فرض کنید Database اصلی شما از دسترس خارج شده است.
یک Replica دارید که چند ثانیه از دیتای اصلی عقبتر است.
حالا دو انتخاب دارید.
انتخاب اول:
کاربر را منتظر نگه دارید یا حتی درخواست را Fail کنید، تا مطمئن شوید دادهای که نمایش میدهید کاملاً بهروز است.
انتخاب دوم:
درخواست را از Replica پاسخ دهید.
کاربر سرویس را دریافت میکند...
اما شاید اطلاعاتی را ببیند که چند ثانیه قدیمی است.
کدام تصمیم درست است؟
اگر در حال نمایش تعداد لایک یک پست باشید،
احتمالاً چند ثانیه اختلاف اهمیتی ندارد.
اما اگر موجودی حساب بانکی یا تعداد باقیمانده بلیت یک کنسرت را نمایش میدهید،
همان چند ثانیه میتواند یک فاجعه ایجاد کند.
به همین دلیل، مهندسان باتجربه هیچوقت نمیپرسند:
«ءConsistency بهتر است یا Availability؟»
بلکه میپرسند:
«در این Domain، هزینهی کدام اشتباه بیشتر است؟»
چون هیچ معماریای وجود ندارد که در هر شرایطی، هم بیشترین Availability را داشته باشد و هم قویترین Consistency را.
هر تصمیم، یک Trade-off است.
و ارزش یک مهندس، در انتخاب تکنولوژی نیست.
در درک هزینهی انتخابها است.
چون در مهندسی نرمافزار،
بهترین تصمیم، تصمیمی نیست که هیچ هزینهای نداشته باشد.
بهترین تصمیم، تصمیمی است که هزینهی درست را بپردازد.
Post #749
320