بکاند و API
منطق برنامه و یکپارچهسازیها
- PHP 8
- Laravel
- Python
- REST و JWT
اول سراغ ریشهٔ مسئله میروم؛ بعد فقط چیزی را میسازم که برای حلش لازم است.
شانزدهساله که بودم شبکهٔ کامپیوترهای خانه را راه میانداختم، سختافزار را میشناختم، Linux نصب میکردم و اسکریپتهای کوچک را دستی مینوشتم. از ۱۳۹۳ با PHP اپلیکیشن وب و API میسازم و با دیتابیس سروکار دارم. هنوز کد، query plan و لاگ را خودم میخوانم. ایجنت و ربات میسازم تا کارهای تکراری سریعتر و با هزینهٔ کمتری انجام شوند.
بیرون از کد، عاشق کتاب هستم.
شانزدهساله بودم که با شبکهٔ کامپیوترهای خانه، سختافزار و Linux کار کردم و اسکریپتهای کوچک نوشتم. از ۱۳۹۳ سراغ ساخت وب با PHP رفتم.
بخشهایی از وب که هر روز با آنها کار میکنم.
منطق برنامه و یکپارچهسازیها
ذخیرهسازی و پیدا کردن داده
سرویسها و شبکهٔ پشت برنامه
صفحههای رندرشده و کد مرورگر
کار تکراری با امکان بازبینی
تغییرهایی که تیم میتواند دنبال کند
چند جور مسئلهٔ فنی که رویشان کار کردهام.
جستوجوی فارسی یکدست نبود و ایندکس از دیتابیس عقب میماند. متن و رتبهبندی را نرمال کردم و Elasticsearch را با منبع اصلی همگام نگه داشتم.
دیتابیس رابطهای باید همهٔ جور خواندن را پاسخ میداد. منبع اصلی را از مدل خواندن جدا کردم و با keyset pagination و بررسی query plan مسیر خواندن را سبکتر کردم.
مسیرهای پرتکرار زمان پاسخ و مصرف را بالا میبردند. گلوگاه را از لاگ پیدا کردم، صف را از cache جدا کردم و بودجهٔ سرویس را مشخص کردم؛ Octane را هم هرجا مناسب بود به کار بردم.
هشدارهای شلوغ و انتشار پرریسک بازیابی را کند میکردند. health endpoint سبک، هشدار متمرکز، راه برگشت و postmortem بدون سرزنش گذاشتم.
رفتار ترافیک در مسیرها و برای خزندهها فرق میکرد. proxy و rate limit را تنظیم کردم، اثر CDN را سنجیدم و MTU و PMTUD را برای عیبیابی بررسی کردم.
مرز دسترسی API و دانلودها روشن نبود. دادهها را بازبینی کردم، لینک امضاشده و دسترسی بهازای کاربر گذاشتم و راه گزارش آسیبپذیری را نوشتم.
دادهٔ منابع عمومی قالبهای متفاوتی داشت. خزندهٔ محدودشده و صف ساختم، رکوردها را به SQL نرمال کردم و پردازش را تکرارپذیر نگه داشتم.
گردشکار ایجنت به مرز هزینه و تأیید نیاز داشت. چند ایجنت را به کار گرفتم، پردازش batch را با اجرای زنده سنجیدم و بازبینی کد و تأیید انسانی را نگه داشتم.
قدمهای کوچک و مکتوب.
اول لاگ، query plan و curl؛ بعد یک تغییر کوچک و برگشتپذیر که مستنداتش در همان commit میآید.
پیش از تغییر کد، لاگ، query plan یا نتیجهٔ درخواست را بررسی میکنم.
تغییر کوچک را همتیمی میتواند بسنجد و در صورت نیاز برگرداند.
تسک و تصمیم را مکتوب میکنم و توضیح را کنار همان commit میگذارم.
ابزاری را انتخاب میکنم که با کمترین پیچیدگی جواب بدهد و هزینهٔ اجرا را میسنجم.
ایجنت قدمهای تکراری را انجام میدهد؛ قضاوت و تأیید نهایی با آدم میماند.
runbook، مانیتورینگ، هشدار و یادداشت میگذارم تا تیم بدون من هم کار را ادامه دهد.
چند نمونه از جاهایی که میتوانم کمک کنم.
اگر
کاری که میکنم
قدمها را روشن میکنم و بخش تکراری را با ایجنت و خودکارسازی کم میکنم؛ بازبینی و رد کار هم میماند.
اگر
کاری که میکنم
ایندکس جستوجو، مدل خواندن یا مسیر پردازش را با شکل استفاده از داده هماهنگ میکنم.
اگر
کاری که میکنم
درخواست را دنبال میکنم و سراغ Laravel، صف یا یکپارچهسازیِ درگیر میروم.
اگر
کاری که میکنم
گلوگاه را با اندازهگیری پیدا میکنم و کار یا مصرف اضافه را کم میکنم.
اگر
کاری که میکنم
پایداری، مانیتورینگ، بازیابی و کنترل دسترسی را با هم بررسی میکنم.
اگر
کاری که میکنم
افزونه یا خودکارسازیای میسازم که در روند انتشار یا فروش جایش خالی است.
مسئلهات اینجا نبود؟ همان را بنویس.
محدودهٔ روشن و تحویلی که تیم بتواند ادامهاش دهد.
از نتیجه، محدودیتها و بازهٔ بودجه میگویی.
دو یا سه مسیر را با هزینه و بدهبستان هرکدام مینویسم.
یک بخش کوچک و قابلاجرا میسازیم و بازبینی میکنیم؛ بعد محدوده را گسترش میدهیم.
مستندات، مانیتورینگ، هشدار و قدمهای بعدی را کنار کار میگذاریم.
کارم از بکاند و API تا جستوجو و داده، سرعت و هزینه، پایداری و امنیت و خودکارسازی را دربرمیگیرد. اگر مسئلهات در این فهرست نیست، در فرم بنویس.
برای کار تکراری با ورودی و خروجی روشن، وقتی نتیجه قابلبازبینی باشد، میتواند کمک کند. تصمیمهای مهم و تأیید نهایی با آدم میماند. اگر بررسی خروجی از انجام کار پرهزینهتر باشد، ایجنت انتخاب خوبی نیست.
از لاگ، query plan و مصرف واقعی شروع میکنم. گلوگاه اندازهگیریشده را تغییر میدهم، ابزار سادهتر را انتخاب میکنم و نتیجه را با هزینهٔ اجرا میسنجم.
بله. پیش از شروع دربارهٔ شکل تسکها، بازبینی، دسترسی و تحویل با تیم به توافق میرسیم.
تغییرها در Git قابلبازبینی میمانند. تحویل میتواند runbook، مانیتورینگ، هشدار، تصمیمهای مکتوب و قدمهای بعدی را هم داشته باشد.
مسئله، نتیجهٔ موردنظر، محدودیتها و بازهٔ بودجه را بفرست. چند مسیر را مکتوب میکنم تا دربارهٔ بدهبستانهایشان گفتوگو کنیم.
از راه دور و برای هر نقطهٔ دنیا با تیمها کار میکنم. هدف، محدودیتها، وضعیت فعلی و بازهٔ بودجه را بفرست تا با یک بررسی مکتوب شروع کنیم.