ruby on rails - রুবেল সার্ভার অপশন রুবি



ruby-on-rails apache (1)

Rails অ্যাপ্লিকেশন আমার Ruby জন্য একটি ডেভেলপমেন্ট সার্ভার সেট আপ সম্পূর্ণ সমস্যা আমাকে confuses। WEBrick, Mongrel, যাত্রী, Apache, Nginx আছে এবং আরো অনেক কিছু আমি নিশ্চিত, এবং আমি আসলে তারা বিভিন্ন ভূমিকা বুঝতে না।

আমি ওয়েবব্রিক ব্যবহার করে শুরু করেছি, এবং এখন আমি মংগলকে উন্নয়নের জন্য ব্যবহার করি। এই সার্ভার একা একা, নাকি তারা অপাচের সামনে বসে?

আমি যাত্রী সম্পর্কে পড়েছি এবং আমি আসলেই বুঝতে পারছি না যে এটি কি "রুবি ওয়েব অ্যাপ্লিকেশনগুলির বজায় রাখা একটি হাওয়া" তৈরি করে, এটি মংগল প্রতিস্থাপন করে? এটা কি Capistrano মত, যা ওয়েব অ্যাপ্লিকেশন স্থাপন করা হয়?

মনে রাখবেন, আমি SSL পরীক্ষা করতে চাই এবং আমি বিশ্বাস করি যে এটি মংগল দ্বারা সমর্থিত নয়, সেরা ডেভেলপমেন্ট সার্ভার সেটআপ কী?

ধন্যবাদ


"স্থাপনার" শব্দটি প্রসঙ্গের উপর নির্ভর করে দুটি অর্থ থাকতে পারে। আপনি অপেরা / Nginx ভূমিকা অন্যান্য উপাদান ভূমিকা সঙ্গে বিভ্রান্তিকর হয়।

ঐতিহাসিক নোট: এই নিবন্ধটি মূলত 6 নভেম্বর ২010 তারিখে লেখা হয়েছিল, যখন রুবি অ্যাপ্লিকেশন সার্ভারের ইকোসিস্টেম সীমিত ছিল। আমি 15 ই মার্চ ২013 এ এই নিবন্ধটি ইকোসিস্টেমের সর্বশেষ আপডেটগুলির সাথে আপডেট করেছি।

Disclaimer : আমি অ্যাপ্লিকেশন সার্ভারগুলির মধ্যে একটি ফিউশন যাত্রী, লেখক।

Apache বনাম Nginx

তারা উভয় ওয়েব সার্ভার। তারা স্ট্যাটিক ফাইলগুলি পরিবেশন করতে পারে তবে - সঠিক মডিউলগুলি - এছাড়াও ডায়নামিক ওয়েব অ্যাপ্লিকেশানগুলি যেমন পিএইচপিগুলিতে লিখিত থাকে সেগুলি সরবরাহ করতে পারে। অপাচ আরও জনপ্রিয় এবং আরো বৈশিষ্ট্য রয়েছে, Nginx ছোট এবং দ্রুত এবং কম বৈশিষ্ট্য আছে।

অ্যাপাচে না Nginx রুবি ওয়েব অ্যাপস অফ দ্য-বক্সটি পরিবেশন করতে পারে, যাতে আপনাকে অ্যাপাচি / Nginx ব্যবহার করার পরে কিছু বর্ণের অ্যাড-অনের সাথে সমন্বয় করতে হবে।

Apache এবং Nginx এছাড়াও বিপরীত প্রক্সি হিসাবে কাজ করতে পারে, অর্থাত যে তারা একটি ইনকামিং HTTP অনুরোধ গ্রহণ করতে পারে এবং এটি অন্য সার্ভারে ফরোয়ার্ড করতে পারে, যা HTTP কথা বলে। যখন যে সার্ভারটি একটি HTTP প্রতিক্রিয়া সহ প্রতিক্রিয়া জানায়, অ্যাপাচি / Nginx ক্লায়েন্টকে প্রতিক্রিয়া ফিরিয়ে দেবে; আপনি পরবর্তীতে শিখবেন কেন এটি প্রাসঙ্গিক।

Mongrel বনাম WEBrick বনাম অন্যান্য উত্পাদন অ্যাপ্লিকেশন সার্ভার

Mongrel একটি রুবি "অ্যাপ্লিকেশন সার্ভার": কংক্রিট পদে এই মানে যে মংগল একটি অ্যাপ্লিকেশন যা:

  1. তার নিজের প্রসেস স্পেস ভিতরে আপনার রুবি অ্যাপ্লিকেশন লোড।
  2. একটি টিসিপি সকেট সেট করে, এটি বাইরের বিশ্বের সাথে যোগাযোগ করতে দেয় (যেমন ইন্টারনেট)। Mongrel এই সকেট HTTP অনুরোধের জন্য শুনতে এবং অনুরোধ তথ্য রুবি ওয়েব অ্যাপ্লিকেশন পাস।
  3. রুবি ওয়েব অ্যাপ্লিকেশনটি তখন একটি বস্তু প্রদান করে যা HTTP প্রতিক্রিয়াটি কেমন হওয়া উচিত তা বর্ণনা করে এবং মংগল এটিটিকে প্রকৃত HTTP প্রতিক্রিয়া (প্রকৃত বাইট) রূপে রূপান্তরিত করে এবং সকেটে এটি পাঠায়।

তবে মংগল বেশ তারিখযুক্ত, আজকাল এটি আর রক্ষণাবেক্ষণ করা হয় না। নতুন বিকল্প অ্যাপ্লিকেশন সার্ভারগুলি হল:

  • ফুসফুস যাত্রী
  • ইউনিকর্ন
  • পাতলা
  • বনবিড়াল
  • ত্রিনিদাদ (শুধুমাত্র জেআরবি)
  • TorqueBox (শুধুমাত্র JRuby)

আমি পরে তাদের আবরণ করব এবং তারা একে অপরের থেকে এবং Mongrel থেকে পৃথক কিভাবে বর্ণনা।

WEBrick Mongrel হিসাবে একই জিনিস, কিন্তু পার্থক্য হয়:

  • WEBrick উত্পাদনের জন্য উপযুক্ত নয়, আমি আগে উল্লিখিত অন্য সব কিছুই অসদৃশ। WEBrick সম্পূর্ণ রুবি মধ্যে লেখা হয়। Mongrel (এবং অন্যান্য রুবি অ্যাপ্লিকেশন সার্ভার) রুবি এবং অংশ সি (বেশিরভাগ রুবি) অংশ, কিন্তু তার HTTP পসার কর্মক্ষমতা জন্য সি লেখা হয়।
  • WEBrick ধীর এবং কম শক্তসমর্থ। এটি কিছু পরিচিত মেমরি লিক এবং কিছু পরিচিত HTTP পার্সিং সমস্যা আছে।
  • WEBrick সাধারণত ডেভেলপমেন্টের সময় ডিফল্ট সার্ভার হিসাবে ব্যবহার করা হয় কারণ ডিফল্টভাবে ওয়েব্রিক রুবিতে অন্তর্ভুক্ত করা হয়। Mongrel এবং অন্যান্য অ্যাপ্লিকেশন সার্ভার আলাদাভাবে ইনস্টল করা প্রয়োজন। উৎপাদন পরিবেশে WEBrick ব্যবহার করার পরামর্শ দেওয়া হয় না, যদিও কিছু কারণে হরোকু তার ডিফল্ট সার্ভার হিসাবে ওয়েববিককে বেছে নিয়েছে। তারা আগে Thin ব্যবহার করা হয়, তাই আমি কেন তারা WEBrick সুইচ কোন ধারণা নেই।

অ্যাপ্লিকেশন সার্ভার এবং বিশ্বের

সমস্ত রুবি অ্যাপ্লিকেশন সার্ভার HTTP কথা বলতে পারে, তবে কিছু অ্যাপ্লিকেশন সার্ভার সরাসরি পোর্ট 80 এ ইন্টারনেটে উন্মুক্ত হতে পারে, অন্যরা নাও পারে।

  • অ্যাপ সার্ভার যা সরাসরি ইন্টারনেটে উন্মুক্ত হতে পারে: ফিউশন যাত্রী, রেনবো
  • অ্যাপ সার্ভার যা সরাসরি ইন্টারনেটে উন্মুক্ত নাও হতে পারে: Mongrel, Unicorn, Thin, Puma। এই অ্যাপ্লিকেশন সার্ভারগুলি আপ্যাচি এবং Nginx মত একটি বিপরীত প্রক্সি ওয়েব সার্ভার পিছনে রাখা আবশ্যক।
  • আমি ত্রিনিদাদ এবং টর্কেবক্স সম্পর্কে যথেষ্ট জানি না, তাই আমি তাদের বাদ দিয়েছি।

কেন কিছু অ্যাপ্লিকেশন সার্ভার একটি বিপরীত প্রক্সি পিছনে করা উচিত?

  • কিছু অ্যাপ্লিকেশন সার্ভার শুধুমাত্র প্রক্রিয়া প্রতি একযোগে 1 অনুরোধ, পরিচালনা করতে পারেন। আপনি একযোগে 2 টি অনুরোধ হ্যান্ডেল করতে চান তবে আপনাকে একাধিক অ্যাপ্লিকেশন সার্ভার ইনস্ট্যান্স চালাতে হবে, প্রতিটি একই রুবি অ্যাপ্লিকেশন সরবরাহ করছে। অ্যাপ সার্ভার প্রসেসগুলির এই সেটটিকে একটি অ্যাপ্লিকেশন সার্ভার ক্লাস্টার বলা হয় (এ কারণে মংগল ক্লাস্টার, থিন ক্লাস্টার, ইত্যাদি)। এই ক্লাস্টারটিতে প্রক্সি বিপরীত করার জন্য আপনাকে অবশ্যই Apache বা Nginx সেটআপ করতে হবে। অ্যাপাচি / Nginx ক্লাস্টারের উদাহরণগুলির মধ্যে অনুরোধ বিতরণের যত্ন নেবে (এই বিভাগে "আই / ও কনকুরেন্স মডেল" তে আরও বেশি)।
  • ওয়েব সার্ভার অনুরোধ এবং প্রতিক্রিয়াগুলি বাফার করতে পারে, "স্লো ক্লায়েন্ট" থেকে অ্যাপ্লিকেশন সার্ভার রক্ষা করে - HTTP ক্লায়েন্টগুলি খুব দ্রুত ডেটা পাঠায় না বা গ্রহণ করে না। ক্লায়েন্টের সম্পূর্ণ অনুরোধ পাঠানোর জন্য বা সম্পূর্ণ প্রতিক্রিয়া পাওয়ার জন্য অপেক্ষা করার সময় আপনি আপনার অ্যাপ্লিকেশন সার্ভারকে কিছু করতে চান না, কারণ সেই সময়ে অ্যাপ্লিকেশন সার্ভার অন্য কিছু করতে সক্ষম হবেন না। Apache এবং Nginx একই সময়ে অনেক কিছু করার খুব ভাল কারণ তারা multithreaded বা ইভেন্ট হয়।
  • সর্বাধিক অ্যাপ্লিকেশন সার্ভার স্ট্যাটিক ফাইল পরিবেশন করতে পারে, কিন্তু এটি বিশেষত ভাল না। Apache এবং Nginx দ্রুত এটা করতে পারেন।
  • সাধারণত স্ট্যাটিক ফাইলগুলি সরাসরি সরবরাহ করার জন্য লোকেরা সাধারণত অ্যাপাচি / Nginx সেট আপ করে, তবে অ্যাপ্লিকেশন সার্ভারে স্ট্যাটিক ফাইলগুলির সাথে সামঞ্জস্যপূর্ণ অনুরোধগুলি অগ্রসর করে, এটি ভাল সুরক্ষা অনুশীলন। অ্যাপাচি এবং Nginx খুব পরিপক্ক এবং দূষিত অনুরোধ থেকে (সম্ভবত দূষিতভাবে) অ্যাপ্লিকেশন সার্ভার ঢাল করতে পারেন।

কেন কিছু অ্যাপ্লিকেশন সার্ভার সরাসরি ইন্টারনেট উন্মুক্ত করা যাবে?

  • ফিউশন যাত্রী অন্যান্য সমস্ত অ্যাপ্লিকেশন সার্ভার থেকে একটি খুব ভিন্ন পশু। তার অনন্য বৈশিষ্ট্য এক এটি ওয়েব সার্ভারে সংহত করা হয়।
  • Rainbows লেখক প্রকাশ্যে বলেছিলেন যে এটি সরাসরি ইন্টারনেটে প্রকাশ করা নিরাপদ। লেখক মোটামুটি নিশ্চিত যে HTTP সার্ভারে কোনও দুর্বলতা নেই (এবং অনুরূপ)। তবুও, লেখক কোনও ওয়্যারেন্টি সরবরাহ করেন না এবং বলে যে এটি নিজের ঝুঁকিতে রয়েছে।

অ্যাপ্লিকেশন সার্ভার তুলনা

এই বিভাগে আমি উল্লেখ করেছি বেশিরভাগ অ্যাপ্লিকেশন সার্ভারগুলির সাথে তুলনা করব, কিন্তু ফিউশন যাত্রী নয়। ফুসফুস যাত্রী বাকি থেকে এমন একটি ভিন্ন পশু যে আমি এটি একটি নিবেদিত বিভাগ দিয়েছেন। আমি ত্রিনিদাদ এবং টর্কেবক্সকেও বাদ দিয়েছি কারণ আমি তাদের যথেষ্ট ভালভাবে জানি না, তবে আপনি যদি JRuby ব্যবহার করেন তবে তারা কেবল প্রাসঙ্গিক।

  • মংগল সুন্দর বেয়ার হাড় ছিল। পূর্বে উল্লিখিত হিসাবে, Mongrel বিশুদ্ধরূপে একক-থ্রেডেড মাল্টি-প্রসেস, তাই এটি শুধুমাত্র একটি ক্লাস্টার দরকারী। কোনও প্রক্রিয়া পর্যবেক্ষণ নেই: যদি ক্লাস্টার ক্র্যাশে একটি প্রক্রিয়া (যেমন অ্যাপ্লিকেশানে একটি বাগের কারণে) তাহলে এটি ম্যানুয়ালি পুনরায় চালু করা দরকার। মানুষ Monit এবং ঈশ্বর হিসাবে বহিরাগত প্রক্রিয়া পর্যবেক্ষণ সরঞ্জাম ব্যবহার ঝোঁক।
  • ইউনিকর্ন মংগল একটি ফর্ক হয়। এটি সীমিত প্রক্রিয়া পর্যবেক্ষণকে সমর্থন করে: যদি কোনও প্রক্রিয়া ক্র্যাশ হয় তবে এটি স্বয়ংক্রিয়ভাবে মাস্টার প্রক্রিয়া দ্বারা পুনরায় শুরু হয়। এটি প্রতিটি প্রসেসের জন্য একটি পৃথক সকেটের পরিবর্তে সমস্ত প্রসেস একটি একক ভাগ করা সকেটে শোনার জন্য তৈরি করতে পারে। এই বিপরীত প্রক্সি কনফিগারেশন সহজ করে। Mongrel মত, এটা সম্পূর্ণরূপে একক থ্রেড মাল্টি প্রসেস।
  • ইভেন্টমাইন লাইব্রেরি ব্যবহার করে Thin ইভেন্ট I / O মডেল ব্যবহার করে। মংগল HTTP প্যাসারার ব্যবহার ব্যতীত এটি কোনও উপায়ে মংগল ভিত্তিক নয়। এর ক্লাস্টার মোডে কোনও প্রক্রিয়া নিরীক্ষণ নেই যাতে আপনাকে ক্র্যাশ ইত্যাদি নিরীক্ষণ করতে হবে। কোন ইউনিনিকোন-মত ভাগ করা সকেট নেই, তাই প্রতিটি প্রক্রিয়া তার নিজের সকেটে শোনে। তত্ত্ব অনুসারে থিনের I / O মডেলটি উচ্চ সমান্তরালতাকে অনুমোদন দেয়, তবে থিনের জন্য ব্যবহৃত বেশিরভাগ বাস্তব পরিস্থিতিগুলিতে, এক পাতলা প্রক্রিয়া শুধুমাত্র 1 সমান্তরাল অনুরোধ পরিচালনা করতে পারে, তাই আপনার এখনও একটি ক্লাস্টার প্রয়োজন। "আই / ও কনকুরেন্স মডেল" বিভাগে এই অসাধারণ সম্পত্তি সম্পর্কে আরও।
  • পুমাও মংগল থেকে ফর্ক তৈরি করা হয়েছিল, কিন্তু ইউনিকোনের বিপরীতে, পুমাটি পুরোপুরি মাল্টি-থ্রেডেড হওয়ার জন্য ডিজাইন করা হয়েছে। বর্তমানে কোন বিল্টিন ক্লাস্টার সমর্থন নেই। আপনি একাধিক কোর ব্যবহার করতে পারেন তা নিশ্চিত করার জন্য আপনাকে বিশেষ যত্ন নিতে হবে ("আই / ও কনকুরেন্স মডেল" বিভাগে এটি সম্পর্কে আরও জানুন)।
  • Rainbows বিভিন্ন লাইব্রেরি ব্যবহার করে একাধিক concurrency মডেল সমর্থন করে।

ফুসফুস যাত্রী

ফুসফুস যাত্রী অন্য সব থেকে খুব ভিন্নভাবে কাজ করে। ফিউশন যাত্রী সরাসরি অ্যাপাচি বা Nginx মধ্যে সংহত করে, এবং তাই Apache জন্য mod_php তুলনা করা যেতে পারে। Mod_php ঠিক মত অ্যাপাচি পিএইচপি অ্যাপ্লিকেশনগুলি পরিবেশন করতে দেয়, প্রায় যাদুকরভাবে, ফুজান যাত্রী অ্যাপাচি (এবং এছাড়াও Nginx!) রবি অ্যাপস পরিবেশন করতে দেয়, প্রায় যাদুকর। ফুসফুসের যাত্রী এর লক্ষ্য সবকিছু ঠিক করতে (টিএম) যতটা সম্ভব কম ঝামেলা দিয়ে কাজ করা হয়।

আপনার অ্যাপ্লিকেশনের জন্য একটি প্রক্রিয়া বা ক্লাস্টার শুরু করার পরিবর্তে, ফাশন যাত্রীর সাথে প্রক্রিয়া / ক্লাস্টারের স্ট্যাটিক ফাইলগুলি এবং / অথবা স্ট্যাটিক ফাইলগুলি সরবরাহ করার জন্য আপ্যাচি / Nginx কনফিগার করার জন্য আপনাকে কেবল এটি করতে হবে:

  1. আপনি ওয়েব সার্ভার কনফিগার ফাইলটি সম্পাদনা করেন এবং আপনার রুবি অ্যাপ্লিকেশনের 'সার্বজনিক' ডিরেক্টরিটির অবস্থান নির্দিষ্ট করুন।
  2. কোন পদক্ষেপ নেই 2।

সমস্ত কনফিগারেশন ওয়েব সার্ভার কনফিগারেশন ফাইলের মধ্যে সম্পন্ন করা হয়। ফুসফুস যাত্রী বেশিরভাগ সবকিছু স্বয়ংক্রিয়ভাবে স্বয়ংক্রিয়ভাবে। একটি ক্লাস্টার শুরু এবং প্রসেস পরিচালনা করার প্রয়োজন নেই। শুরু / বন্ধ করার প্রক্রিয়াগুলি, ক্র্যাশ করার সময় তাদের পুনরায় আরম্ভ করা ইত্যাদি - সমস্ত স্বয়ংক্রিয়। অন্যান্য অ্যাপ্লিকেশন সার্ভারের তুলনায়, ফুসফুস যাত্রী অনেক কম চলন্ত অংশ আছে। এই সহজে ব্যবহারের কারণ মানুষ কেন ফুসফুসের যাত্রী ব্যবহার করে।

এছাড়াও অন্যান্য অ্যাপ্লিকেশন সার্ভারের বিপরীতে, ফুসফুসের যাত্রী প্রাথমিকভাবে সি ++ এ লেখা হয়, এটি খুব দ্রুত তৈরি করে।

ফোনের যাত্রীর একটি এন্টারপ্রাইজ বৈকল্পিকও রয়েছে আরও বেশি বৈশিষ্ট্য, যেমন স্বয়ংক্রিয় রোলিং পুনরারম্ভ, মাল্টিথ্রেডিং সমর্থন, স্থাপনার ত্রুটি প্রতিরোধের ইত্যাদি।

উপরের কারণগুলির জন্য, ফুয়েন যাত্রী বর্তমানে সর্বাধিক জনপ্রিয় রুবি অ্যাপ্লিকেশন সার্ভার, যার মধ্যে 150,000 টিরও বেশি ওয়েবসাইট রয়েছে, যার মধ্যে রয়েছে নিউইয়র্ক টাইমস, পিক্সার, এয়ার বিএনবি ইত্যাদি।

ফোশন যাত্রী অন্যান্য অ্যাপ্লিকেশন সার্ভার বনাম

ফিউশন যাত্রী আরও অনেক বৈশিষ্ট্য সরবরাহ করে এবং অন্যান্য অ্যাপ্লিকেশন সার্ভারগুলির উপর অনেক সুবিধা দেয় যেমন:

  • গতিশীলভাবে ট্র্যাফিকের উপর ভিত্তি করে প্রক্রিয়া সংখ্যা সংযোজন। আমরা আমাদের সংস্থান-বিধিনিষেধযুক্ত সার্ভারগুলিতে জনসাধারণের মুখোমুখি নয় এমন Rails অ্যাপ্লিকেশানগুলির একটি টন চালান এবং আমাদের প্রতিষ্ঠানের লোকেরা প্রতিদিন কেবল কয়েক বার ব্যবহার করে। গিটল্যাব, রেডমাইন ইত্যাদি বিষয়গুলি। ফুসফুসের যাত্রীরা যখন তাদের ব্যবহার না করে তখন এই প্রক্রিয়াগুলিকে স্পিন করতে পারেন এবং যখন এটি ব্যবহার করা হয় তখন তাদের কাঁপানো যায়, আরও গুরুত্বপূর্ণ অ্যাপ্লিকেশানগুলির জন্য আরও সংস্থানগুলি উপলব্ধ করার অনুমতি দেয়। অন্যান্য অ্যাপ্লিকেশন সার্ভারের সাথে, আপনার সমস্ত প্রক্রিয়া সব সময় চালু হয়।
  • কিছু অ্যাপ্লিকেশন সার্ভার, নকশা দ্বারা নির্দিষ্ট workloads ভাল হয় না। উদাহরণস্বরূপ ইউনিকোনের শুধুমাত্র দ্রুত চলমান অনুরোধের জন্য ডিজাইন করা হয়েছে: ইউনিকর্ন ওয়েবসাইট বিভাগটি "কিছু ক্ষেত্রেই খারাপ" দেখুন।

ওয়ার্কলোডগুলি যে ইউনিকর্ন ভাল না হয়:

  • স্ট্রিমিং workloads (যেমন Rails 4 লাইভ স্ট্রিমিং বা Rails 4 টেমপ্লেট স্ট্রিমিং)।
  • ওয়ার্কলোড যা অ্যাপ্লিকেশন HTTP API কল সঞ্চালন করে।

ফুসফুস যাত্রী এন্টারপ্রাইজ 4 বা পরবর্তীতে হাইব্রিড I / O মডেলটি এই ধরণের কাজের লোডগুলির জন্য একটি চমৎকার পছন্দ করে।

  • অন্যান্য অ্যাপ্লিকেশন সার্ভারগুলির জন্য অ্যাপ্লিকেশন প্রতি অন্তত একটি উদাহরণ চালানোর জন্য ব্যবহারকারীর প্রয়োজন। বিপরীতে, ফুসফুসের যাত্রী একটি একক উদাহরণে একাধিক অ্যাপ্লিকেশন সমর্থন করে। এই ব্যাপকভাবে প্রশাসন ওভারহেড হ্রাস।
  • স্বয়ংক্রিয় ব্যবহারকারী সুইচিং, একটি সুবিধাজনক নিরাপত্তা বৈশিষ্ট্য।
  • ফুসফুস যাত্রী অনেক এমআরআই রুবি, জেআরবি এবং রুবিনিউসকে সমর্থন করে। মংগল, ইউনিকর্ন এবং থিন শুধুমাত্র এমআরআই সমর্থন করে। পুমা সব 3 সমর্থন করে।
  • ফুসফুস যাত্রী আসলে রুবি চেয়ে বেশি সমর্থন করে! এটি পাইথন WSGI সমর্থন করে, তাই এটি উদাহরণস্বরূপ Django এবং ফ্লাস্ক অ্যাপ্লিকেশন চালাতে পারে। আসলে ফিউশন যাত্রী একটি বহুবর্গ সার্ভার হয়ে যাওয়ার দিক থেকে চলছে। Node.js todo তালিকা উপর সমর্থন।
  • আউট অফ ব্যান্ড আবর্জনা সংগ্রহ। ফুসফুসের যাত্রী রুবি আবর্জনা সংগ্রাহককে সাধারণ অনুরোধ / প্রতিক্রিয়া চক্রের বাইরে চালাতে পারে, সম্ভবত শতকের মিলিসেকেন্ডের অনুরোধ বার হ্রাস করতে পারে। ইউনিকোনেরও একই রকম বৈশিষ্ট্য রয়েছে, তবে ফুসফুসের যাত্রীটির সংস্করণ আরও বেশি নমনীয় কারণ 1) এটি জিসি পর্যন্ত সীমাবদ্ধ নয় এবং নির্বিচারে কাজ করার জন্য এটি ব্যবহার করা যেতে পারে। 2) ফিউশন যাত্রী এর সংস্করণটি মাল্টিথ্রেডেড অ্যাপ্লিকেশনের সাথে ভালভাবে কাজ করে, যদিও ইউনিকর্ন এর নয়।
  • স্বয়ংক্রিয় রোলিং পুনরায় আরম্ভ। ইউনিকর্ন এবং অন্যান্য সার্ভারগুলিতে রোলিং পুনরায় শুরু করার জন্য কিছু স্ক্রিপ্টিং কাজ প্রয়োজন। ফুসফুস যাত্রী এন্টারপ্রাইজ আপনার জন্য এই ভাবে স্বয়ংক্রিয়ভাবে স্বয়ংক্রিয়ভাবে।

আরো বৈশিষ্ট্য এবং সুবিধা আছে, কিন্তু তালিকা সত্যিই দীর্ঘ। আপনি তথ্যের জন্য ব্যাপক ফিউশন যাত্রী ম্যানুয়াল (আপ্যাচি সংস্করণ , Nginx সংস্করণ ) বা ফুজান যাত্রী ওয়েবসাইট পড়ুন উচিত।

আমি / হে একযোগে মডেল

  • একক থ্রেড মাল্টি প্রক্রিয়া। রুবি অ্যাপ্লিকেশন সার্ভারগুলির জন্য এটি ঐতিহ্যগতভাবে সর্বাধিক জনপ্রিয় আই / ও মডেল, আংশিকভাবে রুবি ইকোসিস্টেমের মধ্যে বহুভাষী সমর্থন খুব খারাপ ছিল। প্রতিটি প্রক্রিয়া এক সময়ে ঠিক 1 অনুরোধ পরিচালনা করতে পারেন। ওয়েব সার্ভার প্রসেসের মধ্যে ভারসাম্য লোড। এই মডেলটি খুব শক্তসমর্থ এবং প্রোগ্রামারের কনকরারেন্সি বাগগুলি পরিচয় করানোর সামান্য সুযোগ রয়েছে। যাইহোক, তার I / O কনকুরেন্স অত্যন্ত সীমিত (প্রক্রিয়াগুলির সংখ্যা দ্বারা সীমাবদ্ধ)। এই মডেল দ্রুত, সংক্ষিপ্ত চলমান workloads জন্য খুব উপযুক্ত। এটি ধীরে ধীরে, দীর্ঘ-চলমান ব্লকিং I / O কাজের লোডগুলির জন্য খুবই অনুপযুক্ত, যেমন HTTP API এর কলিংয়ের সাথে যুক্ত ওয়ার্কলোড।
  • বিশুদ্ধ মাল্টি-থ্রেডেড। আজকাল রুবি ইকোসিস্টেমটিতে চমৎকার বহুমুখী সমর্থন রয়েছে, তাই এই I / O মডেলটি খুব কার্যকর হয়ে উঠেছে। মাল্টিথ্রেডিং উচ্চ I / O কনকুরেন্সকে সক্ষম করে, এটি উভয় শর্ট-চলমান এবং দীর্ঘ-চলমান ব্লকিং I / O ওয়ার্কলোডগুলির জন্য উপযুক্ত করে তোলে। প্রোগ্রামার কনকরারেন্সি বাগ পরিচয় করানোর সম্ভাবনা বেশি, কিন্তু ভাগ্যক্রমে বেশিরভাগ ওয়েব ফ্রেমওয়ার্ক এমনভাবে ডিজাইন করা হয়েছে যে এটি এখনও খুব অসম্ভাব্য। গ্লোবাল ইন্টারপ্রেটার লক (জিআইএল) ব্যবহারের কারণে একাধিক থ্রেড থাকলেও এমআরআই রুবি ইন্টারপ্রেটার একাধিক সিপিও কোরকে লিভারেজ করতে পারে না। আপনি একাধিক মাল্টি-থ্রেডেড প্রসেস ব্যবহার করে এটির চারপাশে কাজ করতে পারেন, কারণ প্রতিটি প্রক্রিয়াটি CPU কোরকে লিভারেজ করতে পারে। JRuby এবং Rubinius কোন GIL আছে, তাই তারা একক প্রসেসে একাধিক কোর সম্পূর্ণরূপে লিভারেজ করতে পারেন।
  • হাইব্রিড বহু-থ্রেড মাল্টি প্রক্রিয়া। প্রাথমিকভাবে ফুসফুস যাত্রী এন্টারপ্রাইজ 4 এবং পরে দ্বারা বাস্তবায়িত। আপনি সহজেই একক থ্রেডেড মাল্টি-প্রসেসের মধ্যে স্যুইচ করতে পারেন, সম্পূর্ণভাবে মাল্টিথ্রেড, অথবা সম্ভবত একাধিক থ্রেড সহ একাধিক প্রসেস। এই মডেল উভয় বিশ্বের সেরা দেয়।
  • Evented। এই মডেল পূর্বে উল্লিখিত মডেল থেকে সম্পূর্ণ ভিন্ন। এটি খুব উচ্চ I / O কনকুরেন্সকে অনুমোদন করে এবং তাই দীর্ঘ-চলমান ব্লকিং I / O ওয়ার্কলোডগুলির জন্য চমৎকার। এটি ব্যবহার করার জন্য, আবেদন এবং কাঠামো থেকে স্পষ্ট সমর্থন প্রয়োজন। তবে Rails এবং Sinatra মত সমস্ত প্রধান ফ্রেমওয়ার্ক ইভেন্ট কোড সমর্থন করে না। এক্ষেত্রে অনুশীলনে একটি পাতলা প্রক্রিয়া এখনও একাধিক অনুরোধকে পরিচালনা করতে পারে না, এটি কার্যকরভাবে একক-থ্রেডেড মাল্টি-প্রসেস মডেলের মতো আচরণ করে। এমন ক্রমাগত ফ্রেমওয়ার্ক রয়েছে যা ক্রপ হিসাবে ইভেন্ট I / O এর সুবিধা নিতে পারে।

ফাংশন ব্লগে সম্প্রতি একটি নিবন্ধ পোস্ট করা হয়েছে যা আপনার কাজের লোকেদের দেওয়া প্রসেস এবং থ্রেডগুলির সংখ্যাটি সর্বোত্তমভাবে টুন করা সম্পর্কে। Tuning ফিউশন যাত্রী এর concurrency সেটিংস দেখুন

capistrano

Capistrano সম্পূর্ণ ভিন্ন কিছু। পূর্ববর্তী বিভাগগুলিতে, "স্থাপনা" একটি অ্যাপ্লিকেশন সার্ভারে আপনার রুবি অ্যাপ্লিকেশানটি চালু করার কাজটিকে বোঝায়, যাতে এটি দর্শকদের কাছে অ্যাক্সেসযোগ্য হয়ে যায়, কিন্তু এটি হওয়ার আগে সাধারণত কিছু প্রস্তুতির কাজ করতে হবে, যেমন:

  • রুবি অ্যাপ্লিকেশন কোড এবং সার্ভার মেশিনে ফাইল আপলোড করা হচ্ছে।
  • আপনার অ্যাপ্লিকেশন উপর নির্ভর করে যে লাইব্রেরি ইনস্টল করা।
  • ডাটাবেস সেট আপ বা মাইগ্রেট করা।
  • আপনার অ্যাপটি নির্ভর করতে পারে এমন কোন ডেমনগুলি শুরু করা এবং বন্ধ করা, যেমন সাইদিক্ক / রেজেক শ্রমিক বা যাই হোক না কেন।
  • আপনার অ্যাপ্লিকেশন সেট আপ করার সময় যে কোনও অন্যান্য জিনিস সম্পন্ন করতে হবে।

Capistrano প্রসঙ্গে, "স্থাপনা" এই সব প্রস্তুতি কাজ বোঝায়। Capistrano একটি অ্যাপ্লিকেশন সার্ভার নয়। পরিবর্তে, এটি সমস্ত প্রস্তুতির কাজ স্বয়ংক্রিয় করার জন্য এটি একটি সরঞ্জাম। আপনি ক্যাপিস্ট্রানোকে যেখানে আপনার সার্ভার এবং কোন আদেশগুলি আপনার অ্যাপ্লিকেশনের একটি নতুন সংস্করণটি নিয়োজন করার সময় চালানোর প্রয়োজন হয় তা বলুন এবং Capistrano আপনার জন্য সার্ভারে Rails অ্যাপ্লিকেশন আপলোড করার এবং আপনি নির্দিষ্ট কমান্ডগুলি চালানোর জন্য যত্ন নেবে।

Capistrano সর্বদা একটি অ্যাপ্লিকেশন সার্ভারের সাথে সমন্বয় ব্যবহৃত হয়। এটা অ্যাপ্লিকেশন সার্ভার প্রতিস্থাপন করা হয় না। উপসর্গ, অ্যাপ্লিকেশন সার্ভার Capistrano প্রতিস্থাপন না, তারা Capistrano সঙ্গে সমন্বয় ব্যবহার করা যেতে পারে।

অবশ্যই আপনি Capistrano ব্যবহার করতে হবে না। আপনি যদি আপনার রুবি অ্যাপ্লিকেশনটি FTP- র সাথে আপলোড করতে এবং সর্বদা কমান্ডের একই পদক্ষেপগুলি চালাতে পছন্দ করেন তবে আপনি তা করতে পারেন। অন্যান্য লোকেরা এতে ক্লান্ত হয়ে পড়েছে, তাই তারা Capistrano মধ্যে যারা পদক্ষেপ স্বয়ংক্রিয়ভাবে।





mongrel