Forwarded from DevTwitter | توییت برنامه نویسی
یه مخزن جذاب تو گیتهاب هست که بهت یاد میده چطور فقط با CSS بدون نیاز به جاوااسکریپت، کلی کار خفن مثل انیمیشن و منو درست کنی!
برای کسایی که دنبال سایتهای سبک و سریع هستن عالیه.
اگر دوست داری کدهات سادهتر و بهینهتر باشن، حتما یه سر بهش بزن!
لینکش
https://github.com/you-dont-need/You-Dont-Need-JavaScript
@DevTwitter | <Farhad Safari/>
برای کسایی که دنبال سایتهای سبک و سریع هستن عالیه.
اگر دوست داری کدهات سادهتر و بهینهتر باشن، حتما یه سر بهش بزن!
لینکش
https://github.com/you-dont-need/You-Dont-Need-JavaScript
@DevTwitter | <Farhad Safari/>
Forwarded from IRCF | اینترنت آزاد برای همه
ابزار Shifter برای مدیریت و راهاندازی تانلهای امن شبکه در لینوکس طراحی شده، تا امکان پیکربندی و کنترل سرویسهایی مثل GOST، HAProxy، Xray و iptables رو فراهم کنه.
این ابزار که از HTTPS و گواهی Let’s Encrypt پشتیبانی میکنه، با برخورداری از داشبورد تحت وب و همچنین رابط خطفرمان رنگی، نصب، کنترل و حذف سرویسها رو بهسادگی انجام میده.
👉 github.com/zZedix/Shifter
🎥 youtube.com/watch?v=mqAq1Frfj8g
🔍 ircf.space
@ircfspace
این ابزار که از HTTPS و گواهی Let’s Encrypt پشتیبانی میکنه، با برخورداری از داشبورد تحت وب و همچنین رابط خطفرمان رنگی، نصب، کنترل و حذف سرویسها رو بهسادگی انجام میده.
👉 github.com/zZedix/Shifter
🎥 youtube.com/watch?v=mqAq1Frfj8g
🔍 ircf.space
@ircfspace
Forwarded from 🎄 یک برنامه نویس تنبل ( MΞ)
This media is not supported in your browser
VIEW IN TELEGRAM
Forwarded from Linuxor ?
این ابزارم خیلی چیز ساده و باحالیه. یه فایل به اسم justfile توی پروژتون میسازین بعد توش یه لیستی از دستورات که مربوط به پروژتون هست و زیاد تکرارش میکنید رو مینویسید حالا اگه دستور just رو بزنید میتونید اونارو با یه کلیک اجرا کنید
شبیه به npm و Makefile عمل میکنه ولی خیلی ساده تره و برای همهچی میشه ازش استفاده کرد
github.com/casey/just
@Linuxor
شبیه به npm و Makefile عمل میکنه ولی خیلی ساده تره و برای همهچی میشه ازش استفاده کرد
github.com/casey/just
@Linuxor
Forwarded from Linuxor ?
اینجا لیست کاملی از تمام مدل های GAN وجود داره؛ حالا GAN چیه؟ GAN نوعی شبکه عصبی هستش که میتونه چیزهای جدیدی بسازه مثلا تصویر، صدا، یا متن که شبیه نمونههای واقعی به نظر برسن
در واقع GAN (Generative Adversarial Network) یا به فارسی میشه شبکه مولدِ تخاصمی (یا رقابتی) یعنی یه شبکه مولد که با رقابت با یک شبکه دیگه آموزش میبینه.
github.com/hindupuravinash/the-gan-zoo
@Linuxor
در واقع GAN (Generative Adversarial Network) یا به فارسی میشه شبکه مولدِ تخاصمی (یا رقابتی) یعنی یه شبکه مولد که با رقابت با یک شبکه دیگه آموزش میبینه.
github.com/hindupuravinash/the-gan-zoo
@Linuxor
Forwarded from یه شعر (Poem Bot)
حافظ | غزلیات | غزل شمارهٔ ۲۰۰
دانی که چنگ و عود چه تقریر می کنند
پنهان خورید باده که تعزیر می کنند
ناموس عشق و رونق عشاق می برند
عیب جوان و سرزنش پیر می کنند
جز قلب تیره هیچ نشد حاصل و هنوز
باطل در این خیال که اکسیر می کنند
گویند رمز عشق مگویید و مشنوید
مشکل حکایتیست که تقریر می کنند
ما از برون در شده مغرور صد فریب
تا خود درون پرده چه تدبیر می کنند
تشویش وقت پیر مغان می دهند باز
این سالکان نگر که چه با پیر می کنند
صد ملک دل به نیم نظر می توان خرید
خوبان در این معامله تقصیر می کنند
قومی به جد و جهد نهادند وصل دوست
قومی دگر حواله به تقدیر می کنند
فی الجمله اعتماد مکن بر ثبات دهر
کـ این کارخانه ایست که تغییر می کنند
می خور که شیخ و حافظ و مفتی و محتسب
چون نیک بنگری همه تزویر می کنند
#حافظ | گنجور
📍@iipoem
دانی که چنگ و عود چه تقریر می کنند
پنهان خورید باده که تعزیر می کنند
ناموس عشق و رونق عشاق می برند
عیب جوان و سرزنش پیر می کنند
جز قلب تیره هیچ نشد حاصل و هنوز
باطل در این خیال که اکسیر می کنند
گویند رمز عشق مگویید و مشنوید
مشکل حکایتیست که تقریر می کنند
ما از برون در شده مغرور صد فریب
تا خود درون پرده چه تدبیر می کنند
تشویش وقت پیر مغان می دهند باز
این سالکان نگر که چه با پیر می کنند
صد ملک دل به نیم نظر می توان خرید
خوبان در این معامله تقصیر می کنند
قومی به جد و جهد نهادند وصل دوست
قومی دگر حواله به تقدیر می کنند
فی الجمله اعتماد مکن بر ثبات دهر
کـ این کارخانه ایست که تغییر می کنند
می خور که شیخ و حافظ و مفتی و محتسب
چون نیک بنگری همه تزویر می کنند
#حافظ | گنجور
📍@iipoem
Forwarded from 🎄 یک برنامه نویس تنبل (Lazy 🌱)
🔶 در اکتبر ۲۰۲۵، دولت هلند با استناد به قانون "Goods Availability Act" کنترل Nexperia را به دلیل نگرانیهای امنیتی و مشکلات حکمرانی در دست گرفت و چین صادرات پردازنده های Nexperia به اتحادیه اروپا متوقف کرد که باعث اختلال در تولیدات خودرو و دیگر بخش های آن شود.
اتحادیه اروپا به دنبال مذاکره با چین برای رفع صادرات پردازنده Nexperia به اتحادیه اروپا است.
#خبر
@TheRaymondDev
اتحادیه اروپا به دنبال مذاکره با چین برای رفع صادرات پردازنده Nexperia به اتحادیه اروپا است.
#خبر
@TheRaymondDev
X (formerly Twitter)
ACEA (@ACEA_auto) on X
We are deeply concerned by potential significant disruption to European vehicle manufacturing if the interruption of Nexperia chips supplies cannot be immediately resolved.
On 10 October, #automobile manufacturers and their suppliers received notice from…
On 10 October, #automobile manufacturers and their suppliers received notice from…
Forwarded from 🎄 یک برنامه نویس تنبل (Lazy 🌱)
This media is not supported in your browser
VIEW IN TELEGRAM
🔶 با WinApps می توانید برنامه های پرکاربرد ویندوز در لینوکس اجرا کنید.
لیست برنامه های پشتیبانی شده توسط WinApps :
- Adobe Acrobat Pro
- Adobe After Effects
- Adobe Audition
- Adobe Bridge
- Adobe Creative Cloud
- Adobe Illustrator
- Adobe InDesign
- Adobe Lightroom
- Adobe Photoshop
- Affinity Designer 2
- Affinity Photo 2
- Affinity Publisher 2
- Command Prompt
- File Explorer
- Internet Explorer
- Microsoft Access
- Microsoft Excel
- Microsoft Word
- Microsoft OneNote
- Microsoft Outlook
- Microsoft PowerPoint
- Microsoft Publisher
- Microsoft Visio
- Microsoft Project
- Microsoft Visual Studio
- Autodesk Fusion 360
- mIRC
- PowerShell
- Windows
گیت هاب :
https://github.com/winapps-org/winapps/
#لینوکس
#ویندوز
@TheRaymondDev
لیست برنامه های پشتیبانی شده توسط WinApps :
- Adobe Acrobat Pro
- Adobe After Effects
- Adobe Audition
- Adobe Bridge
- Adobe Creative Cloud
- Adobe Illustrator
- Adobe InDesign
- Adobe Lightroom
- Adobe Photoshop
- Affinity Designer 2
- Affinity Photo 2
- Affinity Publisher 2
- Command Prompt
- File Explorer
- Internet Explorer
- Microsoft Access
- Microsoft Excel
- Microsoft Word
- Microsoft OneNote
- Microsoft Outlook
- Microsoft PowerPoint
- Microsoft Publisher
- Microsoft Visio
- Microsoft Project
- Microsoft Visual Studio
- Autodesk Fusion 360
- mIRC
- PowerShell
- Windows
گیت هاب :
https://github.com/winapps-org/winapps/
#لینوکس
#ویندوز
@TheRaymondDev
Forwarded from متخصص وردپرس | پوینا
کانفیگ و انتخاب درست سرور
یکی از سرورهای مشتریان ما با تنظیمات نادرست سختافزاری و نرمافزاری، همیشه با مصرف CPU بالای ۸۰٪ و Load Average حدود ۸۰ تا ۹۰ درگیر بود.
اما بعد از بررسی دقیق، انتخاب سرور مناسب و انجام کانفیگ اصولی، حالا بعد از گذشت یک هفته مصرف CPU تقریباً روی ۰٪ و Load Average فقط بین ۲ و 4 است.
کانفیگی کانفیگ درسته که فشار از روی سی پی یو برداشته بشه
@poinair پوینا
یکی از سرورهای مشتریان ما با تنظیمات نادرست سختافزاری و نرمافزاری، همیشه با مصرف CPU بالای ۸۰٪ و Load Average حدود ۸۰ تا ۹۰ درگیر بود.
اما بعد از بررسی دقیق، انتخاب سرور مناسب و انجام کانفیگ اصولی، حالا بعد از گذشت یک هفته مصرف CPU تقریباً روی ۰٪ و Load Average فقط بین ۲ و 4 است.
کانفیگی کانفیگ درسته که فشار از روی سی پی یو برداشته بشه
@poinair پوینا
Forwarded from کانال مهرداد لینوکس (Mehrdad Linux)
This media is not supported in your browser
VIEW IN TELEGRAM
دنبال یک جایگزین برای grep در ترمینال لینوکس هستی ؟
همه CGrep،ngrep،vgrep،bingrep و ... را امتحان کردید راضی نبودید !!!
این شما و این هم ugrep
مستندات عالی
https://ugrep.com/
سازگاری کامل با GNU grep
یک سویچ -Q بزار جلوش یک query TUI to search میده باقلوا
semantic-grep
ripgrep
نصب کن حالشو ببر
#linux #لینوکس
همه CGrep،ngrep،vgrep،bingrep و ... را امتحان کردید راضی نبودید !!!
این شما و این هم ugrep
مستندات عالی
https://ugrep.com/
سازگاری کامل با GNU grep
یک سویچ -Q بزار جلوش یک query TUI to search میده باقلوا
semantic-grep
ripgrep
نصب کن حالشو ببر
#linux #لینوکس
Forwarded from Accio
P.S. The Free Software Foundation (FSF) is the nonprofit organization behind GNU and other software freedom initiatives
www.gnu.org
The GNU Operating System and the Free Software Movement
Since 1983, developing the free Unix style operating system GNU, so that computer users can have the freedom to share and improve the software they use.
Forwarded from Artin
وقتی همه خوابن، تو هنوز داری با یه ارور کلنجار میری؟
وقتی کد میزنی، حس میکنی با دنیا درگیری؟
همه میپرسن "مگه برنامهنویسی خندهدارم هست؟"
ما میگیم: آره... خیلی هم هست!
پروگرمرز جوک جاییه برای همدردی، خنده، و یه ذره دیوونهبازی دولوپری.
میمهای خفن، جوکهای تخصصی، و طنزی که فقط ما میفهمیم.
اگه دنبال یه نفس تازه وسط باگها و دیباگهاتی،
این کانال برای توئه:
t.iss.one/programmerjokes_fa
بیا بخندیم. با هم.
وقتی کد میزنی، حس میکنی با دنیا درگیری؟
همه میپرسن "مگه برنامهنویسی خندهدارم هست؟"
ما میگیم: آره... خیلی هم هست!
پروگرمرز جوک جاییه برای همدردی، خنده، و یه ذره دیوونهبازی دولوپری.
میمهای خفن، جوکهای تخصصی، و طنزی که فقط ما میفهمیم.
اگه دنبال یه نفس تازه وسط باگها و دیباگهاتی،
این کانال برای توئه:
t.iss.one/programmerjokes_fa
بیا بخندیم. با هم.
Telegram
پروگرمرزمیم
اینجا هرچی که مربوط به برنامه نویسی و کامپیوتر
باشه توش میزاریم
جوک و میم هم که هر روز
برای خرید استارز، پریمیوم و... میتونین به ادمین پیام بدین
ادمین:
@projoke_ad
باشه توش میزاریم
جوک و میم هم که هر روز
برای خرید استارز، پریمیوم و... میتونین به ادمین پیام بدین
ادمین:
@projoke_ad
Forwarded from محتوای آزاد سهراب (Sohrab)
کازمیک یک باگ مسخرهای که داره و گزارش کردم بهشون اینه که وقتی کیبورد فارسی رو اضافه میکنی و از sddm به عنوان دیسپلی منیجر استفاده کنی، کیبورد پیشفرض sddm به فارسی تغییر پیدا میکنه :)))
اصولاً نباید اینطوری بشه، هم باگ عجیبی بود هم شدیداً رو مخ.
@SohrabContents
اصولاً نباید اینطوری بشه، هم باگ عجیبی بود هم شدیداً رو مخ.
@SohrabContents
Forwarded from Linuxor ?
میدونستین نسخه وب تلگرام از یه قابلیت معروف مرورگر به اسم Service Worker استفاده میکنه؟
سروریس ورکر مثل یه برنامه پشتصحنه توی مرورگره که بین مرورگر و شبکه قرار میگیره و تمام ترافیک رو هندل میکنه مثل یه پروکسی داخلی با دسترسی به کش، رمزنگاری و MTProto.
تلگرام ازش برای رمزنگاری کردن streamها، کش کردن مدیا، و دریافت ناتیفیکیشن استفاده میکنه.
در واقع تلگرام وب یه اپ native هستش که روی مرورگر سوار شده سرویس ورکر ها توی یه thread جدا اجرا میشن این یعنی:
رمزگشایی فایلها (مثلاً ویدیوهای MP4 یا voice) مرورگر رو کند نمیکنه و حتی آپلودها یا دانلودها میتونن توی پسزمینه ادامه پیدا کنن :)
@Linuxor
سروریس ورکر مثل یه برنامه پشتصحنه توی مرورگره که بین مرورگر و شبکه قرار میگیره و تمام ترافیک رو هندل میکنه مثل یه پروکسی داخلی با دسترسی به کش، رمزنگاری و MTProto.
تلگرام ازش برای رمزنگاری کردن streamها، کش کردن مدیا، و دریافت ناتیفیکیشن استفاده میکنه.
در واقع تلگرام وب یه اپ native هستش که روی مرورگر سوار شده سرویس ورکر ها توی یه thread جدا اجرا میشن این یعنی:
رمزگشایی فایلها (مثلاً ویدیوهای MP4 یا voice) مرورگر رو کند نمیکنه و حتی آپلودها یا دانلودها میتونن توی پسزمینه ادامه پیدا کنن :)
@Linuxor
Forwarded from محتوای آزاد سهراب (Sohrab)
خب فعلاً بیخیال نصب کازمیک بشید چون یک نیم ساعتی هم من رو علاف کرد و مجبور شدم کل کانفیگهام رو ریست کنم.
این بزرگوار میاد و توی dconf یک کلید مینویسه برای تم GTK، تا اینجاش که اوکیه. ولی وقتی کیدیای هم داشته باشی و کازمیک رو حذف کنی اون کلید حذف نمیشه و بعد از حذف کازمیک تم ریست میشه به دیفالت گنوم و غیرقابل تغییر میشه.
و من الان یک مشت بسته اضافی کازمیک رو نگهداشتم که اون کلید حذف نشه.
@SohrabContents
این بزرگوار میاد و توی dconf یک کلید مینویسه برای تم GTK، تا اینجاش که اوکیه. ولی وقتی کیدیای هم داشته باشی و کازمیک رو حذف کنی اون کلید حذف نمیشه و بعد از حذف کازمیک تم ریست میشه به دیفالت گنوم و غیرقابل تغییر میشه.
و من الان یک مشت بسته اضافی کازمیک رو نگهداشتم که اون کلید حذف نشه.
@SohrabContents
Forwarded from Rust for Python developers
YouTube
Rust 2025: $400K Salaries, Go, AI & Why It's Not Everywhere (Yet) — Jon Gjengset Explains
What’s next for Rust in 2025?
In this in-depth interview, Jon Gjengset (Rust educator, MIT PhD, and author of Rust for Rustaceans) discusses how Rust salaries are reaching $400,000, how AI is changing the way developers write code, and why the borrow checker…
In this in-depth interview, Jon Gjengset (Rust educator, MIT PhD, and author of Rust for Rustaceans) discusses how Rust salaries are reaching $400,000, how AI is changing the way developers write code, and why the borrow checker…
Forwarded from Rust for Python developers
یک نکته قابل توجهی که میگه و تو گروه هم ما راجبش بحث کردیم.
اینه که توی مارکت
برای همین ۹۹٪ شما وقتی میگید من دارم
هیچ شکی نیست که قطعا همه جونیورها هم یک روزی سنیور خواهند شد! ولی اگر توی
اینه که توی مارکت
Rust برنامهنویسهای Junior بیشتر وجود داره (که خب استخدام نشدن هم دلیلش همین هست) اکثر شرکتهایی که میرند سمت زبان Rust نیاز به کسی دارند که بیزینس رو خوب بلد باشه یا توی زبان برنامهنویسی و ... ایی که قبلا کار کرده Senior باشه و حالا Rust هم بتونه کد بزنه!برای همین ۹۹٪ شما وقتی میگید من دارم
Rust میخونم؛ میگم: اشتباه میکنی.هیچ شکی نیست که قطعا همه جونیورها هم یک روزی سنیور خواهند شد! ولی اگر توی
Python, Go, ... شروع کنید که مارکت همین الان کار برای جونیور داره؛ احتمالا خیلی سریعتر پیشرفت میکنید؛ تجربیات مهم رو بدست میارید و سنیور میشید!Forwarded from Md Daily (Mahan)
داشتم یه مقاله فوقالعاده از یه تجربه عملیاتی سنگین میخوندم با عنوان: «چطور یک میلیارد رکورد رو از DB1 به DB2 جابجا کردیم؛ بدون Downtime» 🚀
نویسنده مقاله (و تیمش) با یه چالش بزرگ روبرو بودن: دیتابیس قدیمیشون که دیتای حساس مالی (پرداخت، سفارش و...) رو نگه میداشت، از ۱ میلیارد رکورد رد شده بود و به شدت کند شده بود, Queryهایی که ثانیهای طول میکشید، `Batch Job`ها (کارهایی که دستهای مثل تسویه حسابها) ساعتی طول میکشید. Scale کردن (افزایش مقیاس) دیگه جواب نمیداد و باید مهاجرت میکردن، اونم بدون حتی یک ثانیه Downtime (قطعی).
این خلاصهی قدمبهقدم کاریه که انجام دادن:
1️⃣ جابجایی دیتای قدیمی (Bulk Migration)
برای انتقال
✔️ جدول رو بر اساس رنج
✔️ موقع بارگذاری، ایندکسهای ثانویه و `Constraint`ها (قیدها) رو غیرفعال کردن (تا سرعت
✔️ چندتا ورکر رو
✔️ بعد از انتقال هر تیکه، یه
2️⃣ مدیریت ترافیک زنده (Dual Writes)
چالش اصلی، دیتای جدیدی بود که همزمان با مهاجرت داشت وارد میشد.
✔️ اپلیکیشن رو طوری تغییر دادن که
✔️ برای اینکه مطمئن بشن دیتایی گم نمیشه، اگه نوشتن تو دیتابیس جدیده خراب میشد، اون رویداد (event) رو مینداختن توی یه `Retry Queue` کافکا (صفی برای کارهای شکستخورده که باید دوباره امتحان بشن).
✔️ یه
✔️ برای جلوگیری از تکراری ثبت شدن دیتا (موقع تلاش مجدد)، همهی نوشتنها رو با آیدی یکتا
3️⃣ تست پنهانی در پروداکشن (Shadow Reads)
خب، دیتاها سینک بودن. ولی آیا دیتابیس جدیده زیر بار واقعی جواب میداد؟
✔️ اینجا از
✔️ مشتریها هنوز داشتن از دیتابیس قدیمی میخوندن اما در پشت صحنه، اپلیکیشن همون `Query` رو روی دیتابیس جدیده هم میزد و نتایج رو با هم مقایسه میکرد.
✔️ این کار باعث شد کلی باگ ریز ولی حیاتی رو پیدا کنن که تو تستها معلوم نمیشد: مثلاً تفاوت رفتار Timezone ها (منطقههای زمانی)، تبدیل `NULL`ها (مقادیر پوچ) به مقادیر پیشفرض، و تفاوت در Collation (قواعد مرتبسازی و مقایسه متنها) (که باعث میشد مرتبسازی نتایج فرق کنه).
4️⃣ لحظه جابجایی نهایی (The Cutover)
روز
✔️ قبل از سوییچ، با اجرای کوئریهای مصنوعی، کش دیتابیس جدید رو
✔️ ساعت ۴:۳۰ صبح (کمترین ترافیک) با زدن یه
5️⃣ رصد کردن (Observability) 📊
نویسنده میگه چیزی که واقعاً نجاتشون داد، SQL خفن نبود، بلکه
✔️ با Replication Lag (میزان عقب بودن دیتابیسهای کپی از دیتابیس اصلی)
✔️ با `Deadlock`ها (وقتی دوتا پروسه قفل منتظر هم میمونن)
✔️ با
✔️ با شمارندهی عدم تطابق نتایج در
✔️ و از همه مهمتر: `KPI`های بیزینسی (شاخصهای کلیدی عملکرد مثل سفارش در دقیقه).
ما چی می تونیم یاد بگیریم؟💡
مهاجرتهای بزرگ، یه «مسئله دیتابیسی» نیستن، بلکه یه «مسئله System Design (طراحی سیستم)» هستن.
شما یه میلیارد ردیف رو یهو جابجا نمیکنید، بلکه
در نهایت: Zero Downtime (قطعی صفر) شانسی نیست؛ طراحیه.
—-
💡 مثل همیشه کنجکاو بمونید :)
🆔 @MdDaily
نویسنده مقاله (و تیمش) با یه چالش بزرگ روبرو بودن: دیتابیس قدیمیشون که دیتای حساس مالی (پرداخت، سفارش و...) رو نگه میداشت، از ۱ میلیارد رکورد رد شده بود و به شدت کند شده بود, Queryهایی که ثانیهای طول میکشید، `Batch Job`ها (کارهایی که دستهای مثل تسویه حسابها) ساعتی طول میکشید. Scale کردن (افزایش مقیاس) دیگه جواب نمیداد و باید مهاجرت میکردن، اونم بدون حتی یک ثانیه Downtime (قطعی).
این خلاصهی قدمبهقدم کاریه که انجام دادن:
برای انتقال
Cold data (دیتای قدیمی که دیگه تغییر نمیکنه)، نیومدن یه Dump (فایل خروجی) گنده بگیرن. به جاش:Primary Key (کلید اصلی جدول) به Chunk (تکههای کوچیک دیتا) تقسیم کردن.Insert (ثبت دیتا) بالا بره).Parallel (موازی) برای انتقال این تیکهها ران کردن.Checksum (یه جور کد محاسباتی برای چک کردن یکی بودن دیتا) میگرفتن تا مطمئن بشن دیتا دقیقاً کپی شده.چالش اصلی، دیتای جدیدی بود که همزمان با مهاجرت داشت وارد میشد.
Dual Writes (نوشتن همزمان در دو دیتابیس) انجام بده (یعنی هر دیتای جدید رو همزمان هم تو دیتابیس قدیمی و هم تو دیتابیس جدید بنویسه).Consumer (سرویسی که از صف کافکا دیتا میخونه) جدا اون صف رو میخوند و اونقدر تلاش میکرد تا بالاخره تو دیتابیس جدیده هم ثبت بشه.Idempotent (یعنی اگه یه کاری رو چند بار هم اجرا کنی، نتیجه نهایی یکی باشه) کرده بودن.خب، دیتاها سینک بودن. ولی آیا دیتابیس جدیده زیر بار واقعی جواب میداد؟
Shadow Reads (خوندن پنهانی از دیتابیس جدید برای تست) استفاده کردن.✔️ این کار باعث شد کلی باگ ریز ولی حیاتی رو پیدا کنن که تو تستها معلوم نمیشد: مثلاً تفاوت رفتار Timezone ها (منطقههای زمانی)، تبدیل `NULL`ها (مقادیر پوچ) به مقادیر پیشفرض، و تفاوت در Collation (قواعد مرتبسازی و مقایسه متنها) (که باعث میشد مرتبسازی نتایج فرق کنه).
روز
Cutover (لحظه جابجایی کامل و سوییچ کردن)، ریسک اصلی این بود که Cache (حافظه موقت) دیتابیس جدیده «سرد» (Cold) بود و اولین کوئریها ممکن بود خیلی کند باشن.Pre-warm (گرم کردن کش با دیتای الکی) کردن.Feature Flag (یه جور کلید نرمافزاری برای روشن/خاموش کردن قابلیتها)، همهی Read ها (خوندنها) رو به سمت دیتابیس جدید فرستادن. (برای اطمینان، Dual Writes رو هنوز روشن نگه داشتن تا راه برگشت امن داشته باشن).نویسنده میگه چیزی که واقعاً نجاتشون داد، SQL خفن نبود، بلکه
Observability (قابلیت رصد کامل سیستم) بود. اونا وسواسی همهچیز رو مانیتور میکردن:Cache Hit Ratio (درصدی از دیتا که از کش خونده میشه نه از دیسک)Shadow Readsما چی می تونیم یاد بگیریم؟
مهاجرتهای بزرگ، یه «مسئله دیتابیسی» نیستن، بلکه یه «مسئله System Design (طراحی سیستم)» هستن.
شما یه میلیارد ردیف رو یهو جابجا نمیکنید، بلکه
batch امن به batch امن»، «ورودی WAL (فایلی که دیتابیس قبل از هر کاری، تغییرات رو اول اونجا مینویسه) به WAL» و «Checksum به Checksum» این کار رو میکنید.در نهایت: Zero Downtime (قطعی صفر) شانسی نیست؛ طراحیه.
—-
🆔 @MdDaily
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Gopher Academy
اخیرا درگیر کوچ کردن از یه سیستم مونولیت قدیمی با Symfony به میکروسرویس با Golang هستم. اونایی که تجربه این مدل کوچ کردن هارو توی سیستم های زیر بار و قدیمی دارن میدونن که مشکل اصلی دیتابیس و جلو رفتن بر اساس اسکیمای فعلی هست و این مدل کوچ ها باید تقریبا بدون Breaking Changes اتفاق بیوفته.
اینجا بود که با SqlBoiler توی زبان Go آشنا شدم.
مزایای SqlBoiler:
۱. ساخت Struct در یک چشم به هم زدن:
به جای اینکه ساعتها بشینم و دستی Structهای گو رو بر اساس جدولهای دیتابیس بنویسم، SQLBoiler در عرض چند ثانیه تمام مدلهای Type-Safe ما رو ساخت. وقتم رو خرید، خیلی زیاد!
۲. تمرکز بر دیتابیس (Database-First):
چون دیتابیس ما از قبل وجود داشت، این ابزار خیلی راحت خودشو با Schema ما سینک کرد. انگار ساخته شده بود برای همین وضعیت!
۳. کوئریهای ایمن و هوشمند:
دیگه نگران خطاهای احمقانه زمان اجرا (Runtime) نیستم. با تولید کوئریهای Strongly Typed، هر اشتباهی توی نام ستون یا جدول باشه، همون موقع
کامپایل گیر میده.
۴. فقط چیزهای ضروری رو بگیر:
قابلیت Whitelist/Blacklist جدولها و ستونها فوقالعاده است. توی محیط میکروسرویس که هر سرویس فقط به یه بخش دیتابیس نیاز داره، با این قابلیت فقط مدلهای مرتبط رو تولید کردم و کد اضافی رو حذف کردم.
اینم لینک گیتهابش:
https://github.com/aarondl/sqlboiler
<Sepehr Mohseni/>
اینجا بود که با SqlBoiler توی زبان Go آشنا شدم.
مزایای SqlBoiler:
۱. ساخت Struct در یک چشم به هم زدن:
به جای اینکه ساعتها بشینم و دستی Structهای گو رو بر اساس جدولهای دیتابیس بنویسم، SQLBoiler در عرض چند ثانیه تمام مدلهای Type-Safe ما رو ساخت. وقتم رو خرید، خیلی زیاد!
۲. تمرکز بر دیتابیس (Database-First):
چون دیتابیس ما از قبل وجود داشت، این ابزار خیلی راحت خودشو با Schema ما سینک کرد. انگار ساخته شده بود برای همین وضعیت!
۳. کوئریهای ایمن و هوشمند:
دیگه نگران خطاهای احمقانه زمان اجرا (Runtime) نیستم. با تولید کوئریهای Strongly Typed، هر اشتباهی توی نام ستون یا جدول باشه، همون موقع
کامپایل گیر میده.
۴. فقط چیزهای ضروری رو بگیر:
قابلیت Whitelist/Blacklist جدولها و ستونها فوقالعاده است. توی محیط میکروسرویس که هر سرویس فقط به یه بخش دیتابیس نیاز داره، با این قابلیت فقط مدلهای مرتبط رو تولید کردم و کد اضافی رو حذف کردم.
اینم لینک گیتهابش:
https://github.com/aarondl/sqlboiler
<Sepehr Mohseni/>
GitHub
GitHub - aarondl/sqlboiler: Generate a Go ORM tailored to your database schema.
Generate a Go ORM tailored to your database schema. - aarondl/sqlboiler