پنج ترابات داده ، مدیریت توسط یک تیم ایرانی ؟

درود به تمام همیاران انتشارات کلید وب سرویس

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


امروز قصد داریم در مورد یکی از تکنولوژی هایی که چندین وقت است توسط تیم کلید وب سرویس برای راه اندازی وب سرویس رانش ابری استفاده شده است صحبت کنیم و از توانایی این روش برای بازدهی بالا و قدرت پردازش خود چند پاراگرافی صحت نماییم.

در نظر داشته باشید ما روزانه بیش از یک میلیون درخواست را مدیریت می نماییم و بیش از پنج ترابات داده در سال تولید و پرداز می شود .

نمایش

قبل از اینکه یک توضیح در مورد روش رانش ابری کلید وب سرویس بگوییم بهتر است یک بررسی اجمالی بر روی سرور های کلید وب سرویس داشته باشیم تا شما با زیر ساخت ما آشنا شوید.

تیم کلید وب سرویس هم اکنون دارای بیست دو سرور فعال در شبکه اینترنت جهانی هست ، در حدود نه عدد از این سرور ها به دلیل سرویس دهی سریع تر به کاربران ایرانی در ایران مدیریت می گردند (برج میلاد) که شامل بخشی از سرور های (اپلیکیشن - جمع آوری داده - پایگاه داده و ...) می باشند و دیگر سرور ها نیز در کشور های (انگلیس - فرانسه - آمریکا - آلمان - اتریش - نیوزلند - ژاپن - سنگاپور) راه اندازی شده اند .

مشاهده لیست سرور ها

خوب سوال اصلی اینجاست این سرور ها چه کاری برای ما انجام می دهند .

ما فرض بر این می گیریم که سرور اصلی شما در کشور اتریش و یا آلمان میزبانی شده است به طبع ما برای کم کردن زمان دسترسی شما به داده ها از شبکه ابری آلمان جوابگو شما خواهیم بود .

پس هیچ وقت سرعت سرویس دهی کم نمی شود !!

کلید وب سرویس همچنین دارای سه سرور متعادل نمودن بار ترافیکی (Load balancing) در کشور های آمریکا - آلمان و ایران است . هدف از این کار بر قراری سه نقطه اصلی برای کنترل آسیا - اروپا و آمریکا بوده است .

کلید وب سرویس - نقطه سه نقطه اصلی
کلید وب سرویس - نقطه سه نقطه اصلی


زمانی که درخواست شما در شبکه اینترنت فارق از تجهیزات ارتباطی داخل شبکه اینترنت به آدرس ما یعنی api.keyapi.co ارسال می شود . در واقع جواب شما توسط سرور توضیع ما توسط سه نقطه اصلی پرداز می شود و سپس به نزدیک ترین سرور ارسال و جواب نیز برای شما بر گردانده می شود .

چگونه ما شما را شناسایی می کنیم ؟

سرور های نقاط اصلی با قابلیت پرداز بالا اطلاعات ارسال شما را در یافت می نمایند و سپس بر اساس آدرس شبکه (IP Address Header) شما بدنه (Body Request) درخواست را به همراه آدرس شبکه پروکسی (Reverse Proxy) و استفاده از تک (X-Forwarded-For) در سربرگ درخواست (header) به سرور متعادل کننده ترافیک (Load balancing) ارسال می نمایند .

Make Use of X-Forwarded-For with a CDN

Using the Forwarded header nginx


Reverse Proxy Flow
Reverse Proxy Flow


ما به دلیل استفاده از سرویس شبکه تحویل محتوا ( CDN - Content delivery network) و همچنین نیازمند به آدرس درخواست دهنده هستیم سرویس پروکسی سرور (Reverse Proxy) هستیم . تا بتوانیم اطلاعات شما را به درستی پردازش نماییم .

پردازش درخواست های کاربران در شبکه
پردازش درخواست های کاربران در شبکه


ساختار وب سرویس

تمام درخواست ها ارسال شده توسط کاربران بعد از پردازش اولیه از طریق وب سرویس میانی به سرور اصلی ارسال می گردد و در آن مکان است که داده های مورد نظر شما واکشی و برای دسترسی شما برگردانده می شود . در نظر داشته باشید تمام این عملیات در کسری از ثانیه انجام می پذیرد .

برنامه نویسی

بعد از شناخت زیر ساخت ارتباطی نوبت به تشرح مختصر زبان برنامه نویسی و نوع نگه داری داده ها توسط تیم کلید وب سرویس می رسد . ما بیش از پنج ترابایت داده در سال تولید و مدیریت می کنیم . این داده ها توسط میلیون ها درخواست در ماه از سرور های ما واکشی می شود .

زبان پدری (Python) : در پیکره اصلی سرور های جمع آوری اطلاعات ما از زبان برنامه نویسی Python استفاده کرده ایم . در این زبان چیزهای زیادی نیوفته است که ما به دلیل قدرت پرداز و همچنین برنامه نویسی سریع و راحت انتخاب کرده ایم . در نظر داشته باشید بیش از شش سرور جمع آوری اطلاعات هم اکنون با این زبان راه اندازی شده اند . ما هم اکنون بیش از 1500 خط از این کد در زیر سامانه خود داریم.

زبان مادری (PHP) : یکی از زبان های برنامه نویسی دیگر که توسط تیم کلید وب سرویس در بخش Backend وب سایت استفاده شده است ، ما با استفاده از این زبان برنامه نویسی ، دسترسی بیش از دو هزار پانصدکاربر را به وب سرویس های خود فراهم کرده ایم . ما هم اکنون بیش از 65 هزار خط از این کد در سامانه خود داریم .

ما بیش از سه سرور پایگاه داده در شبکه خود داریم !

قلب اصلی شبکه ابری کلید وب سرویس جامعیت داده ها است که ما آن را برروی سه سرور اصلی پایگاه داده ذخیره سازی کرده ایم . حجم اطلاعات ذخیره شده در فضای سه ترابایتی سرور ها در هر ماه به مقدار یک فصل حذف می گردد . در این روش تمام اطلاعات جمع آوری شده در سرور پایگاه داده اصلی ذخیره می گردد و سپس دو سرور پایگاه داده به صورت زیر مجموعه () از داده های سرور اصلی واکشی و به روز می شوند . همچنین داده های ذخیره سازی شده در سرور پایگاه داده اصلی بعد از یک فصل به سرور پشتیبان (سرور تاریخچه قیمت) منتقل و از روی سرور اصلی حذف می گردد .

چگونه ما سرور پایگاه داده را به روز رسانی می کنیم ؟

بعد از هر فصل سرور پایگاه داده اصلی به صورت کامل با سرور دیگر از نظر فضا و پردازش تعویض می گردد .دلیل این امر بالا بردن کیفیت روند ذخیره سازی داده ها می باشد .

نکته : روش استفاده شده برای جابه جایی سریع و بدون درنگ داده ها به سرور دیگر جزئی از روند محرمانه سامانه می باشد لذا از بازگو کردن این مورد می گذریم .

دادهای ذخیره سازی شده برروی سرور اصلی بر دو نوع طبقه بندی می شود .

حجم داده

حجم داده ها خیلی برای ما مهم می باشد در اصل با بر اساس حجم داده ها تولید شده انتخاب می کنیم که اطلاعات در کدام مسیر دیتابیس ذخیره سازی کنیم .

علاقه مندی داده توسط درخواست کنندگان

پایگاه داده های ما بر اساس داده های مورد علاقه کاربران ، اطلاعات را طبقه بندی می نماییم تا در کسری از ثانیه اطلاعات به کاربران واکشی شود .

نوع پایگاه داده ما : musql

ما از چهار موتور کاوش دیتابیس استفاده می نماییم : InnoDB - MyISAM - Memory - Federated

موتور (InnoDB) : استفاده از crash-recovery برای بازیابی داده های آسیب دیده استفاده می کنیم.

موتور (Memory) : استفاده از روش دسترسی پذیری داده های برروی حافظه RAM به دلیل سرعت زیاد در پرداز و همچنین روش سریع واکشی (Insert - Select) در سرور های میانی استفاده می گردد.

موتور (MyISAM) : از این موتور که صرفا جهت خواندن داده ها استفاده می شود برای مدیرت منابع در پایگاه داده مستقیم کاربری استفاده می نماییم.

موتور(Federated) : یکی از بهترین موتور های پایگاه داده برای اتصال دیگر پایگاه ها داده به یک دیگر می باشد.

روش تغییر موتور ذخیره‌سازی در MySQL :

ALTER TABLE table-name ENGINE = InnoDB;

مقایسه ویژگی های موتورهای ذخیره سازی در یک نگاه :

  واکشی موتور
واکشی موتور


بخش دوم در پست زیر مطالعه کنید

https://virgool.io/keyapico/%D9%BE%D9%86%D8%AC-%D8%AA%D8%B1%D8%A7%D8%A8%D8%A7%D8%AA-%D8%AF%D8%A7%D8%AF%D9%87-%D9%85%D8%AF%DB%8C%D8%B1%DB%8C%D8%AA-%D8%AA%D9%88%D8%B3%D8%B7-%DB%8C%DA%A9-%D8%AA%DB%8C%D9%85-%D8%A7%DB%8C%D8%B1%D8%A7%D9%86%DB%8C-2-ayiwhxfjwvot