هذا الموضوع ليس طلباً للمساعدة بل موضوع لمشاركة الخبرات، ودعونا نفكر كيف نقوم ببناء خدمة معينة ومن ثم نقترح التقنيات المختلفة التي يمكن أن نستخدمها في بناء خدمة مشابهة، ولم علينا أن نتجنب إستخدم لغة برمجة معينة او تقنية قواعد بيانات معينة.
اليوم فكرت بأن نبدأ بتويتر:
ماهي لغات البرمجة المناسبة؟
قواعد البيانات؟
هل سيكون هناك أكثر لغة برمجة مستخدمة؟
كيف سيتم خزن البيانات؟
بالطبع توجد بعض المحاضرات التي تتحدث عن تويتر وكيف تم بناؤه ولكن الفكرة ليس تقليدهم بل إقتراح حلول مناسبة شبيهة أو بديلة مع شرح الأسباب.
لغات البرمجة المناسبة هي البي اتش بي و ملحقاتها (html javascript css) و الصور
قواعد البيانات الافضل بالنسبة لمثل هذه الاعمال هي ماي اس كيو ال
هذه اللغات كافية جدا
عن طريق قواعد البيانات طبعا
هل تعتقد أن php خيار مناسب؟ خصوصاً مع الضغط الهائل التي يتعرض له الموقع؟
بالطبع ستذكر لي أن فيسبوك قائم على php وهو شيء صحيح أيضاً ويعني أن php قادرة على هذا الشيء، ولكن أريد أن أخوض في أعماق البرمجة ولا أريد الإكتفاء بطرح رؤوس الأقلام، مثلاً:
كيف سيتم دفع التحديثات إلى المستخدم مثلاً؟ كيف سنقوم بتطبيق تقنية الـ push بشكل جيد؟
الأفضل في حالة التحديثات الكبيرة في تويتر أن يتم وضع قاعدة البيانات في الذاكرة والكتابة إلى القرص الصلب من فترة لفترة؟ (كيف سنقوم بذلك؟)
فيسبوك يستخدمون نسخ معدلة من php. بمعنى أدق هم يستخدمون صيغة لغة php يتم تنفيذها من خلال مصنف خاص بهم اسمه hiphop انظر
صحيح وقاموا لاحقا بإعادة تسميتها إلى HHVM والمتوفرة هنا:
لكن المشكلة هي أن فيسبوك قامت لاحقاً بإطلاق لغة هاك الشبيهة بلغة php وهذا الشيء قد يعني أن الشركة قد تتخلى عن php من أجل دفع لغتها (مالم تقم بتسليم التطوير للمجتمع المفتوح).
ال Facebook قد تحولت إلى إستخدام Hack منذ سنة.
و ال HHVM أي HipHop Virtual Machine قد بدأ كمحول لكود PHP إلى C++ ثم يقوم بعمل compile، أي كان عليك تحويل ملفاتك عند كل تعديل.
الفرق الآن هو أن كل شيء يعمل تلقائيا مع بعض التعديلات.
للإشارة بعض الدوال تعمل على PHP أسرع بينما بعضها تعمل على HHVM/Hack أسرع.
مع الإشارة إلى ال bugs على كل من HHVM/Hack و الذي نشر هذه التقنيات أحد تلك الأسباب ليساعد المجتمع في إختبارها.
تويتر إستخدم الروبي اون ريلز في البدء ثم أنتقل إلى سكالا و غيرها ، كل لعة لها ميزاتها و مشاكلها ، بالمناسبة موقعي وورد برس و ياهو يعملان بال php . إنظر إلى الرابط التالي :
فيسبوك وياهو يستعملان نسخ خاصة بهم من php بمعنى هم يستخدمون صياغة لغة php وليس مفسر لغة php المعروف.
موقع وردبرس لا يحتوي شيء آني real time أو ثنائي الإتجاه فهو يجلب أشياء من قاعدة البيانات يقولبها ثم يعرضها ثم تنتهي القصة. لا يوجد دردشة أو إظهر لنتائج تدفع من الخادم بعد تحميل الصفحة بناء على تفاعل.
كل لغة لها استخدامها والأشياء التي تجيدها فلا ندخلها فيما لا تتقنه. وبما أننا نتحدث عن تويتر. بعد أن تفتح موقع تويتر أو صفحة البحث عن هاشتاغ معين انتظر قليلا وستجد في رأس الصفحة عيارة "5 new tweets" لو أردت أن تفعل ذلك في php فإن هذا يعني أنك ستعمل ضربات ajax كل ثانية تجلب كل جديد لتظهر هذا الرقم. وإن كنت في صفحة بحث قد يعني هذا أنه لا يوجد أي cache لأن الناس تبحث عن أشياء مختلفة في الغالب. فلك أن تتخير عدد فلكي من الأشخاص المختلفين يرسل عدد فلكي من الإستعلامات المتواصلة كل ثانية كلها تطلب أشياء مختلفة دون أي cache.
نعم صحيح تختلف المفسرات المستخدمه من قبلهم و لكن يمكن للجميع الوصول إليها أي هي ليست بحكر على أحد و بالنسبة إلى عدم مقدرة ال php على دعم تطبيقات الreal time فهذا غير صحيح!! أن كنت تقصد الnon blocking io هنالك reactPHP و بالنسبة للajax و الوصول المستمر للبيانات كما التنبيهات فهنالك حلان ، إستخدام ال sockets !! "نعم موجودة""! أو الحل القديم بفتح إتصال مع الخادم و إنتظار الرد مع إطالة الفتره الزمنيه!!!! ، رجوعا لموضوع المفسرات! حتى scala و جافا يعملان على مفسرات jvm و هنالك من يستخدم jdk وهو حل مفتوح المصدر أما الnode.JS فهي تعمل على مفسر google v8 !!! . أخيرا ، ال php قد لاتكون اللغة المناسبة لهذا و لكن هل ruby on rilas المناسبة ؟!!! الآن لا بالطبع فهي تملك "مشاكل" شبيهه بباقي اللغات بإستثناء الnode.js ، و لكن أليست روبي هي اللغة+فريموورك التي كتب بها تويتر!!! .... لكل لغة متطلبات حالية و أخرى مستقبلية و قد لاتتوافق المرحلتين مايستدعي إستخدام حلول أخرى!
عفوا ،،،، الcache بما إنه وسيلة لتقليل عدد المرات التي يطلب الوصول فيها إلى قواعد البيانات "بالدرجة الأولى" فلم أفهم منك كيف سيختلف ذلك من لغة لأخرى!!!!!
التعليقات