প্রশ্ন কেন আমি Nginx এবং Gunicorn মত কিছু প্রয়োজন?


আমি নিম্নলিখিত প্রশ্নের একটি overly সরলীকৃত উত্তর খুঁজছেন। আমি কিভাবে Nginx Gunicorn মত কিছু পাশাপাশি কাজ করে একটি মৌলিক বোঝার নির্মাণ করার চেষ্টা করছি।

আমি Nginx উভয় এবং Nginx নেভিগেশন Django অ্যাপ্লিকেশন স্থাপন করতে Gunicorn মত কিছু প্রয়োজন?

যদি তাই হয়, HTTP অনুরোধ আসলে পরিচালনা করে?

গীত। আমি অপাচা এবং mod_wsgi ব্যবহার করতে চান না!


182
2017-11-15 21:16


উত্স


Apache এবং mod_wsgi আপনার django অ্যাপ্লিকেশন এবং http অনুরোধগুলির মধ্যে সেতু বাস্তবায়ন করার সবচেয়ে সহজ উপায় যা একটি উত্পাদন পরিবেশে খুব সক্ষম। অনেক বিকাশকারীর জন্য, এর মানে হল 'অপাচে nginx এর থেকে ভাল' যদি তারা তা করে তবে তা জানত, কিন্তু 'বিটাম্যাক ভিএইচএসের চেয়ে ভাল', হায়, ডগমা নিয়ম - MagicLAMP


উত্তর:


সর্বাধিক সরলীকৃত: পাইথনটি চালানোর জন্য আপনার এমন কিছু প্রয়োজন কিন্তু পাইথন সমস্ত ধরণের অনুরোধগুলি পরিচালনা করার জন্য সর্বোত্তম নয়।

[দাবিত্যাগ: আমি একটি Gunicorn বিকাশকারী]

কম সরলীকৃত: আপনি কোন অ্যাপ্লিকেশন সার্ভারটি ব্যবহার করেন (গুনিকোরন, মড_উগসি, মোড_উভেসি, চেরিপি) যেকোনো ধরণের অ-তুচ্ছ স্থাপনার ক্ষেত্রে কিছু আপস্ট্রিম থাকবে যা আপনার Django অ্যাপ্লিকেশনটিকে পরিচালনা করা উচিত নয় এমন অনুরোধগুলি পরিচালনা করবে। যেমন অনুরোধ তুচ্ছ উদাহরণ স্ট্যাটিক সম্পদ পরিবেশন করা হয় (ইমেজ / CSS / জেএস)।

এই ক্লাসিক "তিন স্তর স্থাপত্য" দুটি প্রথম স্তর মধ্যে ফলাফল। আমি, ওয়েব সার্ভার (আপনার ক্ষেত্রে Nginx) ইমেজ এবং স্ট্যাটিক সম্পদ জন্য অনেক অনুরোধ হ্যান্ডেল করবে। ডাইনামিকভাবে জেনারেট হওয়া প্রয়োজনের অনুরোধগুলি তারপর অ্যাপ্লিকেশন সার্ভারে প্রেরিত হবে (আপনার উদাহরণে Gunicorn)। (একটি সরাইয়া হিসাবে, তিনটি স্তর তৃতীয় ডাটাবেস হয়)

ঐতিহাসিকভাবে বলতে গেলে, এই প্রতিটি স্তরগুলি পৃথক মেশিনগুলিতে হোস্ট করা হবে (এবং সম্ভবত প্রথম দুটি স্তরগুলিতে একাধিক মেশিন হতে পারে, যেমন: 5 ওয়েব সার্ভার দুটি অ্যাপ্লিকেশন সার্ভারে অনুরোধ প্রেরণ করে যা পরিবর্তে একটি ডেটাবেস অনুসন্ধান করে)।

আধুনিক যুগে আমরা এখন সব আকার এবং মাপের অ্যাপ্লিকেশন আছে। প্রতি সপ্তাহান্তে প্রকল্প বা ছোট ব্যবসা সাইট আসলে আসলে একাধিক মেশিনের অশ্বশক্তি প্রয়োজন এবং একক বক্সে বেশ সুখীভাবে চালানো হবে। এই হোস্টিং সমাধান অ্যারের মধ্যে নতুন এন্ট্রি spawned হয়েছে। কিছু সমাধান ওয়েব সার্ভারে অ্যাপ সার্ভারের সাথে বিয়ে করবে (Apache httpd + mod_wsgi, Nginx + mod_uwsgi, ইত্যাদি)। এবং এটি এমন কোনও ওয়েব / অ্যাপ্লিকেশন সার্ভারের সমন্বয়গুলির মতো একই মেশিনে ডেটাবেস হোস্ট করতে অসাধারণ নয়।

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

বিচ্ছেদ এছাড়াও Gunicorn বিশুদ্ধ Python লিখতে পারবেন যা উন্নয়ন খরচ কমানো যখন উল্লেখযোগ্যভাবে কর্মক্ষমতা প্রভাবিত না। এটি ব্যবহারকারীদের অন্যান্য প্রক্সি ব্যবহার করার ক্ষমতা দেয় (তারা সঠিকভাবে বাফার ধরছে)।

HTTP অনুরোধটি আসলে কীভাবে পরিচালনা করে সে বিষয়ে আপনার দ্বিতীয় প্রশ্ন হিসাবে, সাধারণ উত্তরটি Gunicorn। সম্পূর্ণ উত্তর Nginx এবং Gunicorn অনুরোধ হ্যান্ডেল উভয়। মূলত, Nginx অনুরোধ গ্রহন করবে এবং যদি এটি একটি গতিশীল অনুরোধ (সাধারণত ইউআরএল প্যাটার্নের উপর ভিত্তি করে) হয় তবে এটি গিনিকর্নকে অনুরোধ করবে, যা এটি প্রক্রিয়া করবে এবং তারপর Nginx এ একটি প্রতিক্রিয়া ফেরত দেবে যা তারপরে আসল প্রতিক্রিয়াটি ফেরত পাঠাবে। ক্লায়েন্ট।

সুতরাং বন্ধ, হ্যাঁ। আপনি সঠিক Django স্থাপনার জন্য Nginx এবং Gunicorn (বা অনুরূপ কিছু) উভয় প্রয়োজন। আপনি যদি বিশেষভাবে Nginx দিয়ে Django হোস্ট করার জন্য খুঁজছেন, তবে আমি জিনিকোনের, mod_uwsgi, এবং সম্ভবত CherryPy বিষয়গুলির Django পক্ষে প্রার্থী হিসাবে তদন্ত করব।


268
2017-11-15 21:49



যেমন একটি বিস্তারিত উত্তর লিখতে সময় গ্রহণ করার জন্য ধন্যবাদ! এই "3 স্তর স্থাপত্য" উপর কোন সুপারিশ পড়া? - a.m.
মহান উত্তর, তবে আমি ধীর ক্লায়েন্টদের সাথে সমস্যাটি বুঝতে পারছি না। - Mads Skjern
@MadsSkjern আমি এখানে অনুমান করছি, কিন্তু আপনি যদি সমস্ত ক্লায়েন্ট দ্রুতই অনুমান করেন তবে আপনি কর্মীদের প্রসেসগুলির একটি নির্দিষ্ট পুল ব্যবহার করতে পারেন এবং এমন ক্ষেত্রে কোড করতে হবে না যেখানে অনেকগুলি বা সমস্ত ক্লায়েন্টের জন্য অপেক্ষা করা অবরুদ্ধ করে। - Jonathan Hartley
@ টায়। en.wikipedia.org/wiki/Multitier_architecture - Jonathan Hartley
আমার django অ্যাপ্লিকেশন শুধুমাত্র জson কোন স্ট্যাটিক কন্টেন্ট পরিবেশন করতে পারেন আমি শুধু gunicorn এবং কোন nginx সঙ্গে যেতে পারেন - Sar009


আমি তার সরলতা এই ব্যাখ্যা পছন্দ করেছে:

Nginx বাইরে বিশ্বের সম্মুখীন হবে। এটা মিডিয়া ফাইল পরিবেশন করা হবে (ইমেজ,   সিএসএস, ইত্যাদি) সরাসরি ফাইল সিস্টেম থেকে। তবে, এটা কথা বলতে পারে না   Django অ্যাপ্লিকেশন সরাসরি; এটা চালানো হবে যে কিছু প্রয়োজন   অ্যাপ্লিকেশন, ওয়েব থেকে অনুরোধ ফিড, এবং প্রতিক্রিয়া ফিরে।

এটা Gunicorn এর কাজ। Gunicorn একটি ইউনিক্স সকেট তৈরি, এবং পরিবেশন করা হবে   wsgi প্রোটোকল মাধ্যমে nginx প্রতিক্রিয়া - সকেট মধ্যে তথ্য পাস   উভয় নির্দেশাবলী:

The outside world <-> Nginx <-> The socket <-> Gunicorn

https://gist.github.com/Atem18/4696071


20
2017-12-13 07:52



এটি সকেট হতে হবে না, অন্যদের ক্ষেত্রে বিস্মিত হয়। - akshay


আমি একটি overly সরলীকৃত উত্তর খুঁজছেন করছি ...

আমি Nginx উভয় এবং Nginx নেভিগেশন Django অ্যাপ্লিকেশন স্থাপন করতে Gunicorn মত কিছু প্রয়োজন?

যদি তাই হয়, HTTP অনুরোধ আসলে পরিচালনা করে?

সর্বাধিক সরলীকৃত উত্তর:

হ্যাঁ।

Nginx এবং Gunicorn উভয়।

আপনি Nginx উপর স্থাপন করা হয়, অবশ্যই অবশ্যই আপনি Nginx প্রয়োজন।

যেহেতু আপনি Django কে স্থাপন করছেন, যা একটি ওয়েব ফ্রেমওয়ার্ক, আপনাকে ওয়েব সার্ভার (Nginx) এবং ওয়েব ফ্রেমওয়ার্ক (Django) এর মধ্যে কথোপকথনটি ব্রিজিংয়ের প্রয়োজন। পাইথন জগতে, এ ধরনের একটি জিনিসকে ডাব্লুএসজিআই সার্ভার বলা হয় (তবে এটি একটি মাঝারি গুদামের মত মনে হয়), উদাহরণস্বরূপ গুনিকোর্ণ এবং ইউডাব্লিউআই। একটি অনুরোধ পরিচালনা করার সময়, Nginx Gunicorn বা uWSGI থেকে অনুরোধ প্রক্সি, যা পাল্টে Django কোড কল এবং প্রতিক্রিয়া ফেরত।

এই নথীটি এবং পল এর উত্তর আপনি এটি আরও ভাল শেখার সাহায্য করবে।


0
2017-10-26 21:42