رپلیکیشن: اگر در زمینه بانکهای اطلاعاتی، چه رابطهای و چه nosql فعالیت کرده باشید، میدانید که رپلیکیشن به معنی انتقال و جابجایی دادهها، بین سرورهای مختلف در مکانهای مختلف میباشد و این عمل باید ضمانت یکپارپگی و یکسان سازی دیتا را در همه سرورها تضمین کند. اینگونه، بار بین سرورها کاهش پیدا کرده و کاربران راه دور نیازی نیست فاصله زیادی با سرور داشته باشند و میشود از نزدیکترین سرور، دادهها را درخواست کنند و از آنجا که بانکهای nosql در مبحث توزیع پذیری همانند یک قهرمان رفتار میکنند، پس اولین اصطلاحی که باید با آن آشنایی داشته باشید، همین عملیات رپلیکیشن میباشد.
Sharding : یک خوشه شاردینگ(Sharded Cluster) در واقع مجموعهای از همین سرورهای ریپلیکیشن میباشد که ماموریتشان توزیع یکسان بار، بر روی سرورهاست که به ما امکان مدیریت دادههای حجیم و توسعه و به روزرسانی افقی سرورها (Horizontally Scale) را میدهد.
از این پس میدانیم که ریپلیکیشنها شامل دادههای یکسانی بوده و شاردینگها، تقسیم بندی دیتا را صورت میدهند و هر شارد میتواند شامل رپلیکشنهای متفاوتی باشد.
اصلیترین هدف این خوشه شاردینگها عبارتند از:
1- مقیاس پذیری: توزیع بار پردازشی بر روی سرورهای مختلف.
2- موازنه سازی لود دیتا: دیتا به طور خودکار در بین شاردهای مختلف توزیع میشود. موازنهگر تصمیم میگیرد که چگونه دیتا انتقال داده شده و به چه سروری منتقل شود و از طریق یک کلید به نام Partition Key رنج بندی دیتا را انجام میدهد تا بداند هر شاردی، چه رنج دیتایی را شامل میشود.
تصویر بالا به شما نشان میدهد که کلاینتها ابتدا به مسیریابها متصل میشوند. این مسیریابها بر اساس فایلهای پیکربندی که مدیر سیستم آماده کرده است و شامل تنظیمات موازنه گر میباشد، کلاینتها را به شاردینگهایها مورد نظر متصل میکنند و بعد از آن هم انتخاب سرور از رپلیکیشن.
عملیات
Chunk یا قطعه سازی فایلها، بر اساس همین تعداد شاردینگهای مختلف میباشد
که به صورت انتزاعی یا مفهومی ایجاد شدهاست و شامل دیتای اصلی نمیشود؛
بلکه شامل اطلاعاتی برای هر قطعه از دیتاها میشود که شامل یک کلید به نام
SharedKey میباشد و دو مقدار Min و Max را برای هر رنج دیتا شامل میشود.
بعد از اینکه Chunkهای یک فایل مشخص شد، مونگو برای حفظ موازنه و بالانس شاردینگها، شروع به تقسیم این چانکها میکند. به عنوان مثال تعدادی چانک، بین این شاردینگ و تعدادی دیگر برای شاردینگهای دیگر. جدول زیر نحوه توزیع 4 چانک را نشان میدهد:
شارد | نهایت مقدار Max | حداقل مقدار Min | شناسه یا Id چانک |
“shard” : “shard0001” | “max” : { “x” : 8000 } | “min” : { “x” : 7000 } | “_id” : “testdb.presplit-x_7000.0” |
“shard” : “shard0001” | “max” : { “x” : 9000 } | “min” : { “x” : 8000 } | “_id” : “testdb.presplit-x_8000.0” |
“shard” : “shard0002” | “max” : { “x” : 10000 } | “min” : { “x” : 9000 } | “_id” : “testdb.presplit-x_9000.0” |
“shard” : “shard0002” | “max” : { “x” : 11000 } | “min” : { “x” : 10000 } | “_id” : “testdb.presplit-x_10000.0” |
تعداد چانک ها | میزان تفاوت |
کمتر از 20 عدد | 2 |
20 تا 79 | 4 |
از 79 عدد بیشتر | 8 |
برای درک این مسئله، فرض کنید ما 2 عدد شارد داریم و 31 عدد چانک. اگر 17 عدد از چانکها به شارد 1 برسد و 14 تای باقی مانده به شارد شماره 2 برسد، اختلاف این تعداد شاردها سه میباشد که طبق جدول تا 4 عدد جا دارد. پس بالانسی بین شاردها بر قرار است. موقعی که فایلی به مقدار مشخص شدهی برای چانک برسد که به طور پیش فرض 64 مگابایت میشود، شروع به چانک گذاری کرده و برای حفظ بالانس و موازنه سازی، این چانکها را بین شاردهای مختلف توزیع میکند و چانک را از سروری که شامل چانکهای زیاد است، به سروری که شامل چانکهای کمتر است منتقل میکند.
بررسی CSRF و SOP
Same-Origin Policy یک سازوکار امنیتی در مرورگرها هستش که ارتباط مستندات (Documents) و Scriptها رو از یک Origin با یک Origin دیگه، محدود میکنه و برای اونها قانون وضع میکنه. این سازوکار کمک میکنه که مستندات آلوده ایزوله باشن و از حملات احتمالی جلوگیری بشه. به این صورت که مرورگر اجازه نمیده که یک Origin محتوایی از Origin دیگهای بخونه و یا به اون دسترسی داشته باشه.
- همچنین اگر هاست نامبرده تمام سایتها را با یک Application pool مدیریت میکند، کرش یکی از چند ده سایت دیگر میتواند سبب ریاستارت شدن سایت شما هم بشود؛ چون برنامهها از همه ایزوله نشدهاند. راه حل آن ایجاد یک Application pool مجزا به ازای هر سایت هست (توسط هاستدار).