بناء أسرع تحليلات مواقع الويب في العالم (2021)
على مدار أكثر من عام ، كنا نكافح لمواكبة نمو بيانات التحليلات الخاصة بنا. نما Fathom بسرعة الضوء ، مع تخلي المزيد والمزيد من الأشخاص عن Google Analytics ، كان استيعابنا للبيانات ينفجر. em>
في آذار (مارس) 2021 ، نقلنا جميع بيانات التحليلات الخاصة بنا إلى قاعدة بيانات أحلامنا. p>
على مدار أكثر من عام ، كنا نكافح لمواكبة نمو بيانات التحليلات الخاصة بنا. نما Fathom بسرعة الضوء ، مع تخلي المزيد والمزيد من الأشخاص عن Google Analytics ، وتزايد استيعابنا للبيانات. كانت شعبيتنا رائعة بالنسبة للأعمال وخصوصية المستخدم ، ولكنها ليست جيدة لأداء لوحة المعلومات. ما كان لدينا لم ينجح معنا. p>
كثيرًا ما أرى مهندسين يكتبون عن عمليات الترحيل المختلفة التي قاموا بها ، لكنهم دائمًا ما يركزون فقط على التكنولوجيا. ها هو محترف ، ها هو أحمق ، وهنا محترف آخر. لكنها مملة. لذا ، في منشور المدونة هذا ، سأقدم لك واحدة من أكثر المقالات شفافية حول ما يشبه تشغيل ترحيل عالي الخطورة وعالي الإجهاد. سآخذك وراء الكواليس ، حيث سأشارك تحدياتنا ، وأبحاثنا ، وتخريبنا ، ونهاية سعيدة. p> تاريخ قاعدة البيانات الخاصة بنا الإصدار 1
عندما بنينا Fathom لأول مرة على Laravel ، قررنا أن نتدحرج مع Heroku. لقد تحدثت بالفعل عن ذلك بعمق لذلك لن أخوض في التفاصيل ، لكنني قررت أن قاعدة بيانات Postgres ستكون الخيار الأفضل لأن Heroku قدمها كخدمة يديرها هم em>. لم تكن مجرد خدمة إضافية ؛ كان هذا هو الشيء الذي وافقوا على تقديمه "رسميًا". بعد فوات الأوان ، كان هذا خطأ لأنه لم يكن لدي أي خبرة مع Postgres.
الإصدار 2بالنسبة للإصدار 2 ، أعدنا بناء Fathom Analytics بالكامل وانتقلنا إلى Laravel Vapor. احتفظنا بهيكل قاعدة بيانات مماثل ، لكننا انتقلنا إلى MySQL المُدارة. كان الجانب الإيجابي أنني عدت إلى منطقة الراحة الخاصة بي (حيث كانت لدي خبرة) ، ولكن الجانب السلبي هو أننا لم نفعل أي شيء لتحسين بنية قاعدة البيانات الخاصة بنا. هل سارت الأمور بشكل أسرع؟ طبعا. لقد قمنا بزيادة وحدة المعالجة المركزية وذاكرة الوصول العشوائي ، وكان أداء الاستعلامات أفضل ، ولكنه لم يكن حلاً مستدامًا للوحة التحكم أو المحفظة. p> مشاكل مع MySQL
قبل سرد أسباب التخلي عن MySQL ، أريد أن أوضح بصوت عالٍ وواضح أنني أعلم أن MySQL لم يتم تصميمه لحالة الاستخدام التحليلي واسعة النطاق هذه. بعد توضيح ذلك ، إليك الأسباب الرئيسية التي دفعتنا للتخلي عن RDS لـ MySQL:
أداء سيءعلى الرغم من أننا احتفظنا بجداول الملخصات فقط (يتم تجميع البيانات بالساعة) ، كانت قاعدة البيانات الخاصة بنا تكافح من أجل تنفيذ SUM و GROUP BY. وكان الأمر أسوأ مع البيانات الأساسية العالية. من الأمثلة على ذلك العميل الذي حصل على 11.000.000 مشاهدة فريدة للصفحة في يوم واحد. قد يستغرق MySQL 7 دقائق لمعالجة استعلام SUM / GROUP لهم ، وستنتهي مهلة استعلامات لوحة المعلومات. للتغلب على هذا القيد ، كان عليّ إنشاء وظيفة cron مخصصة تحسب مسبقًا بيانات لوحة القيادة. p> كنا بحاجة إلى مزيد من المرونة
بالنسبة للإصدار 3 ، لقد بذلنا قصارى جهدنا للسماح لك بالتعمق في بياناتك وتصفيتها ، مما يعني أننا نحتفظ بصف واحد لكل مشاهدة صفحة. إذا لم تتمكن MySQL من التعامل مع تجميعات جداول الملخصات متوسطة الحجم ، فكيف ستتعامل مع هذا النهج الجديد بحق ، حيث لدينا مئات الملايين من الصفوف لموقع ويب واحد؟ p> IOPS
مع RDS ، كان علينا التفكير في IOPS. بعد تجربة مرهقة مع أحد مواقع الويب الفيروسية ، بدأنا في الإفراط في توفير IOPS لـ RDS. وهي باهظة الثمن. إذا لم تكن معتادًا على IOPS ، فإن أسهل طريقة لشرحها هي أنك تحتاج إلى توفير قدر معين من التخزين ، والذي يأتي مع كمية ثابتة من IOPS ، والتي تملي الحد الأقصى للقراءة / الكتابة في الثانية في قاعدة البيانات الخاصة بك. وإذا حصلت على موقع ينتشر بسرعة كبيرة ولم يكن لديك IOPS المناسب للتعامل معه ، مرحبًا بك في backlog town ، قم بتعبئة الموقع. p>
للتأكد من قدرتنا على التعامل مع تدفقات حركة المرور ، دفعنا 2000 غيغابايت من مساحة تخزين قاعدة البيانات. أعطانا هذا 6000 IOPS ، وهو أمر جيد معنا. لذلك كنا ندفع 500 دولارًا إضافيًا شهريًا للتخزين الذي لم نكن بحاجة إليه ، فقط في حالة وجود موقع فيروسي آخر لإدارته. وفي وقت كتابة هذا التقرير ، ما زلنا ندفع مقابل ذلك لأن AWS لا تسمح لك بخفض سعة التخزين لديك بسهولة. (نعم ، أنا مالح حيال ذلك.) p> حد الاتصال
تعد حدود الاتصال أحد المجالات التي تثير قلقي دائمًا. مع الحل الجديد الذي نختاره ، أريده أن يتعامل بسهولة مع عدة آلاف من الاتصالات ، دون الحاجة إلى إنفاق ثروة. p> بحثنا عن صديق جديد
كنا واضحين بشأن سبب رغبتنا في الابتعاد عن MySQL ، وعرفنا أن هناك حلول قواعد بيانات أكثر ملاءمة في السوق. قبل أن نبدأ بحثنا ، ناقشنا الأمور غير القابلة للتفاوض: p> يجب أن تكون سريعة بشكل يبعث على السخرية يجب أن تنمو معنا. نحن لا نريد ...
على مدار أكثر من عام ، كنا نكافح لمواكبة نمو بيانات التحليلات الخاصة بنا. نما Fathom بسرعة الضوء ، مع تخلي المزيد والمزيد من الأشخاص عن Google Analytics ، كان استيعابنا للبيانات ينفجر. em>
في آذار (مارس) 2021 ، نقلنا جميع بيانات التحليلات الخاصة بنا إلى قاعدة بيانات أحلامنا. p>
على مدار أكثر من عام ، كنا نكافح لمواكبة نمو بيانات التحليلات الخاصة بنا. نما Fathom بسرعة الضوء ، مع تخلي المزيد والمزيد من الأشخاص عن Google Analytics ، وتزايد استيعابنا للبيانات. كانت شعبيتنا رائعة بالنسبة للأعمال وخصوصية المستخدم ، ولكنها ليست جيدة لأداء لوحة المعلومات. ما كان لدينا لم ينجح معنا. p>
كثيرًا ما أرى مهندسين يكتبون عن عمليات الترحيل المختلفة التي قاموا بها ، لكنهم دائمًا ما يركزون فقط على التكنولوجيا. ها هو محترف ، ها هو أحمق ، وهنا محترف آخر. لكنها مملة. لذا ، في منشور المدونة هذا ، سأقدم لك واحدة من أكثر المقالات شفافية حول ما يشبه تشغيل ترحيل عالي الخطورة وعالي الإجهاد. سآخذك وراء الكواليس ، حيث سأشارك تحدياتنا ، وأبحاثنا ، وتخريبنا ، ونهاية سعيدة. p> تاريخ قاعدة البيانات الخاصة بنا الإصدار 1
عندما بنينا Fathom لأول مرة على Laravel ، قررنا أن نتدحرج مع Heroku. لقد تحدثت بالفعل عن ذلك بعمق لذلك لن أخوض في التفاصيل ، لكنني قررت أن قاعدة بيانات Postgres ستكون الخيار الأفضل لأن Heroku قدمها كخدمة يديرها هم em>. لم تكن مجرد خدمة إضافية ؛ كان هذا هو الشيء الذي وافقوا على تقديمه "رسميًا". بعد فوات الأوان ، كان هذا خطأ لأنه لم يكن لدي أي خبرة مع Postgres.
الإصدار 2بالنسبة للإصدار 2 ، أعدنا بناء Fathom Analytics بالكامل وانتقلنا إلى Laravel Vapor. احتفظنا بهيكل قاعدة بيانات مماثل ، لكننا انتقلنا إلى MySQL المُدارة. كان الجانب الإيجابي أنني عدت إلى منطقة الراحة الخاصة بي (حيث كانت لدي خبرة) ، ولكن الجانب السلبي هو أننا لم نفعل أي شيء لتحسين بنية قاعدة البيانات الخاصة بنا. هل سارت الأمور بشكل أسرع؟ طبعا. لقد قمنا بزيادة وحدة المعالجة المركزية وذاكرة الوصول العشوائي ، وكان أداء الاستعلامات أفضل ، ولكنه لم يكن حلاً مستدامًا للوحة التحكم أو المحفظة. p> مشاكل مع MySQL
قبل سرد أسباب التخلي عن MySQL ، أريد أن أوضح بصوت عالٍ وواضح أنني أعلم أن MySQL لم يتم تصميمه لحالة الاستخدام التحليلي واسعة النطاق هذه. بعد توضيح ذلك ، إليك الأسباب الرئيسية التي دفعتنا للتخلي عن RDS لـ MySQL:
أداء سيءعلى الرغم من أننا احتفظنا بجداول الملخصات فقط (يتم تجميع البيانات بالساعة) ، كانت قاعدة البيانات الخاصة بنا تكافح من أجل تنفيذ SUM و GROUP BY. وكان الأمر أسوأ مع البيانات الأساسية العالية. من الأمثلة على ذلك العميل الذي حصل على 11.000.000 مشاهدة فريدة للصفحة في يوم واحد. قد يستغرق MySQL 7 دقائق لمعالجة استعلام SUM / GROUP لهم ، وستنتهي مهلة استعلامات لوحة المعلومات. للتغلب على هذا القيد ، كان عليّ إنشاء وظيفة cron مخصصة تحسب مسبقًا بيانات لوحة القيادة. p> كنا بحاجة إلى مزيد من المرونة
بالنسبة للإصدار 3 ، لقد بذلنا قصارى جهدنا للسماح لك بالتعمق في بياناتك وتصفيتها ، مما يعني أننا نحتفظ بصف واحد لكل مشاهدة صفحة. إذا لم تتمكن MySQL من التعامل مع تجميعات جداول الملخصات متوسطة الحجم ، فكيف ستتعامل مع هذا النهج الجديد بحق ، حيث لدينا مئات الملايين من الصفوف لموقع ويب واحد؟ p> IOPS
مع RDS ، كان علينا التفكير في IOPS. بعد تجربة مرهقة مع أحد مواقع الويب الفيروسية ، بدأنا في الإفراط في توفير IOPS لـ RDS. وهي باهظة الثمن. إذا لم تكن معتادًا على IOPS ، فإن أسهل طريقة لشرحها هي أنك تحتاج إلى توفير قدر معين من التخزين ، والذي يأتي مع كمية ثابتة من IOPS ، والتي تملي الحد الأقصى للقراءة / الكتابة في الثانية في قاعدة البيانات الخاصة بك. وإذا حصلت على موقع ينتشر بسرعة كبيرة ولم يكن لديك IOPS المناسب للتعامل معه ، مرحبًا بك في backlog town ، قم بتعبئة الموقع. p>
للتأكد من قدرتنا على التعامل مع تدفقات حركة المرور ، دفعنا 2000 غيغابايت من مساحة تخزين قاعدة البيانات. أعطانا هذا 6000 IOPS ، وهو أمر جيد معنا. لذلك كنا ندفع 500 دولارًا إضافيًا شهريًا للتخزين الذي لم نكن بحاجة إليه ، فقط في حالة وجود موقع فيروسي آخر لإدارته. وفي وقت كتابة هذا التقرير ، ما زلنا ندفع مقابل ذلك لأن AWS لا تسمح لك بخفض سعة التخزين لديك بسهولة. (نعم ، أنا مالح حيال ذلك.) p> حد الاتصال
تعد حدود الاتصال أحد المجالات التي تثير قلقي دائمًا. مع الحل الجديد الذي نختاره ، أريده أن يتعامل بسهولة مع عدة آلاف من الاتصالات ، دون الحاجة إلى إنفاق ثروة. p> بحثنا عن صديق جديد
كنا واضحين بشأن سبب رغبتنا في الابتعاد عن MySQL ، وعرفنا أن هناك حلول قواعد بيانات أكثر ملاءمة في السوق. قبل أن نبدأ بحثنا ، ناقشنا الأمور غير القابلة للتفاوض: p> يجب أن تكون سريعة بشكل يبعث على السخرية يجب أن تنمو معنا. نحن لا نريد ...
What's Your Reaction?