داکر چیست و چه ساختاری داره؟
(پارت اول)
داکر دقیقا چیه؟
داکر یه پلتفرمه که به شما کمک میکنه برنامههاتون رو به شکل کانتینر (Container) اجرا کنید. حالا کانتینر چیه؟! کانتینر یه محیط بسته و ایزوله شدهست که برنامه شما رو با همه چیزایی که نیاز داره (مثل کتابخانهها و تنظیمات خاص) تو خودش نگه میداره. این یعنی برنامهتون بدون دردسر از یه سیستم به سیستم دیگه منتقل میشه و اجرا میشه، بدون اینکه وابسته به تنظیمات و نرمافزارهای اون سیستم خاص باشه. البته که نرم افزار هایی که روی کرنل ویندوز کانتینر میشن روی تمامی سیستم عامل های ویندوز قابلیت اجرا داشته و اونایی هم که روی لینوکس کانتینر میشن ، روی توزیع های لینوکس قابلیت اجرا دارن
چرا؟
چون کانتینرهای داکر به سیستمعاملی که روی اون اجرا میشن وابسته هستن، به این معنی که کانتینرهای ویندوز فقط روی هسته ویندوز و کانتینرهای لینوکس فقط روی هسته لینوکس اجرا میشن.
چرا داکر اینقدر پرطرفداره؟
فرض کنید برنامهتون توی کامپیوتر خودتون عالی کار میکنه، ولی وقتی اون رو روی سرور یا یه سیستم دیگه اجرا میکنید، با مشکلاتی مواجه میشه. دلیلش اینه که شاید اون سیستم یه کتابخونه یا تنظیم خاصی که برنامه نیاز داره، نداشته باشه. اینجا داکر به دادتون میرسه، چون همه چیز رو توی یه بسته (همون کانتینر) جمع میکنه و تضمین میکنه که برنامه همونطوری که توی کامپیوتر شما اجرا میشه، روی هر سیستم دیگهای هم به همون شکل کار کنه.
داکر چند تا مزیت بزرگ داره:
قابل حمل بودن: کانتینرها رو میتونید به راحتی از یه سیستم به سیستم دیگه منتقل کنید و مطمئن باشید که به همون شکل کار میکنن.
ایزوله بودن: هر کانتینر به شکل مستقل از بقیه کانتینرها کار میکنه، یعنی اگه توی یکی از کانتینرها مشکلی پیش بیاد، بقیه کانتینرها تحت تأثیر قرار نمیگیرن.
سبکی و سرعت: کانتینرها نسبت به ماشینهای مجازی خیلی سبکتر و سریعتر هستن، چون نیازی به راهاندازی سیستمعامل کامل ندارن؛ فقط چیزایی که برنامه نیاز داره رو فراهم میکنن.
کانتینر بهتره یا ماشین مجازی؟
هر دوشون راههایی برای ایزوله کردن برنامهها و سرویسها هستن، ولی کانتینرها سبکتر و سریعتر هستن. ماشینهای مجازی (مثل VMware یا VirtualBox) کل سیستمعامل رو شبیهسازی میکنن، ولی کانتینرها فقط چیزهایی که برنامه نیاز داره رو فراهم میکنن. برای همین استفاده از کانتینرها به منابع کمتری نیاز داره و سریعتر راهاندازی میشن.
مقایسهای سادهتر
فرض کنید یه مجتمع مسکونی داریم:
ماشین مجازی شبیه اینه که هر واحد مسکونی (هر برنامه) یه برق، آب، و خدمات شهری جداگانه داشته باشه. هر واحد، مستقل و کامله، ولی هزینهها و منابع بیشتری مصرف میکنه.
کانتینر شبیه اینه که همه واحدهای مسکونی (برنامهها) از همون برق و آب شهری استفاده کنن، ولی دیوار و حریم خصوصی خودشون رو دارن. اینطوری، منابع مشترک هستن و مصرف کلی کمتره.
پس چرا کانتینرها سریعتر و سبکترن؟
چون در کانتینرها نیازی به سیستمعامل جداگانه برای هر برنامه نیست، فقط همون کتابخانهها و فایلهایی که برنامه نیاز داره در کانتینر قرار میگیره. به همین دلیل:
مصرف منابع کمتره: چون به حافظه و پردازنده کمتری نیاز داریم.
زمان راهاندازی سریعتره: چون سیستمعامل جدیدی راهاندازی نمیشه؛ فقط محیط برنامه اجرا میشه.
قابلیت مقیاسپذیری بیشتری داره: چون کانتینرها سریعتر ساخته و اجرا میشن، میتونید به راحتی تعداد زیادی کانتینر رو روی یه سرور ایجاد و مدیریت کنید.
مثالهای کاربردی
اگر بخواید یه وبسرور (مثل Nginx) رو روی یه سرور اجرا کنید، با کانتینر فقط همون Nginx و فایلهای پیکربندی موردنیازش توی یه محیط ایزوله قرار میگیرن.
اما اگه از ماشین مجازی استفاده کنید، علاوه بر Nginx باید یه سیستمعامل (مثل اوبونتو یا CentOS) هم داشته باشید که مصرف منابع رو بیشتر میکنه.
این ساختار سبک کانتینرها، دلیل اصلی محبوبیت داکره و اینه که شرکتها میتونن برنامههاشون رو سریعتر، با هزینه کمتر و کارایی بیشتر توی محیطهای ابری یا سرورهای محلی اجرا کنن.
چرا باید از داکر استفاده کنم؟
اگه نیاز دارید برنامهتون رو روی سیستمهای مختلف (مثل توسعه، تست، و تولید) به شکل یکسان اجرا کنید، یا اگه برنامههای زیادی دارید که میخواید به شکل مستقل از هم کار کنن، داکر یه ابزار عالیه. مخصوصاً توی محیطهایی که نیاز به مقیاسپذیری و سرعت بالا دارن، استفاده از داکر خیلی رایجه.
این پست قرار هست چندین پارت داشته باشه ، تا حد امکان هم عامیانه توضیح میدم ، جدای از پست آموزشی ، این برای خودمم یجور مرور به حساب میاد ، پس اگه علاقه مند هستید یا حوصله دارید ، مطالعه ی محتوای این سلسله پستها میتونه به دردتون بخوره!
(پارت اول)
داکر دقیقا چیه؟
داکر یه پلتفرمه که به شما کمک میکنه برنامههاتون رو به شکل کانتینر (Container) اجرا کنید. حالا کانتینر چیه؟! کانتینر یه محیط بسته و ایزوله شدهست که برنامه شما رو با همه چیزایی که نیاز داره (مثل کتابخانهها و تنظیمات خاص) تو خودش نگه میداره. این یعنی برنامهتون بدون دردسر از یه سیستم به سیستم دیگه منتقل میشه و اجرا میشه، بدون اینکه وابسته به تنظیمات و نرمافزارهای اون سیستم خاص باشه. البته که نرم افزار هایی که روی کرنل ویندوز کانتینر میشن روی تمامی سیستم عامل های ویندوز قابلیت اجرا داشته و اونایی هم که روی لینوکس کانتینر میشن ، روی توزیع های لینوکس قابلیت اجرا دارن
چرا؟
چون کانتینرهای داکر به سیستمعاملی که روی اون اجرا میشن وابسته هستن، به این معنی که کانتینرهای ویندوز فقط روی هسته ویندوز و کانتینرهای لینوکس فقط روی هسته لینوکس اجرا میشن.
چرا داکر اینقدر پرطرفداره؟
فرض کنید برنامهتون توی کامپیوتر خودتون عالی کار میکنه، ولی وقتی اون رو روی سرور یا یه سیستم دیگه اجرا میکنید، با مشکلاتی مواجه میشه. دلیلش اینه که شاید اون سیستم یه کتابخونه یا تنظیم خاصی که برنامه نیاز داره، نداشته باشه. اینجا داکر به دادتون میرسه، چون همه چیز رو توی یه بسته (همون کانتینر) جمع میکنه و تضمین میکنه که برنامه همونطوری که توی کامپیوتر شما اجرا میشه، روی هر سیستم دیگهای هم به همون شکل کار کنه.
داکر چند تا مزیت بزرگ داره:
قابل حمل بودن: کانتینرها رو میتونید به راحتی از یه سیستم به سیستم دیگه منتقل کنید و مطمئن باشید که به همون شکل کار میکنن.
ایزوله بودن: هر کانتینر به شکل مستقل از بقیه کانتینرها کار میکنه، یعنی اگه توی یکی از کانتینرها مشکلی پیش بیاد، بقیه کانتینرها تحت تأثیر قرار نمیگیرن.
سبکی و سرعت: کانتینرها نسبت به ماشینهای مجازی خیلی سبکتر و سریعتر هستن، چون نیازی به راهاندازی سیستمعامل کامل ندارن؛ فقط چیزایی که برنامه نیاز داره رو فراهم میکنن.
کانتینر بهتره یا ماشین مجازی؟
هر دوشون راههایی برای ایزوله کردن برنامهها و سرویسها هستن، ولی کانتینرها سبکتر و سریعتر هستن. ماشینهای مجازی (مثل VMware یا VirtualBox) کل سیستمعامل رو شبیهسازی میکنن، ولی کانتینرها فقط چیزهایی که برنامه نیاز داره رو فراهم میکنن. برای همین استفاده از کانتینرها به منابع کمتری نیاز داره و سریعتر راهاندازی میشن.
مقایسهای سادهتر
فرض کنید یه مجتمع مسکونی داریم:
ماشین مجازی شبیه اینه که هر واحد مسکونی (هر برنامه) یه برق، آب، و خدمات شهری جداگانه داشته باشه. هر واحد، مستقل و کامله، ولی هزینهها و منابع بیشتری مصرف میکنه.
کانتینر شبیه اینه که همه واحدهای مسکونی (برنامهها) از همون برق و آب شهری استفاده کنن، ولی دیوار و حریم خصوصی خودشون رو دارن. اینطوری، منابع مشترک هستن و مصرف کلی کمتره.
پس چرا کانتینرها سریعتر و سبکترن؟
چون در کانتینرها نیازی به سیستمعامل جداگانه برای هر برنامه نیست، فقط همون کتابخانهها و فایلهایی که برنامه نیاز داره در کانتینر قرار میگیره. به همین دلیل:
مصرف منابع کمتره: چون به حافظه و پردازنده کمتری نیاز داریم.
زمان راهاندازی سریعتره: چون سیستمعامل جدیدی راهاندازی نمیشه؛ فقط محیط برنامه اجرا میشه.
قابلیت مقیاسپذیری بیشتری داره: چون کانتینرها سریعتر ساخته و اجرا میشن، میتونید به راحتی تعداد زیادی کانتینر رو روی یه سرور ایجاد و مدیریت کنید.
مثالهای کاربردی
اگر بخواید یه وبسرور (مثل Nginx) رو روی یه سرور اجرا کنید، با کانتینر فقط همون Nginx و فایلهای پیکربندی موردنیازش توی یه محیط ایزوله قرار میگیرن.
اما اگه از ماشین مجازی استفاده کنید، علاوه بر Nginx باید یه سیستمعامل (مثل اوبونتو یا CentOS) هم داشته باشید که مصرف منابع رو بیشتر میکنه.
این ساختار سبک کانتینرها، دلیل اصلی محبوبیت داکره و اینه که شرکتها میتونن برنامههاشون رو سریعتر، با هزینه کمتر و کارایی بیشتر توی محیطهای ابری یا سرورهای محلی اجرا کنن.
چرا باید از داکر استفاده کنم؟
اگه نیاز دارید برنامهتون رو روی سیستمهای مختلف (مثل توسعه، تست، و تولید) به شکل یکسان اجرا کنید، یا اگه برنامههای زیادی دارید که میخواید به شکل مستقل از هم کار کنن، داکر یه ابزار عالیه. مخصوصاً توی محیطهایی که نیاز به مقیاسپذیری و سرعت بالا دارن، استفاده از داکر خیلی رایجه.
Medium
DOCKER EXPLAINED
1 — INTRODUCTION :
❤🔥5❤1👍1
This media is not supported in your browser
VIEW IN TELEGRAM
مقایسه درآمد جف بزوس با کارگر کمپانیش تو هر ثانیهای که از مکالمشون داره میگذره.
❤🔥3👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Cybersecurity doesn’t have to be hard…
You might feel intimidated by how much there is to learn.
You might feel intimidated by how much there is to learn.
❤🔥3
آیا میشه به سرور لینوکسی ریموت دسکتاپ یا RDP زد؟
این امکان وجود دارد بتونیم به یک سرور لینوکسی که از پکیج دسکتاپ برخوردار هست ، ریموت دسکتاپ بزنیم ، خیلی حرکت عجیبی هم نیست اما خب دونستنش خالی از لطف نیست براتون .
فقط کافیه خط به خط کد های زیر رو روی سرور لینوکسی خودتون اجرا کنید :
و تمام ، حالا میتونید با باز کردن برنامه ی Remote Desktop یا mstsc روی ویندوز خودتون ، به سرور لینوکسی ریموت دسکتاپ بزنید .
نکته ی مهم : اگر به صورت لوکال به سرور لینوکسی متصل هستید ، حتما و حتما لاگ اوت یا Log Out کنید ، بعد تلاش کنید که ریموت دسکتاپ بزنید به سیستم ، چرا چون اگر یک Session فعال روی سرور لینوکسی داشته باشید ، امکان ریموت دسکتاپ زدن را به شما نمیدهد.
خیلی کار عجیبی نیست ، اما خب آپشن های دیگری هم برای اتصال به محیط دسکتاپ سرور لینوکسی وجود دارد ، ولی این گزینه جزو راحت ترین گزینه های موجود هست که با همین چند خط کد میتونید به سادگی به محیط سرور دلخواهتون وصل بشید
راه حل دیگه هم استفاده از VNC (مثلاً TigerVNC یا RealVNC)
مزایا: کنترل کامل بر دسکتاپ با کیفیت تصویر بهتر نسبت به xrdp در برخی موارد.
معایب: نیاز به نصب سرور VNC روی کالی و کلاینت VNC در دستگاه شما، و همچنین احتمالاً سرعت کمتر در اتصالات با پهنای باند محدود.
در واقع VNC یکی از رایجترین راهها برای اتصال به دسکتاپ گرافیکی از راه دور است و میتوانید از برنامههای مختلف VNC (مانند RealVNC یا TigerVNC) استفاده کنید. برای امنیت بیشتر، معمولاً اتصال VNC روی SSH تونل میشود.
این امکان وجود دارد بتونیم به یک سرور لینوکسی که از پکیج دسکتاپ برخوردار هست ، ریموت دسکتاپ بزنیم ، خیلی حرکت عجیبی هم نیست اما خب دونستنش خالی از لطف نیست براتون .
فقط کافیه خط به خط کد های زیر رو روی سرور لینوکسی خودتون اجرا کنید :
sudo apt update
sudo apt install xrdp -y
sudo systemctl start xrdp
sudo systemctl start xrdp-sesman
sudo update-rc.d xrdp enable
و تمام ، حالا میتونید با باز کردن برنامه ی Remote Desktop یا mstsc روی ویندوز خودتون ، به سرور لینوکسی ریموت دسکتاپ بزنید .
نکته ی مهم : اگر به صورت لوکال به سرور لینوکسی متصل هستید ، حتما و حتما لاگ اوت یا Log Out کنید ، بعد تلاش کنید که ریموت دسکتاپ بزنید به سیستم ، چرا چون اگر یک Session فعال روی سرور لینوکسی داشته باشید ، امکان ریموت دسکتاپ زدن را به شما نمیدهد.
خیلی کار عجیبی نیست ، اما خب آپشن های دیگری هم برای اتصال به محیط دسکتاپ سرور لینوکسی وجود دارد ، ولی این گزینه جزو راحت ترین گزینه های موجود هست که با همین چند خط کد میتونید به سادگی به محیط سرور دلخواهتون وصل بشید
راه حل دیگه هم استفاده از VNC (مثلاً TigerVNC یا RealVNC)
مزایا: کنترل کامل بر دسکتاپ با کیفیت تصویر بهتر نسبت به xrdp در برخی موارد.
معایب: نیاز به نصب سرور VNC روی کالی و کلاینت VNC در دستگاه شما، و همچنین احتمالاً سرعت کمتر در اتصالات با پهنای باند محدود.
در واقع VNC یکی از رایجترین راهها برای اتصال به دسکتاپ گرافیکی از راه دور است و میتوانید از برنامههای مختلف VNC (مانند RealVNC یا TigerVNC) استفاده کنید. برای امنیت بیشتر، معمولاً اتصال VNC روی SSH تونل میشود.
YouTube
How to Setup Remote Desktop in Kali Linux Using XRDP | Kali Linux 2021.2
In this video tutorial, I am gonna show how to setup remote desktop in Kali Linux using XRDP, so that you can use your windows remote desktop to access Kali desktop from anywhere. XRDP is an open-source implementation of the Microsoft Remote Desktop Protocol…
❤🔥3❤1👍1
This media is not supported in your browser
VIEW IN TELEGRAM
The source code of Windows’ troubleshooting program has leaked.
❤🔥3👍1
دکوراتورها در پایتون ابزارهایی هستند که به ما امکان میدهند رفتار توابع را بدون تغییر در کد اصلی آنها گسترش دهیم.
🧩 دکوراتورها با افزودن قابلیتهای جدید به توابع، کد را بهینه میکنند و از تکرار جلوگیری میکنند. این امر به خوانایی و نگهداری بهتر کد کمک میکند.
🔄 استفاده از دکوراتورها به ما این امکان را میدهد که بدون تغییر در توابع اصلی، قابلیتهای جدیدی اضافه کنیم و کدها انعطافپذیرتر شوند.
🛠️ ساختار دکوراتورها به ما اجازه میدهد قبل و بعد از اجرای توابع اصلی، کارهایی انجام دهیم؛ این ویژگی برای مواردی مانند لاگکردن یا بررسی ورودیها مفید است.
⚠️ یکی از چالشهای استفاده از دکوراتورها این است که ممکن است نام توابع اصلی در زمان دیباگ کردن قابل شناسایی نباشد و به مشکلاتی در شناسایی خطاها منجر شود.
📈 استفاده از کتابخانه "functools" میتواند به حفظ هویت اصلی توابع کمک کند و از مشکلات اورراید جلوگیری کند، و امنیت بیشتری فراهم آورد.
🤔 درک صحیح از دکوراتورها و نحوهی کارکرد آنها نیاز به زمان و تمرین دارد؛ این مفهوم میتواند در ابتدا گیجکننده باشد، اما با تمرین به راحتی قابل فهم میشود.
💡 استفاده معقول از دکوراتورها میتواند به بهبود کیفیت کد کمک کند، اما افراط در استفاده ممکن است کد را پیچیده کند و باید در نظر گرفت تا کدها قابل نگهداری و توسعه باقی بمانند.
https://youtu.be/CuCudHMIPi4?si=_g-sZfyso-vpl_Qe
🧩 دکوراتورها با افزودن قابلیتهای جدید به توابع، کد را بهینه میکنند و از تکرار جلوگیری میکنند. این امر به خوانایی و نگهداری بهتر کد کمک میکند.
🔄 استفاده از دکوراتورها به ما این امکان را میدهد که بدون تغییر در توابع اصلی، قابلیتهای جدیدی اضافه کنیم و کدها انعطافپذیرتر شوند.
🛠️ ساختار دکوراتورها به ما اجازه میدهد قبل و بعد از اجرای توابع اصلی، کارهایی انجام دهیم؛ این ویژگی برای مواردی مانند لاگکردن یا بررسی ورودیها مفید است.
⚠️ یکی از چالشهای استفاده از دکوراتورها این است که ممکن است نام توابع اصلی در زمان دیباگ کردن قابل شناسایی نباشد و به مشکلاتی در شناسایی خطاها منجر شود.
📈 استفاده از کتابخانه "functools" میتواند به حفظ هویت اصلی توابع کمک کند و از مشکلات اورراید جلوگیری کند، و امنیت بیشتری فراهم آورد.
🤔 درک صحیح از دکوراتورها و نحوهی کارکرد آنها نیاز به زمان و تمرین دارد؛ این مفهوم میتواند در ابتدا گیجکننده باشد، اما با تمرین به راحتی قابل فهم میشود.
💡 استفاده معقول از دکوراتورها میتواند به بهبود کیفیت کد کمک کند، اما افراط در استفاده ممکن است کد را پیچیده کند و باید در نظر گرفت تا کدها قابل نگهداری و توسعه باقی بمانند.
https://youtu.be/CuCudHMIPi4?si=_g-sZfyso-vpl_Qe
YouTube
دکوریتور در پایتون | Decorator in Python
من در شبکه های اجتماعی دیگه:
اینستاگرام
https://instagram.com/am.mthri
کانال تلگرام
https://news.1rj.ru/str/mthri_tips
توییتر
https://twitter.com/a_mthri
وبلاگ
https://iamamir.ir
اینستاگرام
https://instagram.com/am.mthri
کانال تلگرام
https://news.1rj.ru/str/mthri_tips
توییتر
https://twitter.com/a_mthri
وبلاگ
https://iamamir.ir
👍5❤🔥2
چگونه پوت های باز روی سرور لینوکسی خود را ببینیم؟
ابزار های زیادی برای این کار وجود دارد ، اما یکی از آن ها:
استفاده از ابزار netstat:
ابتدا باید مطمئن باشیم که پکیج مروبطه بر روی سرور ما نصب باشد :
و بعد از نصب کامند زیر را اجرا میکنیم :
که هر آپشن در اینجا مشخص کننده ی یک ویژگی میباشد :
آپشن t : برای پروتکلهای TCP
آپشن u : برای پروتکل های UDP
آپشن l : برای نمایش پورتهایی که در حالت "LISTEN" هستند (در حال گوش دادن)
آپشن n : برای نمایش آدرسها به صورت عددی که دلبخواه است و میتوانید نزنید .
ابزار های زیادی برای این کار وجود دارد ، اما یکی از آن ها:
استفاده از ابزار netstat:
ابتدا باید مطمئن باشیم که پکیج مروبطه بر روی سرور ما نصب باشد :
apt install net-tools
و بعد از نصب کامند زیر را اجرا میکنیم :
sudo netstat -tuln
که هر آپشن در اینجا مشخص کننده ی یک ویژگی میباشد :
آپشن t : برای پروتکلهای TCP
آپشن u : برای پروتکل های UDP
آپشن l : برای نمایش پورتهایی که در حالت "LISTEN" هستند (در حال گوش دادن)
آپشن n : برای نمایش آدرسها به صورت عددی که دلبخواه است و میتوانید نزنید .
❤🔥4👍2
مفهوم HeartBeat در کلاستر ها !
در مباحث کلاسترینگ (خوشهبندی)، «heartbeat» به سیگنالهایی گفته میشود که بین گرهها (nodes) در کلاستر ارسال میشود تا وضعیت آنلاین یا آفلاین بودن هر گره را مشخص کند. این سیگنالها بهطور منظم و با فاصلههای زمانی کوتاه بین گرهها رد و بدل میشوند. اگر یکی از گرهها به هر دلیلی پاسخ ندهد یا heartbeat خود را ارسال نکند، سیستم متوجه میشود که آن گره دچار مشکل شده و ممکن است عملیات failover یا جابهجایی وظایف آن گره به گرههای دیگر را انجام دهد.
این مکانیزم در سیستمهای حساس و با دسترسپذیری بالا (high availability) بسیار مهم است تا مطمئن شویم که در صورت خرابی یکی از گرهها، سیستم بدون وقفه به کار خود ادامه میدهد.
اگه بخوایم مثالی بزنیم :
فرض کنید در یک بانک بزرگ از سیستم کلاسترینگ استفاده میشود تا خدمات مالی بدون وقفه به مشتریان ارائه شود. این بانک دو سرور دارد که بهطور موازی کار میکنند و اگر یکی از آنها دچار مشکل شود، دیگری بتواند بدون قطع خدمات به کار ادامه دهد. این دو سرور (که به آنها گره یا node گفته میشود) برای این منظور به یکدیگر heartbeat میفرستند.
1. ارسال و دریافت heartbeat:
هر چند ثانیه یک بار، هر یک از گرهها سیگنالی به نام heartbeat برای دیگری ارسال میکند. این سیگنال شامل اطلاعاتی مانند زمان ارسال، وضعیت عملکرد و بار فعلی سیستم است. هدف از ارسال این سیگنال این است که هر گره متوجه شود دیگری فعال است و به درستی کار میکند.
2. شناسایی خرابی گرهها:
فرض کنید گره ۱ بهدلیل بروز یک مشکل سختافزاری یا نرمافزاری از کار میافتد و دیگر قادر به ارسال heartbeat نیست. در این حالت، گره ۲ که سیگنال heartbeat را دریافت نکرده است، متوجه میشود که گره ۱ از دسترس خارج شده است. این شناسایی خرابی معمولاً بر اساس مدت زمانی که سیگنال heartbeat قطع شده است انجام میشود. اگر چند سیگنال پشت سر هم دریافت نشود (برای مثال، پس از ۳ ثانیه)، گره ۲ نتیجه میگیرد که گره ۱ دچار مشکل شده است.
3. اجرای failover یا جابهجایی وظایف:
با تشخیص خرابی گره ۱، گره ۲ فوراً وارد عمل میشود و وظایف گره از کار افتاده را به عهده میگیرد. به این فرآیند «failover» گفته میشود. در این مرحله، گره ۲ از دستورات و اطلاعاتی که برای حالت پشتیبان آماده کرده بود، استفاده میکند تا بدون هیچ قطعی، سرویسها و اطلاعات مورد نیاز کاربران را ارائه دهد.
4. بازگرداندن سیستم به حالت اصلی:
پس از تعمیر گره ۱ و بازگشت آن به حالت عادی، دو گره دوباره به تبادل heartbeat ادامه میدهند. بسته به نوع تنظیمات سیستم، ممکن است گره ۲ وظایف را به گره ۱ بازگرداند یا بهعنوان پشتیبان باقی بماند تا در صورت خرابی مجدد، باز هم بتواند وظایف را به عهده بگیرد.
در مباحث کلاسترینگ (خوشهبندی)، «heartbeat» به سیگنالهایی گفته میشود که بین گرهها (nodes) در کلاستر ارسال میشود تا وضعیت آنلاین یا آفلاین بودن هر گره را مشخص کند. این سیگنالها بهطور منظم و با فاصلههای زمانی کوتاه بین گرهها رد و بدل میشوند. اگر یکی از گرهها به هر دلیلی پاسخ ندهد یا heartbeat خود را ارسال نکند، سیستم متوجه میشود که آن گره دچار مشکل شده و ممکن است عملیات failover یا جابهجایی وظایف آن گره به گرههای دیگر را انجام دهد.
این مکانیزم در سیستمهای حساس و با دسترسپذیری بالا (high availability) بسیار مهم است تا مطمئن شویم که در صورت خرابی یکی از گرهها، سیستم بدون وقفه به کار خود ادامه میدهد.
اگه بخوایم مثالی بزنیم :
فرض کنید در یک بانک بزرگ از سیستم کلاسترینگ استفاده میشود تا خدمات مالی بدون وقفه به مشتریان ارائه شود. این بانک دو سرور دارد که بهطور موازی کار میکنند و اگر یکی از آنها دچار مشکل شود، دیگری بتواند بدون قطع خدمات به کار ادامه دهد. این دو سرور (که به آنها گره یا node گفته میشود) برای این منظور به یکدیگر heartbeat میفرستند.
1. ارسال و دریافت heartbeat:
هر چند ثانیه یک بار، هر یک از گرهها سیگنالی به نام heartbeat برای دیگری ارسال میکند. این سیگنال شامل اطلاعاتی مانند زمان ارسال، وضعیت عملکرد و بار فعلی سیستم است. هدف از ارسال این سیگنال این است که هر گره متوجه شود دیگری فعال است و به درستی کار میکند.
2. شناسایی خرابی گرهها:
فرض کنید گره ۱ بهدلیل بروز یک مشکل سختافزاری یا نرمافزاری از کار میافتد و دیگر قادر به ارسال heartbeat نیست. در این حالت، گره ۲ که سیگنال heartbeat را دریافت نکرده است، متوجه میشود که گره ۱ از دسترس خارج شده است. این شناسایی خرابی معمولاً بر اساس مدت زمانی که سیگنال heartbeat قطع شده است انجام میشود. اگر چند سیگنال پشت سر هم دریافت نشود (برای مثال، پس از ۳ ثانیه)، گره ۲ نتیجه میگیرد که گره ۱ دچار مشکل شده است.
3. اجرای failover یا جابهجایی وظایف:
با تشخیص خرابی گره ۱، گره ۲ فوراً وارد عمل میشود و وظایف گره از کار افتاده را به عهده میگیرد. به این فرآیند «failover» گفته میشود. در این مرحله، گره ۲ از دستورات و اطلاعاتی که برای حالت پشتیبان آماده کرده بود، استفاده میکند تا بدون هیچ قطعی، سرویسها و اطلاعات مورد نیاز کاربران را ارائه دهد.
4. بازگرداندن سیستم به حالت اصلی:
پس از تعمیر گره ۱ و بازگشت آن به حالت عادی، دو گره دوباره به تبادل heartbeat ادامه میدهند. بسته به نوع تنظیمات سیستم، ممکن است گره ۲ وظایف را به گره ۱ بازگرداند یا بهعنوان پشتیبان باقی بماند تا در صورت خرابی مجدد، باز هم بتواند وظایف را به عهده بگیرد.
YouTube
How to use Heartbeat and DRBD for HA (high availability)
We look into high availability using Heartbeat and DRBD. Heartbeat is a software to monitor and failover when a machine is unresponsive and DRBD can help you replicate data between machines making your setup highly available. This solution can help you doing…
❤🔥4👍2
چگونه تشخیص بدیم معماری سرور لینوکسی ما چی هست؟
برای تشخیص معماری سیستمعامل لینوکسی خود ، میتونیم از دستور زیر استفاده کنیم:
حالا با توجه به خروجی که میده میتونه در یکی از دسته های زیر قرار بگیرد:
اگر خروجی x86_64 باشد، معماری سیستم شما 64 بیتی و Intel یا AMD است.
اگر خروجی aarch64 باشد، سیستم شما 64 بیتی ARM است.
اگر خروجی armv7l یا armv6l باشد، سیستم شما 32 بیتی ARM است.
یک روش دیگه برای بررسی این موضوع استفاده از دستور زیر است :
خروجی هایی که این دستور میدهد :
اگر amd64 برای سیستمهای 64 بیتی مبتنی بر Intel یا AMD
اگر arm64 برای سیستمهای 64 بیتی ARM
اگر armhf برای سیستمهای 32 بیتی ARM
برای تشخیص معماری سیستمعامل لینوکسی خود ، میتونیم از دستور زیر استفاده کنیم:
uname -m
حالا با توجه به خروجی که میده میتونه در یکی از دسته های زیر قرار بگیرد:
اگر خروجی x86_64 باشد، معماری سیستم شما 64 بیتی و Intel یا AMD است.
اگر خروجی aarch64 باشد، سیستم شما 64 بیتی ARM است.
اگر خروجی armv7l یا armv6l باشد، سیستم شما 32 بیتی ARM است.
یک روش دیگه برای بررسی این موضوع استفاده از دستور زیر است :
dpkg --print-architecture
خروجی هایی که این دستور میدهد :
اگر amd64 برای سیستمهای 64 بیتی مبتنی بر Intel یا AMD
اگر arm64 برای سیستمهای 64 بیتی ARM
اگر armhf برای سیستمهای 32 بیتی ARM
👍7❤🔥2
در این ویدیو به تفاوتهای بین is و == و همچنین str و repr در پایتون پرداخته میشود.
تفاوت is و ==: is به آدرس حافظه و == به مقادیر واقعی آبجکتها توجه دارد.
استفاده از متد copy(): برای ایجاد کپی از لیستها و تفاوتهای بین آبجکتها کاربرد دارد.
متدهای str و repr: هر دو برای تبدیل آبجکتها به رشته استفاده میشوند، اما کاربردهای متفاوتی دارند.
اهمیت متد repr: برای دیباگ و نمایش دقیقتر اطلاعات آبجکتها مفید است.
توصیه به پیادهسازی هر دو متد: پیادهسازی همزمان str و repr برای جلوگیری از رفتار غیرمنتظره مهم است.
بررسی آدرسهای حافظه: با استفاده از id() میتوان فهمید که آیا دو آبجکت یکسان هستند یا خیر.
اهمیت یادگیری is و ==: درک دقیق این تفاوتها به بهبود کیفیت کد کمک میکند.
تفاوت بنیادی: is بررسی میکند که آیا دو متغیر به یک آدرس حافظه اشاره میکنند، در حالی که == بررسی میکند که آیا مقادیر آنها برابر هستند. این نکته برای جلوگیری از خطاهای منطقی بسیار مهم است.
کاربرد copy(): استفاده از copy() برای ایجاد کپیهای مستقل از لیستها ضروری است، زیرا اشتباه در این موضوع میتواند منجر به تغییرات ناخواسته شود.
دیباگینگ آسانتر: استفاده از repr در دیباگینگ کمک میکند تا اطلاعات بیشتری درباره نوع و وضعیت آبجکتها به دست آورید، که در شناسایی مشکلات کد بسیار مفید است.
پیادهسازی همزمان: همیشه توصیه میشود که هر دو متد str و repr را پیادهسازی کنید تا از رفتار غیرمنتظره جلوگیری کنید. عدم پیادهسازی یکی از آنها میتواند به نتایج غیرمنتظره منجر شود.
اهمیت آدرس حافظه: بررسی آدرس حافظه با استفاده از id() میتواند به شما بگوید که آیا دو متغیر به یک آبجکت اشاره میکنند یا خیر، که در تصمیمگیریهای منطقی بسیار حیاتی است.
تسلط بر مفاهیم: یادگیری و درک تفاوتهای بین is، == و متدهای رشتهای در پایتون به توسعهدهندگان کمک میکند تا کدهای بهتری بنویسند و از بروز خطاهای احتمالی جلوگیری کنند.
https://youtu.be/FNJ2NZxIhfs?si=fVAlS-fk7JEcvNvq
تفاوت is و ==: is به آدرس حافظه و == به مقادیر واقعی آبجکتها توجه دارد.
استفاده از متد copy(): برای ایجاد کپی از لیستها و تفاوتهای بین آبجکتها کاربرد دارد.
متدهای str و repr: هر دو برای تبدیل آبجکتها به رشته استفاده میشوند، اما کاربردهای متفاوتی دارند.
اهمیت متد repr: برای دیباگ و نمایش دقیقتر اطلاعات آبجکتها مفید است.
توصیه به پیادهسازی هر دو متد: پیادهسازی همزمان str و repr برای جلوگیری از رفتار غیرمنتظره مهم است.
بررسی آدرسهای حافظه: با استفاده از id() میتوان فهمید که آیا دو آبجکت یکسان هستند یا خیر.
اهمیت یادگیری is و ==: درک دقیق این تفاوتها به بهبود کیفیت کد کمک میکند.
تفاوت بنیادی: is بررسی میکند که آیا دو متغیر به یک آدرس حافظه اشاره میکنند، در حالی که == بررسی میکند که آیا مقادیر آنها برابر هستند. این نکته برای جلوگیری از خطاهای منطقی بسیار مهم است.
کاربرد copy(): استفاده از copy() برای ایجاد کپیهای مستقل از لیستها ضروری است، زیرا اشتباه در این موضوع میتواند منجر به تغییرات ناخواسته شود.
دیباگینگ آسانتر: استفاده از repr در دیباگینگ کمک میکند تا اطلاعات بیشتری درباره نوع و وضعیت آبجکتها به دست آورید، که در شناسایی مشکلات کد بسیار مفید است.
پیادهسازی همزمان: همیشه توصیه میشود که هر دو متد str و repr را پیادهسازی کنید تا از رفتار غیرمنتظره جلوگیری کنید. عدم پیادهسازی یکی از آنها میتواند به نتایج غیرمنتظره منجر شود.
اهمیت آدرس حافظه: بررسی آدرس حافظه با استفاده از id() میتواند به شما بگوید که آیا دو متغیر به یک آبجکت اشاره میکنند یا خیر، که در تصمیمگیریهای منطقی بسیار حیاتی است.
تسلط بر مفاهیم: یادگیری و درک تفاوتهای بین is، == و متدهای رشتهای در پایتون به توسعهدهندگان کمک میکند تا کدهای بهتری بنویسند و از بروز خطاهای احتمالی جلوگیری کنند.
https://youtu.be/FNJ2NZxIhfs?si=fVAlS-fk7JEcvNvq
YouTube
'is' vs '==' and '__str__' vs '__repr__' in python
من در شبکه های اجتماعی دیگه:
اینستاگرام
https://instagram.com/am.mthri
کانال تلگرام
https://news.1rj.ru/str/mthri_tips
توییتر
https://twitter.com/a_mthri
وبلاگ
https://iamamir.ir
اینستاگرام
https://instagram.com/am.mthri
کانال تلگرام
https://news.1rj.ru/str/mthri_tips
توییتر
https://twitter.com/a_mthri
وبلاگ
https://iamamir.ir
❤🔥3👍2
This media is not supported in your browser
VIEW IN TELEGRAM
Always ask yourself how far you can go rather than how long it will take. 🙌
❤🔥4👍2🔥1
شبکه ی Overlay چیست؟
شبکهی Overlay یا شبکه همپوشانی یک نوع شبکهی مجازی است که روی یک شبکهی فیزیکی دیگر (مثل اینترنت یا شبکهی داخلی) ساخته میشود. این شبکه کمک میکند تا دستگاهها یا سرورهایی که از نظر فیزیکی از هم دور هستند، طوری به هم متصل شوند که انگار در یک شبکه محلی و نزدیک به هم هستند.
چرا Overlay Network؟
گاهی اوقات در محیطهای بزرگ مثل مراکز داده یا زیرساختهای ابری (cloud)، نیاز داریم تا سرورها، کانتینرها، یا ماشینهای مجازی مختلف، بدون توجه به موقعیت جغرافیاییشان، با هم در ارتباط باشند. شبکههای فیزیکی محدودیتهایی دارند و در تغییرات و توسعه ممکن است زمانبر و پرهزینه باشند. اینجا است که Overlay Network وارد کار میشود؛ یعنی یک شبکه مجازی که به شما اجازه میدهد دستگاهها و سرورها را بدون تغییر در شبکهی فیزیکی، به هم متصل کنید.
شبکه Overlay چگونه کار میکند؟
شبکه Overlay از روشی به نام تونلزنی (Tunneling) استفاده میکند. در این روش، بستههای داده (Packetها) طوری بستهبندی یا کپسوله (Encapsulate) میشوند که انگار از یک شبکه مجازی عبور میکنند، در حالی که در واقع از بستر شبکهی فیزیکی منتقل میشوند. به عبارت سادهتر، دادهها در یک بستهی مخصوص پیچیده شده و روی مسیرهای شبکهی فیزیکی منتقل میشوند، اما به شبکهی مجازی تعلق دارند.
فرض کنید دو سرور در دو دیتاسنتر مختلف دارید که میخواهید به هم متصل شوند. با ایجاد یک Overlay Network، میتوانید این دو سرور را طوری به هم وصل کنید که انگار در یک شبکه محلی و یکجا هستند، حتی اگر کیلومترها از هم فاصله داشته باشند.
کاربردهای Overlay Network
شبکه Overlay بیشتر در موارد زیر کاربرد دارد:
زیرساختهای ابری (Cloud Infrastructure): در محیطهایی مثل Amazon Web Services (AWS) یا Google Cloud، Overlay Network امکان ارتباط بین منابع مختلف (مثل ماشینهای مجازی یا کانتینرها) را فراهم میکند.
کانتینرها و Docker: در داکر (Docker) و ارکستراسیون کانتینرها (مانند Kubernetes)، Overlay Network کمک میکند تا کانتینرها که ممکن است روی سرورهای مختلف باشند، بهسادگی با هم ارتباط برقرار کنند. این نوع شبکه در Docker Swarm برای ارتباط امن و سریع کانتینرها به کار میرود.
شبکههای چند لایهای و ایمن: Overlay Network میتواند برای ایجاد شبکههای امن و چند لایه استفاده شود. مثلا در شبکههای سازمانی برای اتصال بین دفاتر مختلف از این روش استفاده میشود.
مزایای Overlay Network
انعطافپذیری بالا: بدون نیاز به تغییر زیرساخت فیزیکی، میتوان بهراحتی شبکههای جدید ایجاد و تنظیم کرد.
مقیاسپذیری: بهراحتی میتوان سرورها و دستگاههای جدید را به شبکه اضافه کرد.
افزایش امنیت: بستهها بهصورت تونلزده ارسال میشوند که امنیت بیشتری به ارتباطات بین دستگاهها میدهد.
ارتباط ساده در محیطهای توزیعشده: در پروژههای بزرگ که منابع در نقاط مختلف جغرافیایی پراکنده هستند، Overlay Network راهکاری کارآمد برای اتصال دستگاهها و سرورها ارائه میدهد.
مثال ساده از Overlay Network
فرض کنید یک سازمان دارای چند شعبه در شهرهای مختلف است و هر شعبه دارای سرورهای مخصوص به خودش است. اگر این سازمان بخواهد همهی سرورها را طوری به هم متصل کند که انگار همگی در یک ساختمان هستند، میتواند از Overlay Network استفاده کند. این شبکه مجازی طوری کار میکند که تمام سرورها به یکدیگر متصل میشوند و بدون در نظر گرفتن فاصله فیزیکی، تبادل اطلاعات انجام میدهند.
نتیجهگیری
شبکهی Overlay یکی از راهکارهای مدرن و کارآمد برای ایجاد ارتباطات مجازی بین منابع مختلف است. با این شبکه میتوانید سرورها، کانتینرها و منابع مختلف را بهراحتی و بدون نیاز به تغییرات زیرساخت فیزیکی به هم متصل کنید و از مزایای انعطافپذیری و امنیت آن بهرهمند شوید.
این شبکهها در دنیای امروزی، مخصوصا در حوزههای ابری و کانتینرها، بسیار پرکاربرد هستند و ابزار مناسبی برای سادهسازی و مدیریت شبکههای پیچیده به حساب میآیند.
شبکهی Overlay یا شبکه همپوشانی یک نوع شبکهی مجازی است که روی یک شبکهی فیزیکی دیگر (مثل اینترنت یا شبکهی داخلی) ساخته میشود. این شبکه کمک میکند تا دستگاهها یا سرورهایی که از نظر فیزیکی از هم دور هستند، طوری به هم متصل شوند که انگار در یک شبکه محلی و نزدیک به هم هستند.
چرا Overlay Network؟
گاهی اوقات در محیطهای بزرگ مثل مراکز داده یا زیرساختهای ابری (cloud)، نیاز داریم تا سرورها، کانتینرها، یا ماشینهای مجازی مختلف، بدون توجه به موقعیت جغرافیاییشان، با هم در ارتباط باشند. شبکههای فیزیکی محدودیتهایی دارند و در تغییرات و توسعه ممکن است زمانبر و پرهزینه باشند. اینجا است که Overlay Network وارد کار میشود؛ یعنی یک شبکه مجازی که به شما اجازه میدهد دستگاهها و سرورها را بدون تغییر در شبکهی فیزیکی، به هم متصل کنید.
شبکه Overlay چگونه کار میکند؟
شبکه Overlay از روشی به نام تونلزنی (Tunneling) استفاده میکند. در این روش، بستههای داده (Packetها) طوری بستهبندی یا کپسوله (Encapsulate) میشوند که انگار از یک شبکه مجازی عبور میکنند، در حالی که در واقع از بستر شبکهی فیزیکی منتقل میشوند. به عبارت سادهتر، دادهها در یک بستهی مخصوص پیچیده شده و روی مسیرهای شبکهی فیزیکی منتقل میشوند، اما به شبکهی مجازی تعلق دارند.
فرض کنید دو سرور در دو دیتاسنتر مختلف دارید که میخواهید به هم متصل شوند. با ایجاد یک Overlay Network، میتوانید این دو سرور را طوری به هم وصل کنید که انگار در یک شبکه محلی و یکجا هستند، حتی اگر کیلومترها از هم فاصله داشته باشند.
کاربردهای Overlay Network
شبکه Overlay بیشتر در موارد زیر کاربرد دارد:
زیرساختهای ابری (Cloud Infrastructure): در محیطهایی مثل Amazon Web Services (AWS) یا Google Cloud، Overlay Network امکان ارتباط بین منابع مختلف (مثل ماشینهای مجازی یا کانتینرها) را فراهم میکند.
کانتینرها و Docker: در داکر (Docker) و ارکستراسیون کانتینرها (مانند Kubernetes)، Overlay Network کمک میکند تا کانتینرها که ممکن است روی سرورهای مختلف باشند، بهسادگی با هم ارتباط برقرار کنند. این نوع شبکه در Docker Swarm برای ارتباط امن و سریع کانتینرها به کار میرود.
شبکههای چند لایهای و ایمن: Overlay Network میتواند برای ایجاد شبکههای امن و چند لایه استفاده شود. مثلا در شبکههای سازمانی برای اتصال بین دفاتر مختلف از این روش استفاده میشود.
مزایای Overlay Network
انعطافپذیری بالا: بدون نیاز به تغییر زیرساخت فیزیکی، میتوان بهراحتی شبکههای جدید ایجاد و تنظیم کرد.
مقیاسپذیری: بهراحتی میتوان سرورها و دستگاههای جدید را به شبکه اضافه کرد.
افزایش امنیت: بستهها بهصورت تونلزده ارسال میشوند که امنیت بیشتری به ارتباطات بین دستگاهها میدهد.
ارتباط ساده در محیطهای توزیعشده: در پروژههای بزرگ که منابع در نقاط مختلف جغرافیایی پراکنده هستند، Overlay Network راهکاری کارآمد برای اتصال دستگاهها و سرورها ارائه میدهد.
مثال ساده از Overlay Network
فرض کنید یک سازمان دارای چند شعبه در شهرهای مختلف است و هر شعبه دارای سرورهای مخصوص به خودش است. اگر این سازمان بخواهد همهی سرورها را طوری به هم متصل کند که انگار همگی در یک ساختمان هستند، میتواند از Overlay Network استفاده کند. این شبکه مجازی طوری کار میکند که تمام سرورها به یکدیگر متصل میشوند و بدون در نظر گرفتن فاصله فیزیکی، تبادل اطلاعات انجام میدهند.
نتیجهگیری
شبکهی Overlay یکی از راهکارهای مدرن و کارآمد برای ایجاد ارتباطات مجازی بین منابع مختلف است. با این شبکه میتوانید سرورها، کانتینرها و منابع مختلف را بهراحتی و بدون نیاز به تغییرات زیرساخت فیزیکی به هم متصل کنید و از مزایای انعطافپذیری و امنیت آن بهرهمند شوید.
این شبکهها در دنیای امروزی، مخصوصا در حوزههای ابری و کانتینرها، بسیار پرکاربرد هستند و ابزار مناسبی برای سادهسازی و مدیریت شبکههای پیچیده به حساب میآیند.
👍8❤🔥1