fa
Feedback
CodeCrafters

CodeCrafters

رفتن به کانال در Telegram
711
مشترکین
اطلاعاتی وجود ندارد24 ساعت
+17 روز
+130 روز
آرشیو پست ها
7_تصویر مربوطه
7_تصویر مربوطه

6_تصویر مربوطه
6_تصویر مربوطه

5_تصویر مربوطه
5_تصویر مربوطه

4_تصویر مربوطه
4_تصویر مربوطه

3_تصویر مربوطه
3_تصویر مربوطه

2. آرایه‌های پویا¹: در این نوع آرایه، حافظه در زمان اجرا تخصیص داده می‌شود اما اندازه ثابتی² ندارد. فرض کنید، کاربر می‌خواهد هر اندازه تصادفی³ یک آرایه را اعلام کند، پس از آرایه ایستا استفاده نمی‌کنیم، به جای آن از یک آرایه پویا استفاده می‌شود. این نوع تخصیص حافظه به عنوان تخصیص حافظه پویا یا زمانِ اجرا⁴ نیز شناخته می‌شود. برای تعیین اندازه آن در طول زمان اجرای هر برنامه استفاده می‌شود.
// Dynamic Integer Array
int* arr = new int[5];
// Dynamic Integer Array
int* arr = malloc(sizeof(int) * 5);
// Dynamic Integer Array
ArrayList<Integer> arr = new ArrayList<>();
# Dynamic Array
arr = []
// Dynamic Integer Array
int[] arr = new int[5];
// Dynamic Array
let arr = new Array(5);
پانوشت: 1. Dynamic Arrays 2. fixed size 3. random 4. run-time #data_structures #algorithm @code_crafters

اهمیت آرایه فرض کنید کلاسی متشکل از 5 دانش آموز وجود دارد و اگر باید سوابق نمرات آن‌ها را در امتحان نگه‌داریم، می‌توانیم این کار را با اعلام مجزا پنج متغیر و نگه‌داری پیگیری سوابق انجام دهیم، اما اگر تعداد دانش‌آموزان بسیار زیاد شود، چه می‌شود. دستکاری و نگهداری داده‌ها چالش‌برانگیز خواهد بود. معنی آن این است که ما می‌توانیم از متغیرهای عادی (... ,v1, v2, v3) زمانی که تعداد اشیاء کمی داریم استفاده کنیم. اما اگر بخواهیم تعداد زیادی نمونه را ذخیره کنیم، مدیریت آن‌ها با متغیرهای عادی مشکل می شود. ایده آرایه این است که نمونه‌های زیادی را در یک متغیر نشان دهد. 3_تصویر مربوطه انواع آرایه‌ها آرایه‌ها را می‌توان به دو صورت طبقه‌بندی کرد: - بر اساس تخصیص حافظه¹ - بر اساس ابعاد² 4_تصویر مربوطه انواع آرایه‌ها بر اساس ابعاد: دو نوع اصلی آرایه وجود دارد که به انواع آرایه‌ها بر اساس ابعاد تقسیم‌بندی می‌شوند: - 1. آرایه‌های تک‌بُعدی (آرایه 1 بُعدی)³: می‌توانید یک آرایه 1 بُعدی را به عنوان یک ردیف تصور کنید که در آن عناصر یکی پس از دیگری ذخیره می‌شوند یا به عبارتی این آرایه‌ها یک ردیف از عناصر را ذخیره می‌کنند. 5_تصویر مربوطه - 2. آرایه‌های چندبُعدی⁴: آرایه چند بُعدی آرایه‌ای با بیش از یک بُعد است. ما می‌توانیم از آرایه چند بُعدی برای ذخیره داده‌های پیچیده در قالب جداول و غیره استفاده کنیم. می‌توانیم آرایه‌های 2 بُعدی⁵، آرایه‌های 3 بُعدی⁶، آرایه‌های 4 بُعدی⁷ و از این قبیل داشته باشیم و به عبارتی این آرایه‌ها چندین ردیف از عناصر را ذخیره می‌کنند. + آرایه دو بُعدی (آرایه 2 بُعدی یا ماتریس)⁸: آرایه‌های چندبُعدیِ 2 بُعدی را می‌توان به عنوان آرایه‌ای از آرایه‌ها یا به عنوان ماتریسی متشکل از ردیف‌ها و ستون‌ها در نظر گرفت. 6_تصویر مربوطه + آرایه سه بُعدی (آرایه 3 بُعدی)⁹: یک آرایه چند بُعدیِ 3 بُعدی شامل سه بُعد است، بنابراین می‌توان آن را آرایه‌ای از آرایه‌های دو بُعدی در نظر گرفت. 7_تصویر مربوطه انواع آرایه‌ها بر اساس تخصیص حافظه: 1. آرایه‌‌های ایستا¹⁰: در این نوع آرایه، حافظه در زمان کامپایل با اندازه ثابتی از آن تخصیص می‌یابد. ما نمی‌توانیم اندازه این آرایه را تغییر دهیم یا به روز کنیم. این نوع تخصیص حافظه به عنوان تخصیص حافظه ثابت¹¹ یا زمانِ کامپایل¹² نیز شناخته می‌شود. در اینجا فقط یک اندازه ثابت (یعنی اندازه ای که در پرانتز [] ذکر شده است) از حافظه برای ذخیره‌سازی اختصاص داده می‌شود. در صورتی که اندازه آرایه را ندانیم، اگر اندازه بزرگتر را اعلام کنیم و تعداد عناصر کمتری را ذخیره کنیم باعث هدر رفتن حافظه می‌شود یا اندازه کمتری را نسبت به تعداد عناصر اعلام می‌کنیم، در این صورت حافظه کافی برای ذخیره همه عناصر نخواهیم داشت. در چنین مواردی، تخصیص حافظه ثابت ترجیح داده نمی‌شود.
// Static Integer Array
int arr[5] = {1, 2, 3, 4, 5};
// Static Integer Array
int arr[5] = {1, 2, 3, 4, 5};
// Static Array
int[] arr = { 1, 2, 3, 4, 5 };
import array
# Static Array
arr = array.array('i', [1, 2, 3, 4, 5])
// Static array
int[] arr = { 1, 2, 3, 4, 5 };
let arr[] = {1, 2, 3, 4, 5}
پانوشت: 1. Memory Allocation 2. Dimensions 3. One-dimensional Array(1-D Array) 4. Multi-dimensional Array 5. 2-D arrays 6. 3-D arrays 7. 4-D arrays 8. Two-Dimensional Array(2-D Array or Matrix) 9. Three-Dimensional Array(3-D Array) 10. Static Arrays 11. static 12. compile-time #data_structures #algorithm @code_crafters

اهمیت آرایه فرض کنید کلاسی متشکل از 5 دانش آموز وجود دارد و اگر باید سوابق نمرات آن‌ها را در امتحان نگه‌داریم، می‌توانیم این کار را با اعلام مجزا پنج متغیر و نگه‌داری پیگیری سوابق انجام دهیم، اما اگر تعداد دانش‌آموزان بسیار زیاد شود، چه می‌شود. دستکاری و نگهداری داده‌ها چالش‌برانگیز خواهد بود. معنی آن این است که ما می‌توانیم از متغیرهای عادی (... ,v1, v2, v3) زمانی که تعداد اشیاء کمی داریم استفاده کنیم. اما اگر بخواهیم تعداد زیادی نمونه را ذخیره کنیم، مدیریت آن‌ها با متغیرهای عادی مشکل می شود. ایده آرایه این است که نمونه‌های زیادی را در یک متغیر نشان دهد. 3_تصویر مربوطه انواع آرایه‌ها آرایه‌ها را می‌توان به دو صورت طبقه‌بندی کرد: - بر اساس تخصیص حافظه¹ - بر اساس ابعاد² 4_تصویر مربوطه انواع آرایه‌ها بر اساس ابعاد: دو نوع اصلی آرایه وجود دارد که به انواع آرایه‌ها بر اساس ابعاد تقسیم‌بندی می‌شوند: - 1. آرایه‌های تک‌بُعدی (آرایه 1 بُعدی)³: می‌توانید یک آرایه 1 بُعدی را به عنوان یک ردیف تصور کنید که در آن عناصر یکی پس از دیگری ذخیره می‌شوند یا به عبارتی این آرایه‌ها یک ردیف از عناصر را ذخیره می‌کنند. 5_تصویر مربوطه - 2. آرایه‌های چندبُعدی⁴: آرایه چند بُعدی آرایه‌ای با بیش از یک بُعد است. ما می‌توانیم از آرایه چند بُعدی برای ذخیره داده‌های پیچیده در قالب جداول و غیره استفاده کنیم. می‌توانیم آرایه‌های 2 بُعدی⁵، آرایه‌های 3 بُعدی⁶، آرایه‌های 4 بُعدی⁷ و از این قبیل داشته باشیم و به عبارتی این آرایه‌ها چندین ردیف از عناصر را ذخیره می‌کنند. + آرایه دو بُعدی (آرایه 2 بُعدی یا ماتریس)⁸: آرایه‌های چندبُعدیِ 2 بُعدی را می‌توان به عنوان آرایه‌ای از آرایه‌ها یا به عنوان ماتریسی متشکل از ردیف‌ها و ستون‌ها در نظر گرفت. 6_تصویر مربوطه + آرایه سه بُعدی (آرایه 3 بُعدی)⁹: یک آرایه چند بُعدیِ 3 بُعدی شامل سه بُعد است، بنابراین می‌توان آن را آرایه‌ای از آرایه‌های دو بُعدی در نظر گرفت. 7_تصویر مربوطه انواع آرایه‌ها بر اساس تخصیص حافظه: 1. آرایه‌‌های ایستا¹⁰: در این نوع آرایه، حافظه در زمان کامپایل با اندازه ثابتی از آن تخصیص می‌یابد. ما نمی‌توانیم اندازه این آرایه را تغییر دهیم یا به روز کنیم. این نوع تخصیص حافظه به عنوان تخصیص حافظه ثابت¹¹ یا زمانِ کامپایل¹² نیز شناخته می‌شود. در اینجا فقط یک اندازه ثابت (یعنی اندازه ای که در پرانتز [] ذکر شده است) از حافظه برای ذخیره‌سازی اختصاص داده می‌شود. در صورتی که اندازه آرایه را ندانیم، اگر اندازه بزرگتر را اعلام کنیم و تعداد عناصر کمتری را ذخیره کنیم باعث هدر رفتن حافظه می‌شود یا اندازه کمتری را نسبت به تعداد عناصر اعلام می‌کنیم، در این صورت حافظه کافی برای ذخیره همه عناصر نخواهیم داشت. در چنین مواردی، تخصیص حافظه ثابت ترجیح داده نمی‌شود.
// Static Integer Array
int arr[5] = {1, 2, 3, 4, 5};
// Static Integer Array
int arr[5] = {1, 2, 3, 4, 5};
// Static Array
int[] arr = { 1, 2, 3, 4, 5 };
import array
# Static Array
arr = array.array('i', [1, 2, 3, 4, 5])
// Static array
int[] arr = { 1, 2, 3, 4, 5 };
let arr[] = {1, 2, 3, 4, 5}
پانوشت: 1. Memory Allocation 2. Dimensions 3. One-dimensional Array(1-D Array) 4. Multi-dimensional Array 5. 2-D arrays 6. 3-D arrays 7. 4-D arrays 8. Two-Dimensional Array(2-D Array or Matrix) 9. Three-Dimensional Array(3-D Array) 10. Static Arrays 11. static 12. compile-time

Array¹ آرایه² ساختمان داده آرایه‌³ای یک مفهوم اساسی در علوم کامپیوتر است که مجموعه‌ای از عناصر⁴ را در یک قطعه⁵ پیوسته از حافظه ذخیره می‌کند. این امکان دسترسی موثر به عناصر را با استفاده از اندیس‌ها⁶ فراهم می‌کند و به طور گسترده در برنامه‌نویسی برای سازماندهی⁷ و دستکاری⁸ داده‌ها استفاده می‌شود. آرایه چیست؟ آرایه یک ساختمان داده خطی⁹ است که در آن همه عناصر به صورت متوالی¹⁰ مرتب شده‌اند. این مجموعه‌ای از عناصر از نوع داده یکسان یا مواردی از همان نوع متغیر¹¹ است که در مکان‌های حافظه به هم پیوسته ذخیره می‌شوند. این یکی از محبوب‌ترین و ساده‌ترین ساختمان‌های داده است و اغلب برای پیاده‌سازی سایر ساختمان‌های داده استفاده می‌شود. هر مورد¹² در یک آرایه با شروع از 0 ایندکس می‌شود. هر عنصر در یک آرایه از طریق ایندکس آن قابل دسترسی است. 1_تصویر مربوطه برای سادگی، می‌توانیم آرایه‌ای را به‌عنوان تعدادی پله در نظر بگیریم که روی هر پله یک مقدار قرار می‌گیرد (مثلاً یکی از دوستان شما). در اینجا، شما می‌توانید مکان هر یک از دوستان خود را به سادگی با دانستن تعداد پلکانی که در آن قرار دارند شناسایی کنید. این کار محاسبه موقعیت هر عنصر را به سادگی با افزودن یک افست¹³ به یک مقدار پایه، یعنی مکان حافظه اولین عنصر آرایه (که معمولاً با نام آرایه مشخص می‌شود) آسان‌تر می‌کند. مقدار پایه ایندکس 0 است و تفاوت بین این دو ایندکس‌ها افست است. 📌 به یاد داشته باشید: "مکان ایندکس بعدی به نوع داده‌ای که استفاده می‌کنیم بستگی دارد". آیا اندازه آرایه همیشه ثابت است؟ در زبان برنامه‌نویسی ¹⁴C، آرایه دارای یک اندازه ثابت است، به این معنی که وقتی اندازه به آن داده می‌شود، نمی توان آن را تغییر داد، یعنی نمی‌توانید آن را کاهش دهید و نمی‌توانید آن را گسترش دهید. دلیل آن این بود که برای گسترش اگر اندازه را تغییر دهیم، نمی‌توانیم مطمئن باشیم (هر بار امکان ندارد) که مکان حافظه بعدی را به صورت رایگان در اختیارمان قرار دهد. کاهش یافتن کار نخواهد کرد زیرا آرایه، زمانی که اعلام شود، حافظه به صورت ایستا¹⁵ تخصیص می‌یابد، و بنابراین کامپایلر¹⁶ تنها کسی است که می‌تواند آن را از بین ببرد. اصطلاحات پایه آرایه - ایندکس آرایه¹⁷: در یک آرایه، عناصر با ایندکس‌هایشان شناسایی می‌شوند. ایندکس آرایه از 0 شروع می‌شود. - عنصر آرایه¹⁸: عناصر، مواردی هستند که در یک آرایه ذخیره می‌شوند و با ایندکس آن‌ها می‌توان به آن‌ها دسترسی داشت. - طول آرایه¹⁹: طول یک آرایه با تعداد عناصری که می تواند داشته باشد تعیین می‌شود. نمایش حافظه آرایه در یک آرایه، تمام عناصر در مکان‌های حافظه به هم پیوسته ذخیره می‌شوند. بنابراین، اگر یک آرایه را مقداردهی اولیه کنیم: 2_تصویر مربوطه پانوشت: 1. به فارسی: آرایه 2. Array 3. Array Data Structure 4. elements 5. block 6. indices 7. organizing 8. manipulating 9. Linear Data Structure 10. sequential 11. Variable 12. item 13. offset 14. C Programming Language 15. Static 16. Compiler یا کامپایلر نرم‌افزاری برای تبدیل کُد منبع (Source Code) به کُد شی (Object Code) است. به عبارت دیگر می‌توان گفت که کامپایلر کُدهای نوشته شده به زبان سطح بالا (نزدیک به زبان انسان) توسط برنامه‌نویسان را به زبان دودویی ماشین تبدیل می‌کند. 17. Array Index 18. Array element 19. Array Length #data_structures #algorithm @code_crafters

بخش product development: تمام توسعه محصول در بخش توسعه محصول متمرکز است که دارای سه بخش فرعی است. هر یک از این بخش ها بر روی یک منطقه خاص تمرکز می کنند بخش analytics: بخش تجزیه و تحلیل نحوه استفاده از خدمات و محصولات را تجزیه و تحلیل می کند.روندها را رصد می کند و به مشتریان کمک می کند تا نحوه استفاده از خدمات و محصولات ارائه شده را بهینه کنند. بخش sales: نقش بخش فروش یافتن مشتریان جدید و بهبود تعداد نهادهای نیازمند به محضول هستند بخش product support:بخش پشتیبانی محصول در این زمینه ها پشتیبانی می کند:پشتیبانی مشتری، پشتیبانی فنی و پشتیبانی پیاده سازی بخش Core Services : یک بخش فرعی توسعه محصول است. این بخش بر توسعه و گسترش خدمات اصلی ارائه شده توسط محصول تمرکز دارد. این خدمات شامل ارائه آمار، بازگرداندن اطلاعات ساکنان، و ارائه اطلاعات در مورد خود نهادهای مصرف کننده محصول است بخش domain service: توسعه محصولات و خدمات خاص را مدیریت می کند. به عنوان مثال، سیستم کاهش ترافیک، توسعه یافته و توسط این بخش نگهداری می شود بخش Mobile Services: توسعه همه برنامه های تلفن همراه را انجام می دهد بخش customer product: پشتیبانی مشتری به سوالات مربوط به استفاده از محصولات و خدمات رسیدگی می کند بخش technical support: پشتیبانی فنی با مسائل اتصال، ادغام فنی و مسائل مربوط به امنیت سر و کار دارد بخش implementation support: پشتیبانی پیاده سازی، به مشتریان محصول کمک می کند تا متصل شوند بخش مدیران و ذینفعان و سهامداران سازمان، در نهایت ذینفعان سازمان سیاست‌های سازمانی رو تعریف میکنند اندکی راجب نگرش انها بدانیم مدیر عامل CEO: "من می خواهم این شرکت رشد کند. ما در حال حاضر عده‌ای به عنوان مشتری داریم. من می خواهم در دو سال آینده مشتریان افزایش پیدا کند.ما باید هزینه های IT را در یک راستا نگه داریم، زیرا آنها در چند سال گذشته به طور پیوسته در حال افزایش بوده اند مدیر فروش sales manager: «مشتریان ما گزینه های مختلف استقرار را می خواهند. برخی در حال حاضر ابر خصوصی خود را دارند و نمی خواهند در ابر ما اجرا شوند.علاوه بر این، آنها خواهان دسترسی آسان‌تر به داده‌ها هستند تا بتوانند آن‌ها را در برنامه‌های کاربردی خود بگنجانند» مدیر توسعه development manager: «ما باید توسعه خدمات را ادغام کنیم. سرویس ها از انواع مختلفی از مدل ها استفاده می کنند. ما همچنین متوجه شده‌ایم که برخی از سرویس‌ها تقریباً عملکرد مشابهی را ارائه می‌کنند، و می‌خواهیم تعدادی از خدمات را برای حذف این تکرار اصلاح کنیم.» مدیر پشتیبانی محصول product support manager: «ما نسخه‌های بسیار زیادی در حال تولید داریم که پشتیبانی از آن‌ها سخت است و نظارت خوبی نداریم. ما یک نسخه واحد می خواهیم که همه مشتریان از آن استفاده کنند. ما همچنین سوالات زیادی در مورد نحوه استفاده از خدمات دریافت می کنیم که باید در جایی مستند شود. تحلیلگر اصلی lead analyst: «ما باید بتوانیم گزارش‌های سفارشی ایجاد کنیم تا به مشتریان خود کمک کنیم. می‌خواهم ببینم فرآیند درخواست مجوز چه زمانی و توسط چه کسی و چه مدت اجرا می‌شود، از کدام سرویس‌ها استفاده می‌شود.» این نقش‌های تعریف شده در یک سازمان کوچک است که هر دپارتمان اهداف خاص خود را دنبال میکند #microservice #soa @code_crafters

در ادامه مباحث میکروسرویس و حکمرانی soa و سیاست‌های آن ما نیازمند یه چارت سازمانی هستیم تا با دیدن ان بتوان به موحودیت soa پی
در ادامه مباحث میکروسرویس و حکمرانی soa و سیاست‌های آن ما نیازمند یه چارت سازمانی هستیم تا با دیدن ان بتوان به موحودیت soa پی برد وظایف و خواستگاه هر نقش مشخص باشد در این تصویر یک نمونه از چارت سازمانی رو میبنیم در ادامه به تعریف هر یک از نقش‌های سازمانی و حکمرانی soa میپردازیم #microservice #soa @code_crafters

سلامت روانی بخش مهمی از شخصیت انسان رو میسازه من بارها گفتم مشکلات روانی با پول درست نمیشه، واقعیت اینه مشکلات روانی هیچگاه درمان نمیشن منتها با شناخت و مراقبت میشه کنترلش کرد و اگه این روند رو ترک کنید اون مشکل روانی مجدد ظاهر میشه من در دوره خدمت سربازی تو مرز بودم زمانی که داعش به عراق حمله کرد، وضعیت بشدت بدی بود، تنش و فشار زیادی داشتیم بابت احتمال حمله و ورود داعش به ایران، تداوم وضعیت و عدم رسیدگی به شرایط روحی و روانی خود من دچار فوبیا شدم (خوابم سبکه با کوچکترین صدایی بیدار میشم، در هنگام مبتلا شدنم به فوبیا هنگام خواب با کوچکترین صدایی با ترس وحشتناکی از اینکه قراره کشته بشم بیدار میشدم) به پزشک روان شناس پادگان رجوع کردم و تونستم اون روزها رو پشت سر بزارم چندشب پیش خواب بودم که همخونه‌ایم ناخواسته صدا وسایلش اومد و با همون ترس دوران سربازی مجدد بیدار شدم همون حس کشته شدن برنامه‌نویسی و حوزه نرم افزار یکی از شغلهای بیماری زای ذهنی و روانی هستش اگه از خودتون مراقبت نکنید سلامت فکری و روانیتون در معرض و خطر بزرگی قرار داره (سوا از بیماری‌های جسمی)

گاهی وقت‌ها یه هدیه یه کادو و یه امانت میتونه حال آدمی رو درمان کنه کتابی که میخواستم بالاخره به دستم رسید و مشتاق به خوندنش
گاهی وقت‌ها یه هدیه یه کادو و یه امانت میتونه حال آدمی رو درمان کنه کتابی که میخواستم بالاخره به دستم رسید و مشتاق به خوندنش هستم، نمیدونم چرا ولی همیشه در بدترین لحظات و دوره‌های فکریم مطالعه اندیشمندان غربی آرامش بخش هست برام و من رو به اون دایره امنم مجدد میرسونه، من نمیگم اندیشه شرق بد یا ناقص هست، اما یک‌ موضوع اذیتم میکنه ،محدودیت در پرسش و بیان و بازنگری یک موضوع در اندیشه شرق #free #book @code_crafters

یه دیونه‌ای از یه خیابونی داشت میدوید ،مردم تو خیابون هم ناخوداگاه دنبالش دویدن مقصر اون دیونه نبود، مقصر ساده بودن مردم بود حالا اومدن میگن با کلیک کردن پولدارتون میکنیم ،نمیگم دروغ میگن اتفاقا از سادگی مردم میشه پول خوبی در آورد(نمونه اون زیاده، مثه ماجرای بورس، مثه داستان فارکس، مثه نتورکینگ ، مثه خودروهایی که هیچوقت تحویل داده نشد، مثه مسکن مهرهای نا امنی که در بالاترین حد ممکن فروخته شد و البته این اواخر هم کمپانی کوروش) حقیقتا میشه از سادگی مردم پول درآورد رابرت کیوساکی حرف خوبی میزنه تو یکی از کتاب‌هاش، میگه هرچی که نسبت بهش حس خوبی داشتی رو بخر ،مطمئن باش یکعده دیگه هم هستن که مثه تو نسبت به اون چیز حس خوبی دارن و حاضر میشن بابتش پول بدن و از تو بخرنش، این ارزها رو هم بالاخره میخرن با هر قیمتی فرقی نداره بالاخره یکعده دورهم هستید که بهش حس خوبی دارید، ولی همین تداوم رو سر یک موضوع تخصصی هم داشته باشید نه شاید در کوتاه مدت ،ولی در بلند مدت ارزش بیشتری رو براتون خلق میکنه منتها جذابیت کلیک کردن در این هست که حس خلق ارزش لحظه‌ای رو بهمون میده(حتی اگه پوچ و تو خالی باشه برامون) شبیه مردم ساده‌ای که تو خیابون دنبال اون دیونه دویدن که ببینن چیشده با اینکه همه میدونستن دیونه بود و چیزی قرار نیست اتفاق بیافته اما کنجکاو بودن ببینن تهش چی میشه من باز هم میگم از سادگی مردم میشه پول ساخت

ربات Loyalty شروع به کار کرد. 🎉 برخی امکانات ربات: 💸پلن های مقرون به صرفه ⚡️ تعویض آنی سرور 🎁 کانفیگ رایگان ماهیانه 🫰پرداخت ریالی و مستقیم 🌐 لوکیشن های متنوع (🇩🇪🇬🇧🇫🇷🇨🇦) 🥇بدون محدودیت کاربر برای دریافت کانفیگ یکماهه رایگان، وارد ربات ما شوید: 💠 @LoyalShopRobot

@LoyalShopRobot بچه‌ها برید داخل این ربات استارت بزنید و کانفیگ هدیه رو بزنید ده گیگ یکماهه هدیه بگیرید ازتون هم ممنون میشم اگه جایی وصل نشد روی اپراتور خاصی و یا مشکلی بود اطلاع بدین که بررسی و درست بشه

خلاصه: اول-VTGate: سرور پراکسی برای مسیریابی کوئری‌ها دوم-Key-Value Database: سرور پیکربندی برای مدیریت توپولوژی سوم-VTTablet: سرور جانبی که روی هر MySQL اجرا می‌شه اونا Vitess رو با زبان Go نوشتند و اون رو اوپن سورس کردند. همچنین از MariaDB هم پشتیبانی می‌کنه. یوتیوب تونست با ترکیب رVitess و MySQL به 2.49 میلیارد کاربر رو مدیریت کنه. این مطالعه موردی نشون می‌ده که MySQL می‌تونه به راحتی ترافیک در مقیاس اینترنت و کاربران زیاد  رو مدیریت کنه.

خب سلام دوباره در ادامه مجموعه پست های دیتابیس تو این یکی قراره با معماری Vitess اشنا بشیم و متوجه بشیم یوتوب چگونه 2.49 میلایرد کاربر خودش رو با MySQL هندل میکنه. توجه این پست بر اساس تحقیق هستش و ممکنه با پیاده‌سازی واقعی فرق داشته باشه. روزی روزگاری، سه نفر که تو PayPal کار می‌کردن، تصمیم گرفتن یه سایت دوستیابی درست کنن. اما مدل کسب‌وکارشون شکست خورد. برای همین ایده‌شون رو عوض کردن و یه سایت اشتراک‌گذاری ویدئو درست کردن و اسمش رو گذاشتن یوتیوب. اونا عناوین ویدئوها، توضیحات و اطلاعات کاربران رو تو MySQL ذخیره کردن. وقتی کاربرهای بیشتری به سایت پیوستن، اونا MySQL رو به حالت رهبر-دنبال‌کننده (leader-follower replication topology) تنظیم کردن تا بتونن بهتر مقیاس‌پذیری کنن. اما تکرار در MySQL تک‌نخی (single-threaded) است. بنابراین دنبال‌کننده‌ها نمی‌تونستن در عملیات نوشتن شدید به رهبر برسند و داده‌های جدید رو به‌روز کنن. با این حال، نرخ رشدشون خیلی زیاد بود و به یک میلیارد کاربر رسیدن و به دومین سایت پربازدید در جهان تبدیل شدن. بنابراین با اضافه کردن یه حافظه نهان (cache) مقیاس‌پذیری کردن و همه رویدادها رو از لاگ باینری MySQL (binary log) بارگذاری کردن. این یعنی تکرار به حافظه وابسته شد و سرعت بیشتری پیدا کرد. اگرچه این کار به طور موقت مشکل مقیاس‌پذیری اونا رو حل کرد، مشکلات جدیدی به وجود اومد. در اینجا به برخی از اونا اشاره می‌کنم: 1. پارتیشن‌بندی (Sharding): اولین کاری که باید کرد این که MySQL باید پارتیشن‌بندی بشه تا نیازهای ذخیره‌سازی رو مدیریت کنه. اما بعد از پارتیشن‌بندی، معاملات (transactions) و پیوستن جداول (joins) سخت میشه. بنابراین منطق برنامه (application logic) باید این رو مدیریت کنه. این یعنی منطق برنامه باید بفهمه که کدوم پارتیشن‌ها رو باید پرس‌وجو کنه و این باعث افزایش احتمال زمان خرابی (downtime) میشه. 2. عملکرد (Performance): و(leader-follower replication topology) باعث میشه که داده‌های قدیمی از دنبال‌کننده‌ها خونده بشه. بنابراین منطق برنامه باید خوندن داده‌ها رو به رهبر هدایت کنه اگر داده‌های جدید لازم باشه. و این نیاز به پیاده‌سازی منطق اضافی داره. 3. حفاظت (Protection): ریسک اینکه برخی پرس‌وجوها خیلی طول بکشه تا داده‌ها رو برگردونن وجود داره. همچنین تعداد زیادی از اتصالات MySQL به طور همزمان می‌تونه مشکل‌ساز بشه و ممکنه دیتابیس رو از کار بندازه. اونا می‌خواستن یه لایه انتزاعی روی MySQL برای سادگی و مقیاس‌پذیری ایجاد کنند. بنابراین Vitess رو ساختن. در اینجا نحوه ارائه مقیاس‌پذیری بالا توسط Vitess رو توضیح می‌دم: 1. تعامل با پایگاه داده:(Interacting with Database) اونا یه سرور جانبی (sidecar server) جلو هر نمونه MySQL نصب کردن و اسمش رو گذاشتند VTTablet. این سرور جانبی به اونا اجازه می‌داد: - کنترل سرور MySQL و مدیریت پشتیبان‌گیری از پایگاه داده - بازنویسی کوئری‌های سنگین با اضافه کردن محدودیت (limit clause) - کش کردن داده‌های پر دسترس برای جلوگیری از مشکل Thundering Herd 2. مسیریابی کوئری‌ها(Routing SQL Queries): یه سرور پراکسی بدون حالت (stateless proxy server) برای مسیریابی کوئری‌ها تنظیم کردند و اسمش رو گذاشتند VTGate. این سرور پراکسی بهشون اجازه می‌داد: - پیدا کردن VTTablet صحیح برای مسیریابی کوئری بر اساس اسکیما و طرح پارتیشن‌بندی - پایین نگه داشتن تعداد اتصالات MySQL از طریق تجمیع اتصالات (connection pooling) - صحبت با لایه کاربردی به پروتکل MySQL - عمل کردن مانند یه سرور MySQL یکپارچه برای سادگی - محدود کردن تعداد معاملات در یک زمان برای عملکرد بهتر همچنین برای مقیاس‌پذیری بیشتر، سرورهای VTGate متعددی راه‌اندازی کردند. 3. اطلاعات حالت: تصویر چهارم در کامنت ها یه پایگاه داده توزیع‌شده کلید-مقدار (distributed key-value database) راه‌اندازی کردند تا اطلاعات مربوط به اسکیما، طرح‌های پارتیشن‌بندی و نقش‌ها رو ذخیره کنه. این پایگاه داده همچنین روابط بین پایگاه‌های داده مثل رهبر و دنبال‌کننده‌ها رو مدیریت می‌کنه. در ادمه از Zookeeper برای پیاده‌سازی این پایگاه داده کلید-مقدار استفاده کرندند. علاوه بر این، این داده‌ها رو در VTGate برای عملکرد بهتر کش میکردند. برای به‌روزرسانی پایگاه داده کلید-مقدار، یه سرور HTTP راه‌اندازی کردند و اسمش رو گذاشتند VTctld. این سرور فهرست کامل سرورها و روابطشون رو می‌گیره و سپس پایگاه داده کلید-مقدار رو به‌روزرسانی می‌کنه. #database #postgresql @code_crafters

100X Scaling_ How Figma Scaled its Databases.pdf3.46 MB

یکی از سیاست‌های حکمرانی soa این است که سرویس ‌های ما قابل اجرا بر روی فضاهای ابری (cloud) باشد،این یک الزام است، فضاهای ابری زیاد و متنوعی وجود دارد که شما میتوانید از آنها استفاده کنید اما این بسته به نیاز شما و سرویس‌های شما دارد در این پست مسائلی مطرح میکنیم که با استفاده از آن تشخیص دهید کدام فضای ابری مناسب سرویس شماست ابتدا بیایید مختصر در خصوص انواع فضای ابری صحبت کنیم:
ارایه دهنده software as a service (Saas):
هنگامی که از یک محیط SaaS استفاده می کنید،به یک برنامه یا سرویس کامل که در جایی آنلاین میزبانی شده است دسترسی خواهید داشت.  شما برنامه‌ها یا خدمات خود را در این ابر مستقر نمی‌کنید،بلکه از آنچه ارائه‌دهنده SaaS ارائه می‌کند استفاده می‌کنید.Google Docs، Salesforce و Office 365 همگی نمونه‌هایی از SaaS هستند

ارائه دهنده platform as a service (PaaS):
-اگر می خواهید برنامه های خود را مستقر کنید، ممکن است از PaaS استفاده کنید.با یک PaaS یک پلت فرم محاسباتی کامل یا پشته نرم افزاری به شما پیشنهاد می شود که می توانید از آن برای ایجاد برنامه ها و خدمات خود استفاده کنید.Google Apps، AWS آمازون،Windows Azure مایکروسافت و بسیاری دیگر این سرویس را ارائه می دهند

ارائه دهنده infrastructure as a service (IaaS):
ارائه دهنده IaaS زیرساخت های محاسباتی مانند منابع CPU، ذخیره سازی داده ها و IO شبکه را فراهم می کند.اغلب PaaS از خدمات ارائه شده توسط IaaS استفاده می کند.ارائه دهندگان IaaS زیادی وجود دارد:Cloud.com، Rackspace، Amazon، و HP به جز چند مورد
با توجه به سیاست‌های soa بهتر است بر روی PaaS تمرکز کنید و با استفاده از پارامترهای زیر و خدماتی که provider به ما می‌دهند انتخاب کنیم: عملکرد همه ارائه دهندگان ابر عملکرد یکسانی را ارائه نمی دهند.برخی ممکن است فقط منابع محاسباتی را ارائه دهند،در حالی که برخی دیگر یک پشته نرم افزار کامل را ارائه می دهند وقتی به یک ارائه دهنده ابر احتمالی نگاه می کنید، باید عملکرد مورد نیاز خود را تعیین کنید.آیا به یک پایگاه داده آنلاین،قابلیت ایمیل یا شاید یک سیستم پیام رسانی نیاز دارید؟ سعی کنید ارائه دهنده ای پیدا کنید که تمام این الزامات را پوشش دهد.اگر نتوانستید یکی را پیدا کنید،سعی کنید تعدادی را پیدا کنید که به خوبی با یکدیگر ادغام شوند پشته نرم افزار همه سرویس ها با استفاده از یک فناوری ایجاد نمی شوند.هنگام انتخاب یک ارائه‌دهنده ابری،به دنبال پشته توسعه‌تان باشید و اگر ویژگی‌های اضافی(مانند ذخیره‌سازی مبتنی بر کلید/مقدار)را ارائه می‌دهد، به دنبال یکی از APIهایی باشید که به زبان شما یک API ارائه می‌کند قابل حمل بودن داده ها وقتی خدمات خود را در فضای ابری اجرا می کنید،از گزینه های ذخیره سازی ارائه شده توسط ابر استفاده کنید و مطمئن شوید که این ارائه دهنده به شما اجازه می دهد تا داده های خود را به راحتی صادر کنید.اگر اینطور نیست، می توانید به سرعت در یک ارائه دهنده ابر خاص قفل شوید مقیاس پذیری یکی از مزیت های مهم استفاده از ارائه دهنده ابر این است که وقتی برنامه شما رشد می کند،لازم نیست نگران اضافه کردن منابع اضافی باشید.هنگامی که به دنبال ارائه دهنده ابری هستید، به دنبال ارائه دهنده ای باشید که قابلیت مقیاس پذیری شفاف را ارائه می دهد.اگر منابع مورد نیاز شما افزایش یابد،ارائه‌دهنده ابر باید به طور خودکار بتواند مقیاس را افزایش دهد.اگر منابع مورد نیاز شما کاهش یابد،ارائه دهنده ابر باید مقیاس را کاهش دهد امنیت داده وقتی از یک ارائه دهنده ابر استفاده می کنید،اطلاعات حساس خود را در ابر ذخیره می کنید.این داده ها حتی ممکن است در کشور دیگری ذخیره شوند.هنگامی که یک ارائه دهنده ابر را انتخاب می کنید،مطمئن شوید که گزینه های امنیت داده ارائه شده توسط این ارائه دهنده با نیازهای شما و مشتریان شما مطابقت دارد خط‌مشی پشتیبان‌گیری اگر از پلتفرم ابری برای ذخیره‌سازی استفاده می‌کنید،تعیین خط‌مشی‌های پشتیبان‌گیری ارائه‌دهنده ابر مهم است.آیا آنها به طور منظم از داده ها نسخه پشتیبان تهیه می کنند،آیا پایگاه داده ها تکرار می شوند یا اینکه شما کنترل بازیابی نسخه های پشتیبان را خودتان دارید؟ قابلیت مدیریت پلتفرم ابری باید به راحتی توسط شما مدیریت شود.باید یک رابط مدیریتی وجود داشته باشد که با آن بتوانید به راحتی میزان استفاده از منابع خدمات خود را مشاهده کنید و عملکردهای اضافی اضافه کنید.همچنین باید بتوانید به راحتی سوابق ثبت و ممیزی برنامه خود را مشاهده کنید هزینه همیشه یک عامل مهم است.ببینید برای خدمات ارائه شده چه چیزی باید پرداخت کنید.آیا حداقل قیمتی وجود دارد که باید هر ماه بپردازید؟آیا وقتی از منابع زیادی استفاده می کنید، میانگین قیمت شما کاهش می یابد؟ #microservice #soa @code_crafters