PHP के बगल में Facebook ने C ++ का उपयोग क्यों किया? [बन्द है]


15

क्या मुख्य कारण है कि Facebook को PHP के बगल में C ++ का उपयोग करने की आवश्यकता है? मैं सोच रहा हूं कि क्या मैं एक वेबसाइट बनाऊंगा जिसमें बहुत सारे vistors हैं, तो क्या मुझे C ++ का भी उपयोग करना होगा?


संभवतः बैक-एंड प्रक्रियाओं के लिए लेकिन आप इसके साथ नियमित वेब विकास करने के लिए पागल होंगे।
चाओसपांडियन

1
प्रश्न प्रोग्रामर .stackexchange.com/ questions/ 53624/… इस मुद्दे पर भी चर्चा करता है। आप इसे देखना चाह सकते हैं।
विटोर पाय

4
Google C ++ में अपने सर्वर क्यों लिखता है?
नौकरी

1
@ जॉब और जावा और पायथन।
राइटफोल्ड

5
@TP, मेरी जानकारी के लिए पायथन का उपयोग नई सुविधाओं को प्रोटोटाइप करने और उन्हें परखने के लिए किया जाता है। एक बार जब उपयोगकर्ता का लोड अधिक हो जाता है और चीजों को जितनी जल्दी हो सके उतनी तेजी से काम करने की आवश्यकता होती है, पायथन कोड को C ++ कोड से बदल दिया जाता है। मुझे पूरा यकीन है कि 1.2 जितना छोटा अंतर सर्वरों के लिए एक बड़ा सौदा है, जो सैकड़ों लाखों उपयोगकर्ताओं का सामना करता है।
जॉब

जवाबों:


20

यहाँ क्यों है: PHP के लिए हिपहॉप: तेजी से आगे बढ़ें :

फेसबुक पर महत्वपूर्ण मूल्यों में से एक तेजी से आगे बढ़ना है। पिछले छह वर्षों से, हम PHP की पेशकश करने वाले विकास की तीव्र गति के लिए बहुत धन्यवाद देने में सक्षम हैं। प्रोग्रामिंग भाषा के रूप में, PHP सरल है। सीखने के लिए सरल, लिखने के लिए सरल, पढ़ने के लिए सरल और डीबग करने के लिए सरल है। हम नए इंजीनियरों को फेसबुक पर PHP के साथ अन्य भाषाओं की तुलना में बहुत तेजी से रैंप पर लाने में सक्षम हैं, जो हमें तेजी से नया करने की अनुमति देता है।

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

PHP के लिए हिपहॉप तकनीकी रूप से एक संकलक नहीं है। बल्कि यह एक सोर्स कोड ट्रांसफार्मर है। हिपहॉप प्रोग्रामेटिक रूप से आपके PHP स्रोत कोड को अत्यधिक अनुकूलित C ++ में बदल देता है और फिर इसे संकलित करने के लिए g ++ का उपयोग करता है। हिपहॉप ने स्रोत कोड को शब्दशः समतुल्य तरीके से निष्पादित किया है और बेहतर प्रदर्शन के बदले कुछ दुर्लभ रूप से उपयोग की जाने वाली विशेषताओं जैसे कि eval () का त्याग करता है। हिपहॉप में एक कोड ट्रांसफ़ॉर्मर, PHP के रनटाइम सिस्टम को फिर से लागू करना और इन प्रदर्शन अनुकूलन का लाभ उठाने के लिए कई सामान्य PHP एक्सटेंशन का पुनर्लेखन शामिल है।

स्क्रिप्टिंग भाषा के रूप में PHP को स्केल करना

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

इन अक्षमताओं को दूर करने का एक सामान्य तरीका यह है कि आप अपने PHP अनुप्रयोग के अधिक जटिल भागों को सीधे C ++ में PHP एक्सटेंशन के रूप में फिर से लिखें। यह काफी हद तक PHP को आपके फ्रंट एंड HTML और C लॉजिक में एप्लिकेशन लॉजिक के बीच ग्लू भाषा में बदल देता है। एक तकनीकी दृष्टिकोण से यह अच्छी तरह से काम करता है, लेकिन उन इंजीनियरों की संख्या को काफी कम कर देता है जो आपके पूरे आवेदन पर काम करने में सक्षम हैं। C ++ सीखना केवल PHP एक्सटेंशन लिखने के लिए पहला कदम है, दूसरा Zend API को समझ रहा है। यह देखते हुए कि हमारी इंजीनियरिंग टीम अपेक्षाकृत छोटी है - प्रत्येक इंजीनियर के लिए एक मिलियन से अधिक उपयोगकर्ता हैं - हम अपने कोडबेस के कुछ हिस्सों को दूसरों की तुलना में कम सुलभ बनाने का जोखिम नहीं उठा सकते हैं।

फेसबुक को स्केल करना विशेष रूप से चुनौतीपूर्ण है क्योंकि लगभग हर पृष्ठ दृश्य एक अनुकूलित अनुभव के साथ एक लॉग-इन उपयोगकर्ता है। जब आप अपना होम पेज देखते हैं, तो हमें आपके सभी दोस्तों को देखने की जरूरत है, उनके सबसे प्रासंगिक अपडेट (एक कस्टम सेवा जिसे हमने मल्टीफ़ेड कहा जाता है) से क्वेरी करें, अपनी गोपनीयता सेटिंग्स के आधार पर परिणामों को फ़िल्टर करें, फिर टिप्पणियों के साथ कहानियों को भरें , फ़ोटोज़, लाइक, और सभी रिच डेटा जो लोग फेसबुक के बारे में पसंद करते हैं। यह सब सिर्फ एक सेकंड के तहत। हिपहॉप हमें तर्क को लिखने की अनुमति देता है जो PHP में अंतिम पृष्ठ असेंबली करता है और समाचार फ़ीड, खोज, चैट और अन्य मुख्य भागों की सेवा के लिए C ++, एर्लांग, जावा, या पायथन में कस्टम बैक-एंड सेवाओं पर भरोसा करते हुए इसे जल्दी से पुन: व्यवस्थित करता है। साइट का।

2007 से हमने इन समस्याओं को हल करने के कुछ अलग तरीकों के बारे में सोचा है और उनमें से कुछ को लागू करने की कोशिश भी की है। सामान्य सुझाव यह है कि फेसबुक को किसी अन्य भाषा में फिर से लिखना है, लेकिन साइट के विकास की जटिलता और गति को देखते हुए इसे पूरा करने में कुछ समय लगेगा। हमने Zend Engine के पहलुओं को फिर से लिखा है - PHP के इनरल्स - और उन पैच को PHP प्रोजेक्ट में वापस लाने में योगदान दिया है, लेकिन अंततः प्रदर्शन के उस प्रकार को नहीं देखा है जो आवश्यक है। हिपहॉप के लाभ हमारी विकास की गति के लगभग पारदर्शी हैं।

हिपहॉप को हैक करना

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

PHP प्रदर्शन को बेहतर बनाने के नए तरीके खोजना कोई नई अवधारणा नहीं है। रन टाइम में Zend Engine आपके PHP स्रोत को opcodes में बदल देता है जो फिर Zend Virtual मशीन के माध्यम से चलाया जाता है। ओपन सोर्स प्रोजेक्ट जैसे APC और eAccelerator इस आउटपुट को कैश करते हैं और PHP संचालित वेबसाइटों के बहुमत द्वारा उपयोग किया जाता है। Zend Server भी एक वाणिज्यिक उत्पाद है जो opcode अनुकूलन और कैशिंग के माध्यम से PHP को तेज बनाता है। इसके बजाय, हम PHP स्रोत को सीधे C ++ में बदलने के बारे में सोच रहे थे जिसे बाद में देशी मशीन कोड में बदल दिया जा सकता है। यहां तक ​​कि PHP को संकलित करना एक नया विचार नहीं है, ओपन सोर्स प्रोजेक्ट्स जैसे Roadsend और phc compile PHP to C, Quercus, PHP को जावा में संकलित करता है, और Phalanger PHP को .Net पर संकलित करता है।

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

हिपहॉप कैसे काम करता है

परियोजना की मुख्य चुनौती PHP और C ++ के बीच की खाई को पाट रही थी। PHP एक स्क्रिप्टिंग भाषा है जिसमें डायनेमिक, कमजोर टाइपिंग है। C ++ स्टैटिक टाइपिंग के साथ संकलित भाषा है। जबकि PHP आपको जादुई गतिशील विशेषताओं को लिखने की अनुमति देता है, अधिकांश PHP अपेक्षाकृत सरल है। यह अधिक संभावना है कि आप if (...) {...} else {..}इसे देखना चाहते हैं function foo($x) { include $x; }। यह वह जगह है जहां हम प्रदर्शन करते हैं। जब भी संभव होता है हमारा उत्पन्न कोड फ़ंक्शंस और वेरिएबल्स के लिए स्थिर बाइंडिंग का उपयोग करता है। हम अपने चर के लिए संभव सबसे विशिष्ट प्रकार को लेने के लिए टाइप इंसेक्शन का उपयोग करते हैं और इस प्रकार मेमोरी को बचाते हैं।

परिवर्तन प्रक्रिया में तीन मुख्य चरण शामिल हैं:

  1. स्थैतिक विश्लेषण, जहां हम इस बारे में जानकारी एकत्र करते हैं कि कौन और क्या निर्भरता घोषित करता है,
  2. टाइप इंफ़ेक्शन जहाँ हम C ++ स्केलर्स, स्ट्रिंग, एरे, क्लासेस, ऑब्जेक्ट और वेरिएंट और के बीच सबसे विशिष्ट प्रकार चुनते हैं, और
  3. कोड पीढ़ी जो कि अधिकांश भाग के लिए PHP कथनों और भावों से C ++ कथनों और अभिव्यक्तियों के लिए एक सीधा पत्राचार है।

हमने एचपीएचपीआई भी विकसित किया है, जो कि विकास के लिए बनाया गया एक प्रायोगिक दुभाषिया है। HPHPi का उपयोग करते समय आपको इसे चलाने से पहले अपने PHP स्रोत कोड को संकलित करने की आवश्यकता नहीं है। यह हमें हिपहॉप में कीड़े को पकड़ने में मदद करता है और इंजीनियरों को हिपहॉप का उपयोग करने का एक तरीका प्रदान करता है बिना यह बदले कि वे PHP कैसे लिखते हैं।

कुल मिलाकर हिपहॉप हमें C ++ के प्रदर्शन लाभों का लाभ लेते हुए PHP के सर्वोत्तम पहलुओं को रखने की अनुमति देता है। कुल में, हमने 300,000 से अधिक कोड और 5,000 से अधिक यूनिट परीक्षण लिखे हैं।


4
यह जवाब है, थोड़ा रंग अच्छा होता, लेकिन मूल रूप से यह प्रदर्शन के लिए नीचे आता है। वे चाहते हैं कि उनका आवेदन बेहतर हो, लेकिन उनके पास PHP में अधिक कुशल लोग भी हैं और महसूस करते हैं कि PHP उन्हें अधिक उत्पादक बनाता है। तो समाधान सी के प्रदर्शन के साथ पीएचपी की सादगी की अनुमति देता है। उनका कोड आधार वैसे भी मैन्युअल रूप से अनुवाद करने के लिए बहुत बड़ा है।
ग्रीवो

13

संक्षिप्त उत्तर - नहीं, आपको C ++ की आवश्यकता नहीं है।

मेरा मानना ​​है कि आप हिपहॉप का जिक्र कर रहे हैं । यदि आप इसमें दिए गए सुधारों के बारे में पढ़ते हैं, तो यह लगभग 50% है। यह बहुत महत्वपूर्ण है यदि आप फेसबुक हैं जिसमें हजारों फ्रंटेंड सर्वर हैं। उन पर लोड में कटौती का मतलब है डेटा सेंटर लागत बचत में लाखों। 10-100 फ्रंटएंड सर्वर वाली कंपनी के मामले में, विकास की लागत से बचत संभव होगी। वैसे भी, सबसे भारी प्रसंस्करण बैक-एंड में किया जाता है, जो आमतौर पर कुछ RDBMS या NoSQL समाधान होता है, जिसे अत्यधिक अनुकूलित C / C ++ कोड के रूप में विकसित किया जाता है।

बेशक, PHP को पूरी तरह से डंप करने से बहुत अधिक बचत प्राप्त हो सकती है। लेकिन ऐसा कुछ नहीं है जो आप बड़े कोड आधार के साथ कर सकते हैं, जैसा कि फेसबुक के मामले में है।

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

यह PHP के साथ संभव है, लेकिन निश्चित रूप से मेरी पसंद नहीं होगा। यदि आप गतिशील भाषा चाहते हैं, तो पायथन, रूबी या शायद लूआ बेहतर विकल्प होगा।


2
+1, लेकिन स्केलेबिलिटी का व्यावहारिक रूप से प्रयुक्त भाषा से कोई लेना-देना नहीं है। डेटाबेस आर्किटेक्चर का बहुत बड़ा असर है।
dan_waterworth

1
@Dan: यही कारण है कि मैं कह रहा हूँ - यह PHP के साथ संभव है।
vartec

2
ब्लॉग प्रविष्टि @Trinidad के अनुसार, 50% औसत सुधार है, अधिकतम नहीं।
जेरी कॉफिन

2
@ जेरी: सही, लेकिन यह अभी भी बहुत, सी ++ और पीएचपी के बीच वास्तविक प्रदर्शन अंतर से बहुत लंबा है।
वार्टेक

6

एफबी के दृष्टिकोण के बारे में अच्छी बात यह है कि उन्हें अभी तय नहीं करना था। आपको भी ऐसा ही करना चाहिए। उस भाषा को चुनें जो आपको सबसे अधिक उत्पादक बनाती है, लेकिन सुनिश्चित करें कि यह सी / सी ++ के साथ आसानी से इंटरफेस करती है।

एक बार जब आपके लाखों उपयोगकर्ता होते हैं और प्रतिक्रिया समय से मिलीसेकंड दाढ़ी बनाने की आवश्यकता होती है, तो आप C / C ++ का उपयोग करके महत्वपूर्ण पथों को अनुकूलित कर सकते हैं।


0

फेसबुक द्वारा प्रयुक्त C ++ तत्व HHVM है।

वह HIPHOP वर्चुअल मशीन है। हालांकि C ++ में लिखा गया यह अनिवार्य रूप से एक "बेहतर PHP दुभाषिया" है।

Php कोड को बाइट कोड में संकलित किया जाता है जिसे तब HHVM द्वारा निष्पादन समय पर व्याख्यायित किया जाता है और यह "जस्ट इन टाइम" अनुकूलन के अधीन होता है क्योंकि यह चलता है।

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

वास्तविक एचएचवीएम स्वतंत्र रूप से उपलब्ध खुला स्रोत है। इसलिए अगर आपको प्रति घंटे एक मिलियन प्यारा बिल्ली का बच्चा चित्र परोसने की आवश्यकता है तो आप HHVM डाउनलोड कर सकते हैं और अपने सर्वर को अपने PHP में न्यूनतम परिवर्तन के साथ गति दे सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.