rails server করলে যা "Puma" চালু হয় সেটি কী?
এটি একটি অ্যাপ সার্ভার!
একটি উদাহরণ দিয়ে আমি ব্যাখ্যা করব অ্যাপ্লিকেশন সার্ভার কী এবং কেন এগুলো দরকার।
অ্যাপ সার্ভার বুঝা
মান লিন আপনি রুবিতে আপনার নতুন চমকদার ওয়েব অ্যাপ্লিকেশন বানाना শুরু করলেন।
এবং কোনো কোড লিখার আগে…
আপনি ব্রাউজারে এটিকে লোড হয় দেখতে চান, শুধু ডিফল্ট "welcome" পেজ দেখতেও।
তাই আপনি আপনার ব্রাউজার খুলেন, এটিকে localhost:3000 এ পয়েন্ট করেন, অথবা localhost:4567 যদি আপনি সিনাত্রা ব্যবহার করেন।
তারপর কী হয়?
আপনার ব্রাউজার localhost-এ, পোর্ট 3000-এ কানেক্ট হয়, যেখানে Puma মত একটি রুবি অ্যাপ্লিকেশন সার্ভার অপেক্ষা করছে।
localhostএকটি স্পেশাল IP অ্যাড্রেসকে পয়েন্ট করে,127.0.0.1, যা সবসময় আপনার কম্পিউটারকে রেফার করে
এখন:
Puma বা অন্য যেকোনো rack-বেসড সার্ভার (যেমন Thin / Unicorn) এর কাজ হলো ব্রাউজারের রিকোয়েস্ট হ্যান্ডেল করা এবং সেটি একটি কমন ইন্টারফেসের মাধ্যমে আপনার অ্যাপ্লিকেশনে পাস করা।
কোন ইন্টারফেসের কথা বলছি?
Rack।
Rack নিয়ে আমি অন্য আর্টিকেলে বিস্তারিত ব্যাখ্যা করেছি।
Puma-র দিকে ফিরে যাই।
কেন আমরা অ্যাপ সার্ভার ব্যবহার করি, রেইলস সরাসরি রিকোয়েস্ট হ্যান্ডেল না করিয়ে?
খুব ভালো প্রশ্ন।
আমরা এটা করি কারণ এটি একটি মৌলিক সফটওয়্যার ডিজাইন প্রিন্সিপল অনুমতি দেয়।
Separation of concerns (চিন্তার আলাদা করা)!
Separation of Concerns বুঝা
রেইলসের কাজ এবং আপনার অ্যাপ্লিকেশনের কাজ হলো ইউজার রিকোয়েস্ট সার্ভ করা।
উদাহরণ:
- নতুন একাউন্ট তৈরি করা
- লগইন ক্রেডেনশিয়াল ভ্যালিড কিনা চেক করা
- একটি প্রোডাক্ট পেজ দেখানো যেখানে ১০০% কাকাও চকোলেট বার কেনা যাবে
যে কোনো জিনিস আপনার অ্যাপ করুক।
- রেইলস ইউজারের কাঙ্ক্ষিত কাজের মেনু অফার করে, কিন্তু এটিও শেফ, কামগুলো করে ফেলে
- Puma হলো ওয়েটার, অর্ডার নেয় এবং কিচেনে ফরওয়ার্ড করে
এভাবে সেটআপ রাখলে সবাই তাদের সেরা দিতে পারেন।
শুধু এটিই নয়…
এটি আপনাকে শেফকে সিনাত্রা, বা ওয়েটারকে Thin-এ স্বিচ করার সুযোগও দেয়!
"যখন কনসার্নগুলো ভালোভাবে আলাদা করা হয়, তখন মডিউল রিইউজ, স্বাধীন ডেভেলপমেন্ট এবং আপগ্রেডের জন্য উচ্চতর ডিগ্রী অফ ফ্রিডম পাওয়া যায়।"
Wikipedia
আপনার পরিস্থিতি এবং পছন্দের ওপর নির্ভর করে।
অ্যাপ্লিকেশন সার্ভার বনাম ওয়েব সার্ভার (Nginx & Apache)
এই পয়েন্টে, আপনি বুলবুল করতে পারেন…
Apache বা Nginx মত একটি ওয়েব সার্ভার রুবি সার্ভার থেকে কীভাবে ভিন্ন?
কেন আমরা এই দুটি সার্ভার ব্যবহার করতে পারি না?
এখানে একটি বড় পার্থক্য রয়েছে।
Nginx একটি জেনারেল ওয়েবসার্ভার, এটি একটি রিকোয়েস্ট হ্যান্ডেল করে এবং যদি সেই রিকোয়েস্টের জন্য ম্যাচিং ফাইল থাকে তবে সেটি রিটার্ন করে।
কিন্তু Nginx Rack বা রুবি সম্পর্কে কিছুই জানে না।
সেজন্য আমাদের Puma বা অন্য যেকোনো Rack-কম্প্যাটিবল ওয়েব সার্ভার দরকার।
তবে…
প্রোডাকশনে Nginx ব্যবহার করা এখনও সহায়ক হতে পারে।
Nginx কানেকশন আরও কার্যকরভাবে হ্যান্ডেল করতে পারে এবং স্ট্যাটিক অ্যাসেটস (css এবং js ফাইল) আপনার অ্যাপ্লিকেশনে রিকোয়েস্ট ফরওয়ার্ড না করেই সার্ভ করতে পারে।
Puma বুঝা
এখন আমরা বুঝতে পেরেছি অ্যাপ্লিকেশন সার্ভার কী এবং কেন এটি উপকারী।
আমরা Puma নিজে দেখতে পারি।
আপনি অন্য সার্ভারের বদলে Puma কেন বেছে নেবেন?
প্রথমে:
এটি Heroku-র রিকমেন্ডেড সার্ভার।
প্রধান কারণ তারা বলে, Unicorn ব্যবহার করলে - একটি অল্টারনেটিভ অ্যাপ সার্ভার - আপনি স্লো ক্লায়েন্ট অ্যাটাকের আশংকায় আছেন।
এছাড়া:
Puma মাল্টি-থ্রেডেড, যা সাধারণত কম মেমরি ব্যবহার ফলাফল দেয়।
"অপারেটিং সিস্টেম একটি মাল্টিথ্রেডেড প্রোগ্রামের behalf-এ একটি মাল্টিপ্রসেস প্রোগ্রামের চেয়ে কম কাজ করে। এটি মাল্টিথ্রেডেড প্রোগ্রামের জন্য পারফরম্যান্স গেইন অনুবাদ করে।"
PThreads Programming
কোন সার্ভার ফাস্ট?
এই কমান্ড দিয়ে একটি সিম্পল Rack অ্যাপ রান করালে:
rackup -s thin rack-simple.ru 2>1 &>/dev/null
এভাবে টেস্ট করা হয়েছে:
wrk -d 20 https://localhost:9292
আমি এই বেঞ্চмар্ক রেজাল্ট পেলাম:
- Webrick 229.97 request/second
- Thin 773.20 request/second
- Puma 2035.34 request/second
এই তিনটির মাঝপথে, লাগছে Puma আপনাকে সেরা পারফরম্যান্স দিচ্ছে।
কিন্তু এটা মানে রাখবে না যদি আপনার একটি স্লো SQL ক্যোয়ারী থাকে, অথবা আপনি প্রতি রিকোয়েস্টে মিলিয়ন এলিমেন্টের অ্যারে লুপ করেন।
সারসংক্ষেপ
আপনি রুবিতে অ্যাপ্লিকেশন সার্ভার সম্পর্কে শিখেছেন, Puma এবং Thin এর মত, তাই এখন আপনার কাছে কেন আমরা এগুলো ব্যবহার করি সেটির ভালো বোঝাপড়া আছে।

আপনার নেক্সট প্রজেক্টের জন্য কোনটি ব্যবহার করবেন?
পড়ার জন্য ধন্যবাদ! 🙂