همروندی در برنامهنویسی به معنای قابلیت اجرای همزمان چندین فرآیند و یا چندین نخ از یک برنامه است. اما برای استفاده بهینه از Concurrency باید از قفل گذاری و سایر مفاهیم مرتبط با همروندی نیز آگاهی داشته باشیم.
اولین لحظه ای کاربر میتوان محتوای صفحه را ببیند.
اولین لحظه ای که کاربر میتوان از صفحه استفاده کند.
ساده ترین روش ممکن کد بزنید و از پیچیدگی اجتناب کنید
شما به آن نیاز نخواهید داشت. چه دلیلی داره کدی بنویسید که به آن نیاز ندارید کدی اضاف نشود تا وقتی که نیاز آن احساس نشده
خودت را تکرار نکن اگر پروژه ای را که آغاز کرده اید بسیار مهم است که هیچ وقت چیزی را دوبار تکرار نکنید.
مشابه رفرنس تایپ و وریبل تایپ است.
قانون دمیتر - هر واحد باید تنها دانش اندکی در مورد واحدهای دیگر داشته باشد و این واحدها صرفاً شامل واحدهای کاملاً مرتبط به واحد کنونی باشند.
تفکیک دغدغه ها - تفکیک کردن حوزه های مختلف نرم افزار می باشد
هر کلاس یا ماژول باید مسئولیت یک وظیفه مشخص را داشته باشد
یک کلاس باید در برابر تغییرات بسته باشد ولی باید قابلیت توسعه را داشته باشد
اگر کلاس A از کلاس B ارثبری کرده باشد، در همهی موارد میتوان از شیءهای کلاس A به جای شیءهای کلاس B استفاده کرد، بدون داشتن هیچ تفاوتی در عملکرد برنامه.
کلاس سطح بالاتر نباید به کلاس های سطح پایینتر وابسته باشند هر دو باید به انتزاعات وابسته باشد.
اینترفیس ها اینقدر کوچک شوند که از برنامه نویس فقط به قسمتی که نیاز دارد دسترسی داشته باشد
یک پروتکل امنیتی است که در اینترنت برای ارتباطات امن بین مرورگر و سرور استفاده میشود. SSL با استفاده از الگوریتمهای رمزنگاری قوی، اطلاعاتی که بین مرورگر و سرور رد و بدل میشوند را محافظت میکند.
- در جیت کد برنامه در زمان اجرا کامپایل می شود مثلا ما در مرورگر فایل های تایپ اسکریپت را داریم و و در محیط دولوپ بیشتر کاربرد دارد و تغییرات را میتونیم ببینم انعطاف پذیری بیشتری دارد.
- در AOT کد برنامه کامپایل شده است و بیشتر در محیط ها production کاربرد دارد و سرعت و عملکرد بیشتری دارد
پارالل یعنی این زبان میتونه چندین کار رو به صورت همزمان و مجزا شروع و پردازش کنه. ولی همزمانی
با این تکنیک میتونیم بجای داشتن یک تابع با چندین پارامتر، چند تابع (تو در تو) با یک پارامتر داشته باشیم.
function logger(level, message) {
console.log(`${level}: ${message}`);
}
logger('warning', 'This is a warning message');
logger('warning', 'This is another warning message');
function logger(level) {
return function (message) {
console.log(`${level}: ${message}`);
}
}
const infoLog = logger('info');
infoLog('This is an info message #1');
infoLog('This is an info message #2');
شاردینگ یعنی تقسیم دادهها به قطعههای کوچک و ذخیره آنها در سرورهای مختلف برای بهبود عملکرد و ظرفیت سیستم.
- Developer Productivity
- Complex Interactions
- Deployment
- Monitoring
- Atomicity یک تراکنش باید یا به طور کامل انجام شود و تغییرات آن به پایگاه داده اعمال شود، یا هیچ تغییری در پایگاه داده اعمال نشود.
- Consistency پس از اجرای یک تراکنش، پایگاه داده باید از یک حالت معتبر به حالت دیگری معتبر برود، بدون اینکه در وسط راه به یک حالت نامعتبر برسد
- Isolation این ویژگی به معنای جدا بودن تراکنشها از یکدیگر است. به این معنا که یک تراکنش نباید توسط تراکنشهای دیگر تحت تأثیر قرار گیرد و تأثیری بر آنها بگذارد
- Durability پایداری به معنای این است که هر تغییری که توسط یک تراکنش در پایگاه داده اعمال شود، باید برای همیشه در پایگاه داده باقی بماند و حتی در صورت بروز خطا یا قطع برق، این تغییرات از دست نروند.
- Scaling
مقیاسپذیری به افزایش قابلیتهای سیستم با افزایش ترافیک و بار کاری اشاره دارد. این کار با دو روش عمودی و افقی انجام میشود. در مقیاسپذیری عمودی، منابع یک سرور یا نود افزایش مییابند، مثلاً پردازنده و حافظه. اما در مقیاسپذیری افقی، به جای افزایش قدرت یک نود، تعداد نودها افزایش مییابد.
- Availability
دسترسیپذیری به این معناست که سیستم به کاربران خدمات خود را حتی در صورت بروز مشکل، ادامه میدهد. این مفهوم با میزان زمانی که سیستم در دسترس بوده (uptime) و زمانی که در دسترس نبوده (downtime) سنجیده میشود.
- Replication and Redundancy تکرار و تکثیر به معنای داشتن کپی از یک نود که در صورت خرابی نود به سرعت جایگزین شود
- Load Balancing توزیع بار بین نود های مختلف که هیچ نودی تحت فشار زیاد نرود
- Distributed Data Storage ذخیره داده در نقاط مختلف جغرافیایی که اگر یک دیتاسنتر مشکل بخورد بقیه دیتاسنتر ها در دسترس باشند
- Consistency Models ییکپارچگی مشخص میکند که در چه میزان عملیاتهای سیستم هماهنگ با یکدیگر باشند. دو مدل معروف یکپارچگی، یعنی قوی و ضعیف، به ما این تفاوت را نشان میدهند. در یکپارچگی قوی، همه کلاینتها همواره دیدگاه یکسانی از دادهها دارند، در حالی که در یکپارچگی ضعیف، ممکن است دیدگاه دادهها بین کلاینتها تفاوت داشته باشد.
-
Latency and performance تاخیر یعنی زمانی که طول میکشد یک عملیات انجام شود، در حالی که عملکرد به کارایی و کیفیت کلی انجام دادن کارها در سیستم یا برنامه اشاره دارد. برای این پارامتر راهکارهای زیر وجود دارد.
- Data Locality این معناست که وقتی که یک برنامه دادهای را میخواند یا مورد استفاده قرار میدهد، سعی میکند از دادههایی استفاده کند که در نزدیکی فرآیند اجرایی یا منبع ذخیرهسازی قرار دارند
- Load Balancing
- Cashing Strategies
-
Concurrency and Coordination
-
Monitoring and Observability
-
Resilience and Error Handling