190 ریڈنگز

Startups، کیا آپ واقعی مائیکروسافیسنگ ٹیکس ادا کرنا چاہتے ہیں؟

کی طرف سے Oleg Pustovit15m2025/05/12
Read on Terminal Reader

بہت لمبا؛ پڑھنے کے لئے

ابتدائی مائیکرو سروسز آپ کے اسٹوریج کی رفتار کو پیچیدگی اور overhead کے ساتھ ضائع کرتے ہیں.
featured image - Startups، کیا آپ واقعی مائیکروسافیسنگ ٹیکس ادا کرنا چاہتے ہیں؟
Oleg Pustovit HackerNoon profile picture

کیوں آپ کے کوڈ بیس کو اتنی جلدی تقسیم کرنا آپ کی ٹیم کی رفتار کو خاموش طور پر تباہ کر سکتا ہے - اور اس کے بجائے کیا کرنا چاہئے.

کیوں آپ کے کوڈ بیس کو اتنی جلدی تقسیم کرنا آپ کی ٹیم کی رفتار کو خاموش طور پر تباہ کر سکتا ہے - اور اس کے بجائے کیا کرنا چاہئے.


ایک شروع میں،your survival depends on how quickly you can iterate, ship features, and deliver value to end-usersیہاں آپ کی اسٹارٹنگ کی بنیادی آرکیٹیکل ایک اہم کردار ادا کرتی ہے؛ اس کے علاوہ، آپ کی ٹیکنالوجی کے اسٹاک اور پروگرامنگ زبان کا انتخاب جیسے چیزیں براہ راست آپ کی ٹیم کی رفتار پر اثر انداز کرتی ہیں.


میں نے ابتدائی مرحلے کے شروع کاروں کے لئے گرین فیلڈ پروجیکٹ پر کام کرتے وقت اس تجربے کا تجربہ کیا ہے، جہاں سافٹ ویئر آرکیٹیکل کے لحاظ سے شکایت مند فیصلے کئے گئے تھے جو نصف مکمل خدمات اورٹھنڈا، زیادہ سے زیادہ انجینئرنگ اور خراب مقامی سیٹ اپاور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+ خدمات کا آرکسٹریشن

Hours lost per release

زمرہ:Dev Fragility

Docker پھیلاؤ، خراب سکرپٹ، پلیٹ فارم مخصوص ہیک

Slow onboarding, frequent breakage

CI / CD ڈبلنگ

Duplicate Logic کے ساتھ Multiple Pipelines

Extra toil per service

Cross-Service کا اشتراک کریں

"Descoupled" سروسز مضبوط طور پر مشترکہ ریاست سے منسلک

Slower changes, coordination tax

Overhead دیکھ بھال

تقسیم ٹریکنگ، لوگنگ، نگرانی

Weeks to instrument properly

Suite Fragmentation کا تجربہ کریں

ٹیسٹنگ سروسز کے درمیان تقسیم

Brittle tests, low confidence

کیوں مائیکرو سروسز اکثر ابتدائی طور پر واپس آتے ہیں، کہاں وہ واقعی مدد کرتے ہیں، اور کس طرح آپ کے اسٹوریج کے نظام کو تیز رفتار اور زندہ رہنے کے لئے ترتیب دیں.

Monoliths دشمن نہیں ہیں

اگر آپ کسی SaaS پروڈکٹ کی تعمیر کر رہے ہیں تو، یہاں تک کہ ایک سادہ SQL ڈیٹا بیس Wrapper آخر میں آپ کے کاروباری منطق کے کام کے طریقے میں بہت سے اندرونی پیچیدگی لے سکتے ہیں؛ اس کے علاوہ، آپ مختلف انضمام اور پس منظر کاموں کو حاصل کرسکتے ہیں جو ایک اعداد و شمار کو دوسرے میں تبدیل کرنے کی اجازت دیتے ہیں.


وقت کے ساتھ، کبھی کبھی غیر ضروری خصوصیات، یہ ضروری ہے کہ آپ کی اپلی کیشن خراب ہوسکتی ہے. 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 کے مقابلے میں سب سے بڑا فائدہ ملتا ہے - ایک وسیع سپورٹ کے اوپن سکرین کمیونٹی اور پروجیکٹ مینوفیکچررز جو بنیادی طور پر ان فریم ورکز کو ایک واحد عمل، monolithic اپلی کیشن کے طور پر کام کرنے کے لئے ڈیزائن کیا.


ایک اسٹوریج اسٹوریج میں، جہاں میں Front-End ٹیم کا رہنما تھا، اور کبھی کبھی ٹیکنالوجی کے اختیارات کے بارے میں بیک اینڈ ٹیم سے مشورہ دیا، ہم نے ایک دلچسپ ترقی کی تھی Laravel پر مبنی ایپ.


وقت کے ساتھ، یہ ایک فائدہ مند سیٹ میں ترقی کی جس نے صد گائی بائٹ دستاویزات کا انتظام کیا اور تیسرے فریق کی خدمات کے دکانوں کے ساتھ منسلک کیا.



ٹیم نے Laravel کمیونٹی کی طرف سے سفارش کردہ بہترین طریقوں پر بھروسہ کیا اور اس تعلیمی عمل کو پورا کیا، ہم نے ایپلی کیشن کی صلاحیتوں کو قابل قدر طور پر بڑھایا اور اب بھی کاروباری ضروریات اور توقعات کو پورا کیا.


دلچسپ بات یہ ہے کہ، ہم نے کبھی بھی نظام کو مائیکرو سروسز میں جدا کرنے یا زیادہ پیچیدہ انٹرفیس کے ماڈل کو اپنانے کی ضرورت نہیں تھی. ہم نے اس طرح بہت سے تصادفی پیچیدگی سے بچا لیا. آرکیٹیکل کی سادہگی نے ہمیں ہیلورٹ دیا.“Majestic Monolith” کے بارے میں، جس میں واضح کیا جاتا ہے کہ کیوں سادگی پہلے سے ہی ایک سپر طاقت ہے.


لوگ اکثر اس بات کا اشارہ کرتے ہیں کہ مونولائٹس کو وسیع پیمانے پر بنانے کے لئے مشکل ہے، لیکن یہ خراب ماڈیولوریشن ہے.اندراس طرح کے مسائل کا سامنا کر سکتا ہے جس میں Monolith.


Takeaway: A well-structured monolith keeps your team focused on shipping, not firefighting.

لیکن کیا مائیکرو سروسز "بہترین طریقہ کار" نہیں ہیں؟

بہت سے انجینئرز ابتدائی طور پر مائیکرو سروسز کے لئے پہنچتے ہیں، سوچتے ہیں کہ وہ "حق راستہ" ہیں اور یقینی طور پر - مقیاس میں، وہ مدد کرسکتے ہیں.


مائیکرو سروسز صرف ادائیگی کرتے ہیں جب آپ کو حقیقی پیمانے پر بوتلنگ بوتلنگ، بڑے ٹیموں، یا مستقل طور پر ترقی والے ڈومینز ہیں. اس سے پہلے؟ آپ کو فوائد حاصل کرنے کے بغیر قیمت ادا کر رہے ہیں: دوبارہ infrared، ضعیف مقامی ترتیبات، اور تیزی سے دوبارہ.Segmentآخر میںان کی مائیکروسافٹ تقسیم کو دوبارہ تبدیلاس بالکل اس وجہ سے - بہت زیادہ قیمت، کافی قدر نہیں.


Takeaway: Microservices are a scaling tool — not a starting template.

جہاں مائیکروسافٹس غلط ہو جاتے ہیں (خاص طور پر ابتدائی طور پر)

ایک ابتدائی مرحلے میں ٹیم میں میں نے مشورہ دیا تھا، خدمات کو تقسیم کرنے کا فیصلہ تکنیکی فائدہ کے مقابلے میں PM انجینئرنگ کے تعاون کو زیادہ پیدا کیا. آرکیٹیکل کو نہ صرف کوڈ، بلکہ ہم کس طرح منصوبہ بندی، اندازہ لگایا، اور سپلائی کیا.

Diagram: Coordination overhead grows linearly with services — and exponentially when you add product managers, deadlines, and misaligned timelines.



یہاں سب سے زیادہ عام anti-patterns ہیں جو ابتدائی طور پر پھنس جاتے ہیں.

١ - صارفین کی خدمت کی حدود

نظریاتی طور پر، آپ اکثر آپ کے ایپلی کیشنز کو کاروباری منطق کے ڈومین کے مطابق تقسیم کرنے کے مشورے دیکھتے ہیں - صارف سروس، مصنوعات کی خدمت، آرڈر سروس، وغیرہ. یہ اکثر ڈومین ڈرائیونگ ڈیزائن یا پاک آرکیٹیکل خیالات سے قرض لیتا ہے - جس میں پیمانے پر فائدہ ہوتا ہے، لیکن ابتدائی مرحلے کی مصنوعات میں، وہ مصنوعات خود کو مستحکم یا مستحکم کرنے سے پہلے اس کی ساخت کو پہلے سے طے کرسکتے ہیں.


  • مشترکہ ڈیٹا بیس
  • سادہ کاروباری رفتار کے لئے cross-service calls for simple workflows
  • "مختلف" کے طور پر ڈسپلے کیا گیا


ایک پروجیکٹ میں، میں نے ایک ٹیم کو صارف، تصدیق، اور لائسنس کو منفرد خدمات میں تقسیم کرنے کی نگرانی کی، جس نے کسی بھی API آپریشن کے لئے تنصیب کی پیچیدگی اور سروس کے تعاون میں دشواریوں کا باعث بنایا.


حقیقت میں، کاروباری منطق براہ راست سروس کی حدود پر نقشہ نہیں کرتا. پہلے سے طے شدہ تقسیم نظام کو زیادہ خراب کر سکتا ہے اور اکثر وقتوں میں تبدیلیوں کو تیزی سے داخل کرنے میں مشکل ہوسکتا ہے.


اس کے بجائے، جراحی طور پر بوتلوں کو الگ کریں - حقیقی پیمائش درد پر مبنی، نظریاتی عمدہ نہیں.


جب میں نے ابتدائی مرحلے کی ٹیموں کو تربیت دی ہے تو، ہم نے کبھی کبھی مستقبل کی سروس کے حصوں کی نمائش کرنے کے لئے اندرونی پرچمز یا تنصیب ٹکڑوں کا استعمال کیا ہے - فوری آپریٹنگ بوجھ کے بغیر.


Takeaway: Don’t split by theory — split by actual bottlenecks.

2.Repository and Infrastructure Sprawl کے مترادفات

ایپلی کیشن پر کام کرتے وقت، عام طور پر اگلے چیزوں کی ایک سیٹ اہم ہے:

  • کوڈ سٹائل مطابقت (Linting)
  • تنصیب کے تجربات، انضمام کے تجربات سمیت
  • مقامی ماحول کی ترتیب
  • دستاویزات
  • CI / CD ترتیب


اگر آپ کا منصوبہ ایک monorepo کے طور پر تشکیل دیا جاتا ہے تو، آپ کو مرکزی CI / CD ترتیب (GitHub Actions یا GitLab CI کے ساتھ کام کرتے وقت) کے ساتھ آپ کی زندگی کو آسان بنا سکتے ہیں. کچھ ٹیموں نے مائیکرو سروسز کو منفرد ریپوریٹرز میں تقسیم کیا ہے، جس سے اس کے علاوہ اضافی کوشش یا آلات کے بغیر کوڈ کی مطابقت اور اسی سیٹ کی ترتیب کو برقرار رکھنے کے لئے مشکل ہو جاتا ہے.


ایک تین افراد کی ٹیم کے لئے، یہ برائی ہے. context switching across repositories and tooling adds up to the development time of each feature that is shipped.

Monorepos اور ایک واحد پروگرامنگ زبان کا استعمال کرتے ہوئے مسائل کو کم کرنا

اس مسئلہ کو کم کرنے کے لئے مختلف طریقے ہیں. ابتدائی منصوبوں کے لئے، سب سے اہم بات یہ ہے کہ آپ کوڈ کو ایک monorepo میں رکھیں. اس بات کو یقینی بناتا ہے کہ پروڈ پر ایک ہی ورژن کوڈ موجود ہے، اور یہ کوڈ کا جائزہ لینے اور چھوٹے ٹیموں کے لئے تعاون کرنے کے لئے بہت آسان ہے.


Node.js منصوبوں کے لئے، میں ایک monorepo آلے کا استعمال کرنے کی سفارش کرتا ہوں جیسےnxیاturborepoدونوں کے لئے:

  • subprojects کے درمیان CI / CD کی ترتیب کو سادہ کریں
  • dependency graph-based build کیش کی حمایت
  • اپنے اندرونی خدمات کو TypeScript لائبریریوں کے طور پر دیکھیں (ES6 انورز کے ذریعے)


یہ آلات وقت بچاتے ہیں، دوسری صورت میں ایبل کوڈ لکھنے یا آرکسٹریشن کو دوبارہ تخلیق کرنے میں خرچ کرتے ہیں.

  • پیچیدہ ادویات درخت تیزی سے بڑھ سکتے ہیں
  • CI کی کارکردگی ٹوننگ غیر مختصر ہے
  • آپ کو زیادہ تیزی سے ٹولنگ کی ضرورت ہوسکتی ہے (جیسے بون جیسے) تعمیر کے وقت کو نیچے رکھنے کے لئے


مثال کے طور پر: Tools likenxیاturborepoچھوٹے ٹیموں کو monorepo رفتار دیتا ہے - اگر آپ ان کو صاف رکھنے میں سرمایہ کاری کرنے کے لئے تیار ہیں.


جب ترقیgo-based microservices، ایک اچھا خیال ابتدائی ترقی میں استعمال کرنے کے لئے ایک واحد goکام کی جگہ کے ساتھreplaceڈائریکٹری میںgo.modآخر میں، سافٹ ویئر کی پیمائش کے طور پر، یہ آسانی سے جدا کرنا ممکن ہے goمختلف ڈیوائسز میں شامل کریں.


Takeaway: A monorepo with shared infra buys you time, consistency, and sanity.

Broken Local 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.


ابتدائی منصوبوں کو اکثر متاثر ہوتا ہے:

  • دستاویزات کی کمی
  • قدیم مقاصد
  • سافٹ ویئر کے مخصوص ہیک (Hello, Linux-only setups)


میرے تجربے میں، جب میں نے ماضی کے ڈویلپر ٹیموں سے منصوبوں کو حاصل کیا تھا، تو وہ اکثر ایک ہی آپریٹنگ سسٹم کے لئے تیار کیے گئے تھے. کچھ ڈویلپرز نے macOS پر تعمیر کرنا پسند کیا اور کبھی بھی ونڈوز پر اپنے shell سکرپٹ کی حمایت کرنے کے لئے پریشان نہیں کیا. میرے ماضی کے ٹیموں میں، میں نے ونڈوز کے مشینوں پر کام کرنے والے انجینئرز تھے، اور اکثر یہ shell سکرپٹ کو دوبارہ لکھنے یا مقامی ماحول کو چلانے کے عمل کو مکمل طور پر سمجھنے اور دوبارہ انجینئرنگ کرنے کی ضرورت تھی. وقت کے ساتھ، ہم نے انابولنگ ٹریک کو کم کرنے کے لئے ونڈوز OSز پر ماحول کی ترتیبات کو معیاری طور پر کیا - ایک چھوٹا سا سرمایہ کاری جس نے ہر نئے انجینئر کو بچایا


دوسرے پروجیکٹ میں، ایک سولو ڈویلپر نے ایک ٹھنڈا مائیکروسافٹ سیٹ اپ تخلیق کیا تھا، جس میں 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 فائل کو برقرار رکھنے کی ضرورت ہے. آج، کچھ پروگرامنگ زبانوں اور ٹول چینز ہیں جو ونڈوز پر اچھی طرح کام نہیں کرتے ہیں (جیسا کہ OCaml)، لیکن جدید وسیع پیمانے پر مقبول سیٹ ہر وسیع پیمانے پر استعمال شدہ آپریٹنگ سسٹم پر اچھی طرح سے چلتا ہے؛ آپ کے مقامی سیٹ اپ کو ایک ہی آپریٹنگ سسٹم پر محدود کرنے سے، یہ اکثر DX میں کم سرمایہ کاری کا علامتی ہے.

4۔ تکنیکی غلطی

آرکیٹیکل کے علاوہ، آپ کی تکنیکی پیکیج بھی اس بات کا اندازہ کرتی ہے کہ کس طرح دردناک مائیکروسیفیکیشنز بن جاتے ہیں - ہر زبان مائیکروسیفیکیشن میں چمکتا نہیں ہے.


  • Node.js اور Python: تیزی سے دوبارہ شروع کرنے کے لئے بہت اچھا ہے، لیکن سروسز کے درمیان بنائیں مصنوعات، انفرادی ورژن، اور چلانے کے وقت کی مطابقت کا انتظام دردناک تیزی سے ہو جاتا ہے.
  • Go: سٹیٹک بائنریوں، تیزی سے بنائیں وقت، اور کم آپریٹنگ overhead کے لئے جمع.


اگر آپ کارکردگی کے لئے تلاش کر رہے ہیں تو، شاید JVM اور اس کے ایشیائی سسٹم اور مقیاس میں آرٹویژن کو اپ ڈیٹ کرنے اور مائیکروسافٹ ویئر پر مبنی آرکیٹیکل میں ان کو چلانے کی صلاحیت کے لئے تلاش کریں. اگر آپ بہت تیزی سے دوبارہ اور تیزی سے پروٹوٹائپ کرتے ہیں اور آپ کی اپ ڈیٹ انشورنس کو اپ ڈیٹ کرنے کے بارے میں فکر نہیں کرتے ہیں - آپ پیئٹون کی طرح کچھ کے ساتھ اچھے ہیں.


ٹیموں کو اکثر یہ سمجھتا ہے کہ ان کی ٹیکنالوجی کے انتخاب کے ساتھ بڑے مسائل ہیں جو ابتدائی طور پر واضح نہیں تھے، اور ان کو ایک مختلف پروگرامنگ زبان میں بیک اینڈ کو دوبارہ تعمیر کرنے کی قیمت ادا کرنا پڑا (جیسا کہ)یہ لڑکے(پائٹون 2 کوڈ بیس کے بارے میں کچھ کرنے کے لئے مجبور کیا گیا تھا اور Go پر منتقل کیا گیا تھا).


لیکن برعکس، اگر آپ کو واقعی ضرورت ہے تو، آپ پروٹوکولز جیسے کئی پروگرامنگ زبانوں کو پلگ ان کرسکتے ہیں.gRPCیا async پیغامات کے مواصلات. اور یہ اکثر چیزوں کے بارے میں جانے کا راستہ ہے. جب آپ اس نقطہ نظر تک پہنچتے ہیں کہ آپ اپنی خصوصیات کو مشین سیکھنے کی صلاحیتوں یا ETL پر مبنی ملازمتوں کے ساتھ غنی کرنا چاہتے ہیں، تو، آپ کو صرف منفرد طور پر پائٹون میں اپنے ML پر مبنی انشورنس کی تعمیر کریں گے، ڈومین کی مخصوص لائبریریوں کی غریب ایکوسسٹم کی وجہ سے، جس میں قدرتی طور پر کسی بھی دیگر پروگرامنگنگ زبان کی کمی ہوتی ہے. لیکن اس طرح کے فیصلے کی ضرورت ہوتی ہے جب اس منصوبے کی وضاحت کرنے کے لئے کافی سرکٹ کی ضرورت ہوتی ہے؛ دوسری صورت میں، چھوٹی ٹیم ہمیشہ کے لئے کئی سافٹ ویئر اسٹاک کو ایک دوسرے کے ساتھ پلگ ان کرنے کی غیر


Takeaway: Match the tech to your constraints, not your ambition.

خفیہ پیچیدگی: مواصلات اور نگرانی

مائیکرو سروسز کی ضرورتوں کا ایک نامعلوم ویب پیش کرتے ہیں:

  • خدمات کا پتہ
  • API کا ترجمہ
  • Retries، Circuit Breakers، Fallbacks کے
  • تقسیم ٹریکنگ
  • مرکزی ڈرائیونگ اور ڈرائیونگ


Monolith میں، ایک بیگ ایک سادہ Stack Trace ہوسکتا ہے. ڈسپلے سسٹم میں، یہ "کیوں سروس A ناکام ہوتا ہے جب B کی تنصیب 30 سیکنڈ سے C کی تاخیر کرتا ہے؟" آپ کو اپنے Observability Stack میں مکمل طور پر سرمایہ کاری کرنے کی ضرورت ہو گی. اسے "صرف" کرنے کے لئے، یہ آپ کے ایپلی کیشنز کو مخصوص طریقوں سے ہارڈنگ کرنے کی ضرورت ہے، مثال کے طور پر ٹریکنگ کی حمایت کرنے کے لئے OpenTelemetry کو شامل کرنا، یا آپ کے ابر سپلائرز کے آلے جیسے AWS XRay پر اعتماد کرنا اگر آپ ایک پیچیدہ سرور کے بغیر نظام کے ساتھ جاتے ہیں. لیکن اس وقت، آپ کو مکمل طور پر آپ کی توجہ کو ایپلی کیشن کوڈ سے تبدیل کرنے کی ضرورت ہے کہ آپ کیactuallyپیداوار میں کام کرتا ہے.


یقینی طور پر، نظر ثانی کے کچھ اوزار Monolith ایپز پر انجام دیا جانا ضروری ہے، لیکن یہ ایک متوازن طریقے سے خدمات کی تعداد کے لحاظ سے ایسا کرنے کے مقابلے میں بہت آسان ہے.


Tip:سمجھتے ہیں کہdistributed systems مفت نہیں ہےوہ ایک مکمل طور پر نئی کلاس کے انجینئرنگ چیلنجوں کے لئے ایک ذمہ داری ہے.

مفت نہیں ہے

اگر مائیکروسافٹدوسمجھنا

دو

مائیکرو سروسز کے ساتھ ذکر ہونے والی مشکلات کے باوجود، ایسے اوقات موجود ہیں جہاں سروس کی سطح سے چھٹکارا واقعی بہت فائدہ مند ہے.


  • workload isolation: اس کے لئے ایک عام مثال S3 واقعات کی اطلاعوں کا استعمال کرنے پر AWS کے بہترین طریقوں میں ہوتا ہے - جب ایک تصویر S3 پر لوڈ کیا جاتا ہے، ایک تصویر resizing / OCR عمل، وغیرہ کی وجہ سے یہ مفید ہے: ہم ایک خود منفرد سروس میں اندھیرے ڈیٹا پروسیسنگ لائبریریوں کو منسلک کرسکتے ہیں اور اس API کو صرف تصویر کی پروسیسنگ پر توجہ مرکوز اور اپ لوڈ کردہ ڈیٹا سے پیداوار بناتے ہیں.
  • Divergent Scalability Needs: — تصور کریں کہ آپ ایک AI پروڈکٹ کی تعمیر کر رہے ہیں. نظام کا ایک حصہ ( ویب API) جو ML کام لوڈز کو روکتا ہے اور ماضی کے نتائج دکھاتا ہے، وسائل کی زیادتی نہیں ہے، یہ ہلکا ہے، کیونکہ یہ بنیادی طور پر ڈیٹا بیس کے ساتھ بات چیت کرتا ہے. برعکس، ML ماڈل GPU پر چلتا ہے اصل میں چلانے کے لئے مشکل ہے اور اضافی ترتیب کے ساتھ GPU کی حمایت کے ساتھ خصوصی مشینوں کی ضرورت ہوتی ہے.
  • مختلف چلانے کی ضروریات: — کا کہنا ہے کہ آپ کو C ++ میں لکھے گئے کوڈ کے کچھ پرانے حصے ہیں. آپ کے پاس 2 اختیارات ہیں — جادو میں اسے آپ کے بنیادی پروگرامنگ زبان میں تبدیل کریں یا کوڈ بیس کے ساتھ انٹرویو کرنے کے طریقوں کو تلاش کریں. اس پرانے ایپ کی پیچیدگی پر منحصر ہے، آپ کو اس سروس کے ساتھ بات چیت قائم کرنے کے لئے اضافی نیٹ ورکنگ / پروٹوکولز کو انسٹال کرنے کے لئے کلائی کوڈ لکھنا پڑے گا، لیکن بٹن لائن ہے — آپ کو چلانے کے وقت کے غیر متوازنات کی وجہ سے اس ایپ کو منفرد سروس کے طور پر جدا کرنا پڑے گا. میں مزید کہنا چاہوں گا، آپ کو آپ کے بنیادی ایپ کو C ++ میں بھی لکھ سکتے ہیں، لیکن مختلف کمپیوٹر


بڑے پیمانے پر انجینئرنگ اداروں نے اسی طرح کے چیلنجوں کے ساتھ جدوجہد کی ہے۔ مثال کے طور پر، Uber کی انجینئرنگ ٹیمایک ڈومین کی طرف متحرک مائیکروسافیسنگ آرکیٹیکل کے لئے ان کی تبدیلی کی دستاویزات- نظریاتی خالصیت سے نہیں، لیکن ٹیموں کے درمیان حقیقی پیچیدگی اور پیمائش کی حدود کے جواب میں. ان کی پوسٹ ایک اچھا مثال ہے کہ مائیکرو سروسز کس طرح کام کر سکتے ہیں جب آپ کو ان کی حمایت کرنے کے لئے تنظیم کی بالغ اور آپریشن کے اوورکٹ ہے.


ایک پروجیکٹ میں، جو بھی ایک حقیقی ملک ہے، ہم نے ایک پائٹون پر مبنی تجزیہ کام لوڈ کرتا ہے جس میں ڈیٹا کو MS-SQL db میں لوڈ کرتا ہے جس میں ایک سابق ٹیم سے کوڈ تھا، ہم نے پایا کہ اس کے اوپر ایک Django ایپ تعمیر کرنے کے لئے ایک ضائع ہو جائے گا.


Takeaway: Use microservices when workloads diverge — not just because they sound clean.

Startups کے لئے عملی ہدایات

اگر آپ اپنی پہلی مصنوعات کو بھیج رہے ہیں تو، یہاں کھیل کتاب ہے جو میں سفارش کرتا ہوں:

  • Monolithic شروع کریں. ایک عام فریم ورک منتخب کریں اور خصوصیات کو حاصل کرنے پر توجہ مرکوز کریں. تمام معروف فریم ورک کچھ API یا ویب سائٹ کی تعمیر کرنے اور صارفین کی خدمت کرنے کے لئے کافی اچھے ہیں. ہائپ کی پیروی نہ کریں، چیزوں کو کرنے کے لچکدار طریقے پر رکھیں؛ آپ بعد میں اپنے آپ کو شکریہ ادا کرسکتے ہیں.
  • Single repo. آپ کے کوڈ کو کئی ریپوریٹرز میں تقسیم کرنے کے لئے پریشان نہ کریں. میں نے ان بنیادی اداروں کے ساتھ کام کیا ہے جو IP کو کاپی کرنے کے عملے کے خطرے کو کم کرنے کے لئے ریپوریٹرز کو جدا کرنا چاہتے تھے. لیکن عملی طور پر، یہ سیکورٹی کے مقابلے میں زیادہ ٹھنڈا شامل کیا: کم از کم بنائیں، ٹکڑا CI / CD، اور ٹیموں کے درمیان کم بصیرت. مندرجہ ذیل IP تحفظ آپریٹنگ کے قابل نہیں تھا، خاص طور پر جب ایک monorepo کے اندر مناسب رسائی کنٹرولز کو منظم کرنے میں آسان تھا. ابتدائی مرحلے کی ٹیموں کے لئے، واضحات اور رفتار نظریاتی سیکورٹی کی آمدنی سے زیادہ اہم ہیں.
  • Dead-simple local setup. Make up work. If it takes more, be very specific on the steps, record a video/Loom, and add screenshots. If your code is going to be run by an intern or junior developer, they will likely hit a roadblock, and you will spend time explaining how to troubleshoot a problem. میں نے پایا کہ ہر آپریٹنگ سسٹم کے لئے ہر ممکنہ مسئلے کی دستاویز کرنے کے لئے کیوں کچھ چیزیں ایک مقامی سیٹ اپ میں کام نہیں کر رہے ہیں کی وضاحت کرنے کے لئے خرچ وقت کو ختم کرتا ہے.
  • CI / CD میں ابتدائی طور پر سرمایہ کاری کریں. یہاں تک کہ اگر یہ ایک سادہ HTML ہے کہ آپ صرف دستی طور پر سرور پر scp کرسکتے ہیں، تو آپ یہ خود کار طریقے سے کرسکتے ہیں اور یہ کرنے کے لئے CI / CD کے ساتھ ذریعہ کنٹرول پر بھروسہ کرسکتے ہیں. جب سیٹ اپ درست طریقے سے خود کار طریقے سے کیا جاتا ہے، تو آپ صرف آپ کی مسلسل انٹرویو انٹرویو انشورنس کے بارے میں بھول جاتے ہیں اور خصوصیات پر توجہ مرکوز کرتے ہیں.
  • جراحی طور پر تقسیم. صرف جب یہ واضح طور پر دردناک بوتلنگ کو حل کرتا ہے تو تقسیم. دوسری صورت میں، ماڈیولاریت میں سرمایہ کاری کریں اور مونولائٹ کے اندر ٹیسٹ کریں - یہ زیادہ تیزی سے اور برقرار رکھنے میں آسان ہے.


اور سب سے پہلے:optimize for developer velocity.


Velocity is your startup’s oxygen.ابتدائی مائیکرو سروسز اس آکسیجن کو آہستہ آہستہ چلاتے ہیں - ایک دن تک، آپ سانس نہیں سکتے.


Takeaway: Start simple, stay pragmatic, and split only when you must.

اگر آپ ایک مائیکروسافٹ کی بنیاد پر نقطہ نظر کے ساتھ جاتے ہیں

میں نے مائیکرو سروس پر مبنی منصوبوں کو پہلے سے ہی بنایا تھا، اور یہاں اگلے سفارشات ہیں جو میں اس پر دے سکتا ہوں:


  • آپ کی تکنیکی سٹاک کا اندازہ کریں جو آپ کی مائیکرو سروس پر مبنی آرکیٹیکل کو طاقت دیتا ہے. ڈویلپر تجربے کے اوزار میں سرمایہ کاری کریں. جب آپ کی سروس پر مبنی تقسیم ہے تو، آپ کو اب اپنے مائیکرو سروس سٹاک کو خود کار طریقے سے خود کار طریقے سے، مقامی اور پیداوار کے ماحول کے درمیان ترتیب کو خود کار طریقے سے خود کار طریقے سے بنانے کے بارے میں سوچنے کی ضرورت ہے. کچھ منصوبوں میں، مجھے ایک منفرد CLI بنانے کی ضرورت تھی جو monorepository پر انتظامی کاموں کو کرتا ہے. ایک منصوبہ میں، میں نے 15-20 مائیکرو سروس کی تنصیبوں کو شامل کیا تھا، اور مقامی ماحول کے لئے، میں نے باقاعدہ طور پر ڈویلپر کے لئے سادہ ایک کمانڈ شروع کرنے کے لئے docker-compose.yml ف
  • سروس مواصلات کے ارد گرد قابل اعتماد مواصلات پروٹوکول پر توجہ مرکوز کریں. اگر یہ ایسیکنس پیغامات ہے تو، آپ کے پیغامات کے شیڈولز کو مطابقت اور معیاری بنائیں. اگر یہ REST ہے، تو، OpenAPI دستاویزات پر توجہ مرکوز کریں. سروس کے درمیان مواصلات کے کلائنٹس کو بہت سے چیزوں کو انسٹال کرنے کی ضرورت ہے جو باکس سے باہر نہیں آتے ہیں: ریٹائرز، ٹائموسٹ کے ساتھ. ایک معمولی بونس gRPC کلائنٹ آپ کو دستی طور پر ان اضافی چیزوں کو چیک کرنے کی ضرورت ہے تاکہ آپ کو ٹرانسمیٹ غلطیوں سے متاثر نہ ہو.
  • اس بات کو یقینی بنائیں کہ آپ کے یونٹ، انضمام ٹیسٹنگ، اور end-to-end ٹیسٹنگ کی ترتیبات مستحکم ہیں اور آپ کو اپنے کوڈ بیس میں داخل کرنے والے سروس کی سطح کے تقسیم کی مقدار کے ساتھ پیمائش کریں.
  • چھوٹے منصوبوں پر جو مائیکرو سروس پر مبنی کاروباری بوجھ استعمال کرتے ہیں، آپ کو ممکنہ طور پر عام مددگار کے ساتھ مشترکہ لائبریری کے لئے ایک متوازن طریقے سے آپ کی نگرانی، مواصلات کوڈ کے لئے آلات پر منحصر ہونا چاہئے. یہاں ایک اہم خیال ہے کہ آپ کی مشترکہ لائبریری کو ممکنہ طور پر چھوٹا رکھیں. کسی بھی اہم تبدیلی کو تمام وابستہ خدمات پر دوبارہ تعمیر کرنے کی ضرورت ہوتی ہے - یہاں تک کہ اگر یہ متعلقہ نہیں ہے.
  • اس سے پہلے دیکھنے کی صلاحیت پر نظر ڈالیں. ساختہ JSON لاگ انز شامل کریں اور آپ کے ایپ کو اپلی کیشن کو اپلی کیشن کرنے کے بعد چیزوں کو ڈبگ کرنے کے لئے مختلف ریکارڈنگ ایڈز بنائیں. یہاں تک کہ بنیادی مددگار جو امیر لاگ ان معلومات نکالتے ہیں (پھر جب تک آپ نے آپ کے ایپ کو مناسب لاگنگ / ٹریکنگ کی سہولیات کے ساتھ سسٹم نہیں کیا ہے) اکثر وقت بچاتا ہے.


خلاصہ: اگر آپ اب بھی مائیکرو سروسز کے لئے جا رہے ہیں تو، آپ کو پہلے سے ہی سمجھنا چاہئے کہ آپ اضافی ترقی کے وقت اور بحالی کے لحاظ سے ادائیگی کریں گے کہ آپ کی ٹیم میں ہر انجینئر کے لئے سیٹ اپ کو کام کرنے کے قابل بنائیں.


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 سب سے پہلے - مارٹن فویلر
  • The Majestic Monolith - DHH / Basecamp کے بارے میں
  • Goodbye Microservices: 100s کے مسائل کے بچوں سے 1 سپر سٹار — سیکشن Eng.
  • Monolith کے Deconstructing — Shopify Eng.
  • Domain-Oriented Microservice Architecture — Uber Eng.
  • Go + Services = One Goliath پروجیکٹ - Khan Academy


Trending Topics

blockchaincryptocurrencyhackernoon-top-storyprogrammingsoftware-developmenttechnologystartuphackernoon-booksBitcoinbooks