احتمالا در سطح شهر ساختمانهای در حال ساخت زیادی را دیدهاید و میدانید که قبل از بالا بردن دیوارها و شروع ساختوساز، پی و فنداسیون مستحکمی تعبیه شده است. این پی را میتوانیم به زیرساخت در صنعت فناوری اطلاعات تشبیه کنیم. بدون زیرساخت، محصول یا نرمافزاری که ساخته میشود، هیچ دوامی ندارد و با کوچکترین مشکلی از بین خواهد رفت. سایت دیجیکالا دقیقا به خاطر همین زیرساخت است که در حال حاضر میتواند روزانه به هزاران نفر بهصورت همزمان سرویس ارائه دهد. ما در تیم زیرساخت دیجیکالا تمام تلاش خود را میکنیم تا بستری مناسب برای خدمات دیجیکالا ارائه دهیم. اما زیرساخت چیست و ما از چه تکنولوژیهایی برای زیرساخت دیجیکالا استفاده میکنیم؟ در این مقاله به بررسی این سوالات میپردازیم و از تجربههای خود در تیم زیرساخت دیجیکالا صحبت میکنیم.
زیرساخت چیست و چرا دیجیکالا به واحدی با نام زیرساخت نیاز دارد؟
زیرساخت فناوری اطلاعات شامل تمام سختافزارها، نرمافزارها و منابع شبکه است که ارائه خدمات فناوری اطلاعات را در یک شرکت امکانپذیر میکند. زیرساخت میتواند برای ارائه خدمات یا منابع در داخل شرکت یا بهصورت خارجی و برای مشتریان آن استفاده شود. توسعهدهندگان نرمافزار از زیرساخت فناوری اطلاعات برای پیاده کردن روش توسعه خاص خود استفاده میکنند تا کارایی و ارزش بیشتری را از طریق استفاده از فناوری برای شرکت ایجاد کنند.
دیجیکالا دارای سرویسها و ابزارهای فناوری اطلاعاتی زیادی است که زیرساخت هرکدام از آنها به نگهداری نیاز دارد. ما در تیم زیرساخت دیجیکالا وظیفه توسعه و نگهداری از زیرساختهای سرویسها و ابزارهای فناوری اطلاعات را به عهده داریم. تیم ما از چندین واحد مختلف و تقریبا ۱۴۰ نفر متخصص و مهندس در زمینههای مختلف نرمافزاری تشکیل شده است. تیمهای امنیت، AIOps، DEVOps، Clouds، CDN، سرویسهای فناوری اطلاعاتی مانند help desk، سرورها و… از جمله تیمهای مختلف ما در بخش زیرساخت دیجیکالا هستند.
پروژه سوپرنوا در دیجیکالا؛ نقطه شروع تشکیل تیم زیرساخت
پروژه سوپرنوا در دیجیکالا را میتوانیم نقطه اصلی تشکیل تیم زیرساخت بدانیم. قبل از اینکه به تاریخچه تشکیل تیم خود بپردازیم، بهتر است کمی در مورد سوپرنوا در دیجیکالا حرف بزنیم. گاهی ستارهها منفجر می شوند و از هم میپاشند که در اینجا بیگبنگ (Big Bang) اتفاق میافتد و سپس به سوپرنوا (Supernova) تبدیل میشوند. در صنعت فناوری هم ما چنین انفجار و تحولی را تجربه میکنیم.
بهطور کلی، در صنعت فناوری اطلاعات، به جابهجایی یکباره یک پلتفرم از یک مجموعه نرمافزاری و سرویسها به یک مجموعه نرمافزاری و سرویسهای دیگر بیگبنگ میگوییم. بهعبارت دیگر، بیگبنگ بهمعنای بازنویسی پلتفرم با ابزارها و تکنولوژیهای جدید در یک بستر سختافزاری و نرمافزاری جدید است که نام این پروژه در دیجیکالا، سوپرنوا بود.
در گذشته، تمام سرورها در دیجیکالا روی سرویسهای مایکروسافت و ویندوز قرار داشتند. پس تصمیم گرفتیم این سرورها را کاملا بازنویسی کرده و تمام مدلهای کسبوکاری سابق دیجیکالا را اینبار روی یک بستر جدید توسعه دهیم و پیادهسازی کنیم. به همین خاطر، زبان برنامهنویسی خود را عوض کردیم و بستر سیستمعاملها را به لینوکس انتقال دادیم.
بیگبنگ در حوزه شغلی ما یک پدیده جدید و تجربهای تازه بود. همکاری با یک تیم خارجی، تحمل ۹ ماه پرفشار از نظر حجم کاری و در نهایت رسیدن به لحظه نهایی تغییر، یک تجربه منحصربهفرد را برای ما در دیجیکالا به وجود آورد. این پروژه بزرگ که در تیرماه ۱۳۹۷ انجام شد، واحد زیرساخت را هم با تغییر و تحولات زیادی روبهرو کرد.
اجرای بیگبنگ به عهده ما در تیم DevOps بود. ما همراه با تیم مهندسی نرمافزار دیجیکالا ساخت پلتفرم جدید را شروع کردیم. اما بعد از مدتی، نیاز به همکاری با تیم CDN هم بهشدت احساس میشد. به همین خاطر، این تیم هم به تیم DevOps ملحق شد. هرکدام از ما نیازها و وظایفی مشابه دیگری داشتیم و کار ما از جنس زیرساخت بود. پس ایده تشکیل یک واحد یکپارچه تحتعنوان «زیرساخت» اینجا به ذهنمان رسید. چون در این صورت میتوانستیم هماهنگیهای بیشتری بین تیمهای مختلف خود داشته باشیم.
در حال حاضر، واحد زیرساخت شامل ۱۲ زیرمجموعه است که هرکدام از این مجموعههای کوچکتر وظیفه خاص خود را دارند. اما در حالت کلی، ما در این واحد، نرمافزارها و سرویسهای موردنیاز را به وجود میآوریم و در اختیار سایر تیمها مانند تیم مهندسی قرار میدهیم.
ساختار واحد زیرساخت و تیمهای آن
بعد از بیگبنگ، علاوه بر تغییراتی که در سرویسها به وجود آمد، واحد زیرساخت هم شکل گرفت و تحولات زیادی را ایجاد کرد. در ابتدای شروع کار، ما فقط چند تیم کوچک داشتیم، اما رفتهرفته تیمهای زیادی به ما اضافه شدند. بعضی از این تیمها عبارتاند از:
-
تیم عملیاتی فناوری اطلاعات (IT Operation)
تیم عملیاتی فناوری اطلاعات کارهای عملیاتی واحد ما را انجام میدهد و حجم کاری فیزیکی بیشتری نسبت به سایر تیمها دارد. رفتوآمد بین ساختمانها، نصب سختافزار و سرور در مراکز داده، انجام مکاتبات با شرکتها و مراکز داده ارائهدهنده خدمات مخابراتی و زیرساختی از جمله کارهایی است که ما در تیم عملیاتی انجام میدهیم. البته این وظایف بین ۶ گروه مختلف تقسیم میشود و هر تیم وظیفه بخش مخصوص به خود را به عهده دارد:
- تیم شبکه (Network): تیم شبکه یا نتورک ارتباطات تمام ساختمانهای دیجیکالا را مدیریت میکند؛ از ساختمانهای اداری گرفته تا انبارها.
- تیم مجازیسازی و ذخیره (Virtualization & Storage): این تیم وظیفه مدیریت سرویسهای مجازیسازی و نصب سرورها در مراکز داده و منابع ذخیرهسازی اطلاعات را به عهده دارد.
- تیم مدیریت فرایندهای کسبوکار (BPMS): تیم BPMS وظیفه تعریف فرایندهای کسبوکار را به عهده دارد. فرایندهای بیشتر تیمهای دیجیکالا مانند تیم مالی، منابع انسانی و … توسط این تیم در ابزار BPMS پیادهسازی میشود.
- تیم میز کمک (Help Desk): این تیم سرویسهای سختافزاری و نرمافزاری فناوری اطلاعات را در تمام ساختمانهای دیجیکالا پشتیبانی کرده و این خدمات را بهصورت مستقیم در محل به آنها ارائه میدهد.
- تیم میز خدمت (Service Desk): این تیم سرویسهای active directory، exchange و share point را گسترش میدهد و از تیمهای حیاتی و مهم دیجیکالا برای ارائه چنین سرویسهایی در شرکت شناخته میشود.
- تیم ارتباطات یکپارچه (Unified Communication): تیم UC بستر مناسبی برای ارتباطات تلفنی دیجیکالا ارائه میدهد و حجم زیادی از تماسهای مراکز تلفنی را کنترل و مدیریت میکند.
-
تیم توسعه و عملیات (DevOps)
این تیم پلتفرم اصلی پروژه سوپرنوا و دیجیکالا را مدیریت میکند. تیم ناک زیرمجموعه تیم توسعه و عملیات است که وظیفه مانیتور کردن پلتفرم سوپرنوا را به عهده دارد.
-
تیم کلاد (Cloud)
این تیم وظیفه آمادهسازی بستری کاملا ابری را به عهده دارد تا از این طریق کامپوننتهایی (Component) را که توسط افراد ما در تیم زیرساخت یا تیم دیجیکالا ساخته میشود، بهصورت API به سایر تیمها ارائه دهد.
-
تیم عملیاتی هوش مصنوعی (AI Operations)
این تیم از هوش مصنوعی و یادگیری ماشین در زیرساخت استفاده میکند و محصولی به نام ویناک را ایجاد کرده است. ویناک با استفاده از هوش مصنوعی و یادگیری ماشین اتفاقاتی را که در حوزه زیرساخت رخ میدهد و از دید انسانها دور است، متوجه میشود. ویناک یک کار جدید در حوزه زیرساخت به حساب میآید که برای اولین بار در ایران انجام شده است.
زمانی که سرعت سایت دیجیکالا پایین میآمد، نیروهای ناک ما باتوجهبه معیارهای خاص خود، متوجه میشدند که اتفاقی در حال افتادن است. این کندی به تیم توسعه و عملیات گزارش میشد و این تیم برای یافتن علت مشکل بهصورت زنجیرهای و عقبگرد، سرویسهای مختلف را بررسی میکردند.
در حال حاضر از هوش مصنوعی و یادگیری ماشین برای فهمیدن رفتار زیرساخت استفاده میکنیم. علاوه بر حذف بررسیهای زمانبر، با استفاده از ویناک میتوانیم اتفاقاتی را که در حال افتادن است، پیشبینی کنیم و به تیمهای مربوطه هشدار دهیم.
-
تیم شبکه توزیع محتوا (CDN)
با بزرگتر شدن دیجیکالا، نیازهای زیرساختی هم متنوع و هم خاص شد. ما در دیجیکالا تصمیم گرفتیم تا شبکه توزیع محتوای خصوصی خود را راهاندازی کنیم و به شرکت دیجیکالا، شرکتهای زیرمجموعه و سایر شرکای تجاری خدمات CDN ارائه میدهیم. این تیم وظیفه توسعه، نگهداری و تجزیهوتحلیل شبکه توزیع محتوا را به عهده دارد. این مسئولیت ها توسط سه تیم زیر مجموعه انجام میشود:
- تیم سیستمها (SYSTEM): هرجا نیاز به توسعه و خلق یک سیستم باشد، مهندسان این بخش دست به کار میشوند. توسعه محصول CDN و سایر محصولات کناری از اقدامات این تیم به شمار میرود. اعضای این تیم به صورت مستمر در حال توسعه قابلیتها و امکانات سامانههای ما هستند.
- تیم عملیات سیستم (SYSOPS): نگهداری از یک شبکه توزیع شده با نرمافزارهای خاص و بهروز کار زیادی میطلبد. تیم عملیات سیستم، نگهداشت، بهبود و ایمنسازی این شبکه سختافزاری/نرمافزاری را بر اساس فرایندهای استاندارد را برعهده دارد.
- تیم عملیات دیتا (DataOPS): تمامی سامانهها و سیستمها مقدار زیادی اطلاعات جانبی تولید میکنند. از وضعیت و متریکها گرفته تا نتایج درخواستها و رخدادهای شبکه. حجم زیاد این اطلاعات نیاز به زیرساختی مناسب و ساختاری منعطف دارد. وظیفه تیم عملیات دیتا، ایجاد و توسعه این زیرساختها برای جمعآوری، آنالیز و ذخیرهسازی است.
-
تیم امنیت (Security)
تیم امنیت شامل دو زیرمجموعه یعنی امنیت شبکه (NetSec) و تیم SecOps است که در واقع نقش یک RedTeam را ایفا میکند. این تیم وظیفه برقراری امنیت شبکه، ایجاد دسترسیها و VPN، تهیه الزامات امنیتی برای افراد توسعهدهنده، امنیت وب، آنالیز حملات و ایجاد فرایندهای اتوماتیک امنیت در محیطهای توسعه و پروداکشن را به عهده دارد.
تیم راهبری فناوری اطلاعات (IT Governance)
باتوجهبه بزرگتر شدن مقیاس دیجیکالا و اضافه شدن فرایندهای جدید به آن، تیم راهبری فناوری اطلاعات را به واحد خود اضافه کردیم. این تیم تازهتاسیس وظیفه پیادهسازی فریمورک راهبری فناوری اطلاعات و هدایت تمام کارهای مرتبط با فناوری اطلاعات که در کل شرکت انجام میشود را به عهده دارد.
بعضی از نقشهای ما در تیم زیرساخت
علاوه بر تیمهای واحد زیرساخت، خوب است با تعدادی از نقشهای افراد ما در این واحد هم آشنا شوید تا درک کاملتری از این واحد دیجیکالا داشته باشید.
Principal Engineer
در واحد زیرساخت دیجیکالا به شخصی احتیاج داشتیم تا سررشته و دانش خوبی در زمینه کسبوکار، محصول و زیرساخت داشته باشد. این شخص در تمام پروژههای زیرساختی دیجیکالا در نقش راهنما حضور پیدا میکند و برای بعضی از این پروژهها برنامهریزی کاملی انجام میدهد. در بعضی از موارد مهندسPrincipal باید صفر تا صد پروژه را به عهده بگیرد و از پایه شروع به انجام دادن کارها و پیدا کردن تیم مناسب برای آن بپردازد. ارائه گزارش کارها و مشکلات فنی تیم به مدیر واحد زیرساخت هم به عهده این شخص است.
مدیر برنامه (Program/Project Manager)
در واحد زیرساخت همیشه احساس میکردیم که هماهنگیها و همسوییها بین تیمها به سختی انجام میشود. باتوجهبه اینکه در مواردی کار تیمها به هم وابسته بود و هر تیم نیاز به الزاماتی داشت که باید توسط تیمی دیگر انجام میشد، مشکلاتی در واحد زیرساخت به وجود آمده بود که تنها به ایجاد یک برنامه زمانی منظم نیاز داشت.
پس ما به یک فرد متخصص برای آموزش دادن، سازگار کردن و ایجاد هماهنگی بین تیمها نیاز داشتیم. پس از تحقیق و بررسی متوجه شدیم که تیمهای بزرگ در دنیا از نقشی به نام مدیر برنامه برای رفع چنین مشکلاتی استفاده میکنند. مدیر برنامه در تعریف نقشه راه پروژهها و ایجاد هماهنگیهای بین تیمها در واحد زیرساخت بسیار موثر است.
تکنولوژیهای مورد استفاده در تیم زیرساخت دیجیکالا
با بزرگتر شدن دیجیکالا، نیازهای آن هم افزایش پیدا کرد و این باعث شد تا ما هم در تیم زیرساخت روزبهروز بزرگتر شویم، از افراد متخصص و باتجربه در حوزههای مختلف استفاده کنیم و تکنولوژیهای متنوعی را در زیرساخت به کار بگیریم.
ما در تیم زیرساخت همهچیز را مانند یک سرویس میبینیم. آرش شمس، مهندس Principal زیرساخت معتقد است: «در تیم زیرساخت همهچیز باید API باشد». او در توضیح این حرف خود میگوید:
«در قدیم دیجیکالا یک فروشگاه اینترنتی بود که همه از آن خرید میکردند. اما با بزرگتر شدن دیجیکالا ما علاوه بر تیمهای مختلف کلانداده، BI، تیمهای زیرساخت، تیمهای واحد مهندسی و… پروژههایی داشتیم که در حال تبدیل شدن به محصول بودند.
با محصول شدن پروژههایی مانند دیجیاکسپرس و پیندو، دیجیکالا به گروه دیجیکالا تبدیل شد و نیازمندیهای جدیدی از سمت زیرمجموعههای مختلف آن مانند کمدا، فیدیبو و … به وجود آمد. پس واحد زیرساخت به یک ارائهدهنده خدمات به این پلتفرمها تبدیل شده بود. به همین خاطر تصمیم گرفتیم هرچیزی که در تیم زیرساخت ایجاد میکنیم، تنها مختص دیجیکالا نباشد؛ بلکه سرویسی باشد که کل مجموعه گروه دیجیکالا بتوانند از آن بهرهمند شوند. این نگاه سرویسمحور باعث به وجود آمدن سرویس ابر یا کلاد شد».
زیرساخت دیجیکالا دریای وسیعی از تکنولوژیها و سرویسها است که توسعه و گسترش این تکنولوژیها هیچگاه متوقف نمیشود. تیم زیرساخت در مجموع یکی از جذابترین و بینظیرترین تکنولوژیهای استک (Stack) است؛ از تیم UC گرفته که با استک سیسکو کار میکنند تا تیم امنیت شبکه که از استکهای سیسکو و فورتینت استفاده میکند.
تیم DevOps، استک تکنولوژی وسیعتری از ابزارهای مختلف مانند سرویسهای لینوکسی، خودکارسازی، CICD، Infrastructure as a code، MySQL، Redisو… را شامل میشود. تیم خدمات ابری از OpenStack استفاده میکنند و به همین دلیل استفاده بسیاری از پایتون دارند. تمام تیمهای ما در واحد زیرساخت بر حسب نیازی که دارند، از تکنولوژیهای مناسب خود استفاده میکنند.
حوادث ناگوار تیم زیرساخت دیجیکالا
حادثه را جزو جدانشدنی زیرساخت میدانیم. البته با وجود تکنولوژیهایی مانند ویناک توانستهایم بخش زیادی از مشکلاتی که ممکن است برای زیرساخت به وجود بیاید را کنترل و مدیریت کنیم. اما جلوگیری از وقوع بعضی از اتفاقات نه تنها از عهده هوش مصنوعی و یادگیری ماشین برنمیآید که حتی افراد باتجربه در ایران همچنین تجربههایی در این مقیاس بزرگ را نداشتهاند.
ما در روزهای عادی، همزمان حدود ۱۰۰ تا ۱۵۰ هزار کاربر در دیجیکالا داریم و ترافیک ورودی سرورها تقریبا ۱۵ تا ۲۰ گیگابایت است. این اعداد نشان میدهد که دیجیکالا تا چه اندازه بزرگ است و یک لحظه غفلت در نگهداری از زیرساختها میتواند چقدر فاجعهآمیز باشد.
در مراکز توزیع دیجیکالا از شبکههای وایرلس برای بستهبندی و ارسال کالاها استفاده میشود. اگر این شبکهها مختل شود، تمام فرایندهای بستهبندی متوقف شده و ارسال سفارشها به تعویق میافتد. یکی از حوادث تلخ و در عین حال آموزنده ما در تیم زیرساخت، از کار افتادن یکی از شبکههای وایرلس در یکی از مراکز توزیع دیجیکالا به دلیلی نامعلوم بود.
ما برای حل این مشکل از شرکتهایی که بهطور تخصصی در زمینه شبکههای وایرلس فعالیت میکنند و حتی نمایندگیهای برند آنها کمک گرفتیم. اما این مشکل حتی برای آنها هم کاملا ناشناخته بود. با وجود تمام اینها، توانستیم ظرف چند ساعت مشکل را حل کنیم و تجربه خوبی از این حادثه به دست آوریم.
ما در تیم زیرساخت دیجیکالا کاملا این موضوع را درک کردهایم که وقتی مقیاس کار از حد مشخصی بزرگتر میشود، ساختارها متفاوت شده و حوادث سنگینتری در انتظارمان است. در تیم CDN بارها مشکل از کار افتادن سیستمهای نام دامنه (DNS) و ایجاد حوادثی در مراکز داده را تجربه کردهایم. این مشکلات که بیشتر بهخاطر شرایط خاص ایران مانند قطعی مداوم برق اتفاق میافتد، درسهایی به ما داده است که در هیچ کلاس درسی نمیتوانستیم آنها را یاد بگیریم.
کلام آخر
تیم زیرساخت دیجیکالا بر اساس اعتماد تمام زیرمجموعههای این تیم به یکدیگر ساخته شده است. هدف نهایی ما در این تیم افزایش زمان بالا بودن سایت و حفظ سلامت آن بوده و به جرئت میتوانیم بگوییم تجربههایی که ما در این تیم در کنار یکدیگر به دست آوردهایم، در هیچ کتاب و مقالهای چاپ نشده است.