[ মাইক্রোসার্ভিসে কাস্টম ডোমেইন ব্যবহারের সহজ উপায়। Node.js, PHP, Python এ তৈরি Microservice এর জন্য `http://edns.system.com` URL ব্যবহার। `127.0.0.1` এর পরিবর্তে ডোমেইন ব্যবহারে DNS Server ও HOSTS ফাইলের ভূমিকা। Unix: `/etc/hosts`, Windows: `\c\windows\system32\etc\hosts` এ IP address ও ডোমেইন (যেমন: `124.9.0.1 ems.system.com`) ম্যাপিং। পোর্ট 80 (HTTP) বা 443 (HTTPS) এ সার্ভার চালু করে সহজ ও সুন্দর URL (যেমন: `http://ems.system.com/about`) পাওয়া যায়। একই সাবনেটের সার্ভিসগুলো যোগাযোগের জন্য উভয় হোস্ট ফাইলে ডোমেইন এন্ট্রি প্রয়োজন। blog application mightynodejs ]
আপনি node.js/php/python এ একটি microservice লিখেছেন এবং base url http://edns.system.com অর্থাৎ একটি ডোমেইন নেম ব্যাবহার করে এর সকল URL endpoint expose করতে চাচ্ছেন।সচরাচর, আমরা যখন একটি সার্ভিস বানাই, তখন এই সার্ভিস এর URL Endpoint টেস্ট করার জন্য Loopback IP address ব্যাবহার করে থাকি। আজকে আমরা দেখবো 127.0.0.1 বা localhost ব্যাবহার এর পরিবর্তে কিভাবে একটি ডোমেইন নেম ব্যাবহার করে আমরা সার্ভিস এর URL Endpoint গুলো টেস্ট করতে পারি, সে বিষয় এ আলোচনা করবো।
শুরুতেই একটু বলে নেয়া দরকার DNS server কি এবং এটি কিভাবে কাজ করে।
একজন ক্লায়েন্ট যখন http://ems.system.com ব্যবহার করে ব্রাউজার থেকে তথ্য দেখার চেষ্টা করেন, তখন ক্লায়েন্ট এর ব্রাউজার এ যদি ems.system.com এর পরিবর্তে Web Server এর IP address না থাকে তখন, ক্লায়েন্ট বা ব্রাউজার তার নিকটবর্তী DNS Server এর কাছে IP address নেয়ার জন্য রিকুয়েস্ট করে, তখন DNS Cache Memory থেকে IP address প্রদান করে।
যদি কোন কারনে DNS Server WEB Server এর IP Address না দেয়, অথবা DNS Server কে reach করতে না পারে তখন ব্রাউজার এ ERR_CONNECTION_TIMED_OUT ইরর টি শো করতে পারে।প্রথম বার এই যে DNS Server থেকে IP Address collect করার প্রক্রিয়াটিতে একটু সময় নেয়, তাই আমরা HOST ENTRY এর মাধ্যমে এই টাইমকে কমিয়ে আনতে পারি। যদি Client Unix System ব্যাবহার করে থাকে তাহলেঃ /etc/hosts file এ গিয়ে প্রথমে Web Service এর IP Address তার পর ডোমেইন নেম দিয়ে ফাইল টি সেইভ করে দিতে হবে।
উদাহরণঃ 124.9.0.1 ems.system.com
এখানে client এর ব্রাউজার যদি cache থেকে Domain Name এর পরিবর্তে IP Address না পায়, তখন সবার প্রথমে সে /etc/hosts ফাইল এ গিয়ে চেক করবে যে এই ডোমেইন নেম এর পরিবর্তে কোন IP Address Map করে রাখা আছে কিনা।
যদি থাকে তাহলে সে আর DNS Server এর কাছে Request Forward করবে না। আর যদি না পায় তখন সে DNS এর কাছে থেকে IP address সংগ্রহ করবে।
যে সকল ক্লায়েন্ট Windows System ব্যবহার করেন তাদের ক্ষেত্রেঃ \c\windows\system32\etc\hosts file এ গিয়ে একই ভাবে হোস্ট এন্ট্রি করে নিতে হবে।
এবার মূল কথায় ফিরে আসি। আপনার তৈরি সিস্টেমের URL endpoint গুলো যদি একটি নির্দিষ্ট ডোমেইন নেম দিয়ে ব্যবহার করতে চান, তাহলে হোস্ট ফাইল যথাযথভাবে কনফিগার করতে হবে। বিশেষ করে, যদি একই প্রাইভেট সাবনেটে থাকা দুটি সার্ভিস ডোমেইন নেম ব্যবহার করে পরস্পরের সাথে যোগাযোগ করতে চায়, তাহলে উভয় সার্ভিসের হোস্ট ফাইলে সেই ডোমেইনের এন্ট্রি থাকতে হবে। অন্যথায়, তারা একে অপরকে সঠিকভাবে resolve করতে পারবে না এবং কমিউনিকেশন ব্যর্থ হবে।
আপনি হোস্ট ফাইলে , 127.0.0.1 ems.system.com configure করে যদি এখন node.js সার্ভার টি 3000 port এ রান করেন তখন আপনাকে যেকোন URL ব্যাবহার করার সময় port নাম্বার টি উল্লেখ করতে হবে। যেমনঃ http://ems.system.com:3000/about
আপনি হোস্ট ফাইলে কিন্তু একই সাথে IP Address ও port দিয়ে Domain name কে Mapping করতে পারবেন না। কারণ,Hosts ফাইল মূলত DNS resolution override করে, যেখানে শুধুমাত্র ডোমেইন নেমকে নির্দিষ্ট IP Address-এর সাথে ম্যাপ করা হয়। কিন্তু Port নম্বর DNS resolution-এর অংশ নয়, এটি TCP/UDP লেয়ার-এ ব্যবহৃত হয়।
HTTP প্রোটোকলের ক্ষেত্রে হোস্ট মেশিন ডিফল্টভাবে পোর্ট 80 ব্যবহার করে। তাই আপনাকে Node.js Server টিকে 80 port এ run করতে হবে। আর যদি https প্রটোকল ব্যাবহার করতে চান তখন Node.js Server কে 443 port এ run করতে হবে, তাহলে আপনাকে ব্রাউজার URL call করার সময় ডোমেইন নেম এর সাথে পোর্ট নাম্বার কে বার বার উল্লেখ করতে হবে না। এর ফলে আপনার URL আরও সহজ ও সুন্দর দেখাবে।
#application #mightynodejs
Posted by Md. Ruhul Amin, 1 month ago
ডকার ইমেজের সাইজ ছোট রাখা অত্যন্ত গুরুত্বপূর্ণ। নির্দিষ্ট ভার্সন ব্যবহার (যেমন `FROM node:18`), `-slim` ব্যবহার করে বেইজ ইমেজের আকার কমানো, `.dockerignore` ফাইল ব্যবহার করে অপ্রয়োজনীয় ফাইল...
3 days ago
Read more১০ জিবি সার্ভারে ২ জিবি ডকার ইমেজ? স্পেসের ২০% নষ্ট! Docker Multi-Stage Build এর মাধ্যমে ইমেজ সাইজ কমানো সম্ভব। এটি build tools, dev dependencies সরিয়ে ছোট,...
5 days ago
Read moreপারফর্মােন্স ও নিরাপত্তা নিশ্চিত করার জন্য ডাটাবেইজ মনিটরিং অত্যন্ত গুরুত্বপূর্ণ। Percona Monitoring and Management (PMM) টুলটি এই কাজে অসাধারণ। বিভিন্ন এনভায়রনমেন্টের (Production, UAT, Testing, Development) ডাটাবেইজ সার্ভারগুলোকে কেন্দ্রীয়...
5 days ago
Read moreপর্ব ১: ইন্টারনেটের ভেতরের গল্প! বিভিন্ন প্রোগ্রামিং ভাষার দল মিলে Network Application তৈরি করে। এই Application এর Architecture ধাপে ধাপে বুঝতে চেষ্টা করবো। Client-Server...
5 days ago
Read more