برنامه نویسی
مفاهیم طراحی سیستم AWS S3

AWS S3 (سرویس ذخیره سازی ساده) سنگ بنای ذخیره سازی ابری است که سرویس ذخیره سازی اشیاء وسیع، مقیاس پذیر و بسیار بادوام را ارائه می دهد. این غواصی عمیق ملاحظات طراحی سیستم، اجزای کلیدی و مبادلات مربوط به ساخت سیستمی مانند S3 را بررسی خواهد کرد.
فروشگاه اشیاء
طراحی سطح بالا (HLD)
- دادهها را بهعنوان **اشیاء (جفتهای کلید-مقدار)** ذخیره میکند که در آن کلید، شناسه منحصربهفرد شی است (به عنوان مثال، “image.jpg”) و مقدار، داده واقعی است.
- یک ** فضای نام مسطح ** در داخل یک سطل فراهم می کند.
- * فراداده** مرتبط با هر شی را پشتیبانی می کند.
- بسیار مقیاس پذیر و برای ** مجموعه داده های بزرگ** طراحی شده است.
طراحی سطح پایین (LLD)
- **ذخیره سازی ابرداده:**
- **هش کردن مداوم** (به عنوان مثال، درهم سازی مداوم) برای توزیع فراداده در چندین سرور برای در دسترس بودن و مقیاس پذیری بالا.
- **تکرار ابرداده** در چندین ناحیه در دسترس برای تحمل خطا.
- از یک پایگاه داده توزیع شده (مانند **Cassandra** یا **DynamoDB**) برای ذخیره سازی و بازیابی متادیتا کارآمد استفاده کنید.
- **ذخیره شی:**
- داده های شی را به صورت **تکه** در چندین سرور در یک منطقه در دسترس ذخیره کنید.
- از **تکنیک های کدگذاری پاک کردن** (مانند Reed-Solomon) برای ارائه افزونگی داده ها و تحمل خطا استفاده کنید.
- برای بهینه سازی عملکرد خواندن/نوشتن و به حداقل رساندن انتقال داده، **الگوریتم های کارآمد قرار دادن داده ها** را اجرا کنید.
فروشگاه فایل
طراحی سطح بالا (HLD)
- داده ها را در یک **ساختار سلسله مراتبی** (دایرکتوری ها و فایل ها) مشابه یک سیستم فایل سنتی ذخیره می کند.
- از عملیات هایی مانند ایجاد، خواندن، نوشتن، حذف و انتقال فایل ها و دایرکتوری ها پشتیبانی می کند.
- یک رابط آشناتر برای کاربرانی که به سیستم های فایل عادت کرده اند فراهم می کند.
طراحی سطح پایین (LLD)
- **ذخیره سازی ابرداده:**
- از یک سیستم فایل توزیع شده (مانند **HDFS**) برای ذخیره ابرداده ها (نام فایل ها، دایرکتوری ها، مجوزها) استفاده کنید.
- یک **سرور فراداده** را برای مدیریت عملیات ابرداده و حفظ ثبات داده ها اجرا کنید.
- **ذخیره اطلاعات:**
- داده ها را به صورت تکه ای در چندین سرور ذخیره کنید.
- پیاده سازی **تکثیر داده ها** و **مکانیسم های تحمل خطا**.
فروشگاه بلوک
طراحی سطح بالا (HLD)
- داده ها را به عنوان مجموعه ای از **بلاک ها** (واحدهای داده با اندازه ثابت) ذخیره می کند.
- انتزاع ذخیره سازی سطح پایین را برای ایجاد سرویس های ذخیره سازی سطح بالاتر (به عنوان مثال، سیستم های فایل، پایگاه های داده) فراهم می کند.
- عملکرد بالایی را برای عملیات خواندن/نوشتن تصادفی ارائه می دهد.
طراحی سطح پایین (LLD)
- **ذخیره اطلاعات:**
- فضای ذخیره سازی را به واحدهای منطقی (به عنوان مثال، بلوک های 4 کیلوبایت) تقسیم کنید.
- هر بلوک را بر اساس عملکرد و هزینه مورد نیاز به یک دستگاه ذخیره سازی خاص (به عنوان مثال، **SSD**، **HDD**) اختصاص دهید.
- برای تحمل خطا و عملکرد، **خطگذاری داده** و **تکثیر** را در چندین دستگاه اجرا کنید.
AWS S3: یک شیرجه عمیق تر
- **سطل:** واحد اساسی ذخیره سازی در S3. هر سطل یک نام منحصر به فرد جهانی دارد.
- ** Object: ** واحد داده در یک سطل. اشیا می توانند هر نوع داده ای (تصاویر، فیلم ها، اسناد و غیره) باشند.
- **URI:** یک شناسه منحصر به فرد برای یک شی در S3 (به عنوان مثال، `s3://bucket-name/object-key`).
- **دوام:** S3 دوام پیشرو در صنعت (99.999999999٪) را با داده های تکرار شده در چندین منطقه در دسترس ارائه می دهد.
- **در دسترس بودن:** S3 در دسترس بودن بالا را با مناطق متعدد در دسترس و زیرساخت های اضافی ارائه می دهد.
اکوسیستم AWS
S3 به طور یکپارچه با سایر خدمات AWS مانند:
- **EC2:** برای اجرای برنامه هایی که با S3 تعامل دارند.
- **لامبدا:** برای توابع بدون سرور که داده های ذخیره شده در S3 را پردازش می کنند.
- ** یخچال:** برای بایگانی داده هایی که به ندرت به آنها دسترسی دارید.
- **EBS:** برای ذخیره سازی دائمی برای نمونه های EC2.