با سلام خدمات تمام دوستان
میخواستم بدونم بعد از اینکه ما همه چی و یاد گرفتیم (مثلا لاراول مثلا نود جی اس و ...) و مشکلی تو کدنویسی نداریم چطوری می تونیم سایت های پر بازدیدی رو مثل سایت های خبری، مثل سایت های اشتراک ویدئو مثل سایت های تبلیغات کلیکی رو راه اندازی کنیم که خیلی بازدید روزانه بالایی دارند مثلا حداقل روزانه 4 میلیون بازدید.
باید چه نکاتی رو در دیتابیس و چه تکنیک و تاک تیک هایی رو در کدنویسی در نظر بگیریم که یهو سایت down نشه؟
خواهش میکنم که پاسخ هایی رو قرار بدید که مستند و کاربردی هستند نه اینکه شنیده باشید و تجربه نکرده باشید و تخصص شو نداشته باشید.
یه دنیا ممنون
سلام ، اینایی که براتون نوشتم تجربه شخصیه و ۱۰۰٪ کامل نیست .
موارد سمت برنامه نویسی
۰-استفاده از کش فایل ها
۱-بهینه سازی تصاویر و عدم استفاده از یک سایز عکس در موارد مختلف
۲- استفاده از تمپلیت انجین و لی اوت بندی و جلوگیری از لود مجدد کد های تکراری
۳- استفاده از توابع gzip در وب سرور
۴- استفاده از بیلد سیستم مثل webpack یا ... برای کامپایل و مینیفای فایل های js,css,scss,jsx و...
۵-نوشتن اور اکسپشن کامل برای قسمت های مختلف و عدم نمایش ارور سیستم یا اجازه رسیدن به اون مرحله برای کاربر و در عوض نوشتن ارور در فایل لاگ یا مثل این
۶-جلوگیری از ارسال پشت سر هم یک درخواست ایجکس مثل سامبیت یک فرم قبل از دریافت پاسخ درخواست قبلی
۷-تکه تکه کردن فایل ها هنگام آپلود و ترجیها آپلود با استفاده ایجکس
۸-استفاده از css3 تا جای ممکن برای ساختن بک گروند به جای عکس و افکت ها به جای js و استفاده از فونت آیکون ها به جای عکس .
۹- استفاده از queue برای صف بندی کار هایی که زیاد و پی در پی انجام میشن و انجام شدن ها اهمیت دارد مول ارسال ایمیل،برُدکستینگ ، ناتیفیکیشن . و ....
۱۰-عدم استفاده زیاد از تابع settimeout در js مخصوصا چک کردن ایجکسی موردی با این روش و به جای این روش از راهکار های ریل تایم مثل socket io یا ساده ترش pusher js استفاده بشه
۱۱-پاسخ های ایجکسی تا جای ممکن بدون html و عکس و... باشد .ترجیها json
و قرار دادن تایم اوت برای همه درخواست های ایجکس
۱۲-استفاده از lazy load برای لود دیتا های جدول های حجم بالا ( صفحه بندی یا لود با اسکرول )
۱۳ - عدم استفاده غیر ضروری از توابع و دستوراتی که منابع بیشتری از سرور رو اشغال میکنند .
۱۴-ساختار و رابطه های استادارد در دیتابیس و استفاده به جا تز کوئری مورد نظر و بازگرداندن فیلد های مورد نیاز . مثلا شما اگه فقط به آی دی و نام احتیاح داری فقط همین ۲ تا فیلد رو از جدول بگیرین .
۱۵- استفاده از ORM
۱۶- ترجیها پیاده سازی بر اساس SPA . سینگل پیج و استفاده از api بر پایه json و rest
و خیلی حرفه ای تر نوشتن api ریل تایم و Asynchronous
( البته بسته به نیاز هست )
یک مثال با یک سرور فرضی از پاسخ به تعداد درخواست در ثانیه در زبان های مختلف
(Ubuntu Linux 16.04, i7 Intel NUC, 16GB RAM) and found:
۱۷- ترجیها استفاده از یک فریم ورک برای front که بیشتر نیاز ها رو جوابگو باشه به جای استفاده از لایبری و فریم ورک های کوچیک که حجم کد رو بالا ببره
۱۸-استفاده از کپچا ( مثل گوگل ریکپچا ) برای صفحاتی مثل ثبت نام ، لاگین ، ارسال نظر و ... جهت جلوگیری از درخواست های سامبیت بات ها .
۱۹-عدم استفاده از لینک های خارجی و سایر سرور ها برای اسکریپت و سی اس اس یا عکس و فونت ها .
۲۰- مدیریت درخواست های http که چند مورد قبل ۱-۲ بار مواردی رو گفتم مثل جلوگیری از درخواست پست سر هم ، ارور اکسپشن . ست کردن هدر ها . و ...
۲۰-تشخیص دادن دیوایس کاربر و جلوگیری از لود فایل و استایل هایی که توی اون سایز یا دیوایس قرار نیست لود یا استفاده بشه . ضمن اینکه اهمیت وب پک و مینیفای کردن رو قبلا گفتم .
۲۱-استفاده از ابزار های آنالیتیک و مانیتور یا شبیهش برای برسی رفتار های کاربران و ترافیک صفحات و درخواست ها و ... برای بهتر کردن سیستم .
۲۲- استفاده از اعتبار سنج های فرانت با js برای فرم ها و البته اعتبار سنجی سمت سرور هم حتما انجام بشه اما اهمیت اعتبار سنجی فرانت علاوه به ux اینه که از درخواست اضافی به سرور جلوگیری میکنه و قبل از ولید شدن فرم درخواستی رو انجام نمیده . که توی حجم بالا تاثیر داره .
مربوط به سرور خیلی اطلاعات ندارم ولی میدونم که
قطعا سخت افزار قوی و کانفیگ مناسب لازمه و همین طور استفاده از CDN تاثیر گذاره . مخصوصا توی سایت هایی که ویدیو کار میکنند . و اینکه نکته دیگه شما باید مقدار حدودیه استفاده پهنای باند هر کاربر رو در هر بار بازکردن سایت و استفاده معمولا حساب کنی ، این مقدار رو در میانگین بازدید هر کاربر در روز حساب کنی و نهایت به حداقل و کمترین پنهای باند لازم در یک ماه برسی . تا وقتی پهنای باند داشته باشید داون شدن اگرم رخ بده اتفاقی خواهد بود و بر اثر ترافیک بالا که سرور نتونسته پاسخ بده که با ریفرش ۸۰٪ اوکی میشه اگه مشکل لحظه ای باشه .
ولی قطعا رم و cpu و نوع هارد مثلا SSD هم تاثیر داره و نمیشه بگیم فقط پهنای باند .
این اطلاعاتی که خودم طبق تجربه به دست آوردم رو گفتم که تا الان جوابگو بوده خوشحال میشم سایر دوستان هم تجربشون رو شیر کنن .
سلام فرشید عزیز
ممنون بابت توضیحات قشنگ و صبورانه ات که در حوزه لود سایت بصورت استاتیک کامل و گیرا بود ولی احساس میکنم منظورم رو دقیق نتونستم بیان کنم، مشکل من پیاده سازز سایت های بزرگ با دیتابیس های حجیم هستند که بیشتر به دیتابیس و بک اند مربوط میشه مثلا سایت های معروف خبری و یا وبلاگ دهی و یا تبلیغات کلیکی و اشتراک ویدئو در کشور مون که مطمئنا همه مون میدونیم اونها از mongodb و تکنیک distributed استفاده نکردن و از همان دیتابیس های همچون mysql و زبان برنامه نویسی php بصورت شخصی نوشته شده استفاده میکنند و فریم ورکی هم ندارند این و با قطعیت میگم چون علاوه بر ابنکه بررسی کردم مطلع هستم! خلاصه اینکه فکر کنید هر روز علاوه بار بازدید میلیونی باید ثبت اطلاعات میلیونی هم داشته باشید حالا برای این پاسخگویی و عمل read و write و نگهداری حجم انبوهی از اطلاعات و درخواست های زیاد که بصورت باینری رشد میکنه چاره چیست و اونها دارن چیکار میکنند که سایتهاشون نه down میشه و نه نگران پر شدن جداول دیتابیس هاشون هستند با حجمی از میلیاردها رکورد های هر جدول و ....
امیدوارم منظورم رو خوب بیان کرده باشم.
تا جایی که من اطلاع دارم کدنویسی مهم هست ولی دیگه از یه جایی به بعد به قدرت سرور و cdn کردن دیتابیس بر میگرده. شما بهترین کد دنیا رو هم بنویسی با سریعترین زبون وقتی سرورت پاسگو نباشه از کار میافته برعکسش هم هست . مثلا همین wordpress که میگن خیلی کنده و به درد سایت های بزرگ نمیخوره الان خیلی از سایت های بزرگ دنیا مثل سایت های خبری The New Yorker و *** America دارن بدون مشکل ازش استفاده میکنن.
همین لاراول معروفه به این که برای پروژه های large scale استفاده میشه و شک ندارم که اگر برنامه نویس خبره باشه و مثلا همین نکاتی که دوستمون در بالا گفتن رو رعایت کنن میتونه پاسخگو باشه.
من خودم یه ربات نوشته بودم که با curl از سایت های مختلف اطلاعات میگرفتم و مثلا یه دفعه چندین هزار request با proxy های مختلف به یه صفحه می دادم (البته قصدم ddos نبود و فقط اطلاعات میگرفتم). که به عینه دیدم که سایت های که اتفاقا wordpress هم بودن هیچ مشکلی براشون ایجاد نمیشد. سرور هایی هم بودن که برای این که ترافیک رو کنترل کنن به cloudflare وصل می کردند. بعضی ها هم که خوب طبیعتا down می شدند.
@Farshidrezaiyan
توابع و دستوراتی که منابع بیشتری از سرور رو اشغال میکنند چه چیزهایی هستند میشه مثال بزنید؟
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟