2011-11-15 9 views
5

में मैं बहु-किरायेदार एप्लिकेशन चलाने के लिए केकेएफपी का उपयोग कर रहा हूं। ऐप का केवल 1 उदाहरण है, प्रत्येक ऐप से कनेक्ट होने वाला डाटाबेस का एकमात्र अंतर होता है। इसके अलावा, ऐप समान है।एपीसी कैश अलगाव एक बहु टेंटेंट सेटिंग (केकेएचपी)

मेरे सेटअप:

  1. Apache 2.2
  2. Php 5.3
  3. केक 1.3.10
  4. जीत 2k3 सर्वर

    मैं एप्लिकेशन अपाचे के docroot के तहत तैनात (बस है का 1 उदाहरण ऐप चल रहा है)। मैंने हाल ही में फ़ाइल से एपीसी कैश में स्विच किया है। कैशिंग के लिए फ़ाइल उपसर्ग दोनों ऐप्स के लिए समान हैं। अपाचे वर्चुअल होस्ट का उपयोग यह तय करने के लिए कि कौन सा ऐप जाना है। मैं कैशिंग हूँ स्थिर HTML/JS/सीएसएस/gif नहीं बल्कि php (अपाचे के mod_expires के माध्यम से)

समस्या:

मैं कैश की गई मानों के लिए उपलब्ध होने वाले थे में से कुछ है कि देखा ऐप 1 ऐप 2 के लिए ड्रॉपडाउन में दिखा रहा था। मैं यह देखने के लिए चौंक गया था।

मैं ऐप्स के बीच एपीसी कैश परत में अलगाव कैसे जोड़ सकता हूं?

अद्यतन: समस्या भले ही मैं एप्लिकेशन की एक नई प्रतिलिपि बनाने के लिए और अपने स्वयं के docroot में रख होता है !!!

UPDATE2

परिदृश्य 1) ​​1 उदाहरण अगर मैं

if(client=="client1") { 
$options = array(opt1,opt2); 
}else if(client=="client2") { 
$options = array(opt3,opt4); 
} 

तरह php कोड है सब पर्म/कंघी

है और इस कोड को दोनों ग्राहक द्वारा साझा किया जाता है कि 1 और ग्राहक 2, एपीसी कैशिंग कैसे प्रभावित करेगा?

परिदृश्य 2) 2 उदाहरण प्रत्येक ग्राहक के प्रति अनुकूलित

client1.php 
$options = array(opt1,opt2); 

client2.php 
$options = array(opt3,opt4); 

कैसे इस एपीसी कैश प्रभावित करता है? यदि मैं सही समझता हूं, तो परिदृश्य 1 के लिए, क्लाइंट 2 (बहुत खराब) के साथ क्लाइंट 1 डेटा मिश्रण होना संभव है, जब तक कि मैं अलग-अलग कैश कुंजी का उपयोग करता हूं, क्या मुझे यकीन है कि कभी भी मिश्रण नहीं होगा?

उत्तर

1

एक तरीका यह हो सकता है:

  • उपयोग अपने उपयोगकर्ताओं के लिए एपीसी के बजाय memcached
  • अपने vhosts/डोमेन बाँध आईपी खुद के
  • अपने vhost के लिए मेम्कैश उदाहरणों शुरू (अर्थातvhost1 = पोर्ट 12345, vhost2 = बंदरगाह 12,346, ...)

आपका समस्या लगती है iptable नियम है कि विशिष्ट मेम्कैश बंदरगाह जो कि बंदरगाह के लिए अपने vhost आईपी से मेल नहीं खाता पर हर पैकेट ड्रॉप) जोड़ने के लिए, वह php fastcgi के रूप में चलता है, ताकि प्रत्येक vhost को उनके कैश को साझा करने के लिए एक ही php प्रक्रिया मिल जाएगी। आप (क्या आप के लिए देखने के लिए है के लिए नहीं जानता) बस हर vhost के लिए चलाने के लिए php स्थापित करने के लिए की जरूरत है।

मैं मेम्कैश विधि पसंद करेंगे क्योंकि:

  • मेम्कैश आप एक मेम्कैश क्लस्टर बनाने की अनुमति देता
  • इसकी (स्केलिंग के लिए एक बड़ा प्लस thats)
  • कैचिंग सर्वर से अपने आवेदन सर्वर अलग करने के लिए आसान उपयोगकर्ता कैश
  • से आप अलग bytecache बहुत सुरक्षित configurated सुधारें (के रूप में अपनी iptables बहुत विश्वसनीय है
+0

आईपी प्रति मेम्कैश के लिए धन्यवाद: बंदरगाह विचार, तथापि opcode कैश के बारे में क्या? – aks

2

क्यों:

  1. एपीसी vhosts, ऐप या अन्य "अपाचे" चीजों के बारे में कुछ भी नहीं जानता है।
  2. इसका मतलब यह है कि किसी भी कैश कुंजी सभी vhosts बीच साझा किया जाता है, तो एपीसी साझा किया जाता है। (जो आप आमतौर पर चाहते हैं)।
  3. एपीसी उसके अपने अलगाव परत नहीं है।

वर्कअराउंड:

  1. प्रत्येक अनुप्रयोग उनके स्वामित्व वाले कैश चाबी के लिए उपसर्ग दे। यह उन्हें अलग-अलग उपयोगकर्ता कैश कुंजी की चाबियों तक पहुंचने की अनुमति देता है। memcached के साथ (सबसे आसान)
  2. पालन breiti के कार्यप्रवाह आप सही अलगाव की आवश्यकता है। (शायद सबसे अच्छा समाधान)
  3. आप हर व्यक्ति आभासी मेजबान के लिए एक अनूठा php.ini और एक अद्वितीय fcgiwrapper के लिए चलाने पर विचार कर सकते हैं (देखें: http://chrisgilligan.com/wordpress/apc-cache-considerations-for-virtual-hosting-environments/)। हालांकि इसका मतलब स्मृति उपयोग में उच्च वृद्धि है। (यदि आप वास्तव में इसे समाधान चाहते हैं)
+0

क्या आप अपडेट 2 पर टिप्पणी कर सकते हैं? – aks

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