ফেসবুকের পিএইচপি-র পাশে সি ++ ব্যবহারের প্রয়োজনীয়তার মূল কারণটি কী? আমি ভাবছি যদি আমি প্রচুর ভিসার নিয়ে একটি ওয়েবসাইট তৈরি করি তবে আমারও কি সি ++ ব্যবহার করা দরকার?
ফেসবুকের পিএইচপি-র পাশে সি ++ ব্যবহারের প্রয়োজনীয়তার মূল কারণটি কী? আমি ভাবছি যদি আমি প্রচুর ভিসার নিয়ে একটি ওয়েবসাইট তৈরি করি তবে আমারও কি সি ++ ব্যবহার করা দরকার?
উত্তর:
এখানে কেন: পিএইচপি জন্য হিপহপ: দ্রুত সরান :
ফেসবুকের মূল মানগুলির মধ্যে একটি হ'ল দ্রুত অগ্রসর হওয়া। গত ছয় বছর ধরে, আমরা পিএইচপি প্রস্তাবিত বিকাশের দ্রুত গতির জন্য প্রচুর ধন্যবাদ অর্জন করতে সক্ষম হয়েছি। প্রোগ্রামিং ভাষা হিসাবে, পিএইচপি সহজ। শেখার জন্য সহজ, লেখার জন্য সহজ, পড়তে সহজ এবং ডিবাগ থেকে সাধারণ। আমরা নতুন ইঞ্জিনিয়ারদের অন্যান্য ভাষার চেয়ে পিএইচপি দিয়ে অনেক দ্রুত ফেসবুকে র্যাম্প করতে সক্ষম হয়েছি, যা আমাদের দ্রুত নতুনত্বের সুযোগ দেয়।
আজ আমি প্রকল্পটি আশ্চর্যজনক একটি ছোট্ট দল ভাগ করে নিতে আগ্রহী এবং আমি গত দু'বছর ধরে কাজ করছি; পিএইচপি জন্য হিপহপ। হিপহপ দিয়ে আমরা আমাদের ওয়েব সার্ভারে সিপিইউ ব্যবহারের পৃষ্ঠার উপর নির্ভর করে গড়ে প্রায় পঞ্চাশ শতাংশ কমিয়েছি। কম সিপিইউ মানে কম সার্ভার, যার অর্থ ওভারহেড কম। এই প্রকল্পটি ফেসবুকে একটি দুর্দান্ত প্রভাব ফেলেছে। আমরা মনে করি ওয়েবটি হিপহপ থেকে উপকৃত হতে পারে, তাই আমরা আজ সন্ধ্যায় ওপেন সোর্স হিসাবে প্রকাশ করছি এই আশায় যে এটি পিএইচপি দিয়ে বৃহত জটিল ওয়েবসাইটগুলির স্কেলিংয়ের দিকে নতুন ফোকাস এনেছে। যদিও হিপহপ আমাদের অবিশ্বাস্য ফলাফল দেখিয়েছে, এটি অবশ্যই সম্পূর্ণ নয় এবং এটি চেষ্টা করার আগে আপনার বিটা সফটওয়্যারটি দিয়ে স্বাচ্ছন্দ্য বোধ করা উচিত।
পিএইচপি জন্য হিপহপ প্রযুক্তিগতভাবে নিজেই একটি সংকলক নয়। বরং এটি একটি উত্স কোড ট্রান্সফর্মার। হিপহপ প্রোগ্রামগতভাবে আপনার পিএইচপি উত্স কোডটি অত্যন্ত অনুকূলিত সি ++ এ রূপান্তর করে এবং তারপরে এটি সংকলন করতে জি ++ ব্যবহার করে। হিপহপ উত্স কোডটি শব্দার্থগতভাবে সমতুল্য পদ্ধতিতে কার্যকর করে এবং উন্নত পারফরম্যান্সের বিনিময়ে কিছু বিরল ব্যবহৃত বৈশিষ্ট্য যেমন- ইভাল () - হিসাবে ত্যাগ করে। এই পারফরম্যান্স অপটিমাইজেশনের সুবিধা নিতে হিপহপের একটি কোড ট্রান্সফরমার, পিএইচপি-র রানটাইম সিস্টেমের একটি পুনরায় বাস্তবায়ন এবং অনেকগুলি সাধারণ পিএইচপি এক্সটেনশানগুলির পুনর্লিখন অন্তর্ভুক্ত রয়েছে।
স্ক্রিপ্টিং ভাষা হিসাবে স্কেলিং পিএইচপি
পার্ল, পাইথন এবং রুবির মতো স্ক্রিপ্টিং ভাষার মতো পিএইচপি-র মূলগুলি হ'ল এগুলির সকলেরই প্রোগ্রামার উত্পাদনশীলতার দিক থেকে এবং পণ্যগুলিতে দ্রুত পুনরাবৃত্তি করার ক্ষমতার ক্ষেত্রে বড় সুবিধা রয়েছে। এটি সি ++ এর মতো আরও traditionalতিহ্যবাহী সংকলিত ভাষার সাথে এবং জাভার মতো ব্যাখ্যা করা ভাষার সাথে তুলনা করা হয়। অন্যদিকে, স্ক্রিপ্টিং ভাষাগুলি সিপিইউ এবং মেমরির ব্যবহারের ক্ষেত্রে সাধারণত কম দক্ষ হিসাবে পরিচিত। এ কারণে, প্রতি মাসে ফেসবুককে 400 বিলিয়ন পিএইচপি-ভিত্তিক পৃষ্ঠা দর্শনে স্কেল করা চ্যালেঞ্জ হয়ে দাঁড়িয়েছে।
এই অদক্ষতাগুলি চিহ্নিত করার একটি সাধারণ উপায় হ'ল আপনার পিএইচপি অ্যাপ্লিকেশনটির আরও জটিল অংশগুলি সরাসরি সি ++ তে পিএইচপি এক্সটেনশন হিসাবে পুনরায় লেখা। এটি আপনার সামনের প্রান্তের এইচটিএমএল এবং সি ++ তে অ্যাপ্লিকেশন লজিকের মধ্যে পিএইচপিটিকে মূলত একটি আঠালো ভাষায় রূপান্তরিত করে। প্রযুক্তিগত দৃষ্টিকোণ থেকে এটি ভালভাবে কাজ করে তবে আপনার পুরো প্রয়োগটিতে কাজ করতে সক্ষম এমন প্রকৌশলী সংখ্যা হ্রাস করে reduces সি ++ শিখাই পিএইচপি এক্সটেনশানগুলি লেখার প্রথম ধাপ, দ্বিতীয়টি জেন্ড এপিআই বোঝা। আমাদের ইঞ্জিনিয়ারিং টিম তুলনামূলকভাবে ছোট - প্রতিটি ইঞ্জিনিয়ারের এক মিলিয়নেরও বেশি ব্যবহারকারী রয়েছেন - আমরা আমাদের কোডবেসের কিছু অংশ অন্যদের তুলনায় কম অ্যাক্সেসযোগ্য করে তুলতে পারি না।
স্কেলিং ফেসবুক বিশেষত চ্যালেঞ্জিং কারণ প্রায় প্রতিটি পৃষ্ঠাগুলি একটি স্বনির্ধারিত অভিজ্ঞতার সাথে লগ-ইন করা ব্যবহারকারী। আপনি যখন আমাদের হোম পৃষ্ঠাটি দেখেন তখন আমাদের আপনার সমস্ত বন্ধুকে সন্ধান করা উচিত, তাদের সর্বাধিক প্রাসঙ্গিক আপডেটগুলি (মাল্টিফিড নামে একটি কাস্টম পরিষেবা তৈরি করেছি) থেকে অনুসন্ধান করা উচিত, আপনার গোপনীয়তার সেটিংসের ভিত্তিতে ফলাফলগুলি ফিল্টার করুন, তারপরে মন্তব্য সহ গল্পগুলি পূরণ করুন , ফটো, লাইক এবং সমস্ত সমৃদ্ধ ডেটা যা লোকেরা ফেসবুক সম্পর্কে পছন্দ করে। এই সমস্ত কিছু ঠিক এক সেকেন্ডের নীচে। নিউজ ফিড, অনুসন্ধান, চ্যাট এবং অন্যান্য মূল অংশগুলিতে পরিষেবা দেওয়ার জন্য সি ++, এরলং, জাভা বা পাইথনের কাস্টম ব্যাক-এন্ড পরিষেবাদির উপর নির্ভর করে হিপহপ আমাদের সেই যুক্তিটি লিখতে দেয় যা পিএইচপি-তে চূড়ান্ত পৃষ্ঠার সমাবেশটি করে এবং তা পুনরুক্ত করে তোলে quickly সাইটের।
2007 সাল থেকে আমরা এই সমস্যাগুলি সমাধানের জন্য কয়েকটি ভিন্ন উপায় সম্পর্কে চিন্তাভাবনা করেছি এবং এর মধ্যে কয়েকটি কার্যকর করার চেষ্টা করেছি। সাধারণ পরামর্শটি হ'ল ফেসবুকে অন্য ভাষায় নতুন করে লিখুন, তবে সাইটের উন্নয়নের জটিলতা এবং গতি প্রদানে এটি কিছুটা সময় নিতে পারে। আমরা জেন্ড ইঞ্জিন - পিএইচপি এর ইন্টার্নালগুলির দিকগুলি আবারও লিখেছি এবং এই প্যাচগুলি পিএইচপি প্রকল্পে ফিরিয়ে দিয়েছি, তবে শেষ পর্যন্ত প্রয়োজনীয় পারফরম্যান্স বাড়ানোর ধরণটি দেখিনি। হিপহপের সুবিধাগুলি আমাদের বিকাশের গতিতে প্রায় স্বচ্ছ।
হ্যাকিং আপ হিপহপ
কয়েক বছর আগে হ্যাকাথনের এক রাতে (প্রাইম টাইম হ্যাক দেখুন), আমি আমার প্রথম টুকরো কোডটি পিএইচপি সি ++ তে রূপান্তরিত করেছিলাম। ভাষা সিপিইউ এবং মেমরি উভয় ব্যবহারের ক্ষেত্রে পিএইচপি মারাত্মকভাবে ছাড়িয়ে যায় ভাষাগুলি প্রায় সিনট্যাকটিক্যালি এবং সি ++ থেকে মারাত্মকভাবে সমান হয়। এমনকি পিএইচপি নিজেই সি তে লিখিত ছিল We আমরা জানতাম যে হাতে এই আকারের একটি সম্পূর্ণ কোডবেস সফলভাবে নতুন করে লেখা অসম্ভব, তবে আমরা যদি এটিকে প্রোগ্রামিকভাবে করার জন্য একটি সিস্টেম তৈরি করি তবে কী হবে তা ভেবে অবাক হয়েছিল।
পিএইচপি কর্মক্ষমতা উন্নত করার জন্য নতুন উপায় সন্ধান করা কোনও নতুন ধারণা নয়। চলাকালীন সময়ে জেন্ড ইঞ্জিন আপনার পিএইচপি উত্সটিকে অপকডগুলিতে পরিণত করে যা জেন্ড ভার্চুয়াল মেশিনের মাধ্যমে চালিত হয়। ওপেন সোর্স প্রকল্পগুলি যেমন এপিসি এবং ই-এক্সিলেরেটর এই আউটপুটটিকে ক্যাশে করে এবং বেশিরভাগ পিএইচপি চালিত ওয়েবসাইট ব্যবহার করে। জেন্ড সার্ভারও রয়েছে, এমন একটি বাণিজ্যিক পণ্য যা পিএইচপিকে অপকড অপটিমাইজেশন এবং ক্যাশিংয়ের মাধ্যমে দ্রুত করে তোলে। পরিবর্তে, আমরা পিএইচপি উত্সটি সরাসরি সি ++ তে রূপান্তর করার বিষয়ে ভাবছিলাম যা পরে দেশীয় মেশিন কোডে রূপান্তরিত হতে পারে। এমনকি পিএইচপি সংকলন করা কোনও নতুন ধারণা নয়, ওপেন সোর্স প্রকল্পের মতো রোডসেন্ড এবং পিএইচসি পিএইচপি থেকে সি থেকে কমপিউস, কোয়ার্কাস পিএইচপি জাভা থেকে সংকলন করে, এবং ফ্যাল্যাঞ্জার পিএইচপি থেকে। নেটকে সংকলন করে।
বলা বাহুল্য, এটি একক হ্যাকাথনের চেয়ে বেশি সময় নিয়েছে। আট মাস পরে, আমার কাছে প্রমাণ করার মতো পর্যাপ্ত কোড ছিল যে সংকলিত কোড দিয়ে দ্রুত চালানো সত্যিই সম্ভব। আমরা প্রকল্পের গতি বাড়ানোর জন্য দ্রুত দলে আইয়েন প্রক্টর এবং মিংহুই ইয়াং যুক্ত করেছি। আমরা পরবর্তী দশ মাস সমস্ত কোডিং সমাপ্ত করে এবং উত্পাদন সার্ভারগুলিতে নিম্নলিখিত ছয় মাস পরীক্ষার জন্য ব্যয় করেছি। আমরা গর্বিত যে এই মুহুর্তে, আমরা হিপহপ ব্যবহার করে আমাদের ওয়েব ট্র্যাফিকের 90% এরও বেশি পরিবেশন করছি, সমস্ত স্থাপনার মাত্র ছয় মাস পরে।
হিপহপ কীভাবে কাজ করে
এই প্রকল্পের মূল চ্যালেঞ্জ পিএইচপি এবং সি ++ এর মধ্যে ব্যবধানটি কমিয়ে আনা ছিল। পিএইচপি একটি গতিময়, দুর্বল টাইপিং সহ একটি স্ক্রিপ্টিং ভাষা ting সি ++ হ'ল স্থির টাইপ সহ একটি সংকলিত ভাষা। পিএইচপি আপনাকে যাদুকরী গতিশীল বৈশিষ্ট্যগুলি লেখার অনুমতি দেয়, বেশিরভাগ পিএইচপি তুলনামূলকভাবে সহজ। এটি দেখার
if (...) {...} else {..}
চেয়ে যত বেশি সম্ভবত আপনি দেখতে পান এটি সম্ভবতfunction foo($x) { include $x; }
। এখানেই আমরা অভিনয় অর্জন করি। যখনই সম্ভব আমাদের উত্পন্ন কোডটি ফাংশন এবং ভেরিয়েবলের জন্য স্ট্যাটিক বন্ডিং ব্যবহার করে। আমরা আমাদের ভেরিয়েবলগুলির জন্য সর্বাধিক সুনির্দিষ্ট ধরণের বাছাই করতে এবং টাইপ করে মেমরিটি সংরক্ষণ করতে টাইপ ইনফারেন্স ব্যবহার করি।রূপান্তর প্রক্রিয়াটিতে তিনটি প্রধান পদক্ষেপ রয়েছে:
- স্থির বিশ্লেষণ যেখানে আমরা কী এবং কী নির্ভরতা ঘোষণা করে তার তথ্য সংগ্রহ করি,
- সি সি ++ স্কেলার, স্ট্রিং, অ্যারে, ক্লাস, অবজেক্ট এবং ভেরিয়েন্ট এবং
- কোড প্রজন্ম যা বেশিরভাগ অংশের জন্য পিএইচপি বিবৃতি এবং এক্সপ্রেশন থেকে সি ++ স্টেটমেন্ট এবং এক্সপ্রেশন থেকে সরাসরি যোগাযোগ হয়।
আমরা এইচপিএইচপিও তৈরি করেছি, যা উন্নয়নের জন্য ডিজাইন করা একটি পরীক্ষামূলক দোভাষী ter এইচপিএইচপি ব্যবহার করার সময় আপনার পিএইচপি উত্স কোডটি চালানোর আগে আপনাকে সংকলন করতে হবে না। এটি আমাদের হিপহপে নিজেই বাগগুলি ধরতে সহায়তা করেছে এবং ইঞ্জিনিয়ারদের তারা পিএইচপি কীভাবে লিখবে তা পরিবর্তন না করে হিপহপ ব্যবহারের একটি উপায় সরবরাহ করে।
সামগ্রিকভাবে হিপহপ সি ++ এর পারফরম্যান্স সুবিধাগুলির সুযোগ নেওয়ার সময় আমাদের পিএইচপি-র সেরা দিকগুলি রাখতে দেয় allows মোট, আমরা 300,000 টিরও বেশি লাইনের কোড এবং 5000 টিরও বেশি ইউনিট পরীক্ষা লিখেছি।
সংক্ষিপ্ত উত্তর - না, আপনার সি ++ লাগবে না ।
আমি বিশ্বাস করি আপনি হিপহপকে উল্লেখ করছেন । আপনি যে উন্নতিগুলি দিচ্ছেন সে সম্পর্কে যদি আপনি এটি পড়েন তবে এটি প্রায় 50%। এটি যদি আপনি ফেসবুকের হাজার হাজার ফ্রন্টএন্ড সার্ভার রয়েছে তবে এটি অত্যন্ত গুরুত্বপূর্ণ। তাদের উপর লোড কাটা মানে কয়েক মিলিয়ন ডেটা সেন্টারের ব্যয় সাশ্রয়। 10-100 ফ্রন্টএন্ড সার্ভার রয়েছে এমন সংস্থার ক্ষেত্রে, উন্নয়নের ব্যয়টি সাশ্রয়ী সাশ্রয়ী সাশ্রয়ী মূল্য would যাইহোক, সর্বাধিক ভারী প্রক্রিয়াকরণটি ব্যাক-এন্ডে করা হয়, যা সাধারণত কিছু আরডিবিএমএস বা নোএসকিউএল সমাধান হয়, যা উচ্চতর অনুকূলিত সি / সি ++ কোড হিসাবে বিকশিত হয়।
অবশ্যই পিএইচপি সম্পূর্ণরূপে ডাম্পিং করে উচ্চতর সঞ্চয় অর্জন করতে পারত। তবে এটি ফেসবুকের মতো বিশাল কোড বেসের সাথে আপনি করতে পারেন এমন কিছু নয়।
এখন, প্রশ্নের অন্য অংশের জন্য: আপনি কীভাবে বিশাল বোঝা মোকাবেলা করতে চান তা যদি সত্যিই জানতে চান তবে উচ্চ স্কেলাবিলিটি ব্লগ , বিশেষত রিয়েল লাইফ আর্কিটেকচার অংশটি পড়ুন।
এটি পিএইচপি দিয়ে সম্ভব, তবে অবশ্যই আমার পছন্দ হবে না। আপনি যদি গতিশীল ভাষা চান, পাইথন, রুবি বা সম্ভবত লুয়া আরও ভাল পছন্দ হতে পারে।
এফবি'র পদ্ধতির সম্পর্কে দুর্দান্ত জিনিস হ'ল তাদের এখনই সিদ্ধান্ত নেওয়ার দরকার নেই। আপনারও একই কাজ করা উচিত। এমন ভাষা চয়ন করুন যা আপনাকে সবচেয়ে উত্পাদনশীল করে তোলে তবে নিশ্চিত হয়ে নিন যে এটি সি / সি ++ এর সাথে সহজেই ইন্টারফেস করে।
আপনার কয়েক মিলিয়ন ব্যবহারকারী হয়ে গেলে এবং প্রতিক্রিয়ার সময়টি মিলিসেকেন্ডগুলি শেভ করার পরে, আপনি সি / সি ++ ব্যবহার করে সমালোচনামূলক পাথগুলি অনুকূল করতে পারেন।
ফেসবুকের ব্যবহৃত সি ++ উপাদান হ'ল এইচএইচভিএম।
এটি হিপহপ ভার্চুয়াল মেশিন। যদিও সি ++ তে লেখা এটি মূলত একটি "আরও ভাল পিএইচপি ইন্টারপ্রেটার"।
পিএইচপি কোডটি বাইট কোডে সংকলিত হয় যা পরে মৃত্যুদন্ড কার্যকর করার সময় এইচএইচভিএম দ্বারা ব্যাখ্যা করা হয় এবং এটি চলমান "জাস্ট ইন টাইম" অপ্টিমাইজেশানের সাপেক্ষে।
ফেসবুকের বিকাশকারীরা এখনও বেশিরভাগই পিএইচপিতে লেখেন এবং আপনি আপনার ব্রাউজারে যা দেখেন এটি অবশ্যই পিএইচপি প্রোগ্রাম দ্বারা আউটপুট হয় - যদিও এইচএইচভিএম রানটাইম দ্বারা সংকলিত এবং ব্যাখ্যা করা হয়েছে all
আসল এইচএইচভিএম অবাধে উপলভ্য মুক্ত উত্স। সুতরাং যদি আপনাকে প্রতি ঘন্টা দশ লক্ষ কিউট বিড়ালছানা ছবি পরিবেশন করতে হয় তবে আপনি এইচএইচভিএম ডাউনলোড করতে পারেন এবং আপনার পিএইচপি-তে সর্বনিম্ন পরিবর্তন সহ আপনার সার্ভারটি গতিময় করতে পারেন।