• شبکه و Linux از ۱۳۹۰
  • وب از ۱۳۹۳
  • کار با تیم‌های جهانی

سیدرضا بازیار

اول سراغ ریشهٔ مسئله می‌روم؛ بعد فقط چیزی را می‌سازم که برای حلش لازم است.

شانزده‌ساله که بودم شبکهٔ کامپیوترهای خانه را راه می‌انداختم، سخت‌افزار را می‌شناختم، Linux نصب می‌کردم و اسکریپت‌های کوچک را دستی می‌نوشتم. از ۱۳۹۳ با PHP اپلیکیشن وب و API می‌سازم و با دیتابیس سروکار دارم. هنوز کد، query plan و لاگ را خودم می‌خوانم. ایجنت و ربات می‌سازم تا کارهای تکراری سریع‌تر و با هزینهٔ کمتری انجام شوند.

بیرون از کد، عاشق کتاب هستم.

شبکه و Linux
از ۱۳۹۰
وب با PHP
از ۱۳۹۳
ابزارهای روزمره
Laravel · Nuxt · Elasticsearch · Python
  1. ۱۳۹۰شبکه، Linux و کد دستی
  2. ۱۳۹۳PHP و ساخت سیستم‌های وب
  3. حالاایجنت‌های هوش مصنوعی و خودکارسازی

workbench:~

ترمینال زنده
پاسخ ترمینال

شانزده‌ساله بودم که با شبکهٔ کامپیوترهای خانه، سخت‌افزار و Linux کار کردم و اسکریپت‌های کوچک نوشتم. از ۱۳۹۳ سراغ ساخت وب با PHP رفتم.

مهارت‌ها و ابزارها

بخش‌هایی از وب که هر روز با آن‌ها کار می‌کنم.

بک‌اند و API

منطق برنامه و یکپارچه‌سازی‌ها

  • PHP 8
  • Laravel
  • Python
  • REST و JWT

داده و جست‌وجو

ذخیره‌سازی و پیدا کردن داده

  • MySQL و PostgreSQL
  • MongoDB
  • Elasticsearch
  • Redis

زیرساخت

سرویس‌ها و شبکهٔ پشت برنامه

  • Linux و systemd
  • Nginx و Apache
  • Docker
  • شبکه، DNS و TLS

وب و فرانت‌اند

صفحه‌های رندرشده و کد مرورگر

  • Nuxt (SSR)
  • TypeScript
  • Tailwind CSS
  • WordPress و WooCommerce

هوش مصنوعی و خودکارسازی

کار تکراری با امکان بازبینی

  • ایجنت‌های هم‌کار
  • پایپ‌لاین‌های LLM
  • ربات Telegram
  • جمع‌آوری و پردازش داده

روش کار و تحویل

تغییرهایی که تیم می‌تواند دنبال کند

  • Git و CI
  • مستندات و نوشتن تسک
  • مانیتورینگ و هشدار
  • بازبینی امنیتی

کارهای پیشین

چند جور مسئلهٔ فنی که رویشان کار کرده‌ام.

  1. جست‌وجو

    جست‌وجوی فارسی و چندزبانه

    جست‌وجوی فارسی یکدست نبود و ایندکس از دیتابیس عقب می‌ماند. متن و رتبه‌بندی را نرمال کردم و Elasticsearch را با منبع اصلی همگام نگه داشتم.

    • Elasticsearch
    • MySQL و PostgreSQL
  2. داده

    مدل خواندن برای دیتابیس

    دیتابیس رابطه‌ای باید همهٔ جور خواندن را پاسخ می‌داد. منبع اصلی را از مدل خواندن جدا کردم و با keyset pagination و بررسی query plan مسیر خواندن را سبک‌تر کردم.

    • MySQL و PostgreSQL
    • MongoDB
    • Redis
  3. سرعت

    سرعت و هزینهٔ منابع

    مسیرهای پرتکرار زمان پاسخ و مصرف را بالا می‌بردند. گلوگاه را از لاگ پیدا کردم، صف را از cache جدا کردم و بودجهٔ سرویس را مشخص کردم؛ Octane را هم هرجا مناسب بود به کار بردم.

    • Laravel
    • Redis
    • Linux و systemd
  4. پایداری

    سلامت سرویس و بازیابی

    هشدارهای شلوغ و انتشار پرریسک بازیابی را کند می‌کردند. health endpoint سبک، هشدار متمرکز، راه برگشت و postmortem بدون سرزنش گذاشتم.

    • Linux و systemd
    • مانیتورینگ و هشدار
    • Git و CI
  5. شبکه

    رفتار لبه و مسیرهای بین‌المللی

    رفتار ترافیک در مسیرها و برای خزنده‌ها فرق می‌کرد. proxy و rate limit را تنظیم کردم، اثر CDN را سنجیدم و MTU و PMTUD را برای عیب‌یابی بررسی کردم.

    • Nginx و Apache
    • شبکه، DNS و TLS
    • مانیتورینگ و هشدار
  6. امنیت

    دسترسی API و افشای داده

    مرز دسترسی API و دانلودها روشن نبود. داده‌ها را بازبینی کردم، لینک امضاشده و دسترسی به‌ازای کاربر گذاشتم و راه گزارش آسیب‌پذیری را نوشتم.

    • REST و JWT
    • بازبینی امنیتی
  7. پردازش داده

    جمع‌آوری و یکدست‌سازی داده

    دادهٔ منابع عمومی قالب‌های متفاوتی داشت. خزندهٔ محدودشده و صف ساختم، رکوردها را به SQL نرمال کردم و پردازش را تکرارپذیر نگه داشتم.

    • Python
    • جمع‌آوری و پردازش داده
    • Redis
  8. ایجنت

    گردش‌کار ایجنت با نقطهٔ بازبینی

    گردش‌کار ایجنت به مرز هزینه و تأیید نیاز داشت. چند ایجنت را به کار گرفتم، پردازش batch را با اجرای زنده سنجیدم و بازبینی کد و تأیید انسانی را نگه داشتم.

    • ایجنت‌های هم‌کار
    • پایپ‌لاین‌های LLM
    • Git و CI
    • مانیتورینگ و هشدار

روش کار من

قدم‌های کوچک و مکتوب.

اول لاگ، query plan و curl؛ بعد یک تغییر کوچک و برگشت‌پذیر که مستنداتش در همان commit می‌آید.

  1. اول شواهد را می‌بینم

    پیش از تغییر کد، لاگ، query plan یا نتیجهٔ درخواست را بررسی می‌کنم.

  2. تغییر را قابل‌بازبینی نگه می‌دارم

    تغییر کوچک را هم‌تیمی می‌تواند بسنجد و در صورت نیاز برگرداند.

  3. تسک و دلیلش را می‌نویسم

    تسک و تصمیم را مکتوب می‌کنم و توضیح را کنار همان commit می‌گذارم.

  4. هزینه بخشی از کار است

    ابزاری را انتخاب می‌کنم که با کمترین پیچیدگی جواب بدهد و هزینهٔ اجرا را می‌سنجم.

  5. تکرار را می‌سپارم؛ تأیید را نه

    ایجنت قدم‌های تکراری را انجام می‌دهد؛ قضاوت و تأیید نهایی با آدم می‌ماند.

  6. تحویل را قابل‌استفاده می‌کنم

    runbook، مانیتورینگ، هشدار و یادداشت می‌گذارم تا تیم بدون من هم کار را ادامه دهد.

مسئله‌هایی که حل می‌کنم

چند نمونه از جاهایی که می‌توانم کمک کنم.

اگر

کار تکراری و کند وقت تیم را می‌گیرد

کاری که می‌کنم

قدم‌ها را روشن می‌کنم و بخش تکراری را با ایجنت و خودکارسازی کم می‌کنم؛ بازبینی و رد کار هم می‌ماند.

اگر

جست‌وجو یا داده‌ها به‌هم‌ریخته است

کاری که می‌کنم

ایندکس جست‌وجو، مدل خواندن یا مسیر پردازش را با شکل استفاده از داده هماهنگ می‌کنم.

اگر

بک‌اند یا API کار را راه نمی‌اندازد

کاری که می‌کنم

درخواست را دنبال می‌کنم و سراغ Laravel، صف یا یکپارچه‌سازیِ درگیر می‌روم.

اگر

سیستم کند یا پرهزینه شده

کاری که می‌کنم

گلوگاه را با اندازه‌گیری پیدا می‌کنم و کار یا مصرف اضافه را کم می‌کنم.

اگر

سیستمی شب‌ها نگرانت می‌کند

کاری که می‌کنم

پایداری، مانیتورینگ، بازیابی و کنترل دسترسی را با هم بررسی می‌کنم.

اگر

سایت یا فروشگاه WordPress کار سفارشی می‌خواهد

کاری که می‌کنم

افزونه یا خودکارسازی‌ای می‌سازم که در روند انتشار یا فروش جایش خالی است.

مسئله‌ات این‌جا نبود؟ همان را بنویس.

همکاری با تیم‌ها

محدودهٔ روشن و تحویلی که تیم بتواند ادامه‌اش دهد.

شروع کار

  1. مسئله را توضیح می‌دهی

    از نتیجه، محدودیت‌ها و بازهٔ بودجه می‌گویی.

  2. ارزیابی مکتوب می‌گیری

    دو یا سه مسیر را با هزینه و بده‌بستان هرکدام می‌نویسم.

  3. با نسخهٔ کوچک شروع می‌کنیم

    یک بخش کوچک و قابل‌اجرا می‌سازیم و بازبینی می‌کنیم؛ بعد محدوده را گسترش می‌دهیم.

  4. کار را به تیم تحویل می‌دهیم

    مستندات، مانیتورینگ، هشدار و قدم‌های بعدی را کنار کار می‌گذاریم.

شکل‌های همکاری

  • بازبینی معماری و کد
  • پایدارکردن سیستم و رسیدگی به حادثه
  • اسپرینت ایجنت و خودکارسازی
  • بررسی سرعت و هزینه
  • ساخت از ایده تا production
  • کار در کنار تیم شما

چیزهایی که در تحویل می‌آید

  • تصمیم‌ها و مستندات مکتوب
  • مانیتورینگ و هشدار
  • گزارش هزینهٔ سیستم
  • فهرست قدم‌های بعدی

سؤال‌های رایج تیم‌ها

روی چه جور مسئله‌هایی کار می‌کنید؟

کارم از بک‌اند و API تا جست‌وجو و داده، سرعت و هزینه، پایداری و امنیت و خودکارسازی را دربرمی‌گیرد. اگر مسئله‌ات در این فهرست نیست، در فرم بنویس.

ایجنت هوش مصنوعی کجا به کار می‌آید و کجا نه؟

برای کار تکراری با ورودی و خروجی روشن، وقتی نتیجه قابل‌بازبینی باشد، می‌تواند کمک کند. تصمیم‌های مهم و تأیید نهایی با آدم می‌ماند. اگر بررسی خروجی از انجام کار پرهزینه‌تر باشد، ایجنت انتخاب خوبی نیست.

چطور هزینه را پایین نگه می‌دارید؟

از لاگ، query plan و مصرف واقعی شروع می‌کنم. گلوگاه اندازه‌گیری‌شده را تغییر می‌دهم، ابزار ساده‌تر را انتخاب می‌کنم و نتیجه را با هزینهٔ اجرا می‌سنجم.

با تیم فعلی ما هم کار می‌کنید؟

بله. پیش از شروع دربارهٔ شکل تسک‌ها، بازبینی، دسترسی و تحویل با تیم به توافق می‌رسیم.

کد و مستندات چطور تحویل می‌شود؟

تغییرها در Git قابل‌بازبینی می‌مانند. تحویل می‌تواند runbook، مانیتورینگ، هشدار، تصمیم‌های مکتوب و قدم‌های بعدی را هم داشته باشد.

از کجا شروع کنیم؟

مسئله، نتیجهٔ موردنظر، محدودیت‌ها و بازهٔ بودجه را بفرست. چند مسیر را مکتوب می‌کنم تا دربارهٔ بده‌بستان‌هایشان گفت‌وگو کنیم.

از مسئله‌ای که داری بگو

از راه دور و برای هر نقطهٔ دنیا با تیم‌ها کار می‌کنم. هدف، محدودیت‌ها، وضعیت فعلی و بازهٔ بودجه را بفرست تا با یک بررسی مکتوب شروع کنیم.

شیوهٔ همکاری
از راه دور، برای هر نقطهٔ دنیا

پیش‌نویس ایمیل در برنامهٔ ایمیل باز می‌شود؛ متن را آن‌جا بررسی و ارسال کنید.