جاوا مائیکرو سروسز کا ترجمہ اور موافقت : ایک عملی گائیڈ ۔ گائیڈ کے پہلے حصے سے لنک کریں ۔ کوئی بھی سرور سائیڈ جاوا پروگرام، اور اس لیے کوئی بھی مائیکرو سروس، صرف ایک فائل ہے جس میں .jar یا .war ایکسٹینشن ہے۔ جاوا ایکو سسٹم، یا JVM کے بارے میں ایک بہت اچھی چیز ہے: آپ کو جاوا کوڈ صرف ایک بار لکھنا ہوگا اور یہ تقریباً کسی بھی آپریٹنگ سسٹم پر چل سکتا ہے، جب تک کہ آپ نے اپنے کوڈ کو جاوا کے نئے ورژن کے ساتھ مرتب نہیں کیا ہے۔ ہدف JVM ورژن۔ یہ سمجھنا ضروری ہے، خاص طور پر جب بات ڈوکر، کبرنیٹس، یا (ڈرم رول!) دی کلاؤڈ جیسے موضوعات کی ہو۔ کیوں؟ آئیے مختلف تعیناتی کے منظرناموں کو دیکھتے ہیں۔
کم سے کم جاوا مائیکرو سرویس تعیناتی کی مثال
آئیے بینک کی مثال کے ساتھ جاری رکھیں۔ لہذا ہمارے پاس ایک monobank.jar فائل (monolith) اور ہماری نئی نکالی گئی riskengine.jar (پہلا خطرہ چیکنگ مائیکرو سروس) ہے۔ آئیے یہ بھی مان لیں کہ دونوں ایپلی کیشنز، دنیا کی ہر دوسری ایپلی کیشن کی طرح، ایک .properties فائل کی ضرورت ہے۔ ہمارے معاملے میں، یہ صرف ڈیٹا بیس URL اور اسناد پر مشتمل ہوگا۔ ایک کم سے کم تعیناتی دو ڈائریکٹریوں پر مشتمل ہو سکتی ہے جو کچھ اس طرح نظر آتی ہیں: پہلا:
-r-r------ 1 ubuntu ubuntu 2476 Nov 26 09:41 application.properties
-r-x------ 1 ubuntu ubuntu 94806861 Nov 26 09:45 monobank-384.jar
ubuntu@somemachine:/var/www/www.monobank.com/java$ java -jar monobank-384.jar
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
...
دوسرا:
-r-r------ 1 ubuntu ubuntu 2476 Nov 26 09:41 application.properties
-r-x------ 1 ubuntu ubuntu 94806861 Nov 26 09:45 risk-engine-1.jar
ubuntu@someothermachine:/var/www/risk.monobank.com/java$ java -jar risk-engine-1.jar
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
...
اس سے سوال کھلا رہ جاتا ہے: .properties اور .jar فائلیں سرور تک کیسے پہنچیں گی؟ بدقسمتی سے، بہت سے جوابات ہو سکتے ہیں۔
جاوا مائیکرو سروسز کو تعینات کرنے کے لیے بلڈ ٹولز، SSH، اور Ansible کا استعمال کیسے کریں۔
بورنگ، لیکن جاوا مائیکرو سروسز کو تعینات کرنے کے بارے میں کوئی بہترین مشورہ نہیں... دراصل، بالکل اسی طرح جس طرح سسٹم ایڈمنسٹریٹرز نے پچھلے 20 سالوں میں کمپنیوں میں جاوا سرور پروگرام کو تعینات کیا ہے۔ یہ مرکب ہے:- آپ کا پسندیدہ بلڈ ٹول (Maven، Gradle)
- .jars کو سرور پر کاپی کرنے کے لیے اچھا پرانا SSH/SCP
- تعیناتی اسکرپٹس اور سرورز کو منظم کرنے کے لیے باش اسکرپٹس
- یا اس سے بھی بہتر: کچھ جوابی اسکرپٹ۔
جاوا مائیکرو سروسز کو تعینات کرنے کے لیے ڈوکر کا استعمال کیسے کریں۔
آئیے انتخاب کی میٹھی اذیت کی طرف لوٹتے ہیں۔ کچھ سال پہلے ڈوکر منظر پر آیا، اور اس کے ساتھ کنٹینرائزیشن۔ اگر آپ نے اس کے ساتھ کبھی کام نہیں کیا ہے تو، یہاں ایک مختصر تفصیل ہے جس کا مقصد آخری صارفین اور ڈویلپرز ہیں:- ایک کنٹینر (آسان) اچھی پرانی ورچوئل مشین کی طرح ہے، لیکن "ہلکا"۔ اگر آپ اس بارے میں واضح نہیں ہیں کہ اس تناظر میں "آسان" کا کیا مطلب ہے، تو براہ کرم اس جواب کو Stackoverflow پر دیکھیں ۔
- کنٹینر اپنی پورٹیبلٹی کی ضمانت دیتا ہے۔ یعنی یہ کہیں بھی کام کرتا ہے۔ واقف لگتا ہے، ہے نا؟
- اپنی جار فائل کو ڈوکر امیج میں بنڈل کریں۔
- اس تصویر کو پرائیویٹ ڈاکر رجسٹری میں دھکیلیں۔
- اس تصویر کو اپنے ٹارگٹ پلیٹ فارم پر کھینچ کر چلائیں۔
- یا ڈاکر امیج کو براہ راست اپنے پروڈکشن سسٹم میں کاپی کریں اور اسے چلائیں۔
جاوا مائیکرو سروسز کو تعینات کرنے کے لیے Docker Swarm یا Kubernetes کا استعمال کیسے کریں۔
ہم کہتے ہیں کہ آپ ڈوکر کو آزمانے کا فیصلہ کرتے ہیں۔ ہر بار جب آپ جاوا مائیکرو سروس تعینات کرتے ہیں، آپ ایک Docker امیج بناتے ہیں جو آپ کی .jar فائل کو بنڈل کرتا ہے۔ فرض کریں کہ آپ کے پاس ان میں سے کچھ جاوا مائیکرو سروسز ہیں، اور آپ ان خدمات کو کئی مشینوں پر (ایک کلسٹر میں) تعینات کرنا چاہتے ہیں۔ سوال یہ پیدا ہوتا ہے کہ اس کلسٹر کا انتظام کیسے کیا جائے؟ ڈوکر کنٹینرز چلائیں، کارکردگی چیک کریں، اپ ڈیٹس تعینات کریں، سسٹم کو پیمانہ کریں (brrr)؟ اس سوال کے دو ممکنہ جواب ہیں Docker Swarm اور Kubernetes۔ دونوں آپشنز کے بارے میں تفصیل میں جانے سے یہ پہلے سے طویل ٹیوٹوریل بہت لمبا ہو جائے گا، لیکن ہمارے خیال میں یہ بتانا ضروری ہے کہ دونوں آپشنز بالآخر YAML فائلیں لکھنے پر انحصار کرتے ہیں (دیکھیں Yaml indentation story ) اپنے کلسٹر کو منظم کرنے کے لیے۔ اگر آپ جاننا چاہتے ہیں کہ اس سے عملی طور پر کیا احساسات پیدا ہوتے ہیں، تو صرف ٹویٹر سرچ میں اسی طرح کا سوال ٹائپ کریں۔ لہذا آپ کے جاوا مائیکرو سروسز کے لیے تعیناتی کا عمل اب کچھ اس طرح نظر آتا ہے:- Docker Swarm/Kubernetes کو ترتیب دینا اور ان کا نظم کرنا
- ڈوکر کے تمام اقدامات (اوپر دیکھیں)
- YAML لکھیں اور اس پر عمل کریں
جب تک کہ آپ کی آنکھوں سے خون بہہ جائےجب تک کہ سب کچھ کام نہ کرے۔
جاوا مائیکرو سروسز کی جانچ کیسے کریں۔
فرض کریں کہ آپ پیداوار میں مائیکرو سروسز کو نافذ کرنے کا فیصلہ کرتے ہیں۔ اب ہم ترقی کے دوران n-microservices کے انضمام کی جانچ کیسے کر سکتے ہیں؟ آپ کیسے دیکھ سکتے ہیں کہ آیا پورا ورک فلو کام کر رہا ہے، اور نہ صرف اس کے کچھ حصے؟ عملی طور پر، آپ تین طریقوں میں سے ایک استعمال کر سکتے ہیں:- تھوڑا سا کام کرنے کے ساتھ (اگر آپ اسپرنگ بوٹ جیسے فریم ورک استعمال کر رہے ہیں)، تو آپ اپنی تمام مائیکرو سروسز کو ایک لانچر کلاس میں جوڑ سکتے ہیں اور ایک ہی Wrapper.java کلاس کا استعمال کرتے ہوئے تمام مائیکرو سروسز لوڈ کر سکتے ہیں - اس بات پر منحصر ہے کہ آیا آپ کی مشین پر کافی میموری ہے یا نہیں۔ انہیں اپنی تمام مائیکرو سروسز چلائیں۔
- آپ مقامی طور پر Docker Swarm یا Kubernetes کی ترتیبات کاپی کر سکتے ہیں۔
- بس اب مقامی طور پر انٹیگریشن ٹیسٹ نہ چلائیں۔ اس کے بجائے، ایک وقف شدہ DEV/TEST ماحول متعین کریں۔ یہ وہ چیز ہے جو کچھ ٹیمیں دراصل اس وقت کرتی ہیں جب وہ مقامی مائیکرو سروس سیٹ اپ کے درد کا شکار ہو جاتی ہیں۔
GO TO FULL VERSION