پرش به مطلب اصلی

24 مطلب برچسب شده با "system_design"

مشاهده تمام برچسب‌ها

ACID

در ابتدا باید بگیم ترنزکشن چیه؟ ترنزکشن یک مجموعه کوئری که به صورت یه unit of work رفتار میکنه و نمیتونه split بشه. و ترنزکشن یه چرخه داره

Availability

یه چیزی که خیلی وقتا توی دنیای تکنولوژی درباره‌اش صحبت می‌کنیم، بحث availability یا همون در دسترس بودن سیستمه. حالا اگه یه اپلیکیشن داری، سوال اینه که کاربرات چه درصدی از زمان می‌تونن ازش استفاده کنن؟ اینجاست که بحث اون ۹۹ درصدای معروف میاد وسط.

BASE

"به‌جای اینکه همیشه داده‌ها کاملاً درست و هماهنگ باشن، بهتره سریع‌تر به کاربرا پاسخ بدیم، حتی اگه بعضی از داده‌ها موقتی ناهماهنگ باشن!"

Bloom Filters

میاد مقدار مارو هش میکنه و توی یه خونه میزاره. مقدار اولیه اش ۶۴ بایته و اگر توی اون خونه عدد ۱ باشه یعنی اون توی دیتابیس وجود داره یا یکی هش اش شبیه اشه وجود داره، پس:

Burst time

در نرم‌افزار و به‌ویژه در سیستم‌عامل‌ها، منظور از burst time (یا CPU burst time) مدت زمانیه که یک پردازش (process) یا thread بدون وقفه از CPU استفاده میکنه

Caching

کشینگ یه تکنیکه که از محاسبات قبلی استفاده کنیم و لازم نباشه دوباره سیستم رو درگیر کنیم

Consistent Hashing

وقتی یه سیستم توزیع‌شده داری، مثل یه کلاستر از سرورها که درخواست‌ها رو بین خودشون تقسیم می‌کنن، باید یه راهی باشه که داده‌ها رو طوری پخش کنی که هم کارآمد باشه، هم اگه یه سرور از مدار خارج شد، اوضاع بهم نریزه. اینجاست که Consistent Hashing و Hash Ring به درد می‌خورن.

Cyclomatic_complexity

اCyclomatic Complexity (پیچیدگی حلقوی) یک معیار در مهندسی نرم‌افزار است که تعداد مسیرهای مستقل در کد را اندازه‌گیری می‌کند. این معیار به ما کمک می‌کند تا پیچیدگی منطقی یک تابع یا ماژول را ارزیابی کنیم و بفهمیم که چقدر سخت خواهد بود که آن را تست یا نگهداری کنیم. یک فرمول داره ولی لینترها معمولا اینو دارن

HyperLogLog

خیلی وقت‌ها می‌خواهیم تعداد یکتای آیتم‌ها رو بدون اینکه همه‌شون رو ذخیره کنیم، تخمین بزنیم. اینجاست که HyperLogLog میاد کمکمون! 🧑‍💻

Index

ایندکس‌ها درDB برای افزایش سرعت جستجوها استفاده می‌شوند. مثل فهرست یک کتاب عمل می‌کنند که دسترسی سریع به داده‌ها را ممکن می‌سازد.

IPC

اInter Process Communication) IPC) به روش‌هایی میگن که Processها در یک سیستم عامل می‌توانند با هم ارتباط برقرار کنند و داده‌ها را بین خودشان به اشتراک بگذارند. از آنجا که پردازه‌ها معمولاً فضای حافظه مستقل دارند، سیستم‌عامل مکانیسم‌های مختلفی برای ارتباط بین آن‌ها فراهم کرده است.

Isolation Level

این مشکلات در دیتابیس وقتی اتفاق می‌افتند که تراکنش‌های همزمان روی داده‌های یکسان تأثیر بگذارند و ایزوله‌سازی به اندازه کافی قوی نباشد.

Log

با لاگ‌ها مثل stream رفتار کن

Log_Rotation

لاگ روتیشن یه فایل Log داری که هر روز کلی اطلاعات توش میره و همش بزرگ و بزرگ‌تر میشه. بعد از یه مدت دیگه نه می‌تونی بخونی، نه می‌تونی ازش استفاده کنی! log rotation یعنی به طور خودکار این فایل‌های لاگ رو تقسیم کنیم. مثلاً روزانه یا هفتگی یه فایل جدید درست می‌کنیم و قدیمیا رو آرشیو می‌کنی. چرا؟ چون: سرعت کم میشه و پیدا کردن لاگی که میخوای سخت میشه

OWASP

ا owasp یه سری استاندارد امنیتی داره که برای داشتن برنامه امن باید رعایت کنیم.

Partitioning

پارتیشن‌بندی توی دیتابیس یه جورایی مثل این می‌مونه که بخوای یه انباری خیلی بزرگ رو به چند بخش تقسیم کنی، طوری که هر بخش مخصوص یه سری از وسایل باشه. حالا چرا این کارو می‌کنیم؟ چون وقتی چیزی رو لازم داری، دیگه کل انباری رو نمی‌گردی، فقط میری همون بخشی که وسایل مرتبط توش هست، پس سریع‌تر پیدا می‌کنی.

Pipeline

وقتی از pipeline تو ردیس استفاده می‌کنی، در واقع داری چندتا دستور رو پشت سر هم می‌فرستی به ردیس بدون اینکه منتظر بمونی تا جواب هرکدوم برگرده. یعنی یه جورایی همه کاراتو یه‌جا میریزی تو صف، ردیس همه‌شونو با هم می‌گیره و بعدم یه‌جا جوابتو می‌ده. این کار باعث می‌شه زمان رفت‌و‌برگشت کم بشه و سرعت خیلی بیشتر شه، مخصوصاً وقتی می‌خوای تعداد زیادی کلید رو بخونی یا بنویسی.

Replication

رپلیکا یعنی ما چندتا instance از دیتابیسمون بالا داشته باشیم برای Load Balance دیتابیسمون. حالا چند نوع رپلیکا داریم که هرکدوم مزایا و معایب خودشونو دارن.

Shard

شاردینگ چیه؟ اصلاً چرا شاردینگ کنیم؟!

SOLID

۱. S - Single Responsibility Principle (SRP)

Tips

1. استفاده از offset برای pagintaion باعث میشه همه موارد قبلش رو بگیره و موارد لازم رو بده و بقیه رو دراپ کنه. خیلی بهتره که برای ایدی از فیلدهای ترتیبی استفاده کنیم مثل [[Twitter Snowflake]] تا uuid تا بتونیم همچین کوئری بزنیم: