Ninja Learn | نینجا لرن
1.26K subscribers
96 photos
36 videos
11 files
307 links
یادگیری برنامه نویسی به سبک نینجا 🥷
اینجا چیزایی یاد میگیری که فقط نینجاهای وب‌ بلدن 🤫

📄 Send me post: https://t.iss.one/NoronChat_bot?start=sec-fdggghgebe

👥 ɢʀᴏᴜᴘ: https://t.iss.one/+td1EcO_YfSphNTlk
Download Telegram
معرفی Kafka 🌀

اگه سیستم‌هایی با معماری پیچیده طراحی می‌کنی یا می‌خوای با حجم زیادی از داده کار کنی، احتمالش زیاده اسم Kafka رو شنیده باشی. Kafka یه Distributed Streaming Platform هست که توسط LinkedIn ساخته شد و بعدش به Apache منتقل شد. اما چرا Kafka این‌قدر مهمه و کجاها به کار میاد؟ بیایید دقیق بررسیش کنیم.

📜 ـKafka چرا ساخته شد؟
تو معماری سیستم‌های بزرگ، نیاز به ارتباط بین سرویس‌ها (Microservices) یا انتقال حجم زیادی از داده خیلی جدیه. قبل از Kafka، ابزارهایی مثل RabbitMQ یا ActiveMQ بودن، ولی این‌ها با رشد سریع داده و نیازهای مقیاس‌پذیری، کم میاوردن. Kafka اومد تا چند تا مشکل اساسی رو حل کنه:

حجم بالای داده:
ـKafka می‌تونه میلیون‌ها پیام در ثانیه رو مدیریت کنه.


سیستم‌های توزیع‌شده:
برای سیستم‌هایی که از چندین سرویس استفاده می‌کنن، یه ابزار مطمئن برای انتقال پیام لازمه.


ذخیره‌سازی پایدار:
برخلاف Kafka ، RabbitMQ پیام‌ها رو برای مدت مشخصی نگه می‌داره.


ری‌پلی دیتا:
اگه یه سرویس دچار مشکل بشه، می‌تونه دوباره پیام‌ها رو از Kafka بخونه.


🛠 ـKafka چطوری کار می‌کنه؟
ـKafka یه ساختار ساده ولی قوی داره:

ـProducers:
وظیفه تولید و ارسال پیام‌ها رو دارن. این پیام‌ها می‌تونن هر چیزی باشن، مثل داده‌های تراکنش، لاگ سیستم، یا حتی کلیک‌های کاربران تو سایت.


ـTopics:
پیام‌ها توی تاپیک‌ها ذخیره می‌شن. هر تاپیک می‌تونه مربوط به یه بخش از سیستم باشه (مثلاً تاپیک سفارشات، تاپیک کاربران).


ـConsumers:
وظیفه خوندن پیام‌ها از تاپیک‌ها رو دارن.


ـBrokers:
ـ Kafka روی چندین ماشین یا سرور (به نام Broker) اجرا می‌شه و وظیفه توزیع پیام‌ها بین این سرورها رو داره.


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

1⃣ مقیاس‌پذیری بالا
ـKafka می‌تونه به راحتی برای سیستم‌های بزرگ استفاده بشه. مثلاً اگه یه میلیارد تراکنش در روز داری، Kafka همچنان جواب می‌ده.

2⃣ ـFault Tolerance
به خاطر معماری توزیع‌شده، اگه یکی از سرورها (Broker) از کار بیفته، بقیه سرورها همچنان کار می‌کنن.

3⃣ـMessage Replay
مصرف‌کننده‌ها می‌تونن پیام‌ها رو هر وقت لازم شد دوباره بخونن. مثلاً اگه سیستمت یه مشکل داشت و نیاز به بازپردازش داده بود.

4⃣ پشتیبانی از استریمینگ
می‌تونی داده‌ها رو به صورت Real-time پردازش کنی. ابزار Kafka Streams دقیقاً برای این کار طراحی شده.

جمع بندی
ـKafka یه ابزار قدرتمنده که بیشتر تو سیستم‌های توزیع‌شده و پرحجم استفاده می‌شه. اگه قراره روی پروژه‌ای کار کنی که نیاز به پردازش Real-time یا انتقال حجم بالای داده داره، Kafka یکی از بهترین انتخاب‌هاست.

#programming #Kafka


🔆 CHANNEL | GROUP
👍34🔥10👏5
احتمال میدم تو اپدیت های بعدی انسان دود ششم اضافه شه
5👀5
ـArchitecture Design چیه؟ 🏗️

اگه  با برنامه‌نویسی آشنا باشی، احتمالش زیاده که اسم Design Patterns به گوشت خورده باشه. Design pattern  ها راه‌حل‌های هستن برای مشکلات تکراری که موقع کدنویسی باهاشون مواجه می‌شی. اما وقتی پروژه‌ها بزرگ‌تر می‌شن، علاوه بر Design Patterns ها به  Architecture Design هم نیاز پیدا میکنیم.

چرا Architecture Design مهمه؟ 🤔
وقتی نرم‌افزارها تو دهه‌های ۸۰ و ۹۰ بزرگ‌تر شدن، پیچیدگی سیستم‌ها هم بیشتر شد. اون موقع بیشتر برنامه‌ها Monolithic بودن؛ یعنی همه چیز تو یه کدبیس جمع شده بود. این نوع معماری برای پروژه هایی مناسبه که پیچیدگی زیادی ندارن و نیاز به سرویس های مختلف نیست، ولی وقتی پروژه بزرگ می‌شه، دردسرایی مثل سختی توسعه، نگهداری، و مقیاس‌پذیری رو به همراه داره.
اینجاست که Architecture Design بهت کمک می‌کنه تا یه طرح کلی برای سیستم داشته باشی که هم کارا باشه، هم بتونه چالشایی مثل رشد کاربرها، خطاها، و نیاز به تغییرات رو هندل کنه.

فرق Design Patterns و Architecture Design

ـDesign Patterns 🧩
ـDesign Patterns یعنی یه سری راه‌حل‌های آماده و تست‌شده که برای مشکلات تکراری توی برنامه‌نویسی ارائه شدن. این الگوها تو یه سری موقعیت خاص خیلی خوب جواب می‌دن و باعث می‌شن که کدی که می‌نویسی خواناتر، قابل‌نگهداری‌تر، و استانداردتر بشه. مثلا:

ـSingleton:
فقط یه نمونه از یه کلاس ساخته بشه.


ـFactory:
ساخت اشیا بدون اینکه کلاس دقیق‌شونو مشخص کنی.


و...

ـ Architecture Design 🏗
ـArchitecture Design در واقع به طراحی ساختار کلی سیستم اشاره داره. یعنی شما باید از دیدی وسیع‌تر به پروژه نگاه کنی و تصمیم بگیری که چه نوع معماری به درد پروژه می‌خوره. هدف اینه که سیستمت بتونه نیازهای آینده رو برآورده کنه و در برابر چالش‌هایی مثل مقیاس‌پذیری، نگهداری و توسعه مقاوم باشه.

برای معماری نرم‌افزار معماری های مختلفی وجود داره. مثلا:

ـEvent-Driven Architecture:
این نوع معماری از Eventها برای ارتباط بین اجزای مختلف سیستم استفاده می‌کنه. اینطوری سیستم‌های پیچیده و بزرگ می‌تونن به راحتی به هم متصل بشن و با کمترین تغییرات تو اجزا، همچنان عملکرد خوبی داشته باشن.

ـMicroservices:
در این معماری، سیستم به بخش‌های کوچکتر و مستقل تقسیم میشه که هر کدوم می‌تونن به طور جداگانه کار کنن. این باعث میشه که مقیاس‌پذیری و نگهداری سیستم خیلی راحت‌تر بشه.

یکسری ابزارهای واسه Architecture Design

ـUML Diagrams: واسه طراحی ساختار.
ـC4 Model: برای نمایش لایه‌های مختلف.
ـEvent Storming: برای فهمیدن ارتباطات بین اجزا.

جمع‌بندی
فهمیدیم Architecture Design دید کلی بهت می‌ده و کمک می‌کنه پروژه‌های بزرگ رو راحت‌تر مدیریت کنی. اینجوری هم از مشکلات و هزینه‌های اضافه جلوگیری می‌کنی، هم نرم‌افزارت بهتر جواب می‌ده.

#programming #design


🔆 CHANNEL | GROUP
🔥12👍32
https://t.iss.one/geek_engineers

یکی از کانال هایی که محتواش عالیه ولی اصلا حمایت نمیشه 😕
پیشنهاد میکنم حتما یه سری بزنید واقعا کانال خفنیه و خودم کلی چیز یاد گرفتم ازش
🔥5
لینکدین عالیه حتما نصب کنید

🔆 CHANNEL | GROUP
🤣17👍3
FastAPI.Modern.Python.Web.Development.pdf
24 MB
کتاب Fastapi واقعا یکی از بهترین منابع برای یادگیری Fastapi هست.
اگه دوست دارید fastapi یادبگیرید حتما بخونیدش

#کتاب


🔆 CHANNEL | GROUP
🔥63👍2
میخوام یه سوال ازتون بپرسم، بدون اینکه جوابشو سرچ کنید بگید چرا.

اگه برید یه حلقه for بزنید که ۱۰۰,۰۰۰ بار یه متن رو پرینت کنه (یه بار توی golang یه بارم توی python)
و تست سرعت بگیرید.
میبینید پایتون ۱۰ الا ۱۷ ثانیه اجراش میکنع
گولنگ ۵۰ ثانیه الا ۱ دقیقه

بنظرتون دلیلش چیه؟ چرا بااینکه go کامپایلریه و خیلی سریعه انقدر کند تره نسبت به پایتون توی این مورد؟ 🤔

#question


🔆 CHANNEL | GROUP
👍4😁3👎2
Ninja Learn | نینجا لرن
میخوام یه سوال ازتون بپرسم، بدون اینکه جوابشو سرچ کنید بگید چرا. اگه برید یه حلقه for بزنید که ۱۰۰,۰۰۰ بار یه متن رو پرینت کنه (یه بار توی golang یه بارم توی python) و تست سرعت بگیرید. میبینید پایتون ۱۰ الا ۱۷ ثانیه اجراش میکنع گولنگ ۵۰ ثانیه الا ۱ دقیقه…
چرا پایتون تو اینجا سریع‌تر از گولنگه؟ 🤔

1⃣ ماجرای سیستم کال و بافرینگ
وقتی یه متن رو چاپ می‌کنی، اون متن باید از برنامه به خروجی (مثل ترمینال) فرستاده بشه. این کار با چیزی به اسم System Call انجام می‌شه، که مثل زنگ زدن به سیستم‌عامله و می‌گی: "هی، این متن رو بگیر و به خروجی بفرست".

گولنگ:
هر بار که fmt.Println رو صدا می‌زنی، داده فوراً از برنامه به بافر stdout سیستم‌عامل فرستاده می‌شه. یعنی ۱۰۰,۰۰۰ بار fmt.Println یعنی ۱۰۰,۰۰۰ تا تماس جداگانه با سیستم‌عامل

پایتون:
قبل از اینکه داده‌ها رو به stdout بفرسته، خروجی‌ها رو تو یه بافر داخلی نگه می‌داره. بعد وقتی بافر پر شد یا چاپ به انتهای خط رسید (به کمک line buffering)، داده‌ها رو یه‌جا به stdout می‌فرسته. یعنی تعداد تماس‌ها با سیستم‌عامل خیلی کم‌تر می‌شه (مثلاً به جای ۱۰۰,۰۰۰ بار، فقط ۱۰ بار).

2⃣ ـstdout خودش بافرینگ داره، پس چرا مشکل داریم؟

درسته که stdout (که به سیستم‌عامل تعلق داره) خودش بافرینگ داره، ولی این بافر برای هر تماس جداگانه کار می‌کنه.
مشکل اصلی اینه که وقتی گولنگ مستقیم داده‌ها رو به stdout می‌فرسته، تعداد تماس‌ها (System Calls) خیلی زیاده و این تماس‌های متعدد باعث کاهش سرعت می‌شه.
پایتون با بافر داخلی خودش این مشکل رو حل می‌کنه و تماس‌ها رو کم می‌کنه.

3⃣ چطور گولنگ رو بهینه کنیم؟
اگه بخوای گولنگ هم مثل پایتون سریع بشه، باید بافرینگ رو دستی پیاده‌سازی کنی. مثلاً با bufio.Writer:
package main

import (
"bufio"
"os"
)

func main() {
writer := bufio.NewWriter(os.Stdout) // بافر کردن خروجی
for i := 0; i < 100000; i++ {
writer.WriteString("Hello, world!\n")
}
writer.Flush() // ارسال بافر به خروجی
}

اینجا bufio.Writer خروجی‌ها رو توی یه بافر داخلی نگه می‌داره و فقط وقتی که بافر پر شد یا خودت Flush کردی، داده‌ها رو به stdout سیستم‌عامل می‌فرسته.

4⃣ نتیجه

گولنگ:
هر بار با fmt.Println یه تماس به سیستم‌عامل می‌فرسته، که هزینه‌ی زیادی داره.


پایتون:
با بافر داخلی خودش، تماس‌ها رو کم می‌کنه و همین باعث می‌شه در چاپ‌های متوالی سریع‌تر باشه.


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

🔆 CHANNEL | GROUP
👍14🔥64
نظرتون چیه درمورد Golang هم پست بزاریم؟
👍50👎15👀2
Ninja Learn | نینجا لرن
نظرتون چیه درمورد Golang هم پست بزاریم؟
مثل اینکه از go خوشتون اومده😂
👍16👎74😁3🆒1
خب خب Go چیه و چرا؟

گو (Go)، یا همون Golang که لوگوش از حیوان gopher الهام گرفته شده، یه زبان برنامه‌نویسی مدرنه که گوگل سال 2009 معرفی کرد.

چرا Go ساخته شد؟ 🤔
تو پروژه‌های بزرگ، زبان‌هایی مثل C++ و Java، با وجود قدرت زیاد، به دلیل پیچیدگی زیاد و سرعت پایین توسعه، دردسرساز بودن. Go این مشکلات رو با ترکیب سادگی و سرعت حل کرد:

1⃣ سینتکس ساده:
کدها راحت‌تر نوشته و خونده می‌شن.


2⃣ عملکرد بالا:
ـ Go مثل C مستقیماً به کد ماشین کامپایل می‌شه، برای همین سریع اجرا می‌شه.


3⃣ مدیریت حافظه خودکار:
با استفاده از Garbage Collection، مدیریت حافظه ساده و بدون دخالت مستقیم برنامه‌نویس انجام می‌شه.


4⃣ ابزارهای مدرن:
مدیریت همزمانی، تست، و مدیریت حافظه به شکل مدرنی طراحی شده.


5⃣ مناسب برای پروژه‌هایی با مقیاس بالا:
ـGo در ابتدا برای تسهیل توسعه پروژه‌های بزرگ و زیرساختی گوگل طراحی شد.



ویژگی‌های مهم Go 🧩

1⃣ سادگی
ـGo از همون اول برای ساده بودن طراحی شد. توش خبری از ارثبری پیچیده یا کلی مفهوم سنگین نیست. این یعنی یادگیری و استفاده ازش راحت‌تره ( البته نه خیلی ساده 😅).

2⃣ مدیریت همزمانی به بهترین شکل
ـGo با Goroutines، اجرای همزمان رو خیلی سبک و سریع کرده. این Goroutines نسبت به Threadها خیلییی کم‌هزینه‌تر هستن و فقط چند کیلوبایت حافظه مصرف می‌کنن. مثلا می‌تونی صدها کار همزمان انجام بدی بدون اینکه سرور زیر بار بره.
3⃣ کتابخانه های قدرت مند
کتابخونه استاندارد Go بیشتر چیزایی که برای ساختن یه برنامه نیاز داری رو داره، از کار با شبکه گرفته تا رمزنگاری و فایل. این کتابخونه‌ها به شکل بهینه طراحی شدن تا بدون نیاز به ابزارهای خارجی، بسیاری از نیازهای شما رو برطرف کنن.
4⃣ ـCross-Platform بودن
کد Go رو یه بار کامپایل می‌کنی و روی سیستم‌عامل‌های مختلف می‌تونی اجراش کنی. این قابلیت به خاطر تولید فایل باینری مستقل فراهم شده که نیازی به runtime مثل JVM یا Python Interpreter نداره.
5⃣ سازگاری با معماری Microservices
ـGo به خاطر سبک و سریع بودنش، برای ساخت Microservices عالیه. سرویس‌های کوچیک و مستقلی که Go مدیریت‌شون رو خیلی راحت کرده.
6⃣ مدیریت Dependency‌ها با Go Modules
ـGo ابزار Go Modules رو داره که مدیریت وابستگی‌ها رو ساده و مدرن کرده. این ابزار امکان تعریف ورژن ها و مدیریت کتابخانه‌ها رو خیلی راحت‌تر از روش‌های سنتی میکنه.
کجاها از Go استفاده می‌شه؟
ـBackend
ـDevOps
ـCloud
ـDistribution systems
ـBloc
kchain
و...

نمونه کد Go 💻

یه مثال از ارسال درخواست HTTP همزمان با استفاده از Goroutines:
package main

import (
"fmt"
"net/http"
)

func fetch(url string) {
resp, err := http.Get(url)
if err != nil {
fmt.Println(url, "Error:", err)
return
}
defer resp.Body.Close()
fmt.Println(url, resp.Status)
}

func main() {
urls := []string{"https://example.com", "https://google.com", "https://golang.org"}

for _, url := range urls {
go fetch(url)
}

fmt.Scanln() // برای جلوگیری از بسته شدن برنامه



#go #برنامه_نویسی


🔆 CHANNEL | GROUP
👍84
Learning Go 2024 494pages.pdf
4.7 MB
این کتابم برای یادگیریش پیشنهاد میدم

#کتاب #go


🔆 CHANNEL | GROUP
10
این گروه رو برای بچه های FastAPI زدم
هرکس دوست داشت جوین بشه.

https://t.iss.one/fastapiir

🔆 CHANNEL | GROUP
👍9
Ninja Learn | نینجا لرن pinned «این گروه رو برای بچه های FastAPI زدم هرکس دوست داشت جوین بشه. https://t.iss.one/fastapiir 🔆 CHANNEL | GROUP»
Ninja Learn | نینجا لرن
این گروه رو برای بچه های FastAPI زدم هرکس دوست داشت جوین بشه. https://t.iss.one/fastapiir 🔆 CHANNEL | GROUP
دوستان سعی کنید این کامیونیتی رو بزرگ کنید چون واقعا کامیونیتی fastapi فارسی خیلی کوچیکه، عملا صفر هست 😕
11👎2
پست بعدی؟
5👍4
خودمونیما
عجب خانواده باحالی شدیم 🙃
واقعا ازتون خیلی انرژی میگیرم ❤️
27