2011-07-01 13 views
7

मेरे पास एक php webservice है जिसे कुछ कार्य करने के लिए (मोबाइल फोन से) कहा जा सकता है। इन कार्यों को करने के लिए, कॉलर "लॉग इन" होना चाहिए। प्रमाणीकरण को संभालने का सबसे अच्छा तरीका क्या है?किसी webservice के लिए लॉगिन लागू करने का सबसे अच्छा तरीका क्या है?

वर्तमान में, मैं केवल सत्र का उपयोग कर रहा हूं। क्लाइंट एक लॉगिन एपीआई, और किसी अन्य एपीआई की आवश्यकता है। लेकिन मैं इस सेवा को कॉल करने वाले 200,000 लोगों के प्रभाव के बारे में चिंतित हूं और उन सभी सत्रों में हूं। मुझे यकीन नहीं है कि सर्वर कैसे जवाब देगा। कोई सुझाव? यह आमतौर पर कैसे संभाला जाता है? फेसबुक, फ़्लिकर, आदि की तरह ....

+0

पीएचपी और उसके सत्र जिस तरह से और अधिक शक्तिशाली की तुलना में आप सोच सकते हैं कर रहे हैं। अगर अभी अपने सर्वर पर बहुत अधिक बोझ है (अनुकूलन बाद में - नहीं समय से पहले ही!), पीएचपी में 'session.save_handler' निर्देश बदलते सत्र (फाइल सिस्टम के बजाय) के भंडारण के लिए एक डेटाबेस का उपयोग करने पर विचार करें। इसके अलावा, हमेशा अपना खुद का रोल करने के बजाय एक सुरक्षित प्रमाणीकरण लाइब्रेरी का उपयोग करें। उदाहरण: https: // github।com/joy-im/PHP-auth जो ढांचे-अज्ञेयवादी और डेटाबेस-अज्ञेय दोनों है। – caw

उत्तर

3

यदि इसे कस्टम क्लाइंट प्रोग्राम (यानी आप मोबाइल फोन) द्वारा कॉल किया जा रहा है, और ब्राउजर नहीं, तो "इन्हें लॉग इन करें" बिल्कुल क्यों। इसके बजाय, बस HTTP प्रमाणीकरण का उपयोग करें (या तो डीआईजीईटी या बेसिक यदि आप एसएसएल जा रहे हैं, या अपनी खुद की योजना), और हर बार "उन्हें लॉग इन करें"।

तब आपको सत्रों के बारे में चिंता करने की ज़रूरत नहीं है, भार संतुलन के बारे में चिंता करने की आवश्यकता नहीं है, आदि। इसे स्टेटलेस रखें।

अनुशेष:

निश्चित रूप से, डीबी को कम हिट बेहतर हैं, कि सिर्फ एक सामान्य नियम है। लेकिन साथ ही, डीबी सर्वर पर कई हिट डीबी सर्वर पर कैश किए गए पृष्ठों, या संभवतः एप्लिकेशन कैश द्वारा संभाले जाते हैं ताकि वे डीबी सर्वर को कभी भी हिट न करें। इसलिए, कुछ मामलों में, एक अनुक्रमित कॉलम के खिलाफ विशेष रूप से सिंगल पंक्ति प्रश्न, डीबी हिट बहुत सस्ते हो सकते हैं।

अब, कोई विचार कर सकता है कि वे दोनों संग्रहीत और आसानी से पहुंचे हैं, डेटाबेस के कैश बिट के बीच वास्तव में क्या अंतर है, और एक अद्वितीय उपयोगकर्ता सत्र।

अच्छा, मुख्य रूप से, अंतर डेटा के अनुबंध में है। एक कैश किए गए आइटम में आपकी स्मृति की मात्रा और अनुक्रमित गतिविधि की मात्रा के अनुपात में आनुपातिक जीवन होता है। इसे थोड़ी मात्रा में स्मृति दें, और कैश किए गए आइटम की संभावना बहुत कम आयु है। इसे बहुत मेमोरी दें, और कैश किए गए आइटम के पास लटकने का एक बेहतर मौका है। यदि कैश किए गए डेटा के लिए स्मृति की मात्रा काफी बड़ी है, जहां उस डेटा के लिए बार-बार गतिविधि कैश का उपयोग जारी रखती है, तो कैश एक बड़ी जीत है। यदि आपका कैश इतनी तेजी से रीसाइक्लिंग कर रहा है तो कैश में कभी भी "इन" नहीं होता है, तो आपके पास कैश का लगभग कोई मूल्य नहीं होता है। लेकिन मुद्दा यह है कि सिस्टम कैश के साथ या उसके बिना काम करेगा, कैश बस एक प्रदर्शन वृद्धि है।

हालांकि, एक सत्र में एक अलग अनुबंध है। कई सत्रों में एक विशिष्ट, न्यूनतम जीवन होता है, आमतौर पर मिनटों में मापा जाता है: 10, 20, यहां तक ​​कि 30 मिनट।

इसका मतलब है कि यदि कोई उपयोगकर्ता आपकी साइट को केवल एक बार मारा जाता है, तो आपको उस उपयोगकर्ता को संसाधन समर्पित करना होगा, भले ही वह कभी वापस न आए। आपको, अन्यथा सत्र प्रस्ताव प्रभावी ढंग से कोई मूल्य नहीं है।

यदि आपको बहुत अधिक ट्रैफ़िक मिलता है, तो आपको प्रबंधित करने के लिए बहुत से नए सत्र मिलते हैं। सिद्धांत रूप में, खराब परिस्थिति में, सत्र सीमा के बिना स्पाइक कर सकते हैं। यदि आपको अचानक आपकी साइट पर 10,000 हिट मिलती हैं, तो आप अपने सत्र के न्यूनतम जीवनकाल के लिए उन हिट के अवशेषों का प्रबंधन कर सकते हैं। आपको संसाधनों (स्मृति या डिस्क) को समर्पित करना होगा, आपको उनका ट्रैक रखना होगा, और फिर, अनिवार्य रूप से, आपको उन्हें साफ़ करना होगा।

एक कैश एक निश्चित संसाधन है। यह केवल आपके द्वारा कॉन्फ़िगर किए गए आकार को बढ़ाता है। कैश में कुछ भी रखने के लिए आपके पास कोई दायित्व नहीं है, और जैसा कि पहले चर्चा की गई थी, सिस्टम कैश के साथ या उसके बिना काम करेगा। कैश स्वाभाविक रूप से रीसायकल। यदि आपको 10,000 हिट की वृद्धि मिलती है, तो वे संभवतः आपके कैश को घुमाएंगे, लेकिन इसके बाद वे आपके सिस्टम पर कोई निशान नहीं छोड़ेंगे। वे 1 या 2 मिनट में हिट और चले जा सकते हैं, फिर कभी नहीं देखा जा सकता है।

अंत में, सत्र के साथ, आप अपने बुनियादी ढांचे के बीच उन्हें साझा करने का इतना है कि वे उपयोगकर्ता के साथ यात्रा करता है, तो वे (जो भी कारण के लिए) मशीन के लिए मशीन से हॉप की जरूरत है। कैश नहीं करते हैं। आदर्श रूप में आप एक उपयोगकर्ता संसाधनों का एक सेट करने के लिए लोकल, ताकि कैश उनके काम कर सकते हैं चाहते हैं, लेकिन सिस्टम काम करता है वे चाल या रहने के लिए कि क्या (यह सिर्फ कैश पुन: उपयोग की वजह से बेहतर काम करता है अगर वे रहने के लिए,)। यदि आप अपने सत्र दोहराना नहीं चाहते हैं, तो वे बिल्कुल काम नहीं करते हैं।

डीबी हिट जोड़, वे सस्ते हो सकता है, लेकिन वे मुक्त कभी नहीं कर रहे हैं। लेकिन एक सत्र की अपनी लागत भी होती है, इसलिए उन दोनों पर विचार करना महत्वपूर्ण है और वे आपके वास्तुकला में कैसे लागू होते हैं।

+0

मैं ऐतिहासिक रूप से बैकएंड प्रोग्रामर नहीं हूं, इसलिए मुझे क्वेरी की गति मिली। एक बार लॉग इन करें 1 क्वेरी बनाम हर बार लॉगिन करें। शायद यह उपेक्षित है? – user123321

+0

बहुत अच्छा अनुवर्ती स्पष्टीकरण! धन्यवाद। – user123321

3

वर्तमान में, मैं केवल सत्र का उपयोग कर रहा हूं। क्लाइंट एक लॉगिन API कॉल करता है, और कोई भी अन्य API आवश्यक है। लेकिन मुझे पर 200,000 होने वाले लोगों के बारे में चिंता है, जो लोग इस सेवा को कॉल करते हैं और उन सभी सत्रों में हैं।

स्टैंडर्ड उन सत्रों डिस्क स्पर्श क्योंकि डिफ़ॉल्ट session_save_handlerfile को तैयार है। आपके सिस्टम के लिए डिस्क को छूना बेहतर नहीं है (स्मृति बहुत तेज है)। file से अलग कुछ का उपयोग करने के लिए आप session_set_save_handler को ओवरराइड करने का प्रयास कर सकते हैं। उदाहरण के लिए आप सत्रों को संग्रहीत कर सकते हैं:

  • redis (मुझे प्रीइज़ क्लाइंट पसंद है)। install C extension तक भी तेज़ होगा, लेकिन शायद PHP को पुन: संकलित करने के लिए रूट पहुंच की आवश्यकता है। यदि आपके पास ऐसे कई उपयोगकर्ता हैं जो आपको शायद वीपीएस के मालिकाना/किराए पर लेना चाहिए। http://redistogo.com पर अच्छे लोग आपको मुफ्त योजना (5 एमबी) प्रदान करते हैं यदि आप कंप्यूटर पर कुछ भी इंस्टॉल नहीं कर सकते हैं। मैंने उपरोक्त उल्लेख किया है कि यदि आप वास्तव में प्रदर्शन करना चाहते हैं तो आपको चीजों को स्थापित करने की क्षमता होनी चाहिए।
  • memcached

इन में स्मृति डेटाबेस भी बेहतर स्केलिंग समर्थन करते हैं। आपको अपने डेटाबेस-क्वेरी (MySQL?) को कैश करने के लिए इन डेटाबेस का भी उपयोग करना चाहिए। आपको याद रखना होगा कि बस मेमोरी का उपयोग करने की तुलना में डिस्क को छूना बहुत धीमा है।

आपको सर्वश्रेष्ठ प्रदर्शन प्राप्त करने के लिए APC इंस्टॉल करना चाहिए।

यह आमतौर पर कैसे संभाला जाता है? जैसा फेसबुक, फ्लिकर, आदि ....

आजकल आप OAuth का उपयोग किए बिना किसी भी एपीआई का उपयोग नहीं कर सकते हैं (हालांकि मुझे लगता है कि सत्र के माध्यम से प्रमाणीकरण लागू करने के लिए आसान कर रहे हैं)। यह पासवर्ड साझा किए बिना प्रमाणीकरण करने के लिए नया वास्तविक तथ्य है। PHP (रasmस) के निर्माता ने एक ट्यूटोरियल बनाया है कि Writing an OAuth Provider Service कैसे करें। Google में oauth php खोजना आपको पर्याप्त जानकारी से अधिक प्राप्त करना चाहिए।

आजकल फेसबुक की अधिकांश साइट अपनी वेबसाइट को तेज करने के लिए सादे पुराने PHP के बजाय HipHop का उपयोग कर रही है। PHP में open-sourced बहुत सारे काम हैं जिनका आप उपयोग कर सकते हैं/उपयोग करना चाहिए:

+0

वाह। क्या एक बहुत अच्छा स्पष्टीकरण। मैं जितना कर सकता हूं उतना पढ़ूंगा। दुर्भाग्यवश, मैं अभी किसी भी अनुवर्ती प्रश्न पूछने के लिए पर्याप्त जानकारी नहीं दे रहा हूं। धन्यवाद! – user123321

+0

कोई समस्या नहीं पूछती है;)। उम्मीद है कि मैं मदद कर सकता हूं .. – Alfred

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

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