කුමන Apache MPM භාවිතා කළ යුතුද යන්න මා තෝරා ගන්නේ කෙසේද?


273

මෙය නිවැරදි Apache httpd MPM තෝරා ගැනීම පිළිබඳ කැනොනිකල් ප්‍රශ්නයකි .

අපාචේ විසින් පිරිනමනු ලබන විවිධ එම්පීඑම් අතර මම ටිකක් ව්‍යාකූල වී සිටිමි.

ඔවුන් අතර ඇති ප්‍රධාන වෙනස්කම් මොනවාද, ලබා දී ඇති යෙදවීම සඳහා වඩාත් සුදුසු වන්නේ කුමක්දැයි මම තීරණය කරන්නේ කෙසේද?


4
ඔබ mod_php සඳහා සහය දක්වන්නේ නම්, ඔබ කරන්නේ prefork ය.
Zoredache

6
Ored කලාපීය :? ඇය කිසි විටෙකත් PHP ගැන සඳහන් නොකළ අතර, ඇය සතුව තිබුනද, mod_php සිදුවීම ප්‍රතික්ෂේප කරනු ඇත. එසේත් නැතිනම් මීට වසර 8 කට පෙර ආර්එල් විසින් කරන ලද ප්‍රකාශයකට ඔබ තවමත් ඇලී සිටිනවාද? නූල්
අපාචේ

2
කණගාටුයි - මෙය වැසීමට ඡන්දය දීමට සිදුවිය - මෙහි පිළිතුරු දීමට වඩා පුළුල් ය.
symcbean

1
ysymcbean Re: PHP සහ Threads - මේ දිනවල PHP හි හරය නූල් ආරක්ෂිතයි, නමුත් වෙනත් බොහෝ දේ සම්පාදනය කරන පුද්ගලයින් ඔබට හමු වේ. මට පසුගිය වසරේ තරම් මෑතදී දෂ්ට කර ඇත, එබැවින් එය නිෂ්පාදනයේ රඳා
පැවතීමට

ඔබ භාවිතා කරන මෙහෙයුම් පද්ධතිය මත පදනම්ව, ඔබට එම සියලු විකල්පයන් සම්මත ස්ථාපනයකින් ලබා ගත නොහැක.
ජෝන් ගාර්ඩනියර්ස්

Answers:


422

රැසක් පවතින MPM මොඩියුල (* nix වේදිකා මත අවම වශයෙන්) (බහු-සැකසුම් මොඩියුල), නමුත් මෙතෙක් විසින් සිදු කරන ලද වඩාත්ම පුළුල් ලෙස භාවිතා කරන ප්රධාන අය තුනක් ඇත: prefork, worker, සහ event. අත්යවශ්යයෙන්ම, ඒවා අපාචේ වෙබ් සේවාදායකයේ පරිණාමය නියෝජනය කරන අතර, සේවාදායකයාගේ දීර් long (මෘදුකාංගමය වශයෙන්) ඉතිහාසය පුරා පරිගණක සීමාවන් තුළ HTTP ඉල්ලීම් හැසිරවීම සඳහා සේවාදායකය ගොඩනගා ඇති විවිධ ක්රම.


prefork

mpm_preforkහොඳයි .. එය සියල්ල සමඟ අනුකූල වේ. ඉල්ලීම් ඉටු කිරීම සඳහා එය ළමා ක්‍රියාවලි ගණනාවක් අක්‍රිය කරයි, සහ ළමා ක්‍රියාවලීන් සේවය කරන්නේ වරකට එක් ඉල්ලීමක් පමණි. සේවාදායක ක්‍රියාවලිය එහි වාඩි වී සිටීම, ක්‍රියා කිරීමට සුදානම් වීම සහ නූල් මාෂල් කිරීම සමඟ ගනුදෙනු කිරීමට අවශ්‍ය නොවන නිසා, ඔබ වරකට එක ඉල්ලීමක් සමඟ පමණක් ගනුදෙනු කරන විට එය නවීන නූල් සහිත එම්පීඑම් වලට වඩා වේගවත් වේ - නමුත් සමගාමී ඉල්ලීම් දුක් විඳිනවා, සේවාදායක ක්‍රියාවලියක් නොමිලේ වන තුරු ඔවුන් පෙළගැසී සිටින බැවින්. මීට අමතරව, පූර්ව ළමා ක්‍රියාදාමයන් ගණනය කිරීමට උත්සාහ කිරීමෙන්, ඔබ පහසුවෙන් බරපතල RAM ප්‍රමාණයක් උරා බොනු ඇත.

නූල් ආරක්ෂිත නොවන මොඩියුලයක් ඔබට අවශ්‍ය නම් මිස පෙර වැඩ භාවිතා කිරීම සුදුසු නොවේ.

එසේ නම් භාවිතා කරන්න: ඔබට නූල් භාවිතා කරන විට කැඩී යන මොඩියුල අවශ්‍ය mod_phpවේ. එසේ වුවද, FastCGI සහ php-fpm.

නම් භාවිතා නොකරන්න: ඔබේ මොඩියුල නූල් කැඩෙන්නේ නැත.

worker

mpm_workerනූල් භාවිතා කරයි - එය සමගාමී මුදල් සඳහා විශාල උපකාරයකි. සේවකයා සමහර ළමා ක්‍රියාවලීන් ඉවතට හරවන අතර එමඟින් ළමා කෙඳි අක්‍රීය වේ; පෙර සම්බන්ධතා වලට සමානව, සමහර අමතර නූල් හැකි නම්, පැමිණෙන සම්බන්ධතා සඳහා සූදානම්ව තබා ඇත. මෙම ප්‍රවේශය RAM මත වඩා කාරුණික ය, මන්ද යත් නූල් ගණනට පෙර ගණනය කිරීම් වලදී මෙන් සේවාදායක ගණන මෙන් මතක භාවිතය කෙරෙහි සෘජු බලපෑමක් ඇති නොවන බැවිනි. පූර්වාරක්ෂාව තුළ අමතර සේවාදායකයක් වෙනුවට සම්බන්ධතා සඳහා නොමිලේ නූල් (සාමාන්‍යයෙන් ලබා ගත හැකි) රැඳී සිටීමට අවශ්‍ය බැවින් එය වඩාත් පහසුවෙන් සහසම්බන්ධය හසුරුවයි.

භාවිතා කරන්න: ඔබ සිටින්නේ Apache 2.2, හෝ 2.4 හි වන අතර ඔබ මූලික වශයෙන් SSL ධාවනය කරයි.

නම් භාවිතා නොකරන්න: ඔබට අනුකූලතාව සඳහා පූර්ව අවශ්‍යතාවයක් ඇත්නම් මිස ඔබට වැරදියට යා නොහැක.

කෙසේ වෙතත්, පංචද්වාරික සම්බන්ධ බව සටහන් සම්බන්ධතා නොව ඉල්ලීම් - තබා ජීවත්ව සම්බන්ධයක් සෑම විටම (ඔබගේ වින්යාස මත පදනම්ව, දීර්ඝ කාලයක් විය හැකි) එය වසා කරන තෙක් නූල් ක අල්ලාගෙන තබන අතර ඉන් අදහස්. ඒ නිසා තමයි අපිට ..

event

mpm_eventව්‍යුහාත්මකව සේවකයාට බෙහෙවින් සමාන ය; එය අපාචේ 2.4 හි 'පර්යේෂණාත්මක' සිට 'ස්ථාවර' තත්වයට ගෙන ගොස් ඇත. විශාල වෙනස නම්, එය තබා ඇති සජීවී සම්බන්ධතා සමඟ කටයුතු කිරීම සඳහා කැපවූ නූල් භාවිතා කරන අතර, ළමයින්ගේ නූල් වෙත දෑත් ඉල්ලීම ඇත්ත වශයෙන්ම ඉල්ලීමක් කළ විට පමණි (ඉල්ලීම අවසන් වූ වහාම එම නූල් නිදහස් වීමට ඉඩ දෙයි). වරකට සියල්ලන්ම ක්‍රියාකාරී නොවන, නමුත් ඉඳහිට ඉල්ලීම් කරන, සහ සේවාදායකයින්ට දීර්-කාලයක් ජීවත්විය හැකි කල් ඉකුත් වූ සේවාදායකයින්ගේ සමගාමී මුදල් සඳහා මෙය විශිෂ්ටයි.

මෙහි ව්‍යතිරේකය වන්නේ SSL සම්බන්ධතා ය; එවැනි අවස්ථාවකදී, එය සේවකයාට සමාන ලෙස ක්‍රියා කරයි (සම්බන්ධතාවය අවසන් වන තුරු දී ඇති නූලකට ලබා දී ඇති සම්බන්ධතාවය ඇලවීම).

භාවිතා කරන්න: ඔබ අපාචේ 2.4 හි සිටින අතර නූල් වැනි ය, නමුත් නිෂ්ක්‍රීය සම්බන්ධතා එනතෙක් බලා සිටීමට ඔබ කැමති නැත. හැමෝම කැමතියි නූල්!

එසේ නොකරන්න: ඔබ අපාචේ 2.4 හි නොමැත, නැතහොත් අනුකූලතාව සඳහා ඔබට පූර්ව අවශ්‍යතාවයක් ඇත.


වර්තමානයේ ස්ලෝලෝරිස් , අජැක්ස් සහ බ්‍රව්සර් බහුකාර්ය 6 ටීසීපී සම්බන්ධතා වලට කැමති (ඇත්ත වශයෙන්ම සජීවීව) ඔබේ සේවාදායකයට, ඔබේ සේවාදායක පරිමාණය සහ පරිමාණය හොඳින් කිරීමට සමගාමී මුදල් වැදගත් සාධකයකි. අපාචේගේ ඉතිහාසය මේ සම්බන්ධයෙන් එය බැඳී ඇති අතර, සම්පත් භාවිතය හෝ පරිමාණය අනුව එය තවමත් එන්ජින්එක්ස් හෝ ලයිට්පීඩී වැනි දේ සමඟ සැසඳිය නොහැකි වුවද, සංවර්ධන කණ්ඩායම තවමත් අදාළ වෙබ් සේවාදායකයක් තැනීමට කටයුතු කරමින් සිටින බව පැහැදිලිය. අද ඉහළ ඉල්ලීම්-සමගාමී ලෝකයේ.


3
-1: IME, සේවකයා විසින් httpd අඩිපාරේ ප්‍රමාණය 15% ක කලාපයකින් පමණක් අඩු කරයි (IIRC ලිනක්ස් විසින් RSS හි COW වාර්තා කරයි, එමඟින් පෙර-දෙබලක පෙනුමට වඩා වැඩි මතකයක් භාවිතා කරන බවක් පෙනේ). ක්‍රියාවලියක් සඳහා කර්නල් පා සටහන සහ එන්පීටීඑල් නූල් අතර නොසැලකිලිමත් වෙනසක් ඇත. එය පොළොව දෙදරුම් කමින් බොහෝ දුරයි. (පෙර-ව්‍යාජ) ක්‍රියාවලියක් බලා සිටීම / උපලේඛනගත කිරීමකට වඩා නූල් එකක් බලා සිටීම හා වෙන් කිරීම කොන්දේසි උපලේඛනගත කිරීමේදී වඩා කාර්යක්ෂම යැයි ඔබ සිතන්නේ මන්දැයි මට තේරෙන්නේ නැත. එස්එස්එල් සමස්තයක් ලෙස ඇය සිතන්නේ කුමක්ද?
symcbean

10
ysymcbean ඉතින් ඔබ කියන්නේ 15% RAM භාවිතය වැදගත් නොවන බවයි? එය හොඳයි, නමුත් මගේ මතය වෙනත් ආකාරයකින් වනු ඇත. සමගාමී කාර්ය සාධන හිමිකම් මගේ නොවේ. මෙහි බලන්න . එම්පීඑම්:The improved connection handling does not yet work for certain connection filters, in particular SSL. For SSL connections, this MPM will fall back to the behaviour of the worker MPM and reserve one worker thread per connection.
ෂේන් ​​මැඩන්

3
Han ෂේන්මැඩන් `සහ එය තවමත් සම්පත් භාවිතය හෝ පරිමාණය අනුව එන්ජින්එක්ස් හෝ ලයිට්පීඩී වැනි දේ සමඟ සැසඳිය නොහැක.
කෙලී එල්ටන්

SS එස්එස්එල් හා එම්පීඑම් හි ගැටලුව සම්බන්ධයෙන් ෂේන්මැඩන්: එන්පීඑක්ස් අපචේට වඩා සැලකිය යුතු ලෙස මෙය හසුරුවන්නේ දැයි ඔබ දන්නවාද?
ඩස්කාජා

1
eventඑස්එස්එල් සම්බන්ධතා භාවිතා කරන විට එම්පීඑම් හි සීමාව තවදුරටත් සත්‍ය නොවන බව පෙනේ. අත්පොත httpd.apache.org/docs/2.4/mod/event.html දැන් මෙසේ කියයි: "මෙම වැඩිදියුණු කිරීම් HTTP / HTTPS සම්බන්ධතා දෙකටම වලංගු වේ." මේ අනුව, Apache 2.4 මත, eventදැන් හැම විටම බලාපොරොත්තු තැබිය යුතු අතර, පෙනී යයි worker2.2 කාලයේ සිට තවමත් ඇත.
පීටර් තෝමසන්

11

Gif සමඟ එය ක්‍රියා කරන ආකාරය පිළිබඳ හොඳ පැහැදිලි කිරීමක් මෙන්න:

https://www.datadoghq.com/blog/monitoring-apache-web-server-performance/

කෙටියෙන්: ඔබ නම් 2.4 ඔබ හා ලෙස වූ httpd අවශ්ය ආපසු ප්රොක්සි (dispatcher) ඔබේ තේරීම යනු, එසේ Event MPM


අපි SSL භාවිතා කළත්? මම එස්පීඑල් නොවන වෙබ් අඩවියක ප්‍රොක්සි සහ එස්එස්එල් සක්‍රීය කරන්නෙකු ලෙස අපාචේ භාවිතා කරමි.
බොකාන්

ok බොකාන් ඔව්, මෙය හොඳම බව පෙනේ, නමුත් කෙසේ හෝ එස්එස්එල් සඳහා ප්‍රොක්සිං කිරීම සීමා වේ
යූරා

වාව් the බ්ලොග් සටහන පිළිගත් පිළිතුරට වඩා හොඳය, සහ ගිෆ්ස් අපූරුය! ස්තූතියි. ඔබ මගේ දවස ඉතිරි කළා.
රික්

7

2018 පෙබරවාරි වන විට, සිදුවීම් MPM සඳහා වන Apache 2.4 ප්‍රලේඛනයෙහි දැක්වෙන්නේ Apache ප්‍රොක්සියක් ලෙස භාවිතා කිරීම 2.4.24 සිට “වැඩිදියුණු කළ සම්බන්ධතා හැසිරවීම” සැලසුම් කර ඇති පරිදි වැඩ කිරීමෙන් වළක්වන බවයි. සීමාවන් අංශය බලන්න .

ගැටළුව වන්නේ, ප්‍රොක්සියක් ලෙස, සේවකයාට ප්‍රතිචාරයේ අවසානය කොතැනදැයි කිව නොහැකි අතර, සවන්දෙන්නන් වෙත පාලනය නැවත ලබා දීමට පෙර සම්පූර්ණ ප්‍රතිචාරය දකින තුරු බලා සිටීමට බල කෙරෙනු ඇත.

මේ හේතුව නිසා, අපාචේ ප්‍රොක්සියක් ලෙස භාවිතා කරන විට සේවක ආකෘතිය භාවිතා කිරීම වඩාත් සුදුසු බව පෙනේ. ප්‍රොක්සි පරිසරයක සිදුවීම් ආකෘතියට වාසි තිබේද යන්න මට සැබවින්ම පැහැදිලි නැත, නමුත් සමහර විට ඒවා තිබේ.


6

බොහෝ දුරට රඳා පවතින්නේ ඔබට භාවිතා කිරීමට අවශ්‍ය Apache මොඩියුල මත ය. මම හිතන්නේ සේවකයා සාමාන්‍යයෙන් පෙරනිමි තේරීම වේ, නමුත් සමහර (පැරණි) මොඩියුල සඳහා දෙබලක අවශ්‍ය වන අතර එය පෙර වැඩ මත රඳා පවතී.

ඔබට මනාපයන් නොමැති නම්, ඔබේ මෙහෙයුම් පද්ධතියේ බෙදාහැරීමෙන් වඩාත් කැමති යැපීම සමඟ යාමට මම නිර්දේශ කරමි. උදාහරණයක් ලෙස උබුන්ටු ඔබ Apache2 ස්ථාපනය කරන විට පෙරනිමියෙන් mpm- සේවකය ස්ථාපනය කරයි.

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.