আমার কেন এনগিনেক্স এবং গ্যানিকর্নের মতো কিছু দরকার?


219

আমি নিম্নলিখিত প্রশ্নের একটি অতিরিক্ত সরল উত্তর খুঁজছি। আমি এনগিনেক্স কীভাবে গ্যানিকর্নের মতো কিছু পাশাপাশি কাজ করে তার একটি ভিত্তিগত বোঝার চেষ্টা করার চেষ্টা করছি।

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

যদি তা হয় তবে এইচটিটিপি অনুরোধগুলি আসলে কী পরিচালনা করে?

গীত। আমি অ্যাপাচি এবং মোড_উজি ব্যবহার করতে চাই না!


আপনার জাঙ্গো অ্যাপ্লিকেশন এবং HTTP অনুরোধগুলির মধ্যে সেতুটি বাস্তবায়নের সবচেয়ে সহজ উপায় অ্যাপাচি এবং মোড_উসজি যা উত্পাদন পরিবেশেও খুব সক্ষম। অনেক বিকাশকারীদের জন্য, এর অর্থ 'আপাচি এনগিনেক্সের চেয়ে ভাল' যদি তারা তা জানত তবে 'বেটাম্যাক্স ভিএইচএসের চেয়ে ভাল', হায়, ডগমা নিয়ম
ম্যাজিকলাম্প

উত্তর:


314

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

[অস্বীকৃতি: আমি একজন গ্যানিকর্ন বিকাশকারী]

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

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

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

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

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

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

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

তাই বন্ধ, হ্যাঁ। যথাযথ জ্যাঙ্গো স্থাপনার জন্য আপনার উভয়ই এনগিনেক্স এবং গ্যানিকর্ন (বা অনুরূপ কিছু) দরকার। আপনি যদি বিশেষভাবে জাঙ্গোকে এনগিনেক্সের সাথে হোস্ট করতে চান তবে আমি জ্যাঙ্গো দিকের প্রার্থী হিসাবে গুনিকর্ন, মোড_উউসগি এবং সম্ভবত চেরিপাই তদন্ত করব।


14
এত বিস্তারিত উত্তর লেখার জন্য সময় দেওয়ার জন্য ধন্যবাদ! এই "3 স্তরের আর্কিটেকচার" সম্পর্কে কোনও প্রস্তাবিত পাঠ?
am

5
দুর্দান্ত উত্তর, তবে আমি ধীর ক্লায়েন্টদের সাথে বিষয়টি বুঝতে পারি না।
ম্যাডস স্কজার্ন

3
@ ম্যাডসস্কার্ন আমি এখানে অনুমান করছি, তবে আপনি যদি ধরে নেন যে সমস্ত ক্লায়েন্ট দ্রুত, তবে আপনি শ্রমিকের প্রক্রিয়াগুলির একটি নির্দিষ্ট পুল ব্যবহার করতে পারেন, এবং যে ক্ষেত্রে বা তাদের অনেকগুলি ক্লায়েন্টের অপেক্ষায় অবরুদ্ধ হয়ে যায় সেই ক্ষেত্রে কোড দেওয়ার দরকার নেই।
জোনাথন হার্টলি


7
আমার জ্যাঙ্গো অ্যাপ্লিকেশনটি কেবলমাত্র জোনসকে কোনও স্ট্যাটিক সামগ্রী সরবরাহ করতে পারে আমি কেবল বন্দুক এবং কোনও এনজিনেক্সের সাথে যেতে পারি না
Sar009

27

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

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

এটি গ্যানিকর্নের কাজ। গ্যানিকর্ন একটি ইউনিক্স সকেট তৈরি করবে এবং ডাব্লুএসজি প্রোটোকলের মাধ্যমে এনজিন্সের প্রতিক্রিয়া সরবরাহ করবে - সকেট উভয় দিক দিয়ে ডেটা পাস করে:

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

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


এটি সকেট হতে হবে না, কেবল অন্যরা যদি ভাবছে তবে।
অক্ষয়

0

আমি একটি অতিরিক্ত সরল উত্তর খুঁজছি ...

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

যদি তা হয় তবে এইচটিটিপি অনুরোধগুলি আসলে কী পরিচালনা করে?

অতিরিক্ত সরল উত্তর:

হ্যাঁ.

দুজনই Nginx এবং Gunicorn।

আপনি যেহেতু Nginx এ স্থাপন করছেন, অবশ্যই আপনার Nginx দরকার need

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

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


0

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

nginx মূলত সমস্ত অনুরোধগুলি বাফার করে এবং স্ট্যাটিক ফাইলের অনুরোধগুলি নিজেই পরিচালনা করে (আপনি যদি এটির মতো কনফিগার করেছেন)। এবং অন্য সার্ভারে সমস্ত গতিশীল সামগ্রীকে প্রক্সি করে। (বন্দুকর্ণ / জাজানো)।

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

আমি এটি বেঞ্চমার্ক করেছি এবং এটি পেয়েছি - বন্দুকের সাথে: বন্দুকবিহীন 22k রেকর্ড / গুলি: 34 কে রেক / এস

আপনার সাইটে ভারী বোঝা অতিরিক্ত রেকর্ডার দরকার হবে।


1
আপনি কি প্রোডাকশনে ডেভলপমেন্ট সার্ভার চালানোর কথা বলছেন ?!
মাইকেল হ্যাম্পটন

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

1
github.com/django/channels/issues/142 (TLDR: তার একটি খারাপ ধারণা)
igor
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.