Learning With M
1.4K subscribers
42 photos
13 videos
3 files
61 links
سلام.
من مسعود دانش پور هستم.
همسر، پدر، پسر، برادر، انسان و مهندس نرم افزار.👻

اینجا جایی هست که من تلاش می کنم موضوعاتی که برای یک مهندس نرم افزار مهم و لازمه رو بازگو کنم.

آکادمی یادگیری با M :
https://academy.daneshpour.ir
Download Telegram
Forwarded from tech-afternoon (Amin Mesbahi)
🚀 🧪 ترمینولوژی تست نرم‌افزار - ویراست ۰.۵

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

پیشاپیش از هر نقد و پیشنهاد و تذکری که موجب بهبودش بشه سپاسگزارم.

سعی کردم تا فایل PDF کیفیت مطلوبی داشته باشه تا برای مطالعه و زوم یا حتی پرینت مناسب باشه.
⬇️ دانلود نسخه PDF
⬇️دانلود فایل JPEG

💬 مثل همیشه؛ نظر ؟ پیشنهاد ؟ نقد ؟ 😉
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12👍51
Forwarded from .NET Fun
Media is too big
VIEW IN TELEGRAM
مباحث مربوط به User management دغدغه همه پروژه ها بوده. اینکه Best Practice ها چیا هستن ، مسائل امنیتی رو چجور باید پیاده سازی کنیم و چجوری ارتباط بین سرور ها رو امن کنیم. خوشبختانه فریم OAuth 2 و استاندارد Open ID Connect وجود دارن که برامون این قوانین و Best Practice ها رو مشخص میکنن ، ولی پیاده سازی همه این موارد خیلی سخت و زمانگیر هست. اینجاست که Duende Identity Server به کمکمون میاد که به راحتی این مباحث رو روی پروژه هامون پیاده سازی کنیم. در این ویدیو:
1- به بررسی OAuth 2 می پردازیم و Flow های پرکاربرد رو بررسی میکنیم
2- به بررسی کامل Authorization Code Flow میپردازیم و یاد میگیریم که اون رو با PKCE امن تر کنیم
3- به بررسی Duende Identity Server میپردازیم و تمپلیت های اون رو نصب میکنیم
4 - در یک پروژه تستی فرآیند احراز هویت رو به Duende وصل میکنیم

Join: @DotNetIsFun
👍152
یکی از هنرهای مدیر هایی که شما کنارشون رشد می کنید، رها کردن به موقع شماست.
باید در زمان مناسب، ازتون بخواد که سازمان رو ترک کنید، این اخراج نیست، باز کردن مسیر رشدتونه. چون همه ما یک سقف رشدی در سازمانمون داریم که زمانی که پر شد، دیگه موندن، فقط عادته.
🔥48👍274
سلام رفقا.
براتون سالی پر از سختی، پیچیدگی، فشار کاری، ندانستن، درد ماهیچه بعد از ورزش، استرس دانستن ندانسته ها، کم خوابی از در مسیر موفقیت بودن آرزو می کنم.

☀️ امیدوارم هممون سال آینده از منطقه آرامشمون خارج بشیم و بعد از رد شدن از منطقه ترس و آموزش، به منطقه رشد برسیم.
❤️ امیدوارم شما هم مثل من در کنارتون در سال جدید کسی باشه که توی سختی های که قراره تحمل کنید همراهتون باشه.
🎵امیدوارم شانس امتحان کردن چیزهای جدید رو به خودتون بدید.
⚡️ امیدوارم آخر ۱۴۰۴ به خودتون بگید خیلی سال سختی بود، ولی من تونستم.

من سال جدید رو سال تمام کردن شروع کردن و شروع کردن تمام کردن اسم گذاری می کنم. امیدوارم ههمون کار های ناتموم رو تموم کنیم.

سال جدید رو بهتون تبریک میگم.
Please open Telegram to view this post
VIEW IN TELEGRAM
91👍6😁5👎2
سلام،
👌 یه جمله ای توی یک کنفرانس شنیدم که جالب بود. برای تفکر بهش توی تعطیلات گزینه مناسبیه:

We should be engineers, not artists.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23👎3😁1
Forwarded from iCodeNext
🌑 اصطلاح "دود و آینه" (Smoke and Mirrors) ریشه در هنر شعبده‌بازی و تئاتر دارد و به تکنیک‌هایی اشاره می‌کنه که برای ایجاد توهم و فریب به کار می‌روند. این اصطلاح به‌طور خاص به استفاده از دود و آینه‌ها برای پنهان‌کاری و خلق تصاویری وهم‌انگیز مربوط می‌شود.

🧙‍♂️ شعبده‌بازان و هنرمندان تئاتر قرن‌هاست که از این تکنیک‌ها برای گول زدن مخاطب استفاده می‌کنند.

برای مثال، در قرن ۱۹، بسیاری از شعبده‌بازان مشهور برای ایجاد توهماتی مانند "احضار ارواح"، "غیب شدن اشیا" یا "شناور شدن اجسام" از ترکیب دود و آینه استفاده میکردند. در واقع این ترفندها به آن‌ها اجازه می‌داد تا چیزی را که در واقعیت اتفاق نمی‌افتد، کاملاً واقعی جلوه دهند.

🌀 استفاده در برنامه‌نویسی و فناوری

در دنیای فناوری، "دود و آینه" به عنوان یک استعاره برای روش‌هایی به کار می‌رود که باعث می‌شوند یک سیستم بهتر، کارآمدتر یا کامل‌تر از آنچه واقعاً هست به نظر برسد. این روش‌ها معمولاً برای پنهان کردن محدودیت‌ها، مشکلات یا پیچیدگی‌های فنی مورد استفاده قرار می‌گیرند.

ادامه در کامنت:

@iCodeNext
👍13
Forwarded from iCodeNext
🎉🎉 تو یه جمع آنلاین دوستانه و باحال می‌خوایم راجب الگوهای معماری Event -Driven چیزایی یاد بگیریم!

این جلسه رایگانه
ظرفیت : 99 نفر (اگر حضور دارید، ثبت نام کنید)
زمان: 5 شنبه - 21 فروردین - ساعت 9.30 صبح


. توی این دورهمی آنلاین، می‌خوایم دنیای جذاب طراحی بر اساس رویدادها رو بررسی کنیم و چند تا الگو رو باهم یاد بگیریم.

جلسه تو گوگل میت برگزار می‌شه و دو لینک جداگانه برای دو ساعت مختلف برات ایمیل می‌شه.

🚀 منتظرت هستیم!

لینک ثبت نام برای دریافت لینک ورود و یادآوری.

https://lu.ma/43uky7t6
13👍5🔥3😁1
به عنوان کسی که سالهاست داره دات نت کد میزنه، باید بهتون بگم php، مخصوصا از ورژن ۸ به بعد، بالای ۸۰٪ حتی در اسم کلاس های پایه ای شکل #C هست.
یعنی شما با ۱ ماه وقت گذاشتن میتونید روی php هم به راحتی کد بزنید.
🔥15👍8😁1
Forwarded from AI Pulse (Mohammad)
شرکت متا نسل چهارم از مدل‌های زبانی Llama را معرفی کرده که با توانایی‌های چندوجهی و پشتیبانی از کانتکست بسیار بلند، رقیب بسیار جدی‌ای برای مدل‌های اوپن سورس محسوب میشن.

در این مجموعه سه مدل معرفی شده‌: Llama 4 Scout، Llama 4 Maverick و Llama 4 Behemoth. دو مدل اول به صورت Open Weight عرضه شدن و برای استفاده در پلتفرم‌هایی مثل WhatsApp، Messenger، Instagram Direct و نسخه وب Meta AI در دسترس قرار گرفتن.

مدل Scout با ۱۷ میلیارد پارامتر فعال و ۱۶ متخصص، قوی‌ترین مدل توی کلاس خودش به‌شمار میاد و با وجود توانایی‌های چشمگیر، روی یک GPU از نوع H100 اجرا می‌شه. این مدل با داشتن پنجره کانتکست ۱۰ میلیون توکنی، عملکردی بهتر از مدل‌هایی مثل Gemma 3 و Gemini 2.0 Flash-Lite ارائه می‌ده.

مدل Maverick هم که از همون تعداد پارامتر فعال اما با ۱۲۸ متخصص بهره می‌بره، در تست‌های گسترده از GPT-4o و Gemini 2.0 پیشی گرفته و با مدل‌هایی مثل DeepSeek v3 در زمینه‌های استدلال و کدنویسی رقابت می‌کنه؛ اون هم با نصف تعداد پارامتر فعال.

قدرت این مدل‌ها تا حد زیادی مدیون مدل Behemoth هست؛ یک مدل بزرگ ۲ تریلیونی با ۲۸۸ میلیارد پارامتر فعال که نقش "معلم" رو در فرایند آموزش ایفا کرده. Behemoth در بنچمارک‌های ریاضی، کدنویسی و زبان‌های مختلف عملکردی بهتر از مدل‌های شاخصی مثل GPT-4.5، Claude 3.7 و Gemini 2.0 Pro داشته. هرچند هنوز به‌طور کامل عرضه نشده، اما متا وعده داده به‌زودی اطلاعات بیشتری درباره‌ی اون منتشر کنه.

در طراحی این مدل‌ها، معماری Mixture of Experts به‌کار گرفته شده که با فعال‌سازی بخشی از پارامترها به‌ازای هر توکن، هم بازدهی محاسباتی رو افزایش داده و هم کیفیت مدل رو نسبت به مدل‌های متراکم بهبود داده. Llama 4 همچنین به‌صورت چندوجهی طراحی شده و می‌تونه همزمان ورودی‌های متنی و تصویری رو پردازش کنه. در فاز آموزش، از داده‌های متنی، تصویری و ویدیویی در مقیاس بالا استفاده شده و تکنیک‌های جدیدی مثل MetaP برای بهینه‌سازی هایپرپارامترها به‌کار رفته.

در مرحله پس‌آموزش، متا از روش‌های جدیدی مثل یادگیری تقویتی آنلاین و بهینه‌سازی مستقیم ترجیحی برای بهبود مهارت‌های مدل در استدلال، مکالمه و چندوجهی‌بودن استفاده کرده.

مدل Maverick با بهره‌گیری از این روش‌ها، عملکرد چشمگیری در درک تصویر، تولید متن، پاسخ به پرسش‌های بصری و وظایف پیچیده نشون داده. مدل Scout هم با وجود حجم کمتر، در زمینه‌هایی مثل کدنویسی، پردازش کانتکست بلند، و درک تصویری، نتایجی بهتر از تمام نسل‌های قبلی Llama ارائه می‌ده.

در نهایت، متا تأکید کرده که این مدل‌ها با بالاترین استانداردهای ایمنی توسعه داده شدن. ابزارهایی مثل Llama Guard، Prompt Guard و سامانه‌ی تست GOAT برای جلوگیری از خروجی‌های نامناسب یا سؤاستفاده از مدل‌ها ارائه شده و توسعه‌دهندگان می‌تونن این ابزارها رو متناسب با نیاز خودشون تنظیم کنن. همچنین تلاش‌هایی هم برای کاهش سوگیری‌های سیاسی و اجتماعی در پاسخ‌های مدل صورت گرفته تا Llama 4 بتونه دیدگاه‌های مختلف رو به‌درستی درک و بیان کنه.

@aipulse24
🔥8👍4
سلام سلام.

این یک آگهی شغلیه، ولی کمی متفاوت.
من برای تیم خودم در دیجیکالا دنبال چند مهندس نرم افزار خبره می گردم.
وظیفه این مهندس نرم افزار کار روی سیستم هایی هست که تراکنش های بسیار بالایی (مثل پیک های بزرگ فروش مثل بلک فرایدی و ...) خواهد بود.

افراد مورد نظر باید شرایط زیر رو داشته باشن :
1. زبان برنامه نویسی این تیم فعلا PHP و Java هست ولی به صورت کلی استک شما اهمیتی نداره.
2. بیشتر از 6 سال سابقه توسعه نرم افزار داشته باشن.
3. به ریفکتور علاقه داشته باشن.
4. در محیط های پیچیده قابلیت پیدا کردن راه رو داشته باشن.

اگر علاقه دارید به این تیم بپیوندید برای شروع کافیه برای مساله زیر راه حل ارائه بدید :

سیستمی رو طراحی کنید که از پارامتر های زیر رو داره :
1. کیف پولی که برای هر فرد دارای چندین نوع حساب می باشد.
2. سرویس مدیریت تبلیغاتی که وظیفه بروز رسانی وضعیت ادامه نمایش تبلیغات را بر اساس بودجه و مانده حساب کاربر در کیف پول بر عهده دارد.
3. سیستم نمایش تبلیغاتی که وظیفه ارائه تبلیغات را بر عهده دارد.

بر اساس سیستم ها فوق، طراحی ای پیشنهاد بدهید که :
1. دقیق ترین گزارشات بابت هزینه کرد کاربر از کیف پول خود را داشته باشد.
2. دسترس پذیری بالایی داشته باشه.
3. ارتباط بین سرویس ها بهینه باشه.

افرادی که علاقه مند هستند، می تونن از طریق این لینک اقدام کنن :

https://survey.porsline.ir/s/BMp5Uth

ممنون میشم این آگهی رو برای افراد علاقه مند ارسال کنید.

@Learning_with_m

#استخدام
👍27🔥64👎1
tech-afternoon
🔔 ۲۵ دقیقه دیگه 😉 گوگل میت
این جلسه الان داره برگزار میشه.
خوشحال میشم ببینمتون
5
به همکارمون گفتم درخواست پایه مانیور بزن برای خودت.
این شد نتیجش !

#فان

@learning_with_m
😁39👍3👎1
Forwarded from tech-afternoon (Amin Mesbahi)
2️⃣ جلسه دوم مرور مهارت‌های مورد نیاز و مسیر رسیدن به مهندس ارشد نرم‌افزا

اگر نظر مثبتی نسبت به جلسه اول «مرور مهارت‌های مورد نیاز و مسیر رسیدن به مهندس ارشد نرم‌افزار» داشتید و فکر می‌کنید ادامه بحث می‌تونه براتون جالب باشه، لطفا از طریق فرم زیر بگید 😊

🗓 برای روز یکشنبه ۷ اردیبهشت (۲۷ اپریل) ساعت ۱۸:۳۰ به وقت تهران

https://forms.gle/ayy2Q3MESKnhrNt3A
Please open Telegram to view this post
VIEW IN TELEGRAM
👍133🔥1
Forwarded from .NET Internals
هفت عادت آدم های بسیار ناکارآمد!

عادت ۱: واکنش نشان بده React
همه مشکلاتت را گردن رئیس بد، والدین، ژن‌ها، همسر، شریک، اقتصاد یا دولت بینداز. هیچ مسئولیتی قبول نکن. اگر گرسنه‌ای، بخور؛ اگر عصبانی شدی، داد بزن؛ اگر کسی بی‌ادبی کرد، جوابش را بده. فقط واکنش نشان بده.

عادت ۲: بدون هدف شروع کن Begin with Squad in Mind
برنامه‌ریزی نکن، هدف نگذار و نگران پیامدهای کارت نباش. فقط با جریان زندگی حرکت کن و خوش بگذران؛ فردا ممکن است نباشد.

عادت ۳: کارهای مهم را به آخر بینداز Put First Things Last
همیشه کارهای فوری مثل پاسخ دادن به پیام‌ها و نوتیفیکیشن‌ها را اول انجام بده. کارهای مهم مثل تقویت روابط یا ورزش را بگذار برای بعد. روزت را با دیدن ویدیوهای یوتیوب پر کن.

عادت ۴: طرز فکر برد-باخت داشته باش Think Win-Lose
زندگی را یک رقابت بی‌رحمانه ببین. اگر دیگران برنده شوند، تو بازنده‌ای. پس قبل از اینکه دیگران تو را شکست دهند، تو آن‌ها را شکست بده. اگر هم باختی، مطمئن شو که طرف مقابل را با خودت پایین بکشی.

عادت ۵: اول حرف بزن، بعد وانمود کن گوش می‌دهی Seek First to Talk, Then Pretend to Listen
زیاد حرف بزن. اول نظرات خودت را به همه بگو. اگر مجبور شدی، فقط وانمود کن گوش می‌دهی. در ذهن خودت درباره ناهار فکر کن. یا اگر واقعاً خواستی نظر کسی را بدانی، نظرت را به جای او بهش بده!

عادت ۶: جزیره‌ای برای خودت باش Be an Island
دیگران متفاوت‌اند و عجیب. چرا وقت تلف کنی که با آن‌ها کنار بیایی؟ همکاری وقت‌گیر است. خودت همیشه بهترین ایده‌ها را داری، پس تنهایی کار کن و برای خودت یک جزیره‌ی خاص باش.

عادت ۷: خودت را فرسوده کن Burn Yourself Out
آنقدر مشغول باش که وقت استراحت کردن یا یادگیری چیزهای جدید نداشته باشی. ورزش را فراموش کن. سراغ کتاب خوب، طبیعت، هنر یا موسیقی نرو. فقط بسوز و بسوز!

نظرتون چیه؟ باید اعتراف کنم عادت 7 رو دارم ولی دارم روش کار میکنم که ترکش کنم

از کتاب:
The 7 Habits Of Highly Effective People (Stephen R. Covey)
👍2610
Forwarded from tech-afternoon (Amin Mesbahi)
📱 معماری سلولی چیه، لزوم توجه بهش؛ و چرا slack رفت دنبالش؟

بی‌مقدمه: فصل گرما در پیش است، اخبار گواه اینه که بهبود خاصی در ظرفیت تولید، یا مدیریت توزیع برق کشور اتفاق نیوفتاده، برای اینکه با از دسترس خارج شدن دیتاسنترها، سرویس‌هامون دچار مشکل نشه، بهتره نگاهی به معماری سلولی و تجربه اسلک بندازیم...

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

مشکل slack از کجا شروع شد؟
یه روز توی اسلک، نمودارهای مانیتورینگ نشون دادن که یکی از Availability Zone (AZ) های AWS در منطقه us-east-1 داره پکت‌های زیادی رو از دست میده. این باعث خطا و کندی سرویس برای کاربرها شده بود.
مشکل اصلی اینجا بود که با وجود اینکه اسلک از چند AZ استفاده می‌کرد، وقتی یک AZ دچار مشکل می‌شد، کل سرویس تحت تأثیر قرار می‌گرفت! خب این اصلاً منطقی نیست! مگه نه اینکه هدف استفاده از چند AZ همین هست که اگه یکی به مشکل خورد، بقیه کار رو پیش ببرن؟

در مورد اسلک، هر AZ تبدیل به یک سلول شد. یعنی مجموعه‌ای از سرویس‌هایی که در یک AZ هستن و می‌تونن به عنوان یک واحد از سرویس خارج بشن یا به سرویس برگردن.

🎯 اسلک چهار هدف اصلی داشت:

- حذف ترافیک از یک AZ در کمتر از ۵ دقیقه (سرعت)
- حذف ترافیک نباید باعث خطای قابل مشاهده برای کاربر بشه
- خروج و بازگشت ترافیک یک AZ باید تدریجی باشه (مثلاً ۱٪ یا ۱۰٪)
- مکانیزم Drain نباید به AZ مشکل‌دار وابسته باشه

🧠 استراتژی‌های پیاده‌سازی در اسلک

*️⃣منزوی‌سازی (Siloing): سرویس‌ها در یک AZ فقط با سرویس‌های همون AZ ارتباط داشته باشن. ساده‌ترین روش، اما برای همه سرویس‌ها امکان‌پذیر نیست.

*️⃣مدیریت سرویس‌های با consistency قوی: سرویس‌هایی مثل Vitess (لایه شاردینگ روی MySQL) نیاز به مدیریت failover دارن.

*️⃣تقسیم‌بندی براساس CAP: سرویس‌ها براساس نیازشون به Consistency یا Availability دسته‌بندی شدن:
🔤سرویس‌های Stateless مثل webapp ها (راحت‌ترین)
🔤سرویس‌های Eventually Consistent مثل Memcache (نسبتاً راحت)
🔤سرویس‌های Strongly Consistent مثل Vitess (سخت‌ترین)


*️⃣کنترل ترافیک با Envoy و xDS: استفاده از traffic weighting برای هدایت تدریجی ترافیک

چرا این بار موفق شدن؟
اسلک قبلاً یک بار تلاش کرده بود این کار رو انجام بده و شکست خورده بود. این بار چند اصل مهم رو رعایت کردن:

- تدریجی بودن (Incrementality): به جای ساخت یک سیستم کاملاً جدید و تغییر یکباره، هر سرویس رو جداگانه و تدریجی تغییر دادن.
- نگاه از پایین به بالا (Bottom-up): با هر تیم سرویس جداگانه کار کردن و راهکار مخصوص اون سرویس رو پیدا کردن.
- به اندازه کافی خوب (Good Enough): پذیرفتن اینکه لازم نیست همه سرویس‌ها یکجا و کامل تغییر کنن.
- رویکرد Roofshot به جای Moonshot: به جای یک حرکت مستقیم و بلندپروازانه، مجموعه‌ای از قدم‌های کوچکتر که در هر مرحله ارزش ایجاد می‌کنه.
- تست‌های منظم: هر هفته یک AZ رو drain می‌کردن و پیشرفت رو اندازه می‌گرفتن.

⛳️ نتایج:

- الان می‌تونن یک AZ رو در ۶۰ ثانیه از سرویس خارج کنن
- هزینه‌های انتقال داده بین AZ کاهش پیدا کرده
- یک مکانیزم blue-green deployment جدید به دست آوردن
- راهکار عمومی برای مقابله با مشکلات محدود به یک AZ دارن

📝 نکته‌های کلیدی برای پروژه‌های زیرساختی بزرگ

*️⃣تدریجی ولی مداوم کار کنید: پروژه‌های بزرگ زیرساختی باید گام به گام پیش برن
*️⃣در نظر بگیرید هر سرویس دلیلی برای وضعیت فعلیش داره: تصور نکنید که افراد دیگه اشتباه کردن
*️⃣ارزش رو در هر مرحله قفل کنید: پروژه باید در هر مرحله ارزش ایجاد کنه، نه فقط در پایان
*️⃣کارآیی رو برای کاهش ریسک فدا کنید: گاهی راه مستقیم، بهترین راه نیست

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

💬 اگر دوست داشتید در موردش صحبت کنیم، حتمن بگید، سوال و پیشنهاد هم مثل همیشه باعث خوشحالی...
Please open Telegram to view this post
VIEW IN TELEGRAM
👍115
در راستای حرکتی که فقط از یک شرکت بی کیفیت مثل پارس پک میشه انتظار داشت:

Prejudice is the child of ignorance.
- George Orwell

تعصب فرزند نادانی است.
- جرج اورول
👍35🔥4
Forwarded from tech-afternoon (Amin Mesbahi)
📇 تاریخچه و زمینه پیدایش مایکروسرویس

شاید بد نباشه تا دفعه بعد که خواستید در مورد معماری و ساختار یه پروژه تصمیم بگیرید، یه بار پیشینه‌ی پیدایش مایکروسرویس رو مرور کنین تا از تناسب «نیاز» و «راهکار»ی که مدنظر دارید مطمئن باشید.

نمیشه دقیق و قاطع گفت «اولین» بار کی مفهوم مایکروسرویس رو پیاده کرده. مفهوم مایکروسرویس‌ از تکامل معماری‌های قبل‌تر از خودش، خصوصا به عنوان یک پاسخ به محدودیت‌های سیستم‌های یکپارچه، و پیچیدگی معماری سرویس‌گرا (SOA) شکل گرفت. حالا دو چیز رو باید توضیح داد، یک شیوه‌های امروزی‌تر پیاده‌سازی مایکروسرویس، و یکی مفهوم و معماری‌اش. برای پیاده‌سازی مدرن، نتفلیکس رو می‌شه به عنوان یکی از اولین و تأثیرگذارترین پذیرندگان رویکرد میکروسرویس‌ توی مقیاس بزرگ شناخت. نتفلیکس مهاجرت خودش از معماری یکپارچه به مایکروسرویس‌ها رو حدود سال ۲۰۰۹ شروع کرد، خیلی قبل از اینکه اصطلاح "مایکروسرویس‌" به طور رسمی سال ۲۰۱۱ مطرح بشه. تا سال ۲۰۱۱، نتفلیکس طراحی مجدد بخش قابل توجهی از سیستم‌هاش به مایکروسرویس‌ها رو تکمیل کرده بود و از AWS استفاده می‌کرد، و خیلی از الگوهایی که امروز به عنوان استاندارد یا best practice شناخته می‌شن رو پیاده کرده بود.

ولی از نظر مفهومی، آمازون یکی از پذیرندگان اولیه و کلیدی است. یعنی حدود سال ۲۰۰۱، آمازون (در اون زمان تحت هدایت جف‌ بزوس) شروع می‌کنه به تجزیه سیستم‌های یکپارچه، بزرگ و مستحکمش به سرویس‌های کوچک‌تر و مستقل تا بتونه مشکلات مقیاس‌پذیری و استقرار رو بهبود بده. این انتقال، زمینه رو برای اونچه سال‌ها بعد، به عنوان معماری مایکروسرویس می‌شناسیم، فراهم کرد.

پذیرندگان بعدی این معماری، از eBay و Spotify و... همه یک سری دغدغه مشترک داشتن، یعنی مقیاس‌پذیری، پیچیدگی و وسعت سیستم، و استقرار، اونم با تیم‌های بزرگ.

بیایم نگاه بندازیم به روایات!
جناب Fred George یکی از پیشگامان معماری مایکروسرویس می‌گه هر مایکروسرویس باید به قدری ساده و کوچک باشه که توی ذهن یک توسعه‌دهنده جا بشه:

"small enough and simple enough that a single developer can understand the whole thing"


بعدتر همین رو مارتین فولر هم به نحوی تکرار می‌کنه.

حالا سوال اینه که اگر تیم توسعه و تعداد سرویس‌ها بزرگ نیستند، آیا مقیاس‌پذیری مورد نیازمون به حدی رسیده که scale-up پاسخگو نباشه و بریم سراغ شکست و توزیع سرویس‌ها؟ آیا زیرساخت لازم رو از پردازش ابری تا DevOps تا مونیتورینگ/observabilty و... داریم؟ آیا ظرفیت مستندسازی API، فرایند، کاتالوگ داده‌ها و فرایندها و... رو داریم؟

تجربیات مستند زیادی وجود داره که استارتاپ‌ها و تیم‌های کوچیک زیادی «زودتر از موعد» به سراغ مایکروسرویس رفتن و از عهده‌ی سربارش بر نیومدن... یادمون نره، معماری باید در خدمت مسائل ما باشن، نه اینکه ما در خدمت معماری دربیایم.

توی مباحث DDD به تفصیل خواهم گفت که معماری سازمانی ما هم حتی باید با شیوه تحلیل نیازمندی‌ها و شیوه ترجمه‌ی اون‌ها به راهکارهای نرم‌افزاری سازگار باشه.

مایکروسرویس فقط تفیکیک کدها به چند پوشه و وصل کردنشون با API و دپلوی کردنشون تحت پروسه‌های مجزا نیست! و ای بسا می‌تونه آغازی بشه بر مصیبت‌های آشکار فنی و آسیب‌های پرشمار پنهان، منجمله نپرداختن به ریشه‌ی کاستی‌ها، یا افتادن به تله‌ی مرزبندی اشتباه سرویس‌ها از هم.

لذا مایکروسرویس، در زمان مناسبش و با فراهم کرن پیش‌نیازهاش، و علی‌الخصوص وقتی که در خدمت حل‌کردن مسائل ما باشه همون قدر خوب و مفیده که وقتی زودهنگام یا بدون پیش‌نیازهاش می‌ریم سراغش، مضر!

💬 نظر یا تجربه شما چیه؟
Please open Telegram to view this post
VIEW IN TELEGRAM
15👍7