طراحی سرویسهای توزیعشده
شکستن یک تکپارچهی بزرگ به سرویسهایی با مرز روشن، بدون اینکه پیچیدگی از کد به شبکه منتقل شود.
نُه سال است روی سرویسهای بکاندی کار میکنم که اگر بخوابند، کسبوکار میخوابد. کارم فقط نوشتن کد نیست؛ نوشتن سندی است که شش ماه بعد، مهندس بعدی بتواند بدون تماس با من ادامهاش بدهد.
بیرون از این فهرست هم کار کردهام، اما اینها جایی است که میتوانم بدون آزمونوخطا به نتیجه برسم.
شکستن یک تکپارچهی بزرگ به سرویسهایی با مرز روشن، بدون اینکه پیچیدگی از کد به شبکه منتقل شود.
پیدا کردن گلوگاه واقعی با پروفایلینگ و ردیابی توزیعشده — نه با حدس زدن و بازنویسی کورکورانه.
طراحی شِما، پارتیشنبندی و مهاجرتهای بدون قطعی روی جدولهایی که صدها میلیون سطر دارند.
بودجهی خطا، آزمون بار، برنامهی رویداد و پسمرگی بدون سرزنش؛ تا خرابی بعدی ارزانتر تمام شود.
ساخت مسیر انتشار خودکار با آزمون، بازگشت سریع و انتشار تدریجی؛ استقرار باید کسلکننده باشد.
بازبینی کد، سند طراحی و منتورینگ مهندسان جوانتر؛ بخش بزرگی از کیفیت، در گفتوگو ساخته میشود.
هر پروژه جزئیات خودش را دارد، اما لایهبندی تقریباً همیشه همین است: مرز روشن، وابستگی یکطرفه و مسیر دادهی قابل ردیابی.
هر لایه فقط با لایهی پایینتر حرف میزند. هر سرویس پایگاه دادهی خودش را دارد و هیچ سرویسی جدول سرویس دیگر را مستقیم نمیخواند.
نام کارفرماها طبق قرارداد محرمانه است؛ مسئله، تصمیم و نتیجه واقعیاند.
سرویس پرداخت در اوج فروش قفل میشد. تراکنشها را از قفل خوشبینانه به صف رویداد با تضمین یکبار پردازش منتقل کردیم.
جدول سفارشها به مرز خودش رسیده بود. پارتیشنبندی زمانی و نوشتن دوگانه در شش هفته و بدون یک دقیقه قطعی اعلامشده انجام شد.
هیچکس نمیدانست هزینه از کجاست. برچسبگذاری منابع، اندازهگذاری دوبارهی پادها و حذف نودهای بیکار، مسئله را حل کرد.
نمایهسازی همزمان با نوشتن، تأخیر را بالا برده بود. نمایهساز به مصرفکنندهی رویداد تبدیل شد و مسیر خواندن سبک ماند.
انتشار دستی و ترسناک بود، پس ماهی یکبار انجام میشد. خط لولهی خودکار با انتشار تدریجی و بازگشت یککلیکی ساخته شد.
شبی چهل هشدار میآمد و همه بیصدا میشدند. هشدارها بر پایهی بودجهی خطا بازنویسی شد: کمتر، اما هر کدام قابل اقدام.
ابزارهای کوچکی که از دل پروژههای واقعی بیرون آمدهاند و حالا تیمهای دیگر هم از آنها استفاده میکنند.
مهاجرت شِما با نوشتن دوگانه و بازگشت خودکار، برای جدولهایی که نمیشود قفلشان کرد.
تعریف بودجهی خطا بهصورت پیکربندی و تولید خودکار داشبورد و قواعد هشدار.
نمایشگر لاگ خط فرمان با پشتیبانی درست از متن راستبهچپ و ارقام فارسی.
محیط آزمایشی برای مقایسهی الگوهای صف و رفتارشان زیر بار و خرابی شبکه.
مالک فنی سرویس تسویه؛ طراحی معماری رویدادمحور، راهبری چهار مهندس و بازنویسی مسیر بحرانی تراکنش.
شکستن تکپارچه به هفت سرویس، ساخت خط لولهی انتشار و پایهگذاری فرهنگ سند طراحی پیش از کدنویسی.
تیم چهارنفره بودیم و همهکار میکردیم: از API تا استقرار. جایی که یاد گرفتم ساده نگه داشتن، خودش یک مهارت است.
پایاننامه دربارهی هماهنگی داده در سیستمهای توزیعشده؛ همان موضوعی که هنوز نانآورم است.
تیمهایی که با آنها کار کردهام
با یک اسکریپت خط فرمان برای مرتب کردن فایلهای دانشگاه شروع شد و به سرویسهایی رسید که هر شب میلیونها تراکنش را جابهجا میکنند. در این مسیر یاد گرفتم که سختترین بخش مهندسی، انتخاب چیزی است که نباید ساخت.
روزهای زوج مهندسی میکنم و روزهای فرد سند مینویسم. اگر تیمی دارید که روی مقیاس یا پایداری گیر کرده، معمولاً میتوانم در دو هفته بگویم مسئله کجاست.
هرچه مسئله دقیقتر نوشته شود، جواب من هم دقیقتر است. معمولاً ظرف دو روز کاری پاسخ میدهم.