د دې لپاره چې ستاسو د کوډ بیس په ډیری وختونو کې کولی شي په سمه توګه ستاسو د ټیم سرعت خراب کړي - او د بدیل لپاره څه وکړئ.
د دې لپاره چې ستاسو د کوډ بیس په ډیری وختونو کې کولی شي په سمه توګه ستاسو د ټیم سرعت خراب کړي - او د بدیل لپاره څه وکړئ.
په پیل کې،your survival depends on how quickly you can iterate, ship features, and deliver value to end-usersدلته دا دی چې ستاسو د پیل کولو بنسټیز آرکټیکټیکټ یو لوی رول لري؛ برسېره پر دې، لکه ستاسو د تکنالوژۍ کڅوړه او د پروګرام کولو ژبه انتخاب په مستقیم ډول ستاسو د ټیم سرعت اغیزه کوي. د غلط آرکټیکټیکټ، په ځانګړې توګه د مخکښ microservices، کولی شي په عمده توګه د تولیدات ته زیان ورکړي او د سافټویر د وړاندې کولو کې د لګولو هدفونو ته مرسته وکړي.
زه د دې تجربه لرئ کله چې د لومړنۍ مرحله کې پیل کولو لپاره د ګرانفیلډ پروژو په کارولو کې کار وکړم، کله چې په سافټ آرکټیکټیکټ کې مسؤلیتونه ترسره شوي دي چې د نږدې بشپړ خدمتونو او خدمتونو ته اړتیا لري.ناڅاپي، over-engineered او کښته محلي نصبونهاوdemoralized teamsکوم چې د غیر ضروری پیچیدو د ساتنې هڅه کوي.
مخکې چې په ځانګړي کڅوړې کې ډاونلوډ کړئ، دلته دا دی چې تاسو په واقعیت کې کله چې د مایکروسافټونو په مخکښ وخت کې رامینځته کړئ:
Microservices Early On: What You’re Paying For
Pain Point |
Real-World Manifestation |
Developer Cost |
---|---|---|
Deployment Complexity |
Orchestrating 5+ services for a single feature |
Hours lost per release |
Local Dev Fragility |
Docker sprawl, broken scripts, platform-specific hacks |
Slow onboarding, frequent breakage |
CI/CD Duplication |
Multiple pipelines with duplicated logic |
Extra toil per service |
Cross-Service Coupling |
"Decoupled" services tightly linked by shared state |
Slower changes, coordination tax |
Observability Overhead |
Distributed tracing, logging, monitoring |
Weeks to instrument properly |
Test Suite Fragmentation |
Tests scattered across services |
Brittle tests, low confidence |
پراختیا پیچیدو
د یو ځانګړتیا لپاره د 5+ خدماتو orchestrating
Hours lost per release
د محلي Dev Fragility
د ډکر پراختیا، کڅوړه سکرپټونه، د پلیټ فارم ځانګړي هیکونه
Slow onboarding, frequent breakage
CI / CD دوپلیکیشن
Multiple pipelines سره دوه ګوني منطق
Extra toil per service
د Cross-Service Coupling
د "پړاو" خدمتونو سره د مشترکه حالت سره تړاو لري
Slower changes, coordination tax
د څارنې Overhead
توزیع شوي څارنه، لوګ، څارنه
Weeks to instrument properly
ټیسټ سټیشن Fragmentation
ټسټونه په خدمتونو کې پراخ شوي
Brittle tests, low confidence
راځي چې څنګه د microservices په اغیزمنه توګه په لومړنۍ وخت کې وکاروي، کله چې دوی په حقیقت کې مرسته کوي، او څنګه د سرعت او د ژوند لپاره ستاسو د start-up سیستمونه جوړ کړي.
Monoliths د دشمن نه دي
که تاسو ځینې SaaS محصول جوړ کړئ، حتی یو ساده SQL ډاټا ډاټا په پایله کې کولی شي ستاسو د سوداګرۍ منطق کار کولو په لاره کې ډیری داخلي پیچیدو ورکړي؛ برسېره پر دې، تاسو کولی شئ د مختلفو انټرنټونو او پیژندنې کارونو ته لاړ شئ چې اجازه ورکوي چې یو ډاټا سیټ بدل کړئ.
په وخت کې، ځینې وختونه غیر ضروری ځانګړتیاوې، دا ناڅاپي ده چې ستاسو اپلیکیشن کولی شي ناڅاپي وي. د monoliths په اړه ښه څه دی: دوی اوس هم کار کوي.Monoliths, even when messy, keep your team focused on what matters most:
- په ژوند کې
- د مشتریانو د ارزښت وړاندې کولو
د monoliths ترټولو لوی ګټې ده چې دوی په پراختیا کې ساده دي. په عمومي توګه، د دغو پروژو د موجوده فریم ورکشاپونو په اړه جوړ شوي دي - دا ممکن د Python لپاره Django وي،د ASP.NETد C # لپاره، Nest.js لپاره Node.js غوښتنلیکونه، او داسې نور کله چې تاسو د monolithic آرکټیکټریټ په لټه کې یاست، تاسو د ښکلي microservices په پرتله ترټولو لوی ګټې ترلاسه کړئ - د Open Source ټولنې او پروژې ساتونکو پراخه ملاتړ چې په عمده توګه د دغو فریم ورکشاپونو لپاره د یو واحد پروسه، monolithic اپلیکیشن په توګه کار وکړي.
په يو انټرنیټ انټرنټ کې چې زه د انټرنېټ ټیم لارښود، او ځینې وختونه د تکنالوژۍ انتخابونو په اړه د انټرنیټ انټرنټ ټیم سره مشورې کړ، موږ د Laravel پر بنسټ د اپلیکیشن کې یو دلچسپ پرمختګ لرو. هغه څه چې د انټرنیټ انټرنیټ ایجنټانو لپاره د سوداګرۍ مدیریت لپاره یو کوچني ډیزاین بورډ په توګه پیل شوه، په دوامداره توګه د ډیری لوی سیسټم ته وده ورکړي.
د وخت په اوږدو کې، دا د ځانګړتیاوو غليظ سیټ ته وده ورکړي چې د ډیری ګیګابایټونه د سندونو په کارولو سره وده ورکړي او د نورو خدمتونو ډیری سره یوځای شوی. په هرصورت، دا د Apache په کارولو کې د پی ایچ پی په پرتله بنسټیز ډول جوړ شو.
د ټیم په عمده توګه د Laravel ټولنې لخوا سپارښتنه شوي غوره عملیاتو پر بنسټ و. دا تعقیب پیژندل شوی، موږ کولی شو د غوښتنلیک وړتیاوې په عمده توګه کچول کړي په داسې حال کې چې هم د سوداګرۍ اړتیاوو او انتظارونو پوره کړي.
دلچسپي لري، موږ هیڅکله به د سیسټم په مایکروسافټونو کې راټول شي یا ډیر پیچلي انټرنېټ موډلونه ونیسئ. موږ په دې توګه ډیری غیرقانوني پیچليې مخنیوی وکړئ. د معماری سادهتیا موږ ته د ګټه ورکړي. دا هغه څه راځي چې نورو یې لیکلي شوي دي - لکه د Basecamp په څیرد “Majestic Monolith”، کوم چې ښيي چې څنګه ساده دی په لومړنۍ وخت کې یو سوپر ځواک.
خلک اغېز کوي چې دا سخت دی چې monoliths scalable کړي، خو دا بد modularization دهد داخليد monolith چې کولی شي د دې ستونزو له لارې وده ورکړي.
Takeaway: A well-structured monolith keeps your team focused on shipping, not firefighting.
مګر آیا د مایکروسافټونو "د غوره عمل" نه دي؟
ډیری انجنيرونه د microservices لپاره په تیرو وخت کې ته ورسیږي، فکر کوي چې دوی "د حق لاره" دي. او ډاډ - په کچه، دوی کولی شي مرسته وکړي. مګر په یو پیل کې، دا ورته پیچیدو بدل کیږي.
Microservices یوازې په هغه وخت کې پیسې ورکوي چې تاسو په حقیقت کې د پیاوړتیا بوتلونه، لوی ټیمونه، یا مستقل ډول پرمختللي ډومینونه لري. مخکې له دې؟ تاسو د ګټورۍ له لارې د بیلګې په توګه د بیلابیلو انټرنېټونو، حساس محلي تنظیماتو او روښانه iteration لخوا پیسې ورکړئ.Segmentپه پای کېد مایکرو خدمتونو د تقسیم بدلوند دې دقیق دلیل - ډیر لګښت، نه کافی ارزښت.
Takeaway: Microservices are a scaling tool — not a starting template.
کله چې microservices غلط دي (د ځانګړي ډول په پیل کې)
په یوه لومړنۍ مرحله کې ډلې چې زه مشورې وکړه، د خدمتونو د تقسیم کولو په اړه د PM انجنيرۍ تعقیب د تخنیکي ګټه په پرتله ډیر جوړ شوی. د آرکټیکټوریټ نه یوازې کوډ جوړ شوی، بلکه څنګه چې موږ طرح شوي، تخنیک شوي او ترانسپورت شوي. دا سازماني مالیې په اسانۍ سره نږدې ده - تر هغه چې ډیر دیره ده.
دلته تر ټولو عام anti-patterns چې په لومړنۍ وخت کې کټګورۍ.
1. د عادي خدماتو محدودیتونه
په نظریاتو کې، تاسو کولی شئ د غوښتنلیکونه د سوداګرۍ منطقي ډومینګ له مخې تقسیم کړي - د کاروونکو خدمت، د محصول خدمت، د امر خدمت، او داسې نور. دا معمولا د Domain-Driven Design یا Clean Architecture مفهومونو څخه لیږدول کیږي - کوم چې په کچه معنی لري، مګر په لومړنۍ مرحله کې محصولاتو کې، دوی کولی شي د جوړښت څخه مخکښ وي، مخکې چې د محصول په ځان ثبات یا تایید شي. تاسو په پایله کې:
- د مشترکه ډاټا بیس
- Cross-Service د ساده workflows ته اړتیا لري
- د نښلیدو په توګه د "د انفرادی" disguised
په يو پروژې کې، زه یو ټیم وګورئ چې د کاروونکي، تصدیق، او مجازيت په انفرادي خدماتو کې راټول کیږي، کوم چې د اپلوز کولو پیچیدو او د هر API عملیات لپاره د خدمتونو تعقیب ستونزه ته اړتیا لري.
په واقعیت کې، د سوداګرۍ منطق په مستقیم ډول د خدمتونو محدودیتونه نندارې نه کوي. د مخکښ جديرې د سیسټم څخه حساس شي او ډیری وختونه د بدلونونو په چټکۍ سره ترسره کولو لپاره سخت دي.
په بڼه کې، په جراحيه توګه د بوتلونو د تعلیق کول - په حقیقت کې د اندازه کولو درد پر بنسټ، نه د نظریاتي ښکلا.
کله چې زه د لومړني مرحله ټیمونو روزل کړم، موږ ځینې وختونه داخلي پرچونونه یا تبادلې تبادلې کاروئ ترڅو په راتلونکي خدمتونو تبادلې تبادلې تبادلې وکاروئ - د مستقیم عملیاتي تبادلې پرته. دا د محصول او انجنيرۍ وړاندیز کوي چې د محدودیتونو په ارگانیک ډول څیړنه وکړي، مخکې د مخکښ انستافورټ کې بند کړئ.
Takeaway: Don’t split by theory — split by actual bottlenecks.
2. Repository او د زیربنا Sprawl
کله چې د غوښتنلیک کار کوي، معمولا یو بل ټولګه مهم دی:
- د کوډ سټیل مطابقت (Linting)
- د انټرنېټ ازموینې، په شمول د انټرنېټ ازموینې
- د محلي چاپیریال ترتیب
- د سند
- د CI / CD ترتیب
که ستاسو پروژې د monorepo په توګه جوړ شوی دی، تاسو کولی شئ خپل ژوند د مرکز CI / CD سیسټم سره ساده کړئ (که تاسو د GitHub Actions یا GitLab CI سره کار کوي). ځینې ټیمونه microservices په انفرادي ذخیره کوو، کوم چې د کوډ مطابقت او ورته سیټ سیسټمونه د اضافي وسایلو یا وسایلو له الرې د ساتنې سخت کوي.
د درې شخصو ټیم لپاره، دا بیلابیلو ده. د ذخیره کولو او وسایلو په منځ کې د کنټسټم بدلون د هر ډول ځانګړتیاوو لپاره د پرمختګ وخت زیاتوي.
د monorepos او یو واحد پروګرامنگ ژانر په کارولو سره ستونزو د کمولو
د دې ستونزو د کمولو لپاره ډیری لارهونه شتون لري. د لومړنۍ پروژو لپاره، د واحد مهمې څه دی - ستاسو کوډ په یو monorepo کې ذخیره کړئ. دا تضمین کوي چې د کوډ یو واحد نسخه شتون لري چې په پروډ کې شتون لري، او دا د کوډ جائزاتو سره هم آسان دی او د کوچني ټیمونو لپاره همکارۍ کوي.
د Node.js پروژو لپاره، زه د یو monorepo آله کارولو په سخت ډول سپارښتنه کوي لکهnx
یاturborepo
د هر دو:
- په ټوله پروژو کې د CI / CD ترتیب ساده کړئ
- د dependency graph-based build caching ملاتړ
- اجازه ورکړئ چې د داخلي خدماتو د TypeScript کتابتون په توګه د کارولو (د ES6 وارداتو له لارې)
دا وسایلو د وخت خوندي دي، که څه هم کولی شي د کوډ چاپولو لپاره یا آرکوسټریشن ته وده ورکړي. که څه هم، دوی د حقیقي سوداګریزونو سره راځي:
- د پیچلي addictive درختونه کولای شي په چټکۍ سره وده ورکړي
- د CI کړنو ټینګ نږدې نږدې ناقانونه ده
- تاسو کولی شئ په چټکۍ سره وسایلو ته اړتیا لرئ (چې د بون په څیر) د جوړ وختونو کمولو لپاره
د مجموعې لپاره: Tooling likenx
یاturborepo
د کوچني ټیمونو monorepo سرعت ورکوي - که تاسو غواړئ د دوی د پاکولو لپاره سرمایه وکړي.
کله چې د پرمختګgo
د microservices پر بنسټ، د پراختیا په پیل کې یو ښه ایده دا ده چې یو واحد کارول go
د کار د فضا سرهreplace
د لارښود ingo.mod
په پای کې، لکه څنګه چې د سافټویر کچه کوي، دا امکان دی چې په آسانه توګه جدول شي go
ماډلونه په انفرادي ذخیره کې.
Takeaway: A monorepo with shared infra buys you time, consistency, and sanity.
3. د ځمکې د خراب Dev = د ځمکې د خراب سرعت
If it takes three hours, a custom shell script, and a Docker marathon just to run your app locally, you've already lost velocity.
د لومړي پروژو اغیزمن دي له:
- د سندونو کمښت
- د مخدره بستې
- د OS ځانګړي هیکونه (د سلام، د لینوکس یوازې نصبونه)
په زما تجربه کې، کله چې زه د پرمختګ ټیم څخه پروژې ترلاسه کړم، دوی معمولا د یو واحد OS لپاره پراختیا شوي دي. ځینې پراختیاونه د macOS پر جوړولو ترټولو ترټولو ترټولو ترټولو ترټولو ترټولو ترټولو ترټولو په ویډیوډ کې د خپل shell سکرپټونو ملاتړ کوي. په زما وروستیو ټیمونو کې، زه انجنيرانو لخوا په ویډیوډ ماشینونو کې کار کړم، او ډیری وختونه دا اړتیا لري چې د shell سکرپټونو په بشپړه توګه جوړ کړئ یا د محلي چاپیریال چلولو پروسه په بشپړه توګه پوه شي او بدل کړئ. په وخت کې، موږ د انجنیر پروژې په پرتله د چاپیریال ترتیبات ته معياري کوو ترڅو د انابول کولو در
په يو بل پروژې کې، یو سولو ډاونلوډ د مایکروسافټ سیسټم جوړ شوی، چې د Docker کانټینرونو چلولو د کار د جریان په یوه محلي فایل سیسټم کې نصب شوی. البته، تاسو د پروسو په توګه د کانټینرونو په توګه چلولو لپاره لږ قیمت ورکړئ کله چې ستاسو کمپیوټر لینکس چلوي.
خو د نوي front-end پراختیا سره د پیرودلو ویډیوډ لیپ ټاپ سره په لمر کې بدل کیږي. دوی باید د UI وګورئ د ده کانټینر ته ورسیږي. هر څه خراب شوی - حجمونه، شبکې، د کانټینر مطابقت - او د انټرنټ ډاټاټا ډیری بریالیتوب شوي. دا د انټرنټ کولو په وخت کې یو لوی رطوبت نقطې جوړ کړ.
موږ په پایله کې د Node.js پروکسي په ګډه هک کړ چې د nginx / Docker ترتیب سره د کانټینرونو پرته پیژندل. دا ښکلي نه وه، مګر دا دی چې د پراختیا د بلاکولو څخه مخه ونیسئ او د سپارلو پیل کړي.
Takeaway: If your app only runs on one OS, your team’s productivity is one laptop away from disaster.
Tip:په عادي توګه، هدفgit clone <repo> && make up
که امکان نلري، نو د ویډوز / macOS / لینکس لپاره د لارښوونې سره د اټکل شوي README فایل د ساتنې اړتیا دی. اوس مهال، ځینې پروګرامګانې او toolchains شتون لري چې په ویډوز کې ښه کار نه کوي (چون OCaml)، مګر د عصري په پراخه کچه مشهور stack په هر پراخه کچه کارول شوي اټکل سیسټم کې ښه کار کوي؛ د خپل محلي نصب د یو واحد اټکل سیسټم ته محدود کول، دا په ډیری وختونو کې د DX کې کم سرمایه کولو نشه ده.
4. تکنالوژۍ نښانې
د آرکټیکټریټ په پرتله، ستاسو د تکنالوژۍ کڅوړه هم د مایکروسافټویرونو دردناک ډول جوړوي - د مایکروسافټویر آرکټیکټریټریټریټریټریټریټریټریټریټریټریټریټریټریټریټریټریټریټریټریټریټریټریټریټریټریټریټریټریټریټریټریټریټریټریټریټریټریټریټریټریټریټریټریټریټریټریټریټریټریټریټریټریټریټریټریټریټریټریټریټ.
- Node.js او Python: د چټک iteration لپاره ښه دی، مګر د جوړولو artefacts، dependence نسخهونه، او د خدمتونو په اړه د چلند وخت تعقیب کولو مدیریت به دردناک سرعت وي.
- Go: د سټیټیک باینریټونو، چټک جوړ وختونه، او ټیټ عملیاتي overhead. نور طبيعي مناسب کله چې د تقسیم په حقیقت کې اړتيا لري.
دا خورا مهم دی چې د مناسب تخنیکي کڅوړه غوره کړئ. که تاسو د کړنو په لټه کې یاست، شاید د JVM او د دې اکوسیسټم او وړتیا لرو چې د آرټایټونه په کچه جوړ کړئ او دوی په مایکروسافټ کې چلندئ. که تاسو په چټکۍ سره د تکرارونو او پروتوټپونو لپاره په چټکۍ سره پرته له دې چې ستاسو د پلورنې انحصاریو په اړه فکر وکړئ - تاسو د پیټون په څیر یو څه سره ښه وي.
دا په اغیزمن ډول د ټیمونو لپاره پوه شي چې د تکنالوژۍ د انتخاب سره لوی ستونزې شتون لري چې په لومړیتوب کې ښکلي نه وي، او دوی باید د back-end په بل پروګرامګانې کې رامینځته کړي.د خلکود پیټون 2 کوډ بیس په اړه څه کار واخلئ او د Go ته migrated).
خو په برعکس، که تاسو واقعا اړتیا لرئ، تاسو کولی شئ د پروتوکولونو سره د ډیری پروګرام کولو ژانرونه جلا کړئ لکهgRPCیا async پیژندنه اړیکه. او دا په ډیری وختونو کې د شیانو په اړه د لاره ده. کله چې تاسو ته ورسیږي چې تاسو غواړئ ستاسو د ځانګړتیاوو سیټ سره د ماشین زده کړې فعالیتونو یا ETL پر بنسټ د کارونو سره غړی کړي، تاسو به یوازې په Python کې ستاسو د ML پر بنسټ د انټرنېټ جوړ کړئ، ځکه چې د ډومین ځانګړنو کتابتون کې د غټ توکو، چې په طبيعت کې هر نورو پروګرامګرامۍ ژانر لګښت لري. مګر د دې هڅو لپاره ډاډ کچې باید ترسره شي؛ په بل ډول، د کوچني ټیم به د ډیری سافټویر کڅوړې سره یوځای کولو بیه پیچیدو ته تل په لټه کې وي.
Takeaway: Match the tech to your constraints, not your ambition.
5. مخکښ پیچیدو: د اړیکو او څارنه
microservices د اړتیاوو د ناڅاپي ویب وړاندې کوي:
- د خدمتونو کشف
- API نسخه
- Retries، Circuit Breakers، Fallbacks
- د ترانسپورت Tracking
- په مرکز کې د مخابراتو او خبرتیا
په يو مونولیت کې، یو بګ ممکن د ساده stack ټریټ دی. په یو توزیع شوي سیستم کې، دا دی "چې خدمت A ناکام کیږي کله چې د B پراختیا د C په 30 ثانیو کې ځي؟" تاسو باید په بشپړه توګه ستاسو د observance stack کې وده ورکړئ. د دې لپاره چې دا "صالحه" وي، دا اړتیا لري چې ستاسو غوښتنلیکونه په ځانګړي لارو کې وساتئ، لکه د OpenTelemetry شاملولو لپاره د څارنې ملاتړ، یا ستاسو د سایټ سپارلو د وسایلو په توګه د AWS XRay پرته که تاسو د یو پیچلي سرور وړ سیسټم سره لاړ شئ. مګر په دې وخت کې، تاسو باید په بشپړه توګه د غوښتنلیک کوډ څخه خپل تمرکز بدل کړئ ترڅو یو پیچلي څارنې انټرactuallyپه تولید کې کار کوي.
البته، ځینې د observerability وسایلو ته اړتیا لري چې په monolith غوښتنلیکونو کې ترسره شي، مګر دا په پرتله د خدمتونو شمېر په اړه د کارولو په ساده ډول دی.
Tip:پوهې چېdistributed systems وړیا نه دي.دوی د انجنيرۍ چمتو کولو په بشپړه توګه نوي ټولګي ته اړتيا لري.
وړیا نه دي.کله چې microservicesدد معنوي
دد مایکرو خدمتونو په اړه ذکر شوي ستونزو له الرې، ځینې وختونه شتون لري چې د خدمتونو کچه کڅوړه په حقیقت کې ډیر ګټور دی. ځینې وختونه شتون لري چې دا په بشپړه توګه مرسته کوي:
- د کارولو کچې انفرادي: د AWS د S3 واقعاتو خبرتیاوو په کارولو په اړه د غوره عملیاتو کې یو عام مثال دی - کله چې یو انځور په S3 کې لوستل کیږي، د انځور بدلون / OCR پروسه وکاروي، او داسې نور ځکه چې دا ګټور دی: موږ کولی شو په خپلواکه خدمت کې د معلوماتو د پروسس کتابتونونو سره نښلوي او دا API یوازې د انځور پروسس او د اپلوډ شوي ډاټا څخه د محصول د توليد لپاره تمرکز کوي. ستاسو د اضافي کلینټونه چې د معلوماتو په S3 کې لوستل شوي دي د دې خدمت سره نښلوي شوي دي، او د دې خدمت په پرتله ساده توګه د وسایلو کې لږ اړخونه شتون لري.
- Divergent Scalability اړتیاوې: - تصور وکړئ چې تاسو د AI محصول جوړ کړئ. د سیسټم یوه برخه (web API) چې د ML workloads له لاسه ورکوي او د مخکښ پایلې ښودل کوي نه د سرچینو لګښت لري، دا رڼا ده، ځکه چې دا په عمده توګه د ډاټاټا سره اړیکه کوي. په بل ډول، ML ماډل د GPUs په کارولو کې سخت دی او د GPU ملاتړ سره د اضافي ترتیب سره ځانګړي ماشينونه اړتیا لري. د غوښتنلیک د دغو برخو په مختلفو ماشينونو کې چمتو شوي مختلف خدمتونو ته وده ورکوي، تاسو کولی شئ دوی په مستقل ډول کولی شئ.
- مختلف Runtime اړتیاوې: - اجازه ورکړئ چې تاسو د کوډ په C ++ کې لیکل شوي ځینې واردو برخه لري. تاسو د 2 انتخابونه لري - په جادو کې دا به ستاسو د کور پروګرام کولو ژانر ته بدل کړئ یا د کوډ بیس سره یوځای کولو لارښوونه ونیسئ. د دې واردو غوښتنلیک پیچیدو پورې اړه لري، تاسو باید کوډ لیکل کړئ، اضافي شبکې / پروتوکولونه ترسره کړئ ترڅو د دې خدمت سره اړیکه ونیسئ، مګر پای ته ده - تاسو به احتمالا دا غوښتنلیک د چلند وخت غیر متوافقې له امله د مختلفو خدمتونو په توګه جدي کړئ. زه به حتی نور وايي، تاسو کولی شئ ستاسو اصلي غوښتنلیک په C ++ کې هم لیکل کړئ، مګر د مختلف کمپیوټر ترتیبونو او کتابتون بست
د انجنيرۍ سازمانونو په پراخه کچه د ورته ستونزو سره مبارزه کوي. د مثال په توګه، د Uber انجنيرۍ ټیمد Domain-Oriented Microservices آرشیفیکټ کې د دوی بدلون په سند کې ونیسئ- نه د تخنیکي خالصیت څخه، بلکه د ټیمونو په اړه د واقعي پیچیدو او پراختیا محدودیتونو په ځواب کې. د دوی پست د مایکرو خدمتونو چمتو کولو لپاره یو ښه مثال دی کله چې تاسو د سازماني چټک او عملیاتي اواریز لري چې دوی ملاتړ وکړي.
په یوه پروژې کې، کوم چې هم په واقعیت کې یو real-estate دی، موږ د پیټون پر بنسټ د تجارتي کارولو کچه چې د معلوماتو په MS-SQL db کې لیږدوي د مخکښ ټیم څخه کوډ لري، موږ په پایله کې چې دا د یو Django اپلیکیشن جوړولو لګښت وي. د کوډ په مختلفو چلند وختونو پورې اړه لري او په پرتله ځان تکیه شوې وه، نو موږ دا جدي ونیسئ او یوازې کله چې څه هم د انتظار په توګه کار نه کوي. دا زموږ لپاره حتی د کوچني ټیم لپاره کار کوي، ځکه چې دا تجارتي تولید خدمت یو برخه دی چې نادري بدلونونه یا ساتنې اړتیا لري.
Takeaway: Use microservices when workloads diverge — not just because they sound clean.
د startups لپاره عملی لارښوونې
که تاسو خپل لومړي محصول ته رسولو وکړئ، دلته د لوبې کتاب چې زه سپارښتنه کولی شئ:
- Monolithic پیل کړئ. یو عام فریم ورک غوره کړئ او د ځانګړتیاوو بشپړولو لپاره تمرکز وکړئ. ټول مشهور فریم ورکونه ډیر ښه دي چې ځینې API یا ویب پاڼه جوړ کړئ او د کاروونکو خدمتونه ورکړئ. د هیپ پیژندنه نه وکړئ، د کارونو لپاره د لګښت سره تړاو وکړئ؛ تاسو کولی شئ خپل ځان وروسته سپارښتنه وکړئ.
- Single repo. د خپل کوډ په ډیرو ذخیره کوډونو کې تقسیم کولو لپاره فکر نه وکړئ. زه د جوړونکو سره کار وکړم چې د سپارلو لپاره د IP کاپی کولو خطر کم کړي - یو ارزانه ستونزه. مګر په عملياتو کې، دا د خوندیتوب په پرتله ډیر رطوبت اضافه کړ: په اوږدو کې جوړونه، د CI / CD پراختیا، او په ټیمونو کې ضعیف ښکلا. د margin IP ساتنې د عملیاتو ګټه نه لري، په ځانګړي ډول کله چې د monorepo په داخله مناسب لاسرسي کنټرولونه په اسانۍ سره مدیریت شوي دي. د لومړنۍ مرحلو ټیمونو لپاره، واضحیت او سرعت د تخنیکي خوندیتوب ګټې څخه ډیر مهم دي.
- Dead-simple محلي نصب. Make up کار. که دا ډیر اړتيا لري، په ګامونو کې ډیر مشخص شي، د ویډیو / Loom ریکارډ کړئ، او screenshots اضافه کړئ. که ستاسو کوډ به د کورس یا د ځوانانو ډاونلوډونکي لخوا چلند کیږي، دوی احتمالا به د سړکونو ته ورسیږي، او تاسو به د ستونزو د حل کولو په څیر وخت ورکړئ. زه پدې ښکاري چې د هر پروګرام لپاره هر ممکنې ستونزو ډاونلوډ کول د دې لپاره چې ځینې څهونه په محلي نصب کې کار نلري وخت اخلي.
- په CI / CD کې لومړنۍ سرمایه گذاری. که څه هم دا یو ساده HTML دی چې تاسو کولی شئ په لارښوونې سره په سرور کې scp کړئ، تاسو کولی شئ دا اتومات کړئ او د CI / CD سره د سرچینې کنترول پرته د دې لپاره کار وکړي. کله چې د نصب په مناسب ډول اتومات کیږي، تاسو یوازې ستاسو د مداخله انټرنېټ انټرنېټ انټرنېټ په اړه فراموش کړئ او د ځانګړتیاوو په اړه تمرکز وکړئ. ما ډیری ټیمونو او بنسټیزانو وګورئ کله چې د outsourced ټیمونو سره کار کوي معمولا په CI / CD کې ارزانه دي، او دا د ټیم په پایله کې د لارښوونې پروسو له امله demoralized او ناڅاپي کیږي.
- په جراحی ډول تقسیم کړئ. یوازې کله چې دا په واضح ډول د دردناک bottleneck حل کوي. په بل ډول، د ماونولیت کې د ماډولیت او ټیسټونو کې وده ورکړئ - دا په چټکۍ سره او اسانه توګه ساتل کیږي.
او په عمده توګه:optimize for developer velocity.
Velocity is your startup’s oxygen.د مخکښ microservices د اکسيجن په چټکۍ سره وده ورکړي - تر څو يو ورځ، تاسو کولی شئ نه وده ورکړي.
Takeaway: Start simple, stay pragmatic, and split only when you must.
که تاسو د مایکرو خدمتونو پر بنسټ د لارښوونې
زه د مایکرو خدماتو پر بنسټ پروژې مخکې جوړ کړم چې دوی باید ترسره شي، او دلته د دې لپاره د لاندې سپارښتنې دي چې زه کولی شي ورکړم:
- ستاسو تخنیکي کڅوړه چې ستاسو د مایکرو خدمتونو پر بنسټ د آرکټیکټۍ د بریښنا د ارزښت. د پراختیا تجربه tooling کې سرمایه گذاری وکړئ. کله چې تاسو د خدمتونو پر بنسټ د جديرې لري، تاسو اوس باید د مایکرو خدمتونو کڅوړه اتومات کولو په اړه فکر وکړئ، د محلي او تولید چاپیریالونو په ګډه اتومات کول. په ځینو پروژو کې، زه باید یو انفرادی CLI جوړ کړي چې د monorepository په اړه د مدیریت کارونو ترسره کوي. یو پروژې زه د 15-20 مایکرو خدمتونو پراختیا کې شامل وه، او د محلي چاپیریال لپاره، زه باید د docker-compose.yml فایلونو د ډیزاین لپاره د ډیزاین لپاره یو کلینډ پیل کولو لپاره یو کلینډ
- د خدمتونو د اړیکو په اړه د باور وړ اړیکو پروتوکولونو تمرکز وکړئ. که دا async پیژندنه ده، ډاډ ترلاسه کړئ چې ستاسو د پیژندنې سیسټمونه تعقیب شوي او معياري شوي دي. که دا REST دی، په OpenAPI سندونو کې تمرکز وکړئ. د خدمتونو په منځ کې د اړیکو مشتریانو باید ډیری شیانو ترسره کړي چې د بکس څخه بهر نه وي: د ریټیشنونو سره د انفرادي پیژندنې، وختونو سره. د عادي بکس gRPC کلینر ته اړتیا لري چې تاسو د دې اضافي شیانو په لارښوونې کې اړتیا لرئ ترڅو ډاډه وکړئ چې تاسو د مخکښ غلطو څخه زیان نه لرئ.
- ډاډه وکړئ چې ستاسو د واحد، انټرنېټ ازموينه، او end-to-end ازموينه سیسټم ثابته دی او د خدمتونو کچه د تقسیمونو مقدار سره اندازه کوي چې تاسو په کوډ بیس کې وارد کړئ.
- په کوچني پروژو کې چې د مایکرو خدمتونو پر بنسټ د کارولو کچه کاروي، تاسو به احتمالا د یو مشترکه کتابتون سره د مشترکه مسلکونو لپاره د خپل د نښلیدو، د اړیکو کوډ په تعقیب ډول وساتي. دلته یو مهم نظر - ستاسو د مشترکه کتابتون ترټولو کوچني کړي. هر لوی بدلون د ټولو بستری خدمتونو په اړه د دوبلو جوړولو ته اړتیا لري - حتی که دا نه تړاو لري.
- د نښلیدو څخه مخکې وګورئ. ډیزاین شوي JSON لګونه اضافه کړئ او د کارپوه کولو لپاره د مختلفو اړیکو IDs جوړ کړئ کله چې ستاسو د اپلیکیشن پلورل کیږي. حتی د اساسي مسلکي کارپوهانو چې د ګټور لګولو معلوماتو صادر کړي (که تاسو ستاسو د اپلیکیشن سره د مناسب لګولو / څارنې وړتیاونه وساتئ) اغیزمنه وخت خوندي کړئ د کاروونکي د لګولو په اړه پوه شي.
د خلاصولو لپاره: که تاسو اوس هم د مایکرو خدمتونو لپاره چمتو یاست، نو تاسو باید مخکې پوه شئ چې تاسو به د اضافي پراختیا وخت او ساتنې په اړه د مالیې په اړه ورکړئ چې ستاسو د ټیم کې د هر انجنیر لپاره د سیسټم کار وړ کړي.
Takeaway: If you embrace complexity, invest fully in making it manageable.
د پایلو
Premature microservices are a tax you can’t afford. Stay simple. Stay alive.یوازې کله چې درد دا ښکلي کوي.
Survive first. Scale later. Choose the simplest system that works — and earn every layer of complexity you add.
اړونده سرچینې
- Monolith لومړی - مارتین فورلر
- د عالي مونولیت - DHH / Basecamp
- Goodbye Microservices: د 100s د ستونزو ماشومانو څخه د 1 سوپر ستوري ته - segment Eng.
- د Monolith Deconstructing - Shopify Eng.
- د Domain-Oriented Microservice Architecture - Uber Eng.
- Go + خدمتونه = یو Goliath پروژې - Khan Academy