برنامه فقط منطق کسبوکار نیست
یک سرویس ممکن است در محیط محلی کاملاً درست کار کند اما در محیط عملیاتی دشوار باشد. Production با ترتیب startup، قطعی وابستگیها، خطاهای پیکربندی، مرزهای شبکه، محدودیت منابع، رفتار استقرار و نیازهای مشاهدهپذیری همراه است.
ترجیح میدهم این موضوعات بخشی از طراحی نرمافزار باشند، نه کارهای نظافتی پس از توسعه قابلیتها.
Liveness و Readiness به دو سؤال متفاوت پاسخ میدهند
endpoint مربوط به liveness باید بگوید آیا پردازش زنده است یا نه. Readiness باید مشخص کند آیا سرویس در همان لحظه توان انجام کار مفید را دارد. ترکیب این دو مفهوم میتواند restart loop ایجاد کند یا ترافیک را به گراف وابستگی ناسالم بفرستد.
همین اصل درباره پیکربندی و مدیریت وابستگی هم صدق میکند: حالتهای شکست را صریح کنید، هر چیزی را که میشود زود اعتبارسنجی کنید و خطاها را پشت رفتارهای ترمیم خودکار در pipeline تولید پنهان نکنید.
شفافیت عملیاتی معماری را بهتر میکند
طراحی برای Production ما را مجبور میکند درباره مرزها و مالکیت سؤالهای مفیدی بپرسیم: کدام وابستگی ضروری است؟ کدام اختیاری است؟ چه چیزی میتواند degrade شود؟ retry برای کدام state امن است؟ این سؤالها معمولاً خود مدل برنامه را هم بهتر میکنند.
سیستمی دارید که این بدهبستان در آن مهم است؟
شروع گفتوگو ←