2009-05-23 10 views
13

शिक्षित करें मैं वर्तमान में अपनी सेवा में memcached लागू कर रहा हूँ, लेकिन क्या फसल को रोकता है यह सुझाव है कि मुझे वास्तविक कोड के कैशिंग के लिए एपीसी भी लागू करना चाहिए।PHP एपीसी, मुझे

मैंने कुछ ट्यूटोरियल देखे हैं, और PHP documentation भी हैं, लेकिन मेरा मुख्य प्रश्न यह है कि, मैं इसे बड़े पैमाने पर कैसे कार्यान्वित कर सकता हूं? PHP दस्तावेज चर भंडारण के बारे में बात करते हैं, लेकिन यह विस्तृत नहीं है।

मुझे इस क्षेत्र में अशिक्षित होने के लिए क्षमा करें, लेकिन मैं जानना चाहता हूं कि वास्तविक साइटों में यह कहां लागू किया गया है। क्या मैं सचमुच सब कुछ या केवल उन हिस्सों को कैश करता हूं जिनका उपयोग अक्सर किया जाता है, जैसे कार्य?

धन्यवाद!

उत्तर

9

जैसा कि आप जानते हैं कि PHP एक व्याख्या की गई भाषा है, इसलिए हर बार जब कोई अनुरोध सर्वर पर आता है तो उसे सभी आवश्यक और फ़ाइलें शामिल करने की आवश्यकता होती है, उन्हें पार्स करें और उन्हें निष्पादित करें। एपीसी ऑफ़र क्या है/आवश्यकताएं और पार्सिंग चरणों को छोड़ना है (फ़ाइलों को अभी भी जरूरी है, लेकिन स्मृति में संग्रहीत हैं इसलिए एक्सेस बहुत तेज़ है), इसलिए स्क्रिप्ट को निष्पादित करना होगा। हमारी वेबसाइट पर, हम एपीसी और memcached के संयोजन का उपयोग करते हैं। उपर्युक्त चरणों को तेज़ करने के लिए एपीसी, और वैश्विक चर दोनों (प्रीकंप्यूटेड महंगे फ़ंक्शन कॉल इत्यादि) को तेज़ और वितरित स्टोरेज और एक्सेसिंग को सक्षम करने के लिए मेमकैच किया गया है, जिसे कई निश्चित समय के लिए कई क्लाइंट द्वारा साझा किया जा सकता है) साथ ही सत्र चर। यह हमें लॉगिन स्थिति आदि जैसे किसी भी ग्राहक स्थिति को खोए बिना कई फ्रंट एंड सर्वर प्राप्त करने में सक्षम बनाता है।

जब आपको कैश करना चाहिए तो यह ठीक है ... अच्छा, यह वास्तव में आपके एप्लिकेशन पर निर्भर करता है। यदि आपको लाइन के नीचे कहीं भी कई फ्रंटेंड्स की आवश्यकता है, तो मैं ऐसे कैशिंग और स्टोरिंग के लिए मेमकैड के साथ जाने का प्रयास करूंगा, और एपीसी को ऑपोड कैश के रूप में उपयोग करूँगा।

+0

हाँ यह प्रणाली के प्रकार की तरह लगता है, मैं सबसे अधिक संभावना का उपयोग करूँगा। क्या आप एपीसी कैश में कितनी देर तक फाइलें संग्रहीत हैं, यह निर्धारित करते हैं कि एपीसी कैश (10 एमबी, 500 एमबी, आदि?) के लिए आदर्श आकार क्या है और यदि वास्तविक PHP फ़ाइल में परिवर्तन किए जाते हैं, तो क्या यह फिर से कैश करता है या केवल बाद में कैशिंग के लिए निर्धारित समय अवधि समाप्त हो जाती है? – James

+0

डिफ़ॉल्ट रूप से, एपीसी अनुरोध के लिए प्रत्येक आवश्यक फ़ाइल के संशोधन समय की जांच करता है। इस प्रकार, यदि आप एक नया तैनाती करते हैं, तो एपीसी स्वचालित रूप से सबसे हालिया फाइल को पार्स और कैश करेगा। यहां देखने के लिए एपीसी-वेरिएबल * apc.stat * है। अगर आप इसे बंद कर देते हैं, तो आपको नए कोड का उपयोग करने के लिए वेब सर्वर को पुनरारंभ करना होगा।हालांकि, यह एपीसी तेज कर देगा क्योंकि इसे फ़ाइल सिस्टम की जांच करने की आवश्यकता नहीं है। मेमोरी ... मुझे सच में यकीन नहीं है। फिर, यह आपके सिस्टम पर निर्भर करता है। यदि आप इसे ओपकोड कैशिंग के लिए उपयोग करते हैं, तो उसे उस स्मृति की आवश्यकता नहीं होगी। – PatrikAkerstrand

+0

इसकी कितनी आवश्यकता है इस पर निर्भर करता है कि आपका कोड कितना बड़ा है। एक अच्छे आकार के लिए, मैं 64 एमबी से शुरू करूंगा। मैं वास्तव में कोड समाप्त होने से काफी हद तक हेडरूम छोड़ने के लिए 2.5-3x अधिक छोड़ देता हूं, इसलिए मैं इसके अलावा एक और संस्करण डाल सकता हूं। एक व्यस्त साइट के लिए, apc.stat = 0 उपयोगी है, लेकिन आप अपाचे को पुनरारंभ करने के बजाए फ़ंक्शन कॉल से कैश को भी साफ़ कर सकते हैं। –

9

एपीसी opcode cache और एक सामान्य डेटा कैश दोनों है। उत्तरार्द्ध memcached की तरह बहुत काम करता है, जबकि opcode कैश पार्स किए गए php-files को कैश करके काम करता है, ताकि उन्हें प्रत्येक अनुरोध पर पार्स नहीं किया जा सके। यह आमतौर पर निष्पादन समय को थोड़ा सा बढ़ा सकता है।

+0

आह, ऐसा लगता है जैसे ओपोड कैश मेरी सेवा के लिए सबसे उपयोगी हिस्सा होगा। क्या आपके पास ओपोड कैश की स्थिति में एपीसी लागू करने के बारे में कोई और जानकारी है? – James

+0

अच्छी तरह से .. आप मूल रूप से बस एक्सटेंशन स्थापित करें और php.ini में कुछ कॉन्फ़िगरेशन सेटिंग्स सेट करें। यदि आप [स्रोत कोड डाउनलोड करें] (http://pecl.php.net/package/apc) pecl से एक्सटेंशन के लिए, इसके साथ एक छोटा वेब एप्लिकेशन वितरित किया गया है, जिसका उपयोग आप कुछ आंकड़ों को देखने के लिए कर सकते हैं। अन्यथा, [मैनुअल] (http://www.php.net/apc/) काफी व्यापक है। – troelskn

+0

यह वास्तव में यह निर्धारित करने की बात है कि यह कितनी जगह का उपयोग करेगा, और इसे सर्वर में छोड़ देगा। सबसे महत्वपूर्ण वेबसाइटों के लिए, यह एक ब्रेनर है जो चाहते हैं। मैंने देखा है कि मशीन एक सर्वर पर लोड होने पर 1.0+ के लोड-औसत से <0.3 तक जाती है, क्योंकि प्रत्येक सर्वर लोड के लिए बहुत अनावश्यक संकलन चल रहा था। –

2

आपको एपीसी की ऑपोड कैशिंग सुविधाओं को लागू करने की आवश्यकता नहीं है, तो आप उन्हें केवल एक PHP मॉड्यूल के रूप में सक्षम करते हैं।

एपीसी कैश आकार और अन्य कॉन्फ़िगरेशन जानकारी here है।

संबंधित मुद्दे