راهکارهای ارائه شده در این پست بر مبنای، تجربیات استفاده شده و بازخوردهای مناسب در پروژههای واقعی در مقیاس اینترنت ایران است. همیشه احتمال ارائه راهکار بهتر وجود دارد، اما مکانیزمهای بیان شده در این پست، جزو مطلوب ترین روشها تا لحظه نگارش این پست است
توپولوها کیستند؟ (DevOPS در مقیاس بزرگ)
در اواخر دوران تحصیل ما دهه شصتیها، برنامهای عروسکی با عنوان توپولوها پخش شد که در کشور انگلستان ساخته شده بود و 4 عروسک در آن به نقش آفرینی میپرداختند. نکته جالب این بود که در مواجهه اول خیلی از کودکان این عروسکها وحشتناک به نظر میرسیدند، اما بعد از شنیدن صدای راوی و اتفاقات درون برنامه، همین عروسکهای وحشتناک، دوستداشتنی میشدند. از طرف دیگر در ادبیات محاوره ایران، توپول معمولا به افراد دارای اضافه وزن گفته میشود اما در ادبیات نویسنده این پست، توپول به پروژههای خیلی سنگین که هم دردسر زیادی دارند (وحشتناک)، هم بعد از اتمام شیرینی زیاد دارند (دوست داشتنی)، اتلاق میشود.
بعد از تعریف ادبی، توپول، نیاز است با نمایش عدد بفهمیم که منظور از توپول چیست؟
- اگر پروژه شما مراجعین زیادی دارد که عدد آنها به حدود 20K، به صورت به هنگام (realtime) میرسد، پروژه شما در خانواده توپولوها قرار میگیرد
- اگر پروژه شما دارای حجم بالای تراکنش، مثلا در روز 15K، استعلام قیمت، ثبتنام، تراکنش دارید، پروژه شما نیز در طبقهبندی توپولوها قرار میگیرد
علت جداسازی دو دسته فوق، ارائه راهکار متفاوت برای مدیریت حجم و مخاطبین است
DevOPS چه کاری انجام میدهد؟
DevOPS یکی از نقشهای تازه منسجم شده در فضای تولید نرم افزار و پروژههای نرم افزاری است. به عبارت دیگر این نقش از قدیم در فضای پروژههای نرم افزاری بود اما با منسجم شدن تعریف و ادغام چند نقش زیر ساختی، جمع آوری شد. این نقش از ترکیب، بخشی از کارهای توسعه نرم افزار (Development = DEV) و عملیات اجرایی نرم افزار (Operations = OPS) تشکیل شده است. در نتیجه این نقش حجم فراوانی از کارهای پروژههای نرم افزاری نظیر، مدیریت انتشار نرم افزار(release manager)، تست اتوماتیک (automated test)، ایجاد و مدیریت زیرساختهای نرم افزاری، پیکربندی و مانیتورینگ زیرساخت را برعهده دارد. هدف اصلی مستقل شدن این فرآیندها از وظایف برنامه نویسان و توسعه دهندگان نرم افزاری، افزایش سرعت برنامه نویسی و ایجاد نرم افزار و همچنین افزایش کیفیت نرم افزارهای تولید شده است.
راهکارهای DevOPS برای بازدید کنندگان فراوان
رساندن خدمت مناسب به حجم انبوه مخاطبان و جلوگیری از کندشدن یا خارج از دسترسی شدن سرویس، کاری بسیار دشوار و پیچیده است و دلاوران DevOPS ای که توانایی انجام این کار را دارند، در سطح قهرمانان المپیک سنگین وزن و توپول، دارای تخصص هستند.
بهینهسازی وب سرور
یکی از اساسیترین بخشهای ارائه هر سرویس آنلاین، وب سرورِ آن است. از آنجایی که در ابتدای هر پروژه وب سرور نصب است، بعضا در زمان بهره برداری و خروج پروژه از فاز تولید، تنظیمات وب سرور را به شکل مناسب برای بهره برداری قرار نمیدهند. به عنوان مثال استفاده از فایل htaccess در زمان توسعه کد به صورت فایلی در کنار پروژه، باعث میشود که وب سرور، از نوع apache یا nginx، روی هر درخواست ارسالی از سمت کاربر، یک بار این فایل را بررسی و اقدامات لازم متعاقب دستورات را انجام دهد، اما در زمان بهره برداری، با قراردادن فایل htaccess درون تنظیمات اصلی وب سرور، دیگر این بار اضافی به وبسرور تحمیل نمیشود و سرعت ارائه خدمات بیشتر و وب سرور از منابع (resource) کمتری استفاده میکند.
فشردهسازی محتوای استاتیک GZIP
با فشردهسازی محتوای استاتیک نظیر js و css و svg، تا 60 درصد در پهنای باند صرفه جویی شده و کاربران حس سرعت بالاتری در وبسایت شما خواهند داشت.
استفاده از فایروال نرم افزاری
کلیه توزیع های لینوکس و ویندوز دارای، فایروال پیشفرض (built-in) هستند. اما فایروال موجود معمولا کارآیی محدودی دارد و در اکثر سیستمهای دارای کنترل پنل، باید فایروال را محدود و امنیت را به پنل نرم افزاری سپرد. از آنجا که این موضوع باعث کاهش امنیت میشود و از طرفی حملات گستردهای به سیستمهای دارای مخاطبین زیاد صورت میگیرد، وجود یک firewall در درجه اول باعث کاهش مخاطرات حملههای نرم افزاری میشود و در درجه بعدی، resource کمتری از سیستم عامل، سرور شما برای دفع حملات هکری و خارج از دسترس شدن، صرف میشود.
PFSENSE یک توزیع لینوکس مبتنی بر free bsd است که به عنوان فایروال در بسیاری از پروژههای بزرگ نرم افزاری به کار میآید
استفاده از Load Balancing (High Availability)
در زمانی که در اثر تیزر تلویزیونی، تبلیغات استادیومی یا حتی بیلبورد یا کمپین دیجیتال مارکتینگ، مخاطبین زیادی به سمت نرم افزار شما روانه میشوند، احتمالا از دسترس خارج شدن نرم افزار به شدت قوت میگیرد. برای جلوگیری از خارج از دسترس شدن نرم افزار از سخت افزاری و نرم افزاری، مشابه نرم افزار اصلی استفاده میشود که در زمان اوج بار peak، به صورت خودکار در مدار اضافه میشود و نصف بار از مخاطبین را به آن میدهند تا دو سیستم بتوانند همزمان به حجم بالاتری مخاطب، خدمت دهند. تعداد این clone ها (مشابهین سیستم اصلی) از یک تا تعداد نامحدود میتواند باشد.
nginx و haproxy از جمله نرم افزارهای load blancing هستند. علاوه بر این در ساختار نرم افزار vmware نیز این قابلیت با افزودن vcenter در اختیار شما خواهد بود
از Reverse Proxy استفاده کنید
زمانی که شما از reverse proxy در پروژه نرم افزاری خود بهره گیرید، تا زمانی که محتوای شما در سمت سرور اصلی تغییری نکرده، reverse proxy نتایج مربوط به درخواست کاربران را در خود ذخیره کرده و بدون درگیر ساختن سرور اصلی، به مخاطبین نتایج را نمایش میدهد. به عبارت دیگر reverse proxy از هر صفحه شما یک فایل HTML ساخته و پس از مراجعه مجدد کاربران، آن را به نمایش در میآورد. این موضوع خصوصا در سایتهای محتوا محور که دارای بازدید فراوانی هستند به عنوان مثال خبرگزاریها و ... میتواند به شدت باعث بهبود خدمات شود
apache traffic server، traefik ، nginx، varnish و squid نمونههایی از reverse proxy های شناخته شده هستند.
در کانتینر پروژه بسازید
استفاده از docker و container های آن باعث میشود تا چابکی زیادی به لحاظ DevOPS در اختیار شما قرار بگیرید.
در سالهای قبل از پیدایش docker، برای پیادهسازی و تست هر عنصر DevOPS یا باید سیستم عامل موجود را تحت تاثیر قرار داده و تست میکردیم یا باید برای هر ابزار یا تکنولوژی جدید، رنج نصب یک سیستم عامل مجازی و تست آن را به جان میخریدیم اما پیدایش docker و استفاده از container های آن باعث شد که در هر container، تمام تستهای خود را صورت دهیم و در صورت کاربردی یا مطلوب نبودن solution آن را به آسانی حذف کنیم.
توضیح docker و kubernets نیازمند مطلب مفصلی است که احتمالا در آینده روی سایت سپیدان قرار میدهیم
از ابزارهای مدیریت پیکربندی (configuration management) استفاده کنید
امروزه DevOPS کاران از تعداد بیشماری ابزار برای ساده سازی وظیفه مدیریت پیکربندی سیستم خود استفاده میکنند. هیچ یک از این ابزار برتری خاصی نسبت به دیگری ندارد و فقط در موارد مشخص، certain case، میتواند مزیت یا معایب پیدا کند به عبارت دیگر بسته به شرایط پروژه شما میتواند، مفید یا بیفایده باشد. ابزارهایی مثل ansible و chef و puppet نمونههای برای مدیریت پیکربندی هستند.
از CDN استفاده کنید
استفاده از content delivery system باعث میشود که فایلهای نرم افزار شما، نظیر تصاویر، ویدیوها و ... از نزدیک ترین نقطه به مخاطب ارسال شود. به عنوان مثال چنانچه سرور شما در فرانکفورت آلمان باشد و کاربری از اهواز سایت شما را که فاقد CDN است بازدید کند، کلیه دادهها از آلمان به کاربر شما میرسد و این باعث بیشتر طول کشیدن، بارگذاری صفحات میشود. در صورتی که اگر از CDN مناسب استفاده کنید و CDN در ایران خدمات داشته باشد، کاربر از ایران فایلها را دریافت میکند.
لازم به ذکر است که کلیه ابزارهای فوق تنها در صورتی راهگشا خواهد بود که کد Front-end مناسبی روی سایت یا فروشگاه اینترنتی شما باشد
راهکارهای DevOPS برای تراکنش بالا
درست است که ارائه خدمت بدون کند شدن و از دسترس خارج شدن به انبوه بازدیدکنندگان، در حد وزنه برداری سخت است، اما ارائه خدمت به انبوه تراکنش بدون، از دسترس خارج شدن در حد رکورد المپیک و جهان سخت است.
پایگاه داده را بهینه کنید
با استفاده از نکات زیر پایگاه داده خود را بهینه کنید
- حذف slow query از برنامه خود
- بهینه سازی index ها (استفاده از index هم میتواند باعث بهبود عملکرد سیستم شود و هم با استفاده نادرست، مانع از عملکرد صحیح شود)
- از engine مناسب کار خود استفاده کنید. (خیلی از برنامه نویسان، دقیقا تفاوتهای engine های مختلف را نمیدانند)
- پایگاه داده خود را بهینه کرده و به صورت دورهای این بهینه بودن را چک کنید. سعی کنید حتی المقدور overhead روی هیچ جدولی در پایگاه داده نباشد
از سیستم هیبرد یا دوگانه بهره ببرید
در دسته بندی پایگاه داده، دو دسته relational و non relational وجود دارد. اکثر برنامههای معروف، از relational database به منظور پایگاه داده اصلی خود استفاده میکنند اما اگر بتوانید بخشی از بار سیستم را به non relational ها منتقل کنید، هر دو سیستم عملکرد بهتری خواهند داشت. البته باید خاطر نشان کرد که این عمل باید با دقت زیادی صورت بگیرد تا از کندشدن مضاعف سیستم جلوگیری شود
نمونههایی از سیستمهای مکمل پایگاه داده عبارتند از redis، memcached، mogoDB و ...
از DB Cluster استفاده کنید
همانند load blancer در بخش راهکارهای DevOPS برای بازدیدکنندگان فراوان، امکان موازی سازی پردازش پایگاه داده با استفاده از DB Cluster ها موجود است. یکی از مشهورترین این تکنولوژیها Galera DB cluster است که برای پایگاه داده MySQL از آن استفاده میشود.
از Queue management استفاده کنید
بر خلاف حالتی که مجبور هستیم نتیجه را در همان لحظه به کاربر نمایش دهیم در زمان تراکنش بالا میتوانیم خیلی از کارها، نظیر ایجاد فاکتور، ارسال پیامک، اتصال به سیستمهای جانبی و ... را با تاخیری معقول انجام دهیم. ابزار به تعویق اندازی بخشی از کارکرد سیستم Queue یا صفی از کارهاست که سیستم به ترتیب، آنها را انجام میدهد. لازم به ذکر است که امکان clustering برای صفها نیز موجود است. مشهورترین سیستمهای مدیریت صف عبارتند از apache kafka و rabbitmq
در انتهای مطلب، لازم به توضیح است که این پست بر مبنای تجربیات نویسنده، به شرح زیر تهیه شده است:
- شرکت amt.tv: به عنوان برنامه نویس backend و سرپرست تیم فنی، در شرکت مستقر در کشور امارات متحده عربی (دوبی)، فروشنده دوربین به 5 کشور حاشیه خلیج فارس، در زمانی که تعداد بالای تراکنش ثبت سفارش و خرید اینترنتی داشت. [شرکت ایرنوکس]
- شرکت مدیاموتورز: به عنوان برنامه نویس full-stack ، در زمانی که این سایت با تبلیغات گسترده (تیزر تلویزیونی، تبلیغات استادیومی) و فروش فراوان، تعداد بالایی مخاطب در لحظه داشت [شرکت سپیدان]
-
شرکت گلرنگ موتور: به عنوان برنامه نویس full-stack، در زمانی که این سایت با بازاریابی فراوان و فروش بالا (بیلبورد، تیزر تلویزیونی و حضور در نمایشگاه)، حجم بالایی بازدیدکننده در لحظه داشت [شرکت سپیدان]
-
خبرگزاری شیرازه: به عنوان برنامه نویس full-stack، در زمانی که این سایت خبری، تعداد بالای بازدیدکننده در لحظه داشت و همین طور رقبای این خبرگزاری، از انواع ترفند برای از کار انداختن این سایت (down) استفاده میکردند.[شرکت سفیرسیستم شیراز]
- شرکت ادرو: به عنوان شرکت برنامه نویس full-stack، در شرکتی که خدمتدهنده به دیجی کالا، دیجی استایل و فیدیبو و ... است و علاوه بر این به عنوان یک شبکه تبادل تبلیغات بنری (Ad-exchange)، با تعداد خیلی زیادی تراکنش اینترنتی و الگوریتمهای بهینهسازی نمایش تبلیغات سر و کار دارد
دیدگاهها
پیوند ثابت
پیوند ثابت
پیوند ثابت
پیوند ثابتافزودن دیدگاه جدید