Golem Course – Telegram
Golem Course
2.93K subscribers
47 photos
43 videos
40 files
144 links
Alireza Aghamohammadi, Ph.D.

https://youtube.com/@GolemCourse
Download Telegram
برای دوره آینده کدام یک از موارد زیر را ترجیح می‌دهید؟
Anonymous Poll
44%
Docker
49%
System Design
7%
Kanban
🔥9👍2
خواندن اطلاعات از پایگاه داده، اتصال به شبکه، خواندن از فایل، پاسخی که از یک سیستم دیگر باید دریافت شود و ... نمونه‌هایی از عملیات IO محسوب می‌شوند. این کارها می‌تواند مدت زمان زیادی از زمان اجرای برنامه را به خود اختصاص دهد. به همین خاطر، ایده برنامه‌نویسی ناهمگام مطرح شد. در برنامه‌نویسی ناهمگام (Asynchronous) برنامه می‌تواند تا زمانی که پاسخ عملیات IO آماده شود به کارهای دیگری که دارد برسد و به این شکل کل زمان اجرای برنامه کاهش پیدا کند.

اجازه دهید یک مثال بزنم. فرض کنید مشتری در یک رستوران سفارش غذا می‌دهد. تا زمانی که سفارش مشتری آماده می‌شود، صندوق‌دار می‌تواند سفارش باقی مشتری‌ها را دریافت کند. لزومی ندارد که باقی مشتری‌ها را معطل نگه داریم تا سفارش مشتری مذکور آماده شود.

در #پایتون با کمک ماژول asyncio می‌توان برنامه‌های ناهمگام نوشت. یک ویدیو در یوتیوب درست کردم و کار با این ماژول را آموزش دادم.
https://youtu.be/-AqttMR4sXc
👍22
01-Foundation.pdf
63.3 KB
به زودی طبق نظرسنجی که در کانال داشتیم، دوره طراحی سیستم‌ها را آغاز می‌کنم. برای این دوره یک تصمیم دیگر هم گرفتم. به خاطر اهمیت بالای این درس، علاوه بر ویدیو یک سری جزوه در قالب pdf هم ارائه می‌کنم. جزوه درس اول به پیوست تقدیم می‌گردد.
#System_Design
#01_Foundation
👍1411🔥1
02-Scaling.pdf
568.9 KB
جزوه جلسه دو طراحی سیستم‌ها به پیوست تقدیم می‌گردد. در این بخش به روش‌های مقیاس کردن سایت خود می‌پردازیم.

#System_Design
#02_Scaling
7👍1
در جلسه دوم از درس طراحی سیستم‌ها یاد می‌گیریم که چگونه یک سیستم را به گونه‌ای مقیاس‌پذیر کنیم تا بتواند چندصد هزار درخواست را مدیریت کند. به طور مشخص با دو تکنیک مقیاس کردن عمودی (Vertical Scaling) و مقیاس کردن افقی (Horizontal Scaling) آشنا می‌شویم.
https://youtu.be/Ogb5zZ5u6f0
👍41
03-DNS.pdf
342.3 KB
جزوه جلسه سوم درس طراحی سیستم‌ها به پیوست تقدیم می‌گردد. در این بخش با نحوه کارکرد DNS ها برای تبدیل Domain Name به IP Address آشنا می‌شویم.

#System_Design
#03_DNS
👍5
04-Load-Balancer.pdf
458.7 KB
توازن‌کننده بار مقیاس کردن افقی سیستم را امکان‌پذیر می‌کند. جزوه جلسه چهارم در رابطه با توازن‌کننده‌های بار به پیوست تقدیم می‌گردد.
#04_Load_Balancer
#System_Design
👍42
زمانی که یک محصول را توسعه می‌دهیم گاهی نیاز است که به یک سرور لینوکسی تحت شبکه (با IP مشخص) دسترسی داشته باشیم. با توجه به این که خرید سرور به لطف قیمت دلار گران است و هم اتصال ssh این روزها به خاطر اختلال اینترنت آزاردهنده است، می‌توان یک ماشین مجازی ubuntu server بر روی دستکتاپ/لپ‌تاپ شخصی ایجاد کرد و static ip به آن نسبت داد تا هم بتوانیم در یک private network به آن دسترسی داشته باشیم و هم قابلیت ssh برای دسترسی به ترمینال داشته باشد. در این ویدیو ایجاد چنین محیطی را آموزش می‌دهم:

https://youtu.be/CsQ6xqZNHV8
👍3
05-database-replication.pdf
541.1 KB
در درس‌های گذشته یاد گرفتیم که چگونه می‌توانیم برای افزایش مقیاس‌پذیری سیستم، تعداد سرورها را افزایش دهیم. اما همچنان پایگاه داده سیستم به صورت مرکزی قرار دارد. یعنی با افزایش خواندن/نوشتن داده، پایگاه داده می‌تواند به گلوگاه (bottleneck) تبدیل شود.

#05_database_replication
#System_Design
👍1
06-cache.pdf
619 KB
برای افزایش کارایی سیستم‌ها، یک تکنیک استفاده از caching است. در این درس، با این روش آشنا می‌شویم.
#06_cache
#System_Design
👍1🔥1
07-proxies.pdf
257.2 KB
پراکسی در طراحی سیستم‌ها کاربرد زیادی دارند. توزان کننده بار (load balancer) که در جلسه‌های گذشته صحبت کردیم در واقع پراکسی است.

#07_proxies
#System_Design
👍4
08-cdn.pdf
449.6 KB
کاربران سیستم ما لزوماً از یک منطقه جغرافیایی نیستند. ممکن است برخی از آن‌ها در ایران ساکن باشند و برخی در قاره آمریکا. اگر قرار باشد همه درخواست‌ها به یک مکان ارسال شود، زمان پاسخ کاربران بسته به محل سکونت آن‌ها متفاوت خواهد بود. برای افزایش سرعت و کارایی سیستم می‌توان از ایده شبکه توزیع محتوا (Conent Delivery Network ) بهره برد.
#08_CDN
#System_Design
👍2
09-sharding.pdf
522.5 KB
سناریویی را در نظر بگیرید که حجم داده آنقدر زیاد شده است که امکان قرار دادن آن در یک سرور ذخیره‌سازی (پایگاه داده) امکان پذیر نیست. حتی ممکن است بهبود توان و فضای سرور ذخیره‌سازی هم مقرون به صرفه نباشد زیرا پاسخ به درخواست وارده باید کل پایگاه داده را بررسی کند.
افراز بندی پایگاه داده که به آن شارد کردن (sharding) نیز می‌گویند، یک راه معروف برای حل مشکل فوق است.

#09_Sharding
#System_Design
👍3