এই উত্তরটি অন্যগুলির পরিপূরক এবং কেন ইউনিকর্ন এর সামনে nginx প্রয়োজন তা ব্যাখ্যা করে ।
টিএল; ডিআর ইউনিকর্ন সাধারণত এনজিনেক্সের মতো বিপরীত প্রক্সি সহ একসাথে স্থাপনের কারণ হ'ল এর নির্মাতারা ইচ্ছাকৃতভাবে এটি নকশা করেছিলেন, সরলতার জন্য ট্রেড অফ করে।
প্রথমত, বিপরীত প্রক্সি ছাড়াই আপনাকে ইউনিকর্ন স্থাপন করা থেকে বিরত রাখার কিছুই নেই । তবে, এটি খুব ভাল ধারণা হবে না; আসুন দেখি কেন।
ইউনিকর্ন ইউনিক্স দর্শনের অনুসরণ করে যা একটি কাজ করা এবং এটি ভালভাবে করা এবং এটি দ্রুত, কম-বিলম্বিত ক্লায়েন্টদের পরিবেশন করা (আমরা এর পরে কী বোঝাতে চাইব )। ইউনিকর্ন দ্রুত, নিম্ন-বিলম্বিত ক্লায়েন্টগুলির জন্য ডিজাইন করা হয়েছে তাও বোঝায় যে এটি ধীর, উচ্চ-ক্ষুদ্রতর ক্লায়েন্টগুলির সাথে খুব ভাল নয় , যা সত্য। এটি ইউনিকর্নের অন্যতম দুর্বল পয়েন্ট এবং এটি যেখানে একটি বিপরীত প্রক্সি খেলতে আসে: এটি ইউনিকর্নের সামনে বসে those ধীর ক্লায়েন্টদের যত্ন নেয় (আমরা পরে কীভাবে দেখব )।
ভাগ্যক্রমে, এই জাতীয় একটি বিপরীত প্রক্সি ইতিমধ্যে বিদ্যমান এবং এটি nginx বলা হয় ।
কেবলমাত্র দ্রুত ক্লায়েন্টদের পরিচালনা করার সিদ্ধান্তটি ইউনিকর্নের নকশাটি ব্যাপকভাবে সরল করে দেয় এবং স্থাপনার বিভাগে কিছু যুক্ত জটিলতার জন্য (যেমন আপনাকে ইউনিকর্ন ছাড়াও এনজিনেক্স মোতায়েন করতে হবে) অনেক সহজ এবং ছোট কোডবেসকে মঞ্জুরি দেয়।
বিকল্প সিদ্ধান্তটি ইউনিকর্নকে এমনভাবে ডিজাইন করতে পারে যাতে এটির বিপরীত প্রক্সি প্রয়োজন হয় না। তবে এর অর্থ হ'ল এনগিনেক্সের সমস্ত কাজ করতে অতিরিক্ত কার্যকারিতা প্রয়োগ করতে হবে, ফলে আরও জটিল কোডবেস এবং আরও প্রকৌশল প্রচেষ্টা তৈরি হবে।
পরিবর্তে এর নির্মাতারা যুদ্ধ-পরীক্ষিত এবং খুব ভাল নকশাকৃত বিদ্যমান সফ্টওয়্যারটি উত্তোলন করার সিদ্ধান্ত নিয়েছে এবং অন্যান্য সফ্টওয়্যার দ্বারা ইতিমধ্যে সমস্যার সমাধানে সময় এবং শক্তি অপচয় করা এড়াতে।
তবে আসুন প্রযুক্তিগত হয়ে আপনার প্রশ্নের উত্তর দিন:
কেন ইউনিকর্নকে এনজিনেক্সের সাথে একসাথে মোতায়েন করা দরকার?
এখানে কয়েকটি মূল কারণ রয়েছে:
ইউনিকর্ন ক্লায়েন্টদের জন্য I / O ব্লকিং ব্যবহার করে
বিপরীত প্রক্সি নির্ভর করার অর্থ ইউনিকর্নকে অ-ব্লকিং I / O ব্যবহার করার দরকার নেই । পরিবর্তে এটি I / O- কে ব্লক করা ব্যবহার করতে পারে যা প্রোগ্রামারটির পক্ষে মেনে চলা সহজ এবং সহজ।
ডিজাইনের নথিতে যেমন বলা হয়েছে:
[I / O- কে ব্লক করা] ব্যবহারের ফলে রুবি ইন্টারপ্রেটার এবং আরও কম সিস্টেমের মধ্যে একটি সহজ কোড পাথ অনুসরণ করা যায়।
তবে এর কিছু পরিণতিও রয়েছে:
মূল পয়েন্ট # 1: ইউনিকর্ন ধীর ক্লায়েন্টগুলির সাথে দক্ষ নয়
(সরলতার জন্য, আমরা 1 ইউনিকর্ন কর্মীর সাথে একটি সেটআপ ধরে নিই)
যেহেতু আই / ও ব্লক করা ব্যবহার করা হয়, তাই ইউনিকর্ন শ্রমিক কেবল একবারে একটি ক্লায়েন্ট পরিবেশন করতে পারে তাই একটি ধীর ক্লায়েন্ট (যেমন ধীর সংযোগযুক্ত একজন) কার্যকরভাবে কর্মীকে দীর্ঘ সময়ের জন্য ব্যস্ত রাখবে (একজন দ্রুত ক্লায়েন্টের চেয়ে) )। ইতিমধ্যে, অন্যান্য ক্লায়েন্টরা কেবল শ্রমিক মুক্ত না হওয়া পর্যন্ত অপেক্ষা করবেন (অর্থাত্ অনুরোধগুলি সারিবদ্ধভাবে আবদ্ধ হবে)।
এই সমস্যাটি দেখার জন্য, ইউনিকর্নের সামনে একটি বিপরীত প্রক্সি স্থাপন করা হয় যা আগত অনুরোধগুলি এবং অ্যাপ্লিকেশন প্রতিক্রিয়াগুলিকে পুরোপুরি বাফার করে এবং তারপরে প্রত্যেকে একবারে ইউনিকর্ন এবং ক্লায়েন্টদের কাছে যথাক্রমে প্রেরণ করে। সেই বিষয়ে, আপনি বলতে পারেন যে বিপরীত প্রক্সি ধীর নেটওয়ার্ক ক্লায়েন্টদের ইউনিকর্ন "ঝাল" করে ield
ভাগ্যক্রমে Nginx এই ভূমিকার জন্য দুর্দান্ত প্রার্থী, যেহেতু এটি কয়েক হাজার শত সহবর্তী ক্লায়েন্টকে দক্ষতার সাথে পরিচালনা করার জন্য ডিজাইন করা হয়েছে।
এটি অত্যন্ত গুরুত্বপূর্ণ যে বিপরীত প্রক্সিটি ইউনিকর্নের মতো একই স্থানীয় নেটওয়ার্কের মধ্যে হওয়া উচিত (সাধারণত একই শারীরিক মেশিনে ডাব্লু / ইউনিকর্ন একটি ইউনিক্স ডোমেন সকেটের মাধ্যমে যোগাযোগ করে) যাতে নেটওয়ার্কের বিলম্বটিকে সর্বনিম্ন রাখা হয় to
সুতরাং এই জাতীয় প্রক্সি কার্যকরভাবে দ্রুত ক্লায়েন্টের ভূমিকা পালন করে যা ইউনিকর্নকে প্রথম স্থানে পরিবেশন করার জন্য ডিজাইন করা হয়েছিল, যেহেতু এটি ইউনিকর্নের কাছে দ্রুত অনুরোধ করে এবং কম সময়ের জন্য কম সময়ে কর্মীদের ব্যস্ত রাখে (ক্লায়েন্টের কত সময় তুলনা করা যায় তার তুলনায়) একটি ধীর সংযোগ দিয়ে করতে হবে)।
মূল পয়েন্ট # 2: ইউনিকর্ন এইচটিটিপি / 1.1 টি লাইভ রাখার পক্ষে সমর্থন করে না
যেহেতু ইউনিকর্ন আই / ও ব্লকিং ব্যবহার করে, এর অর্থ হ'ল এটি এইচটিটিপি / ১.১ রাখুন-জীবিত বৈশিষ্ট্যটিকে সমর্থন করতে পারে না, কারণ ধীর ক্লায়েন্টদের অবিচ্ছিন্ন সংযোগগুলি দ্রুত সমস্ত উপলভ্য ইউনিকর্ন কর্মীদের দখল করবে।
তাই এইচটিটিপি চালিয়ে যাওয়ার জন্য, কী ধারণা করুন: একটি বিপরীত প্রক্সি ব্যবহৃত হয়।
অন্যদিকে nginx, মাত্র কয়েক থ্রেড ব্যবহার করে হাজার হাজার সমবর্তী সংযোগগুলি পরিচালনা করতে পারে। অতএব, এটিতে ইউনিকর্নের মতো সার্ভারের সীমাবদ্ধতা নেই (যা মূলত কর্মী প্রক্রিয়াগুলির পরিমাণের মধ্যে সীমাবদ্ধ) যার অর্থ এটি স্থির সংযোগগুলি ঠিকঠাক পরিচালনা করতে পারে। কিভাবে এই আসলে কাজ করে আরো পাওয়া যাবে এখানে ।
এজন্য এনজিনেক্স ক্লায়েন্টদের কাছ থেকে ধরে রাখার সংযোগ গ্রহণ করে এবং সাধারণত ইউনিক্স সকেটের মাধ্যমে প্লেইন সংযোগের মাধ্যমে তাদের ইউনিকর্নে প্রক্স করে।
পয়েন্ট # 3: ইউনিকর্ন স্ট্যাটিক ফাইলগুলি পরিবেশন করতে খুব ভাল নয়
আবার, স্ট্যাটিক ফাইলগুলি পরিবেশন করা এমন জিনিস যা ইউনিকর্ন করতে পারে তবে দক্ষতার জন্য ডিজাইন করা হয়নি।
অন্যদিকে, এনজিনেক্সের মতো বিপরীত প্রক্সিগুলি যদিও এতে আরও বেশি ভাল (যেমন sendfile(2)
& & ক্যাশিং)।
অধিক
অন্যান্য পয়েন্ট, যা রূপরেখা হয় দর্শনের দলিল (দেখুন "বিপরীত প্রক্সী মাধ্যমে উন্নত পারফরমেন্স" )।
এছাড়াও কিছু দেখতে nginx এর মৌলিক বৈশিষ্ট্য ।
আমরা দেখতে পাই যে বিদ্যমান সফ্টওয়্যারটি (যেমন। এনজিনেক্স) উপকারের মাধ্যমে এবং "একটি কাজ করে ভালভাবে পরিচালনা করুন" এর ইউনিক্স দর্শনের অনুসরণ করে, ইউনিকর্ন র্যাক অ্যাপ্লিকেশনগুলিতে দক্ষতা বজায় রাখার জন্য একটি সহজ নকশা এবং বাস্তবায়ন অনুসরণ করতে সক্ষম হয় (উদাঃ। আপনার রেল অ্যাপ্লিকেশন)।
আরও তথ্যের জন্য ইউনিকর্ন এর পড়ুন দর্শন এবং নকশা নথি যা আরো বিস্তারিত ব্যাখ্যা ইউনিকর্ন এর নকশা পিছনে পছন্দ এবং কেন nginx একটি ভাল ইউনিকর্ন জন্য রিভার্স প্রক্সি বিবেচনা করা হয়।