আমি কখন এনজিঙ্কে স্যুইচ করব?


11

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

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

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

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

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

পার্শ্ব দ্রষ্টব্য : দয়া করে আমাকে সি ++ এর পরিবর্তে ব্যাখ্যাযুক্ত ভাষা ব্যবহার করার জন্য অনুরোধ করবেন না, এটি প্রশ্নের সাথে সম্পর্কিত নয়। দেখুন CPPCSM যুক্তিপূর্ণ পৃষ্ঠা এটা fromt আবেদন ধরনের কি উপকৃত হতে পারেন দেখতে। আমি ত্রুটিগুলি পুরোপুরি বুঝতে পেরেছি (রুবি এবং পাইথনের অ্যাপগুলির তুলনায়, আমি ইতিমধ্যে কম ক্ষুধার্ত ওয়েব অ্যাপগুলির জন্য ব্যবহার করেছি) এবং আমি এটির সাথে ভাল আছি।

উত্তর:


10

কয়েকটি বিষয়:

অ্যাপাচি এবং এনগিনেক্স বা লাইটটিপিডি (যা আমি ব্যক্তিগতভাবে খুব পছন্দ করি) এর মধ্যে প্রধান পার্থক্য হ'ল আর্কিটেকচার:

  1. অ্যাপাচি প্রতি প্রক্রিয়া বা প্রতি থ্রেডের একটি সংযোগ পরিচালনা করে (Mod-XYZ এর উপর নির্ভর করে)
  2. এনগিনেক্স এবং লাইটটিপিডি একক ইভেন্ট লুপে একক থ্রেডেড হ্যান্ডেল একাধিক সংযোগ।

ফলস্বরূপ:

  1. একযোগে সংযোগের সংখ্যার অধীনে এনগিনেক্স এবং লাইটটিপিডি স্কেলগুলি আরও ভাল করে তোলে, 1000 টি সংযোগের সাথে বলা যাক অ্যাপাচি প্রায় মারা যাবে কারণ এটির জন্য মোড-প্রেফের্কে 1000 প্রসেস বা মোড-ওয়ার্কারের 1000 থ্রেডের প্রয়োজন হবে।

    আপনি যদি ধূমকেতু প্রযুক্তিগুলি ব্যবহার করার পরিকল্পনা করছেন যেখানে প্রতিটি সংযোগের জন্য দীর্ঘ পোলিং এইচটিটিপি সংযোগের প্রয়োজন হয় তবে অ্যাপাচি গ্রহণযোগ্য হবে না কারণ এটি ভালভাবে স্কেল করে না।

  2. প্রতিটি সংযোগে + - দুটি সকেট (এইচটিটিপি এবং ফাস্টসিজিআই), ইন্টারমিডিয়েট মেমোরি বাফার এবং কিছু স্টেটের প্রয়োজন হওয়ায় এনগিনেক্স এবং লাইটটিপিডি কম মেমরি গ্রহণ করে, অন্যদিকে অ্যাপাচের জন্য স্ট্যাক এবং অন্যান্য জিনিসগুলি সহ পুরো থ্রেডের প্রয়োজন হবে।

বেঞ্চমার্কগুলিতে আমার ব্যক্তিগত অভিজ্ঞতা থেকে আমি লাইটটিপিডি করেছি (এবং আমি এনগিনেক্সও ধরে নিয়েছি) ফাস্টসিজিআই ব্যাকএন্ডের পরে অ্যাপাচি দিয়ে কিছুটা দ্রুত গতিতে এটি সংযোগের স্বল্প পরিমাণের জন্য।

এখন আর একটি বিষয় হল আপনি যখন ফাস্টসিজিআই সংযোগগুলি ব্যবহার করে কিছু লোড-ব্যালান্সিং করতে চান।

চিরাচরিত আর্কিটেকচারে আছে

                               |
                              HTTP
                               |
         Balancer (Nginx/Lighttpd/Cherooke/something-else)
            /      |           |            |      \
         HTTP    HTTP         HTTP        HTTP     HTTP
         /         |           |            |         \
 Apache+PHP   Apache+PHP   Apache+PHP   Apache+PHP   Apache+PHP   
  Server 2    Server 3     Server 4      Server 5     Server 6

কারণ অ্যাপাচি তাদের প্রতিটি Mod-PHP (বা অন্যান্য মোড) চলমান প্রক্রিয়াগুলির পুলগুলি পরিচালনা করে Because

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

                               |
                              HTTP
                               |
         Balancer (Nginx/Lighttpd/Cherooke/something-else)    
                           Server 1
            /      |           |            |      \
         FCGI    FCGI         FCGI        FCGI     FCGI
         /         |           |            |         \
    CppCMS App  CppCMS App  CppCMS App    CppCMS App  CppCMS App
     Server 2    Server 3     Server 4      Server 5     Server 6

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


+1 CppCMS এর লেখক দ্বারা সম্পূর্ণ সম্পূর্ণ ব্যাখ্যা;) ঠিক আছে এখন আমি সামগ্রিক সমস্যাটি আরও ভাল দেখতে পাচ্ছি। সুতরাং যেখানে আপনার কেবলমাত্র একটি সার্ভার রয়েছে (শুরু করার জন্য) তা হ'ল HTTP-> ব্যালেন্সার-> এফসিজিআই-> সিপিপিসিএমএস, যদি আমি সঠিকভাবে বুঝতে পারি? জেস্পার মর্টেনসেনের মন্তব্য থেকে আপনি কী বলেছিলেন যে ফাস্টসিজিআই দ্রুত নয়?
ক্লাইম

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

@ জেস্পর মর্টেনসেন> আমি সম্মত, তবে প্রশ্নটিতে আপনি কোন পরিবর্তনটি সুনির্দিষ্টভাবে বলতে চান?
ক্লাইম

6

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

এটি বলেছিল, অ্যাপাচি ধারাবাহিকভাবে এনগিনেক্সকে ছাড়িয়ে যাবে এমন অনেকগুলি ক্ষেত্র রয়েছে, অন্যদিকে এনগিনেক্স ঠিক যেমন ধারাবাহিকভাবে অ্যাপাচিকে ছাড়িয়ে যাবে।

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

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

সাইড নোটে: আপনি সি ++ তে একটি ওয়েব অ্যাপ তৈরির আপনার ইচ্ছাটির কথা উল্লেখ করেছেন। আপনার বুদ্ধিমানের জন্য, আমি আপনাকে দৃ strongly়ভাবে অনুরোধ করছি পরিবর্তে পিএইচপি, পাইথন, এমনকি জাভা এর মতো একটি উচ্চ-স্তরের ভাষা ব্যবহার করুন। তারপরে আপনার কোডটি প্রোফাইল করুন এবং নির্দিষ্ট বাধাগুলি সমাধান করার জন্য সি ++ - ভিত্তিক মডিউলগুলি বিবেচনা করুন (পাইথন এবং পিএইচপি উভয়ই এটি বরং সহজেই অনুমতি দেয়; জাভা সম্পর্কে জানেন না)। আপনি যদি সামগ্রিক পারফরম্যান্স সম্পর্কে উদ্বিগ্ন হন তবে এটিকে বিবেচনা করুন: বিশ্বের একক বৃহত্তম শেয়ারহীন এমএমওআরপিজি ইভি অনলাইন অনলাইনে সি ++ তে লিখিত মূল উপাদান (যেমন গ্রাফিক্স লাইব্রেরি) সহ পাইথনের (স্ট্যাকলেস পাইথন) বিভিন্ন ধরণের তৈরি করা হয়েছে। পাইথন যদি এটি পরিচালনা করতে পারে তবে অবশ্যই এটি আপনার ওয়েব অ্যাপ্লিকেশনটিকে পরিচালনা করতে পারে?


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

3

কেউ কখন "আমার কখন স্যুইচ করা উচিত" অংশটির উত্তর দিতে পারে না - এটি আপনার বোঝা, আপনার নিজের অ্যাপ্লিকেশন কোডের কার্যকারিতা ইত্যাদির উপর নির্ভর করবে will

এনজিঞ্জ, এটি অ্যাপাচি-র চেয়ে আরও বেশি পারফরম্যান্ট বলে মনে হচ্ছে

স্ফীত I / O ব্যবহার করে সমস্ত ক্লায়েন্ট সংযোগগুলি পরিচালনা করতে nginx একটি একক প্রক্রিয়া (বা খুব কম সংখ্যক কর্মী প্রক্রিয়া) ব্যবহার করে। অ্যাপাচে বেশ কয়েকটি "মাল্টি-প্রসেসিং মডিউল" উপলভ্য রয়েছে তবে সেগুলি অনেকগুলি অনেকগুলি প্রক্রিয়া / বহু থ্রেডের দিকে আরও ঝুঁকছে। ফলস্বরূপ, অ্যাপাচি সাধারণত বেসিক এইচটিটিপি সংযোগ হ্যান্ডলিংয়ের জন্য এনগিনেক্সের চেয়ে বেশি র‌্যাম এবং সিপিইউ গ্রহণ করবে। আপনি কেজেলের সি 10 কে পৃষ্ঠাতে বিভিন্ন সংযোগ পরিচালনা করার পদ্ধতির একটি ওভারভিউ পেতে পারেন ।

খুব কর্মক্ষমতা-নিবিড় ওয়েব অ্যাপ্লিকেশন (সিপিসিএমএস সহ সি ++ ব্যবহার করে)

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

আপনি লোড-ব্যালেন্সিং করতে চাইলে এনজিঙ্ক্স সেরা পছন্দ হবে,

এনগিনেক্স একটি ভাল লোড ব্যালেন্সার; তবে সেই জায়গাতে অনেকগুলি বিকল্প রয়েছে

আমি কি কোনও সমস্যা ছাড়াই একই মেশিনে অ্যাপাচি এবং এনজিঞ্জ দুটি ব্যবহার করতে পারি?

হ্যাঁ. এগুলিকে বিভিন্ন আইপি পোর্ট নম্বর এবং / অথবা আইপি ঠিকানাগুলিতে চালান।


"আমি উচ্চতর স্তরের ভাষায় বেসিক ওয়েব অ্যাপ্লিকেশনটি করার বিষয়ে দৃ strongly়তার সাথে পরামর্শ করব"> আমি এটি বলিনি যে এটি একটি বেসিক ওয়েবআপ - এটি এমনকি তুচ্ছ নয়। আপনি যদি সিপিপিসিএমএস ব্যবহারের যুক্তি দেখেন তবে লেখক কয়েকটি পয়েন্টের ক্ষেত্রে এটি কার্যকর হতে পারে এবং আমি সে ক্ষেত্রে আছি। আমি অন্যান্য বিকল্পগুলি বিবেচনা করেছি তবে সি ++ এর সাথে যাওয়ার চেয়ে সেগুলি আরও ব্যয়বহুল পেয়েছি, কমপক্ষে আমি যে ধরণের ওয়েব অ্যাপ লিখছি। সুতরাং এটি প্রশ্নের অংশ নয়। তবে আমি আপনাকে পরামর্শটি বুঝেছি এবং লোকেরা ওয়েব অ্যাপ্লিকেশনগুলির জন্য সি ++ ব্যবহার করা উচিত কিনা সে সম্পর্কে আমাকে জিজ্ঞাসা করে same আমি আরও একটি সাধারণ অ্যাপের জন্য পাইথন ব্যবহার করার পরিকল্পনা করছি।
ক্লাইম

যাইহোক, বিশদ জন্য +1।
ক্লাইম

@ ক্লেইম: আপনি যদি একটি সুসংযুক্ত সি # / জাভা প্রয়োগের উপরে দাবী "মাত্রার ক্রম" পারফরম্যান্সের উন্নতি উপলব্ধি করতে চান তবে দেখুন আপনি নিজের ওয়েবসিভারের সাথে সিপিপিসিএমএস এবং অ্যাপ্লিকেশন কোডটি প্রসেস চালাতে পারবেন কিনা - যেমন একটি প্লাগইন হিসাবে এনগিনেক্স / অ্যাপাচি সিপিপিসিএমএস পৃষ্ঠাগুলি ওয়েবসিভার এবং সিপিসিএমএসের মধ্যে সংযোগ হিসাবে ফাস্টপিজিআই দেখায়; এবং আসলে ফাস্টসিজিআই ... দ্রুত নয়।
জেস্পার এম

> আকর্ষণীয় ধারণা। আশেপাশের বেশিরভাগ পরামর্শ হ'ল আপনার ফাস্টসিজি ব্যবহার করা উচিত কারণ এটি বিকল্পগুলির চেয়ে দ্রুত। আমি এটি করতে পারি কিনা তা আমি খতিয়ে দেখব, সম্ভবত সিপিপিসিএমএস লেখকের সাথে দেখুন কেন তিনি মনে করেন যে এটি দ্রুততম test
ক্লাইম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.