diff --git a/README-fa.md b/README-fa.md index 613e0a64..b51cfd9a 100644 --- a/README-fa.md +++ b/README-fa.md @@ -393,9 +393,9 @@ ## مباحث طراحی سیستم: از اینجا شروع کنید -> تازه با طراحی سیستم آشنا شدید؟ +تازه با طراحی سیستم آشنا شدید؟ -در ابتدا لازمه که یک سری اصول اولیه را یادبگیرید که شامل اینن که این اصول چی هستند، چه شکلی استفاده میشن و مزایا و معایبشون چیه +در ابتدا لازمه که یک سری اصول اولیه رو یاد بگیرید که شامل این هستن که این اصول چین، چه شکلی استفاده میشن و مزایا و معایبشون چیه ### قدم ۱ ویدیوهایی درمورد مقیاس پذیری رو ببینید @@ -405,9 +405,9 @@ * Vertical scaling | مقایس پذیری عمودی * Horizontal scaling | مقایس پذیری افقی * Caching | کش کردن - * Load balancing | توزیع بار - * Database replication | تکرار پایگاه داده - * Database partitioning | قطعهسازی پایگاه داده + * Load balancing | لودبالانسینگ یا توزیع بار + * Database replication | ریپلیکِیشن در پایگاه داده + * Database partitioning | پارتیشن کردن در پایگاه داده ### قدم ۲ مقالههای مربوط به مقایس پذیری رو ببینید @@ -421,7 +421,7 @@ ### قدمهای بعدی -در قدم بعدی، ما به ترید-آف های سطح بالاتری میپردازیم مانند: +در قدم بعدی، به ترید-آف های سطح بالاتری میپردازیم مثل: * **کارایی** دربرابر **مقایس پذیری** * **تاخیر** دربرابر **بازدهی** @@ -429,18 +429,20 @@ یادتون باشه که **همه چیز یک ترید-آف هست** -در ادامه ما به مباحث زیر میپردازیم: +در ادامه به مباحث زیر میپردازیم: DNS, CDNs, load balancers. ## کارایی در برابر مقایس پذیری -یک سرویس رو **مقایس پذیر** میگیم وقتی که متناسب با منابعی که به سیستم اضافه میکنیم **کارایی** اون هم افزایش پیدا بکنه. به طورکلی منظور از افزایش کارایی اینه که تعداد کاربیشتری رو انجام بدیم اما ممکنه که بتونه کارهای باحجم بزرگتر هم بتونه هندل کنه مثل زمانی که مجموعه داده هامون زیاد میشه و رشد میکنه1 +> Scalable: مقایس پذیر , Performance: کارایی + +یک سرویس رو **مقایس پذیر** میگیم وقتی که متناسب با منابعی که به سیستم اضافه میکنیم **کارایی** اون هم افزایش پیدا بکنه. به طورکلی منظور از افزایش کارایی اینه که تعداد کار بیشتری رو انجام بدیم اما ممکنه که کارهای باحجم بزرگتر هم بتونه هندل کنه مثل زمانی که مجموعه داده هامون زیاد میشه و رشد میکنه1 یه روش دیگه برای نگاه به قضیه کارایی و مقایس پذیری به صورت زیر هست: * اگر شما مشکل کارایی دارید، سیستم شما برای یک کاربر کند کار میکنه -* اگر شما مشکل مقیاس پذیری دارید، سیستم شما برای یک کاربر سریعه ولی برای بار زیاد کند عمل میکنه +* اگر شما مشکل مقیاس پذیری دارید، سیستم شما برای یک کاربر سریعه ولی برای بار زیاد، کُند عمل میکنه ### منابع برای مطالعه بیشتر @@ -449,7 +451,11 @@ DNS, CDNs, load balancers. ## تاخیر در برابر بازدهی -**تاخیر** زمانی هست که باید *کاری* انجام بشه یا نتیجهای ایجاد بشه. **بازدهی** میزان تعداد همین کارها هست که باید توی یک واحد زمانی انجام بشه. +> Latency: تاخیر, Throughput: بازدهی + +**تاخیر** مدت زمانی هست که باید *کاری* انجام بشه یا نتیجهای تولید بشه. + +**بازدهی** میزان تعداد همین کارهای انجام شده یا نتیجههای گرفته شده هست که باید توی واحد زمان انجام بشه. به طور کلی شما باید برای **بیشترین بازدهی** به همراه **تاخیر قابل قبول** برنامه ریزی کنید. @@ -459,6 +465,8 @@ DNS, CDNs, load balancers. ## دسترس پذیری دربرابر یکپارچگی +> Availability: دسترسپذیری, Consistency: یکپارچگی, Partition Tolerance: تحمل پارتیشن + ### CAP تئوری
@@ -469,23 +477,23 @@ DNS, CDNs, load balancers. در سیستمهای توزیع شده کامپیوتری شما تنها میتونید که ۲ تا از گارانتیهای زیر رو تضمین کنید: -* **یکپارچگی** - هر عملیات خواندن نزدیکترین دادهای که تازه نوشته شده رو میگیره یا با خطا مواجه میشه +* **یکپارچگی** - هر عملیات خواندن، نزدیکترین دادهای که تازه نوشته شده رو میگیره یا با خطا مواجه میشه * **دسترس پذیری** - هر درخواست یک پاسخ میگیره، بدون هیچ تضمینی که جدیدترین نسخه از اطلاعات رو بگیره. * **تحمل پارتیشن** - سیستم میتونه به عملیات خودش ادامه علی رغم اینکه به خاطر خطاهای شبکه مجبور به پارتیشن بنده شده باشه -*شبکه ها قابل اتکا نیستن، بنابریان لازمه که شما تحمل پارتیشن رو پشتیبانی کنید. بنابراین باید بین یکپارچگی و دسترس پذیری یک ترید-آف انجام بدیدی و یکی رو انتخاب کنید* +*شبکه ها قابل اتکا و اطمینان نیستن، بنابریان لازمه که شما تحمل پارتیشن رو پشتیبانی کنید و داشته باشید. بنابراین باید بین یکپارچگی و دسترس پذیری یک ترید-آف انجام بدید و یکی رو انتخاب کنید* #### CP یکپارچگی و تحمل پارتیشن > Atomic: اتمیک, Timeout: تایم-اوت -انتظار برای گرفتن جواب از یک نود پارتیشن شده ممکنه باعث بشه تا تایم-اوت بگیریم. این مدل یک انتخاب مناسبه اگر سیستم شما نیاز داره که به صورت اتمیک بخونه و بنویسیه. +صبر و انتظار برای گرفتن جواب از یک نود پارتیشن شده ممکنه باعث بشه تا تایم-اوت بگیریم.اگر سیستم شما نیاز داره که به صورت اتمیک بخونه و بنویسیه ، این مدل یک انتخاب مناسبه #### AP دسترس پذیری و تحمل پارتیشن -پاسخهایی که دریافت میشه جدیدترین نسخه از داده روی اون نود رو برمیگردونه. نوشتن ممکنه نیاز به زمان داشته باشه تا در کل سیستم اعمال بشه +پاسخهایی که دریافت میشه حاوی جدیدترین نسخه از داده است که روی اون نود وجود داره. نوشتن ممکنه نیاز به زمان داشته باشه تا در کل سیستم اعمال بشه -این مدل انتخاب خوبیه اگر شما نیاز به [یکپارچگی موکول](#یکپارچگی-موکول) نیاز دارید یا زمانی که سیستم نیاز داره که مستقل از خطاهای خارج از خودش به علمکردش ادامه بده +این مدل انتخاب خوبیه اگر شما نیاز به [یکپارچگی موکول](#یکپارچگی-موکول) دارید یا سیستم نیاز داره که مستقل از خطاهای خارج از خودش(خطاهای خارجی) به علمکردش ادامه بده ### منابع برای مطالعه بیشتر @@ -495,23 +503,23 @@ DNS, CDNs, load balancers. ## الگوهای یکپارچگی -زمانی که تعدادی کپی از دادههای یکسان داریم، یک سری انتخاب داریم که چطوری کلاینتها رو سینکرون نگه داریم تا همه یک نمای یکسان از داده داشته باشند. با توجه به تعریف یکپارچگی از [تئوری کپ](#CAP-تئوری) - هر عملیات خوندن داده نزدیک ترین نسخه از داده نوشته شده رو میگیره یا خطا میگیره. +زمانی که تعدادی کپی از دادههای یکسان داریم، با مجموعهای از انتخابها درباره این که چطوری کلاینتها رو سینکرون نگه داریم موجه میشیم تا همه یک نمای یکسان از داده داشته باشند. با توجه به تعریف یکپارچگی از [تئوری کپ](#CAP-تئوری) - هر عملیات خوندن، نزدیک ترین نسخه از داده نوشته شده رو میگردونه یا خطا میده. ### یکپارچگی ضعیف -بعد از این که یک عملیات نوشتن انجام شد، عملیات خوندن ممکنه دیده بشه یا نشه. بهترین روش برای خوندن انتخاب میشه. +بعد از این که یک عملیات نوشتن انجام شد، عملیات خوندن ممکنه اونو ببینه یا نبینه. بهترین روش برای خوندن انتخاب میشه. -این روش در سیستمهای نظیر مِم-کش دیده میشه. یکپارچگی ضعیف در سیستمهای با نیاز بلادرنگ نظیر وویپ، ویدیو چت و بازیهای بلادرنگ چندنفره کاربرد داره. برای مثال، اگر شما پشت تلفن باشید و چند ثانیه ارتباط قطع بشه و بعد دوباره وصل بشید، اون چیزی که گفته شده رو دیگه از دست دادید. +این روش در سیستمهای نظیر مِم-کش-دی دیده میشه. یکپارچگی ضعیف در سیستمهای با نیاز بلادرنگ مثل وویپ، ویدیو چت و بازیهای بلادرنگ چندنفره کاربرد داره. برای مثال، اگر شما پشت تلفن باشید و چند ثانیه ارتباط قطع بشه و بعد دوباره وصل بشید، اون چیزی که گفته شده رو دیگه از دست دادید. ### یکپارچگی موکول -بعد از یک عملیات نوشتن، عملیاتهای خوندن معمولا در میزان چند میلی ثانیه میتونن اونو ببینن. داده به صورت ناهمگام در جاهای دیگه کپی میشه +بعد از اینکه یک عملیات نوشتن انجام شد، عملیاتهای خوندن نهایتا(در حد چند میلی ثانیه) اونو میبینن. داده به صورت ناهمگام در جاهای دیگه کپی و تکرار میشه -این روش در سیستمهایی نظیر دی-اِن-اِس و ایمیل دیده میشه. این مدل در سیستمهای با دسترس پذیری بالا به خوبی کار میکنه. +این روش در سیستمهایی نظیر دی-اِن-اِس و ایمیل دیده میشه. در سیستمهای با دسترس پذیری بالا به خوبی کار میکنه. ### یکپارچگی قوی -بعد از عملیات نوشتن، عملیاتهای خوندن اونو میبینن. داده به صورت همگام کپی میشود. +بعد از اینکه عملیات نوشتن انجام شد، عملیاتهای خوندن اونو میبینن. داده به صورت همگام کپی و تکرار میشه. این روش معمولا در فایل سیستمها و مدیریت پایگاه دادهرابطهای دیده میشه. در سیستمهایی که نیاز به تراکنش دارند این مدل به خوبی عمل میکنه. @@ -531,33 +539,33 @@ DNS, CDNs, load balancers. #### Active-passive -در این مدل، هارت-بیت بین سرور فعال و غیر فعال که درحالت آماده باشه رد و بدل میشه. اگر هارت-بیت قطع بشه سرور غیرفعال آی-پی سرور فعال رو دراختیار میگیره و درخواستها رو هندل میکنه. +در این مدل، هارت-بیت بین سرور فعال و سرور غیر فعال که درحالت آماده باشه، رد و بدل میشه. اگر هارت-بیت قطع بشه سرور غیرفعال آی-پی سرور فعال رو دراختیار میگیره و درخواستها رو هندل میکنه. -طول زمان پایین بودن به ۲ صورت مشخص میشه. سرور غیر فعال از به صورت هات لود میشه یا زا شرایط لود سرد اصطلاحا فعال میشه. فقط سرور فعال ترافیک رو هندل میکنه. +طول زمان پایین بودن به دو نوع معین میشه، یا اینکه سرور غیر فعال در حالت به اصطلاح هات در انتظاره یا نیاز داره از حالت به اصطلاح سرد شروع به کار کنه. فقط سرور فعال ترافیک رو هندل میکنه. این مدل رو مستر-اِسلِیو هم میگن #### Active-active -در این حالت هر دو سرور ترافیک رو هندل میکنه و بار بین این دو تقسیم میشه. +در این حالت هر دو سرور ترافیک رو هندل میکنن و بار بین این دو تقسیم میشه. -اگر سرورها به صورت عمومی روی اینترنت باشن، دی-اِن-اِس باید آی-پی هر دو سرور رو بدونه. اگر سرورها در شبکه داخلی باشن، لایه برنامه باید از حضور این دو سرور آگاهی داشه باشه. +اگر سرورها به صورت عمومی روی اینترنت قابل دسترسی باشن، دی-اِن-اِس باید آی-پی هر دو سرور رو بدونه. اگر سرورها در شبکه داخلی باشن، لایه برنامه باید از حضور این دو سرور آگاهی داشه باشه. این مدل به عنوان مستر-مستر هم شناخته میشه. -### معایب این الگو +### معایب Fail-over -* این الگو نیاز به سخت افزار بیشتر هست و پیچیدگی رو هم افزایش میده -* اگر یک سیستم فعال فِیل بشه قبل از این که داده جدید نوشته بتونه کپی بشه توی سرور غیرفعال، امکان از دست رفتن داده هست. +* این الگو نیاز به سخت افزار بیشتری داره و پیچیدگی رو هم افزایش میده +* اگر یک سیستم فعال فِیل بشه و فرصت نشه تا داده جدیدی که تازه نوشته شده، بتونه کپی بشه توی سرور غیرفعال، امکان از دست رفتن داده هست. -### تکرارکردن +### Replication -#### مستر-اسلیو و مستر-مستر +#### Master-Slave و Master-Master -این موضوع در بخش [پایگاه داده](#پایگاهداده) بررسی شده +این موضوع در بخش [پایگاه داده](#پایگاه-داده) بررسی شده -* [تکرارکردن مستر-اسلیو](#تکرار-مستر-اسلیو) -* [تکرارکردن-مستر-مستر](#تکرارکردن-مستر-مستر) +* [تکرارکردن مستر-اسلیو](#master-slave-replication) +* [تکرارکردن-مستر-مستر](#master-master-replication) ## سیستم نام دامنه DNS @@ -569,11 +577,11 @@ DNS, CDNs, load balancers. Source: DNS security presentation
-سیستم نام دامنه یا همان دی-اِن-اِس نام یک یک دامنه را به آی-پی آن ترجمه میکند. +سیستم نام دامنه یا همان دی-اِن-اِس، نام یک دامنه را به آی-پی آن ترجمه میکند. www.example.com -> IP address. -دی-اِن-اِس به صورت سلسله مراتبی هست و تعداد کمی سرور اصلی در لایههای بالا وجود داره. روتر یا آی-اِس-پی شما اطلاعات مربوط به دی-ان-اس هایی که برای جستجو استفاده میشن رو در اختیار شما میزارن. دی-ان-اس های لایه پایینتر معمولا این نگاشت بین نام دامنه و آی-پی رو کش میکنن که ممکنه بعد از مدتی اعتبار این نگاشتها از بین بره به خاطر این که انتشار تغییرات در دی-ان-اس کنده. نتایجی که از دی-ان-اس برای شما میاد ممکنه که در مرورگر یا سیستم عامل کش برای مدت مشخصی کش بشه، به این مدت مشخص تایم-تو-لیو گفته میشه +دی-اِن-اِس به صورت سلسله مراتبی هست و تعداد کمی سرور اصلی در لایههای بالا وجود داره. روتر یا آی-اِس-پی شما اطلاعات مربوط به دی-ان-اس هایی که برای جستجو استفاده میشن رو در اختیار شما میزارن. دی-ان-اس های لایه پایینتر معمولا این نگاشت بین نام دامنه و آی-پی رو کش میکنن به خاطر این که انتشار تغییرات در دی-ان-اس کنده، که ممکنه بعد از مدتی اعتبار این نگاشتها از بین بره . نتایجی که از دی-ان-اس برای شما میاد ممکنه که در مرورگر یا سیستم عامل برای مدت مشخصی کش بشه، به این مدت مشخص تایم-تو-لیو گفته میشه > [time to live (TTL)](https://en.wikipedia.org/wiki/Time_to_live) : تایم-تو-لیو @@ -587,11 +595,11 @@ www.example.com -> IP address. * > example.com -> www.example.com -سرویسهای نظیر سرویس های زیر سرویسهای دی-ان-اس مدیریت شده رو ارائه میکنن +سرویسهای نظیر سرویس های زیر سرویس دی-ان-اس مدیریت شده رو ارائه میکنن [CloudFlare](https://www.cloudflare.com/dns/) و [Route 53](https://aws.amazon.com/route53/) -بعضی از سرویسهای دی-ان-اس میتونن ترافیک رو از راههای مختلفی ارسال کنند: +بعضی از سرویسهای دی-ان-اس میتونن ترافیک رو با روشهای مختلفی، مثل روشهای زیر، ارسال کنند: * [Weighted round robin](http://g33kinfo.com/info/archives/2657) * از ارسال ترافیک به سرورهایی که در حال نگهداری هستند خودداری میکنه @@ -600,15 +608,15 @@ www.example.com -> IP address. * Latency-based |براساس تاخیر * Geolocation-based | براساس موقعیت جغرافیایی -### معایب دی-ان-اس +### معایب: دی-ان-اس * دسترسی به سرور دی-ان-اس یک تاخیری رو موجب میشه که با استفاده از کشینگ گفته شده برطرف میشه. -* مدیریت سرورهای دی-ای-اس ممکنه پیچیده باشه بااین حال توسط دولت ها،آی-اس-پی ها و کمپانیهای بزرگ مدیریت میشه +* مدیریت سرورهای دی-ای-اس ممکنه پیچیده باشه با این حال توسط دولت ها،آی-اس-پی ها و کمپانیهای بزرگ مدیریت میشه * > [governments, ISPs, and large companies](http://superuser.com/questions/472695/who-controls-the-dns-servers/472729). -* سرویس دی-ان-اس اخیرا مورد حمله دی-داس قرارگرفته و باعث شده تا کاربران نتونن به وب سایتها دسترسی پیدا کنن، وب سایتهایی نظیر توییتر - از طریق اینکه آی-پی توییتر رو نمیتونستن پیدا کنن +* سرویس دی-ان-اس اخیرا مورد حمله دی-داس قرارگرفته و باعث شده تا دسترسی کاربران به وب سایتها قطع بشه، وب سایتهایی نظیر توییتر - به اینصورت که کاربرا آی-پی توییتر رو نمیتونستن پیدا کنن * > [DDoS attack](http://dyn.com/blog/dyn-analysis-summary-of-friday-october-21-attack/) @@ -628,34 +636,36 @@ www.example.com -> IP address. Source: Why use a CDN -یک شبکه توزیع محتوا یا سی-دی-ان یک شبکه توزیع شده از پروکسی سرورهاست که محتوا را از مکانهایی که به کاربر نزدیکتره به دستش میرسونه. به طور کلی فایلهای ایستا مثل اچ-تی-ام-ال، جاوااسکریپت و سی-اس-اس، عکس، ویدیو از طریق سی-دی-ان به کاربر داده میشه. با این حال سی-دی-ان هایی نظیر کلود-فرانت که برای شرکت آمازون است محتوای غیر ایستا یا داینامیک رو هم پشتیبانی میکنه. عملیات گرفتن دی-ای-اس سایت میگه به کاربر که باید به کدوم سرور متصل بشه. +> HTML: اِچ-تی-اِم-اِل, CSS: سی-اِس-اِس , Javascript: جاوااسکریپت -انتشار محتوا از طریق سی-دی-ان ها میتونه باعث افزایش کارایی چشمگیری بشه. این افزایش به خاطر ۲ علت زیر هست: +یک شبکه توزیع محتوا یا سی-دی-ان یک شبکه توزیع شده از پروکسی سرورهاست که محتوا را از مکانهایی که به کاربر نزدیکتره به دستشون میرسونه. به طور کلی فایلهای ایستا مثل اِچ-تی-اِم-اِل، جاوااسکریپت و سی-اِس-اِس، عکس، ویدیو از طریق سی-دی-ان به کاربر داده میشه. با این حال سی-دی-ان هایی نظیر کلود-فرانت که برای شرکت آمازون است محتوای غیر ایستا یا داینامیک رو هم پشتیبانی میکنه. عملیات سوال از دی-ان-اس برای یه سایت به کاربر میگه که باید به کدوم سرور متصل بشه. -* کاربران محتوا را از مرکزدادهای که بهشون نزدیکه میگیرن. -* سرورهای شما احتیاجی نیست که به درخواستی پاسخ بدن که سی-دی-ان میتونه پاسخ بده +انتشار محتوا از طریق سی-دی-ان ها میتونه باعث افزایش کارایی چشمگیری بشه. این افزایش به خاطر ۲ علت زیره: + +* کاربران محتوا را از دیتاسنتری که بهشون نزدیکه میگیرن. +* سرورهای شما احتیاجی نیست که به درخواستی پاسخ بدن که سی-دی-اِن میتونه پاسخ بده ### Push CDNs -پوش سی-دی-ان زمانی که سرورشما تغییر روی محتوا داشته باشه، تغییرات رو میگیره. در این حالت شما مسوول تهیه محتوا برای سی-دی-ان هستید، باید محتوا رو آپلود مستقیم اپلود کنید روی سی-دی-ان و یو-آر-ال ها رو دوباره نویسی کنید که به سی-دی-ان اشاره کنه. شما میتونید تظیم کنید که چه زمانی محتوایی که گذاشتید مدت استفادش از بین بره و چه زمانی آپدیت بشه. محتوا زمانی آپلود میشه که یا جدید باشه یا تغییر پیدا کرده باشه که باعث کاهش ترافیک میشه ولی افزایش میزان حافظه هم هست. +پوش سی-دی-ان زمانی که سرورشما تغییری روی محتوا داشته باشه، تغییرات رو میگیره. در این حالت، شما مسوول آماده کردن محتوا برای سی-دی-ان هستید، باید محتوا رو مستقیم آپلود کنید روی سی-دی-اِن و یو-آر-اِل ها رو دوباره نویسی کنید که به سی-دی-ان اشاره کنه. میتونید تنظیم کنید که چه زمانی محتوایی که گذاشتید مدت استفادش از بین بره و چه زمانی آپدیت بشه. محتوا زمانی آپلود میشه که یا جدید باشه یا تغییر پیدا کرده باشه. اینکار باعث کاهش ترافیک میشه ولی افزایش میزان حافظه هم داره. -سایتهایی که ترافیک کمی دارند یا محتوایی دارند که آپدیت نمیشن اغلب اوقات با این مدل پوش سی-دی-ان به خوبی کار میکنن. محتواها یکبار در سی-دی-ان گذاشته میشن به جای اینکه طی یه بازهی مشخصی همینطوری از سرور آورده بشن توی سی-دی-ان +سایتهایی که ترافیک کمی دارند یا محتوایی دارند که آپدیت نمیشه اغلب اوقات با این مدل پوش سی-دی-ان به خوبی کار میکنن. به جای اینکه طی یه بازهی مشخصی همینطور از سرور محتوا آورده بشه توی سی-دی-اِن، محتوا یکبار در سی-دی-ان گذاشته میشه ### Pull CDNs -پول سی-دی-ان محتوای جدید رو از سرور شما میگیره وقتیکه کاربر اول درخواست برای اون محتوا رو میده. شما محتوا رو میزارید روی سرورتون و یو-آر-ال ها روی سی-دی-ان میزارید. این کار باعث میشه که درخواستها کندتر بشن البته تا وقتی که محتوا روی سی-دی-ان کش بشه. +وقتیکه کاربر اولین درخواست برای یک محتوای جدید رو میده، پول سی-دی-ان اون محتوا جدید رو از سرور شما میگیره . شما محتوا رو روی سرورتون میزارید و یو-آر-ال هاش روی سی-دی-ان تنظیم میکنید. تا وقتی که محتوا روی سی-دی-ان کش بشه، این کار باعث میشه درخواستها کندتر بشن . -یک تایم-تو-لیو برای اینکه چه مدت زمانی محتوا باید کش بشه رو مشخص میکنه. پول سی-دی-ان میزان استورج رو کم میکنه روی سی-دی-ان اما میتونه ترافیک اضافی هم ایجاد کنه اگر فایلها قبل از این که به سی-دی-ان بیان کش اونها منتقضی بشه. +یک تایم-تو-لیو مدت زمانی که محتوا باید کش بشه رو مشخص میکنه. پول سی-دی-اِن میزان استورج روی سی-دی-اِن رو کم میکنه اما میتونه ترافیک اضافی هم ایجاد کنه اگر فایلها قبل از این که به سی-دی-اِن بیان مدت کش اونها منتقضی بشه. > [time-to-live (TTL)](https://en.wikipedia.org/wiki/Time_to_live): تایم-تو-لیو -سایتهای با ترافیک سنگین خیلی خوب بای این مدل پول سی-دی-ان کار میکنن چون که با آخرین درخواست برای محتوای تازه خواسته شده روی سی-دی-ان مواجه میشه، ترافیک به صورت یکسان پخش میشه. +سایتهای با ترافیک سنگین خیلی خوب با این مدل پول سی-دی-ان کار میکنن چون که با آخرین درخواست برای محتوای تازه درخواست شده روی سی-دی-اِن مواجه میشه، ترافیک به صورت یکسان پخش میشه. -### معایب سی-دی-ان +### معایب: CDN -* هزینه ها خیلی وابسته به ترافیکه که وجود داره با این حال این رو هم مد نظر بگیرید که این هزینه ها رو درکنار هزینههای استفاده نکردن از سی-دی-ان ببینید. -* محتوا ممکنه قبل از این که تایم-تو-لیو اون تموم بشه منقضی بشه -* سی-دی-ان ها باید برای اینکه محتوای ایستا به سی-دی-ان اشاره کنن یو-آر-ال هاش رو تغییر بده. +* هزینهها خیلی وابسته به ترافیکیه که وجود داره با این حال این این هزینه ها رو درکنار هزینههای استفاده نکردن از سی-دی-ان درکنار هم ببینید. +* محتوا ممکنه قبل از این که تایم-تو-لیو اون تموم بشه، منقضی بشه +* برای محتوای ایستا یو-آر-ال ها باید تغییر کنه و به سی-دی-اِن اشاره کنه. ### منابع برای مطالعه بیشتر @@ -671,13 +681,13 @@ www.example.com -> IP address. Source: Scalable system design patterns -لودبالانسرها درخواست هایی که از سمت کاربران میاد رو بین منابع محاسبانی که هست مثل اپلیکیشن سرورها یا پایکاه دهدهها توزیع میکنه. در هر کدوم از این حالات لودبالانسر پاسخ درخواست رو از اون منبع محاسباتی به کاربر برمیگردونه. لودبالانسر ها در مورد زیر موثر هستند: +لودبالانسرها درخواست هایی که از سمت کاربران میاد رو بین منابع محاسباتی که هست مثل اپلیکیشن سرورها یا پایگاه دادهها توزیع میکنه. در هر کدوم از این حالات، لودبالانسر پاسخ درخواست رو از اون منبع محاسباتی به کاربر برمیگردونه. لودبالانسر ها در مورد زیر موثر هستند: * از رفتن درخواست ها به سرورهایی که سالم نیستن جلوگیری میکنه * از زیربار رفتن بیش از اندازه منابع جلوگیری میکنه -* کمک میکنه که سیستم از شکست نقطهای رنجنبرهHelping eliminate single points of failure +* کمک میکنه که سیستم از شکست نقطهای آسیب پذیره نباشه * > Single Point of Failure: شکست نقطهای @@ -685,15 +695,15 @@ www.example.com -> IP address. > HAProxy -مزایای دیگه هم داره به طور مثال: +مزایای دیگه هم داره، به طور مثال: -* **SSL termination** - درخواست هایی که از سمت کاربر میاد را رمزگشایی میکنه و جوابهایی که باید سرور بده رو هم رمزنگاری میکنه بنابراین سرورهای لازم نیست تا این عملیاتهای سنگین محاسباتی رو انجام بدن +* **SSL termination** - درخواست هایی که از سمت کاربر میاد را رمزگشایی میکنه و جوابهایی که باید سرور بده رو هم رمزنگاری میکنه بنابراین سرورها لازم نیست تا این عملیاتهای سنگین محاسباتی رو انجام بدن * از نصب گواهیهای ایکس.۵۰۶ روی هر سرور جلوگیری میکنه * > [X.509 certificates](https://en.wikipedia.org/wiki/X.509) -* **Session persistence** - کوکی ست میکنه و ترافیک مربوط به درخواست یک کاربر رو به یک سرور یکسان میده هر بار اگر وب اپ سِشِ نگه نداره +* **Session persistence** - اگر برنامه وب سِشِن نگه نداره، کوکی سِت میکنه و هربار ترافیک مربوط به درخواست یک کاربر رو به یک سرور یکسان میده -برای جلوگیری از شکست سیستم، یک کاری که مرسومه اینه که چندتا لودبالانسر تنظیم میشه که بد دو مود زیر میتونه باشه +برای جلوگیری از فِیل سیستم، یک کاری که مرسومه اینه که چندتا لودبالانسر تنظیم میشه که با دو مود زیر میتونه باشه > [active-passive](#active-passive) , [active-active](#active-active) . @@ -702,24 +712,28 @@ www.example.com -> IP address. * Random * Least loaded * Session/cookies -* [Round robin or weighted round robin](http://g33kinfo.com/info/archives/2657) -* [Layer 4](#layer-4-load-balancing) -* [Layer 7](#layer-7-load-balancing) +* [Round robin یا weighted round robin](http://g33kinfo.com/info/archives/2657) +* [لایه ۴](#توزیع-بار-لایه-۴) +* [لایه ۷](#توزیع-بار-لایه-۷) ### توزیع بار لایه ۴ > Packet: پکت -لودبالانسرهای لایه ۴ به اطلاعاتی که در لایهی ترسنپورت است نگاه میکنند و تصمیم میگیردن که چهطوری درخواستها رو توزیع کنند. به طورکلی یعنی نگاه به اطلاعتی نظیر مبدا درخواست، آی-پی مقصد و پورت هایی که در هدر وجود دارد اما به محتوای پکتی که ارسال میشود نگاهی نمیشود این نوع لودبالانسرها پکتهای شبکه را به سرورهای بالادستی ارسال و یا از پکتهای شبکه را دریافت میکنن که به صورت عملیات ترجمه آدرس شبکه انجام میشه. +لودبالانسرهای لایه ۴ به اطلاعاتی که در لایهی ترسنپورت است نگاه میکنند و تصمیم میگیرن که چهطوری درخواستها رو پخش کنند. به طورکلی یعنی نگاه به اطلاعاتی نظیر مبدا درخواست، آی-پی مقصد و پورت هایی که در هدر وجود دارد، اما به محتوای پکتی که ارسال میشود نگاهی نمیشود. این نوع لودبالانسرها پکتهای شبکه را به سرورهای بالادستی ارسال و یا از آنها دریافت میکنن که به این صورت عملیات ترجمه آدرس شبکه انجام میشه. -> [transport layer](#communication): لایه ترنسپورت +> [transport layer](#ارتباط): لایه ترنسپورت > [Network Address Translation (NAT)](https://www.nginx.com/resources/glossary/layer-4-load-balancing/): ترجمه آدرس شبکه ### توزیع بار لایه ۷ -لودبالانسرهای لایه ۷ به لایهی برنامه نگاه میکنند و تصمیم میگیرند که چهطوری درخواست ها رو توزیع کنند. این کار میتونی با استفاده از داده هایی که در هدر، محتوای پیام و کوکیهاست صورت بپذیره. این لودبالانسرها ترافیک شبکه رو تموم میکنه، پیام رو میخونه و یک تصمیم برای توزیع بار میگیره و بعدش یک کانکشن به سروری که حاصل تصمیمش هست ایجاد میکنه. برای مثال، یه لود بالانسر لایه ۷ میتونه ترافیکهای مربوط به ویدیو رو به یک سرور بفرسته درحالیکه ترافیکهای مربوط به قبضهای پرداختی میشه رو به یک سرور دیگه ای که از نظر امنیتی قوی تر هست بفرسته. +> Upstream: بالادستی -با احتساب هزینهای که بابت انعطاف پذیری در نظر بگیریم، لودبالانسینگ لایه ۴ نیاز به منابع و زمان کمتری داره نسبت به لایه ۷ با این حال کاراییش روی سیستمهای مدرن معمولی میتونه کم اثر باشه. +لودبالانسرها میتونن کمکی باشن برای اسکیل کردن افقی و باعث افزایش کارایی و دسترس پذیری بشن. اسکیل کردن + +لودبالانسرهای لایه ،۷ به لایهی برنامه نگاه میکنند و تصمیم میگیرند که چهطوری درخواست ها رو پخش کنند. این کار میتونه با استفاده از داده هایی که در هدر، محتوای پیام و کوکیهاست صورت بپذیره. این لودبالانسرها ترافیک شبکه رو تموم میکنه یعنی تا تهش میگیره، پیام رو میخونه و یک تصمیم برای توزیع بار میگیره و بعدش یک کانکشن به سروری که حاصل تصمیمش هست ایجاد میکنه. برای مثال، یه لود بالانسر لایه ۷ میتونه ترافیکهای مربوط به ویدیو رو به یک سرور بفرسته درحالیکه ترافیکهایی که مربوط به قبضهای پرداختی میشه رو به یک سرور دیگه ای که از نظر امنیتی قوی تر هست بفرسته. + +با احتساب هزینهای که بابت انعطاف پذیری، لودبالانسینگ لایه ۴ نیاز به منابع و زمان کمتری داره نسبت به لایه ۷ ، با این حال کاراییش روی سیستمهای مدرن معمولی میتونه کم اثر باشه. ### مقایس پذیری افقی @@ -727,7 +741,7 @@ www.example.com -> IP address. لودبالانسرها میتونن کمکی باشن برای اسکیل کردن افقی و باعث افزایش کارایی و دسترس پذیری بشن. اسکیل کردن با استفاده از سیستمهای عادی تر(تعداد ماشینها رو زیاد کنیم) خیلی از نظر هزینه به صرفه تره و باعث میشه تا دسترس پذیری بیشتری داشته باشیم تا این که بیایم یک سرور رو از نظر سخت افزاری ارتقا بدیم که معمولا گرون میشه، که بهش میگن **مقیاس کردن عمودی**. همینطور کار با یک سیستم عادی خیلی آسونتره واسه آدما تا اینکه بخوان با سیستمهای تخصصی شده برای کارای سطح کلان کار کنن. -#### معایب مقایس پذیری افقی +#### معایب: مقایس پذیری افقی * مقیاس پذیری افقی باعث پیچیدگی میشه و باید سرورهای کلون شده ایجاد کنید. @@ -735,12 +749,12 @@ www.example.com -> IP address. * سشنها میتونن توی یک مرکز ذخیره سازی داده مرکزی ذخیره بشن مثلا پایگاه داده یا یک کش با قابلیت نگهدارندگی دائمی - * > [پایگاهداده](#پایگاهداده) (SQL, NoSQL) - > [کش](#کش) (Redis, Memcached) + * > [پایگاهداده](#پایگاه-داده) (SQL, NoSQL) + > [کش](#cache) (Redis, Memcached) * سرورهایی که معمولا ترافیک دانلودشوندگی دارند مثلا کشها یا پایگاهدادهها نیازدارند که تعداد کانکشنهای همزمان بیشتری رو نسب به سرورهای بالادستی هندل کنن -### معایب لود بالانسر +### معایب: لود بالانسر * لودبالانسر میتونه گلوگاه مشکل کارایی باشه اگر منابع لازم به اندازه کافی نداشته باشه یا اگر اینکه به درستی تنظیم نشده باشه * با استفاده از لودبالانسر مشکل شکست نقطهای از بین میره ولی میزان پیچیدگی رو زیاد میکنه @@ -765,7 +779,7 @@ www.example.com -> IP address.@@ -911,13 +925,13 @@ www.example.com -> IP address. ##### معایب: master-master replication -* شما به یک لودبالانسر نیاز دارید یا اینکه باید در لایه برنامهتون تغییراتی ایجاد کنید که مشخص کنه که کجا بنویسه. +* شما نیاز به یک لودبالانسر دارید یا اینکه باید در لایه برنامهتون تغییراتی ایجاد کنید که مشخص کنه کجا بنویسه. -* بیشتر سیستمهای مستر-مستر به صورت ناهمگون-ضعیف هستند(که مخالف اصل اَسید هس) یا اینکه باعث میشه که تاخیر عملیات نوشتن به خاطر نیاز به همگامسازی افزایش پیدا کنه. +* بیشتر سیستمهای مستر-مستر به صورت یکپارچه-ضعیف هستند(که مخالف اصل اَسید هست) یا باعث میشه که تاخیر عملیات نوشتن به خاطر نیاز به همگامسازی افزایش پیدا کنه. * > ACID: اَسید, Synchronization: همگامسازی, Loosely-Consistent: ناهمگون-ضعیف -* رفع تداخل بیشتر اتفاق میوفته اگر تعداد نودهای نوشتن بیشتر بیشتر بشه و همینطور میزان تاخیرهم زیاد میشه. +* اگر تعداد نودهای نوشتن بیشتر و بیشتر بشه، رفع تداخل بیشتر اتفاق میوفته و همینطور میزان تاخیرهم زیاد میشه. * قسمت زیر رو ببنید چرا که نکات مشترک هستند برای مستر-مستر و مستر-اسلیو @@ -925,13 +939,13 @@ www.example.com -> IP address. ##### معایب replication -* اگر نود مستر قبل از اینکه عملیات نوشتنی که به تازگی اتفاق افتاده رو نتونه رو نودهای دیگه تکرارکنه و در این حین پایین بیاد یا فِیل بشه، امکان این هست که دادهها از بین برن. -* عملیات نوشتن روی نودهای خواندن دوباره اعمال میشه. اگر تعداد نوشتنها خیلی زیاد بشه نودهای خواندن به خاطر تکرار عملیات نوشتن هنگ میکنن و نمیتونن تعداد عملیاتهای خواندن زیادی انجام بدن +* اگر نود مستر، قبل از اینکه عملیات نوشتنی که به تازگی اتفاق افتاده، نتونه رو نودهای دیگه تکرارکنه و در این حین پایین بیاد یا فِیل بشه، امکان این هست که دادهها از بین برن. +* عملیاتهای نوشتن روی نودهای خواندن تکرار میشه. اگر تعداد نوشتنها خیلی زیاد بشه نودهای خواندن به خاطر تکرار عملیات نوشتن هنگ میکنن و نمیتونن تعداد عملیاتهای خواندن زیادی انجام بدن * هرچه تعداد نودهای اسلیو برای خواندن بیشتر باشه،باید تعداد بیشتری عملیات رو روی این نودها تکرار کنید که این خودش باعث میشه که شما یک لگ برای عملیات تکرار کردن داشته باشید * روی بعضی سیستم ها نوشتن روی مستر میتونه به صورت ایجاد چند تِرِد برای نوشتن موازی انجام بگیره اما روی نودهای خواندنی فقط یک تِرِد میتونه عملیات نوشتن رو انجام بده که اونم به صورت پشت سرهم انجام میشه. * ریپلیکیشن باعث میشه تا سخت افزار بیشتری اضافه بشه و پیچیدگی رو افزایش میده. -##### منابع برای مطالعه بیشتر +##### منابع برای مطالعه بیشتر: replication * [Scalability, availability, stability, patterns](http://www.slideshare.net/jboner/scalability-availability-stability-patterns/) * [Multi-master replication](https://en.wikipedia.org/wiki/Multi-master_replication) @@ -944,7 +958,7 @@ www.example.com -> IP address. Source: Scaling up to your first 10 million users
-فِدِرِیشن ( یا تقسیم عملکردی) پایگاه دادهها رو براساس کاری که انجام میدن تکه تکه میکنه. برای مثال بهجای یک پایگاهداده یک-تکه، شما میتونید ۳ تا پایگاه داده داشته باشید. **انجمنها**،**کاربران** و **محصولات** که باعث میشه تا تعداد عملیاتهای خواندن و نوشتن کم بشه و در نتیجه لگی که به خاطر عملیات ریپلیکیشن هست کاهش پیدا کنه. پایگاهدادههای کوچکتر باعث میشن تا دادههای بیشتری بتونه توی رم قراربگیره و این باعث میشه تا نتایج بیشتری در کش پیدابشن به خاطر اصل محلی بودن. بدون داشتن یک نود مستر مرکزی برای انجام عملیات نوشتن ها میتونید که تعداد نوشتنها رو به صورت موازی انجام بدید که این باعث میشه تا بازدهی بیشتری داشته باشید. +فِدِرِیشن ( یا تقسیم عملکردی) پایگاه دادهها رو براساس کاری که انجام میدن تکه تکه میکنه. برای مثال به جای یک پایگاهداده یک-تکه، شما میتونید ۳ تا پایگاه داده داشته باشید. **انجمن ها**،**کاربران** و **محصولات** باعث میشه تا تعداد عملیاتهای خواندن و نوشتن کم بشه و در نتیجه لگی که به خاطر عملیات ریپلیکیشن هست کاهش پیدا کنه. پایگاهدادههای کوچکتر باعث میشن تا دادههای بیشتری بتونه توی رم قراربگیره و این باعث میشه تا نتایج بیشتری، به خاطر اصل محلی بودن، در کش پیدابشن . بدون داشتن یک نود مستر مرکزی برای انجام عملیاتهای نوشتن میتونید تعداد نوشتنها رو به صورت موازی انجام بدید که این باعث میشه تا بازدهی بیشتری داشته باشید. ##### معایب: federation @@ -958,7 +972,7 @@ www.example.com -> IP address. * باعث افزایش سخت افزار و افزودن پیچیدگی میشه -##### منابع بیشتربرای مطالعه +##### منابع بیشتربرای مطالعه : federation * [Scaling up to your first 10 million users](https://www.youtube.com/watch?v=vg5onp8TU6Q) @@ -970,23 +984,23 @@ www.example.com -> IP address. Source: Scalability, availability, stability, patterns -شاردینگ دادهها رو در پایگاه دادههای مختلفی توزیع میکنه این توزیع به این صورت هست که هر پایگاه داده فقط بخشی از داده اصلی رو در خودش داره. به عنوان مثال پایگاه داده مربوط به کاربران رو در نظر بگیرید، هرچه تعداد کاربران افزایش پیدا کنه تعداد شاردهایی که باید اضافه بشه به کلاستر هم افزایش پیدا میکنه. +شاردینگ دادهها رو در پایگاه دادههای مختلفی توزیع میکنه. این توزیع به این صورت هست که هر پایگاه داده فقط بخشی از داده اصلی رو در خودش داره. به عنوان مثال پایگاه داده مربوط به کاربران رو در نظر بگیرید، هرچه تعداد کاربران افزایش پیدا کنه تعداد شاردهایی که باید اضافه بشه به کلاستر هم افزایش پیدا میکنه. مشابه مزیتهایی مربوط [فدریشن](#federation) ، شاردینگ باعث میشه تا تعداد ترافیک خواندن و نوشتن کم بشه و ریپلیکیشن رو هم کم کنه و وجود داده در کش رو هم افزایش میده. سایز ایندکسها هم کم میشه که بهطورکلی باعث میشه تا کارایی رو افزایش بده و سرعت کوئری ها رو زیاد کنه. اگر یک شاردی بیاد پایین، بقیهی شاردها هنوز کار میکنن با این حال شما باید یه فرآیند ریپلیکیشن اضافه کنید که داده از بین نره. شبیه فدریشن، هیچ نودمرکزی برای نوشتن به صورت پشت سرهم وجود نداره و باعث میشه تا نوشتن به صورت موازی صورت بگیره و بازدهی افزایش پیدا کنه. -راههای عمومی که برای شارد کردن جدول کاربران وجود داره هم براساس اسم فامیلی کاربر میشه هم براساس اسم کوچیکشون یا موقعیت جغرافیاییشون. +راههای عمومی برای شارد کردن جدول کاربران وجود داره، هم براساس اسم فامیلی کاربر میشه، هم براساس اسم کوچیکشون یا موقعیت جغرافیاییشون. ##### معایب: sharding * باید منطق لایه برنامه رو تغییر بدید تا بتونه با شاردها کارکنه که این باعث میشه تا کوئری های اس-کیو-ال پیچیده بشن. * توزیع داده ها میتونه نامتوازن باشن توی یه شارد. برای مثال یه مجموعه ای از کاربران روی یک شارد باعث بشن که لود روی اون بیشتر از بقیه بشه. - * دوباره بالانس کردن باعث میشه تا پیچیدگی رو افزایش بده. یک تابع شاردینگ که براساس یک تابع نگاشت استوار میتونه میزان انتقال دادهها رو کاهش بشده. + * دوباره بالانس کردن باعث میشه تا پیچیدگی رو افزایش بده. یک تابع شاردینگ براساس یک تابع نگاشت استوار میتونه میزان انتقال دادهها رو کاهش بشده. * > [consistent hashing](http://www.paperplanes.de/2011/12/9/the-magic-of-consistent-hashing.html): نگاشت-استوار * جوین دادهها از چندتا شارد خیلی پیچیده میشه * باعث افزایش سخت افزار و افزودن پیچیدگی میشه -##### منابع برای مطالعه بیشتر +##### منابع برای مطالعه بیشتر : sharding * [The coming of the shard](http://highscalability.com/blog/2009/8/6/an-unorthodox-approach-to-database-design-the-coming-of-the.html) * [Shard database architecture](https://en.wikipedia.org/wiki/Shard_(database_architecture)) @@ -994,19 +1008,19 @@ www.example.com -> IP address. #### Denormalization -دی-نرمالایزکردن سعی میکنه که باعث افزایش کارایی خواندن بشه در ازای افزایش چند عملیات نوشتن. یه سری کپی از دادهها توی جدولهای مختلف نوشته میشه تا از سربار سنگین جوین جلوگیری کنه. بعضی از آر-دی-بی-اِم-اِس ها مثل [پوست-گِرِس](https://en.wikipedia.org/wiki/PostgreSQL) و اوراکل از [ویو-متریالایز](https://en.wikipedia.org/wiki/Materialized_view) پشتیبانی میکنن که کمک میکنه که اطلاعات اضافی رو ذخیره کنید و کپی دادهها رو با هم سازگار نگه دارید. +دی-نرمالایزکردن در ازای افزایش چند عملیات نوشتن، سعی میکنه که باعث افزایش کارایی خواندن بشه . یه سری کپی از دادهها توی جدولهای مختلف نوشته میشه تا از سربار سنگین جوین جلوگیری کنه. بعضی از آر-دی-بی-اِم-اِس ها مثل [پوست-گِرِس](https://en.wikipedia.org/wiki/PostgreSQL) و اوراکل از [ویو-متریالایز](https://en.wikipedia.org/wiki/Materialized_view) پشتیبانی میکنن که کمک میکنه که اطلاعات اضافی رو ذخیره کنید و کپی دادهها رو با هم سازگار نگه دارید. زمانی که دادهها به روش [فدریشن](#federation) و [شاردینگ](#sharding) توزیع میشن مدیریت جوینها بین دیتا سنترهای باعث میشه که پیچیدگی خیلی زیاد بشه. دی-نرمالایزیشن شاید باعث بشه که این نیاز به این نوع جوین ها رو از ببره. -دربیشتر سیستمها عملیات خوندن میتونه به نسبت ۱۰۰:۱ یا حتی ۱۰۰۰:۱ نسبت به عملیات خواندن باشه. عملیات خواندنی که باعث بشه تا جوین پیچیده پایگاهداده انجام بشه میتونه خیلی سنگین باشه و مدت زمان قابل توجی روی عملیات دیسک سپری بشه. +دربیشتر سیستمها عملیات خوندن میتونه به نسبت ۱۰۰:۱ یا حتی ۱۰۰۰:۱ نسبت به عملیات نوشتن بیشتر باشه. عملیات خوندنی که حاصل یک جوین پیچیده پایگاهداده باشه، میتونه خیلی سنگین باشه و مدت زمان قابل توجی روی عملیاتهای مربوط به دیسک سپری کنه. ##### معایب: denormalization * دادهها چندجا یکسان کپی میشن و تکراری داریم -* محدودیت ها میتونه کمک کنه که کپیهای داده ها با هم سینک بمونن که این کار باعث میشه تا طراحی پایگاه داده رو پیچیده کنی -* پایگاهداده دی-نرمالایز شده زیر عملیات سنگین نوشتن ممکنه کارایی خیلی بدی داشته باشه نسبت به مشابه نرمالایز شدش +* محدودیت ها میتونه کمک کنه که کپیهای داده ها با هم سینک بمونن، که این کار باعث میشه تا طراحی پایگاه داده رو پیچیده کنید +* پایگاهداده دی-نرمالایز شده، زیر عملیاتهای سنگین نوشتن ممکنه کارایی خیلی بدی داشته باشه نسبت به مشابه نرمالایز شدش -###### منابع بیشتر برای مطالعه +###### منابع بیشتر برای مطالعه :denormalization * [Denormalization](https://en.wikipedia.org/wiki/Denormalization) @@ -1017,7 +1031,7 @@ www.example.com -> IP address. خیلی مهمه که شما **بنچمارک** و **پروفایل** کنید تا بتونید چالشهای دیده نشده رو شبیه سازی کنید و پیداشون کنید * **Benchmark** - شبیهسازی شرایط لود زیاد با ابزارهایی مثل [اِی-بی](http://httpd.apache.org/docs/2.2/programs/ab.html) -* **Profile** - استفاده از ابزارهایی مثل [لاگ کوئریهای کند](http://dev.mysql.com/doc/refman/5.7/en/slow-query-log.html) برای ترک درن مشکلات کارایی +* **Profile** - فعال کردن ابزارهایی مثل [لاگ کوئریهای کُند](http://dev.mysql.com/doc/refman/5.7/en/slow-query-log.html) برای پیدا کردن مشکلات کارایی بنچمارک کردن و پروفایل کردن ممکنه که شما رو به سمت بهینه سازی های زیر برسونه @@ -1053,7 +1067,7 @@ www.example.com -> IP address. * In some cases, the [query cache](http://dev.mysql.com/doc/refman/5.7/en/query-cache) could lead to [performance issues](https://www.percona.com/blog/2014/01/28/10-mysql-performance-tuning-settings-after-installation/). -##### منابع برای مطالعه بیشتر +##### منابع برای مطالعه بیشتر : SQL tuning * [Tips for optimizing MySQL queries](http://20bits.com/article/10-tips-for-optimizing-mysql-queries-that-dont-suck) * [Is there a good reason i see VARCHAR(255) used so often?](http://stackoverflow.com/questions/1217466/is-there-a-good-reason-i-see-varchar255-used-so-often-as-opposed-to-another-l) @@ -1066,34 +1080,36 @@ www.example.com -> IP address. **key-value store**, **document-store**, **wide column store**, **graph database** -داده ها دی-نرمالایز میشن و جوین های معمولا در لایه ی برنامه انجام میشن. بیشتر نو-اس-کیو-ال ها از اصل **اَسید** برای تراکنش های پشتیبانی نمیکنن و [یکپارچگی موکول](#eventual-consistency) رو به این اصل ترجیح میدن +داده ها دی-نرمالایز میشن و جوین های معمولا در لایه ی برنامه انجام میشن. بیشتر نو-اس-کیو-ال ها از اصل **اَسید** برای تراکنش های پشتیبانی نمیکنن و [یکپارچگی موکول](#یکپارچگی-موکول) رو به این اصل ترجیح میدن -**بِیس** معمولا برای توصیف ویژگیهای پایگاه داده های نو-اس-کیو-ال استفاده میشد. در مقایسه با تئوری کپ ، بِیس دسترس پذیری رو بر یکپارچگی ترجیح میده. +**بِیس** معمولا برای توصیف ویژگیهای پایگاه داده های نو-اس-کیو-ال استفاده میشه. در مقایسه با تئوری کپ ، بِیس دسترس پذیری رو بر یکپارچگی ترجیح میده. > [تئوری CAP](#CAP-تئوری) -> Consistent: استوار +> Consistent: سازگار -* **Basically available** - سیستم دسترسپذیری رو تضمین +* **Basically available** - سیستم دسترسپذیری رو تضمین میکنه * **Soft state** - وضعیت سیستم ممکنه که بدون گرفتن ورودی در طول زمان دچار تغییر بشه. -* **Eventual consistency** - سیستم در طول یک مدت زمانی استوار میشه با این شرط که در طول این مدت ورودی نگیره +* **Eventual consistency** - سیستم در طول یک مدت زمان سازگار میشه با این شرط که در طول این مدت ورودی نگیره -علاوه براین که باید انتخاب کنید که [اس-کیو-ال یا نو-اس-کیو-ال](sql-or-nosql#) بدنیست که پایگاه داده های نو-اس-کیو-ال رو انواعش رو بشناسید و اونی که بهترین فیت برای کاربردتون هست را انتخاب کنید. ما در ادامه موارد زیر روبررسی میکنیم. +علاوه براین که باید انتخاب کنید که [اس-کیو-ال یا نو-اس-کیو-ال](#SQL-یا-NoSQL) بد نیست انواع پایگاه داده های نو-اس-کیو-ال رو بشناسید و اونی که بهترین انتخاب برای کاربردتون هست را انتخاب کنید. ما در ادامه موارد زیر روبررسی میکنیم. **key-value stores**, **document-stores**, **wide column stores**, **graph databases** #### Key-value store > Abstraction: hash table +> +> O(1): اُ-۱, SSD: اِس-اِس-دی -یک ذخیره سازی کلید-مقدار به طور عمومی به شما این امکان رو میده که از عملیات خوندن و نوشتن رو با اُ(۱) انجام بدید و معمولا توسط حافظههای اس-اس-دی و رم پشتیبانی میشن. این ذخیره کنندههای داده میتونن کلیدها رو به [به ترتیب الفبایی](#https://en.wikipedia.org/wiki/Lexicographical_order) مرتب نگه دارن که باعث میشه تا بازیابی کلیدها به صورت بازهای بهینه تر و به صرفهتر بشه. +یک ذخیره ساز کلید-مقدار به طور عمومی به شما این امکان رو میده که از عملیات خوندن و نوشتن رو با اُ(۱) انجام بدید و معمولا توسط حافظههای اِس-اِس-دی و رَم پشتیبانی میشن. این ذخیره کنندههای داده میتونن کلیدها رو به [به ترتیب الفبایی](https://en.wikipedia.org/wiki/Lexicographical_order) مرتب نگه دارن که باعث میشه تا بازیابی کلیدها به صورت بازهای، بهینه تر و به صرفهتر بشه. -این ذخیرهکننده ها معمولا با کارایی بالاهستند و برای مدلهای دادهای ساده یا دادههایی که خیلی سریع تغییر میکنند مثل دادههایی که توی کش هستند مورد استفاده قرار میگیرند. +این ذخیرهکننده ها معمولا با کارایی بالاهستند و برای مدلهای دادهای ساده یا دادههایی که خیلی سریع تغییر میکنند مثل دادههایی که توی کش هستند مورد استفاده قرار میگیرند. -یک مخزن کلید-مقدار معمولا پایهای اصلی برای سیستمهای پیچیدهای مانند ذخیرهساز های اسنادی و در بعضی موردها پایگاهدادههای گرافی،مورد استفاده قرار میگیرد. +یک ذخیرهساز کلید-مقدار معمولا پایهای اصلی برای سیستمهای پیچیدهای مثل ذخیرهساز های اَسنادی و در بعضی موردها پایگاهدادههای گرافی،مورد استفاده قرار میگیرد. > Document Store: ذخیره ساز اسنادی -##### منابع برای مطالعه بیشتر +##### منابع برای مطالعه بیشتر : key-value store * [Key-value database](https://en.wikipedia.org/wiki/Key-value_database) * [Disadvantages of key-value stores](http://stackoverflow.com/questions/4056093/what-are-the-disadvantages-of-using-a-key-value-table-over-nullable-columns-or) @@ -1104,15 +1120,15 @@ www.example.com -> IP address. > Abstraction: key-value store with documents stored as values -یک ذخیرهساز اسنادی حول اسناد شکل میگیره(مانند ایکس-ام-ال، جیسان، باینری و ...) که در اینجا یک سند تمام اطلاعات مربوط به یک شی رو در اون ذخیره میکنه. ذخیرهسازهای اسنادی ای-پی-آی ها یا زبانهای کوئری در اختیار قرار میدهند تا بتونیم براساس این روشها ساختار داخلی خود سند رو مورد جستجو قرار بدیم. به یاد داشته باشید که خیلی از ذخیرهسازهای کلید-مقدار شامل ویژگیهایی هستند که میتونه با متادیتاهای مربوط به مقدارهای یک کلید هم کارکنه که باعث میشه که مرز بین این ذخیرهسازها رو کمرنگتر میکنه از لحاظ نوع محل ذخیرهسازی. +یک ذخیرهساز اسنادی حول ایده اسناد شکل میگیره(مانند ایکس-ام-ال، جِیسان، باینری و ...) که در اینجا یک سند تمام اطلاعات مربوط به یک شی رو در خودش ذخیره میکنه. ذخیرهسازهای اسنادی، اِی-پی-آی ها یا زبانهای کوئری در اختیار قرار میدهند تا بتونیم ساختار داخلی خود سند رو مورد جستجو و کوئری قرار بدیم. به یاد داشته باشید که خیلی از ذخیرهسازهای کلید-مقدار شامل ویژگیهایی هستند که میتونه با متادیتاهای مربوط به مقدارهای یک کلید هم کارکنه، که باعث میشه که مرز بین این ذخیرهسازها از لحاظ نوع محل ذخیرهسازی با یکدیگه کمرنگتر بشه . براساس پیادهسازی های زیرساختی ، اسناد هم به صورت تگها، کالکشنها، متادیتاها یا پروندهها سازماندهی میشن. باوجوداینکه اسناد میتونن باهم دیگه گروه بشن یا توی یه دسته سازماندهی بشن،با اینحال میتونن هرکدوم فیلدهای مخصوص خودشون رو داشته باشند که در بقیه موجود نباشه. بعضی از این ذخیرهسازها مثل [مونگو-دی-بی](https://www.mongodb.com/mongodb-architecture#) و [کوچ-دی-بی](https://blog.couchdb.org/2016/08/01/couchdb-2-0-architecture/#) زبانهایی شبیه اس-کیو-ال برای انجام کوئریهای پیچیده فراهم کردند. [داینامو-دی-بی](http://www.read.seas.harvard.edu/~kohler/class/cs239-w08/decandia07dynamo.pdf#) هر دو نوع کلید-مقدار و اسنادی رو پشتیبانی میکنه. -ذخیرهساز های اسنادی انعطاف زیادی رو میدن و معمولا جاهایی که تغییرات داد مکرر اتفاق میوفته استفاده میشه. +ذخیرهساز های اسنادی انعطاف زیادی رو میدن و معمولا جاهایی که تغییرات داده مکرر اتفاق میوفته استفاده میشه. -##### منابع برای مطالعه بیشتر +##### منابع برای مطالعه بیشتر : document store * [Document-oriented database](https://en.wikipedia.org/wiki/Document-oriented_database) * [MongoDB architecture](https://www.mongodb.com/mongodb-architecture) @@ -1129,17 +1145,15 @@ www.example.com -> IP address. > Abstraction: nested map `ColumnFamily