كومة التكنولوجيا مملة من شركة الإنترنت رجل واحد


نتائج البحث على ListenNotes.com

الاستماع ملاحظات هو محرك البحث وقاعدة بيانات بودكاست. التكنولوجيا هي في الواقع مملة جدا. لا منظمة العفو الدولية ، والتعلم العميق أو blockchain. "إذا كان يجب عليك الإعلان عن تطبيق الذكاء الاصطناعي ، فأنت لا تستخدم Real AI" :)

بعد قراءة هذا المقال ، يمكنك تكرار مشروعي أو القيام بشيء مماثل بسهولة. لن تضطر إلى توظيف الكثير من المطورين. تذكر أنه عندما جمع Instagram 57.5 مليون دولار وذهب إلى Facebook مقابل مليار دولار ، كان لديهم 13 موظفًا فقط - وهم ليسوا مطورين فقط. حدث شراء Instagram في أوائل عام 2012. الآن هو عام 2019 ، واليوم أكثر من أي وقت مضى أصبح من السهل إنشاء شيء ذي معنى مع فريق هندسي صغير - حتى من شخص واحد.

إذا لم ترَ الاستماع إلى Notes ، فجربه الآن:



نظرة عامة


لنبدأ بمتطلبات أو ميزات المشروع.

يوفر الاستماع ملاحظات وظيفتين:


كل شيء يعمل على AWS ، هناك 20 خادمًا فقط قيد الإنتاج (اعتبارًا من 5 مايو 2019):


الخوادم التي تعمل على تشغيل Notes Notes

حسب اسم المضيف ، يمكنك بسهولة تخمين ما يفعله كل خادم.

  • يقدم إنتاج الويب حركة مرور الويب لـ ListenNotes.com.
  • إنتاج api يخدم API المرور. ندعم نسختين من واجهة برمجة التطبيقات (اعتبارًا من 4 مايو 2019): v1api (مهملة) و v2api (جديدة)
  • الإنتاج - ديسيبل تطلق PostgreSQL (السيد والعبد)
  • إنتاج تطلق مجموعة Elasticsearch.
  • يقوم عامل الإنتاج بإدارة مهام المعالجة المستقلة للحفاظ دائمًا على تحديث قاعدة بيانات البودكاست وتوفير بعض الميزات السحرية (مثل ترتيب نتائج البحث ، وتوصيات للحلقات / البودكاست ، وما إلى ذلك).
  • رطل الإنتاج هو موازن التحميل. للراحة ، أقوم أيضًا بتشغيل Redis و RabbitMQ على هذا الخادم. أعلم أن هذا ليس مثاليًا. لكنني لست الشخص المثالي. :)
  • production-pangu هو خادم إنتاج أقوم أحيانًا بتشغيل البرامج النصية لمرة واحدة واختبار التغييرات. ما هو بانغو ؟

معظم الخوادم يمكن تحجيمها أفقيا. لهذا السبب أسميها الإنتاج - شيء 1 ، إنتاج - شيء 2 ، وما إلى ذلك ... من السهل جدًا إضافة الإنتاج - شيء 3 والإنتاج - شيء 4 إلى الكتلة .

الخلفية


الخلفية الكاملة مكتوبة في جانغو / بيثون 3. نظام التشغيل هو أوبونتو.

يستخدم UWSGI لخدمة حركة المرور على شبكة الإنترنت. لقد قمت بتثبيت nginx قبل عمليات uWSGI ، كما أنه يعمل بمثابة موازن التحميل.

مستودع البيانات الرئيسي هو PostgreSQL ، الذي لدي خبرة واسعة في مجال التطوير والتشغيل لسنوات عديدة. مع التكنولوجيا المثبتة ، تنام بهدوء في الليل. يستخدم Redis لأغراض متعددة (مثل التخزين المؤقت والإحصاءات ...). من السهل تخمين استخدام Elasticsearch في مكان ما . نعم ، استخدمه لفهرسة البودكاست وتقديم استعلامات البحث ، مثل معظم الشركات المملة .

يستخدم Celery للمعالجة في وضع عدم الاتصال ، في حين يهدف Celery Beat إلى جدولة المهام التي تشبه وظائف Cron ، ولكن أجمل قليلاً. إذا أصبحت Listen Notes مستقبلاً شائعة ، وتسببت Celery و Beat في مشاكل في القياس ، فربما سأنتقل إلى مشروعين قمت بهما لدى صاحب العمل السابق: ndkale و ndscheduler .

يقوم المشرف بإدارة العمليات على كل خادم.

مهلا ، ماذا عن Docker ، Kubernetes ، والهندسة المعمارية بدون خادم؟ لا شيء من هذا القبيل. مع الخبرة ، تتعلم عدم القيام بالكثير. في الواقع ، لقد عملت قليلاً مع Docker في عام 2014 في وظيفة سابقة: ما كان جيدًا بالنسبة للشركات المتوسطة التي تبلغ قيمتها مليار دولار يبدو غير ضروري لشركة صغيرة مؤلفة من شخص واحد.

الواجهة


تم تصميم واجهة الويب بشكل أساسي باستخدام React + Redux + Webpack + ES . جميلة القياسية في هذه الأيام. عند النشر في بيئة الإنتاج ، يتم تنزيل حزم JS إلى Amazon S3 وتصدر من خلال CloudFront .

في ListenNotes.com ، يتم تقديم معظم صفحات الويب إلى النصف على جانب الخادم ( قالب Django ) ونصف على جانب العميل ( React ). يأتي قالب صفحة الويب من الخادم ، ومن جانب العميل ، يتم تقديم تطبيق الويب التفاعلي بشكل أساسي. ولكن تم إعداد عدة صفحات ويب بشكل كامل على الخادم بسبب كسلتي وبعض الفوائد المحتملة لكبار المسئولين الاقتصاديين.

مشغل الصوت


أنا أستخدم نسخة معدلة للغاية من رد فعل مشغل الوسائط . إنه يعمل على الموقع كلاعب مضمن على Twitter ومشغل مدمج في مواقع الطرف الثالث:


المدمج في لاعب على مواقع الطرف الثالث

API


نحن نوفر للمطورين واجهة برمجة تطبيقات بودكاست بسيطة وقوية. بناء API يشبه بناء موقع على شبكة الإنترنت. في ما يلي نفس مكدس Django / Python للواجهة الخلفية و ReactJS للواجهة (مثل شريط أدوات API والوثائق ...).


الاستماع شريط أدوات API


الاستماع وثائق API

بالنسبة لواجهة برمجة التطبيقات ، نحتاج إلى تتبع عدد الطلبات التي يستخدمها العميل في دورة الفوترة الحالية ، وتحصيل رسوم. من السهل أن نتخيل أن Redis يستخدم بنشاط هنا :)

DevOps


إعداد الجهاز ونشر الرمز


يستخدم Ansible لتوفير. في الأساس ، كتبت مجموعة من ملفات yaml للإشارة إلى ملفات التكوين والبرامج التي يجب أن تكون على كل نوع من أنواع الخوادم. يمكنني نشر خادم به جميع ملفات التكوين الصحيحة وجميع البرامج المثبتة بنقرة زر واحدة. فيما يلي بنية الدليل لملفات Ansible yaml:


أنا يمكن أن أفضل تسمية الدلائل. لكن مرة أخرى ، هذا يكفي الآن

Ansible يساعد أيضا في نشر التعليمات البرمجية في الإنتاج. في الأساس ، لديّ برنامج نصي لحزمة نشر .sh يعمل على نظام التشغيل macOS :

  ./deploy.sh production HEAD web 

يأخذ هذا البرنامج النصي ثلاث وسائط:

  • البيئة : الإنتاج أو التدريج.
  • إصدار مستودع listennotes : HEAD يعني "مجرد نشر أحدث إصدار." إذا تم تحديد التزام SHA ، فسوف ينشر إصدارًا معينًا من الكود - وهذا مفيد بشكل خاص عندما أحتاج إلى التراجع بعد نشر سيء.
  • نوع الخوادم : الويب ، العامل ، API أو الكل. لا أحتاج للنشر على جميع الخوادم في وقت واحد. في بعض الأحيان أقوم بإجراء تغييرات على شفرة Javascript ، ثم أحتاج إلى نشرها فقط على الويب ، دون لمس API أو العاملين.

يتم تنظيم عملية النشر بشكل أساسي بواسطة ملفات Ansible yaml ، وبطبيعة الحال ، فهي بسيطة للغاية:

  • على جهاز Macbook Pro ، إذا كان هذا نشرًا لخوادم الويب ، فسيتم إنشاء حزم Javascript وتحميلها على S3.
  • على الخوادم المستهدفة ، تقوم git باستنساخ مستودع listennotes في مجلد يسمى الطابع الزمني ، والتحقق من إصدار محدد ، وتثبيت تبعيات Python الجديدة ، إن وجدت.
  • على الخوادم المستهدفة ، يشير رابط رمزي إلى المجلد المذكور أعلاه يسمى الطابع الزمني ، ثم نقوم بإعادة تشغيل الخوادم باستخدام المشرف.

كما ترون ، أنا لا أستخدم أدوات CI الفاخرة هذه. فقط أبسط والأكثر موثوقية الأدوات التي تعمل حقا.

الرصد والإنذار


يتم الرصد والتنبيهات بواسطة Datadog . تُظهر لوحة القيادة البسيطة بعض المقاييس عالية المستوى. تم تصميم كل شيء هنا لزيادة ثقتي عند التدليل مع الخوادم في الإنتاج.


Datadog Dashboard for Listen Notes ، اعتبارًا من ديسمبر 2017

Datadog متصل بـ PagerDuty. إذا حدث خطأ ما ، فسترسل لي PagerDuty إشعارًا عبر الهاتف والرسائل النصية القصيرة.

يمكنني أيضًا استخدام Rollbar لتتبع حالة رمز Django وللتعرف على استثناءات غير متوقعة ، حيث أخطرني بالبريد الإلكتروني و Slack.

سلاك نشط جدا. نعم ، هذه شركة بها شخص واحد ، لذلك ليست هناك حاجة للاتصال ، ولكن لمراقبة الأحداث المثيرة للاهتمام على مستوى التطبيق. بالإضافة إلى دمج Datadog و Rollbar مع Slack ، فإن كود الويب Slack backend يدمج أيضًا ربطات الويب Slack الواردة لإعلامك بتسجيل المستخدم أو بعض الإجراءات المثيرة للاهتمام (على سبيل المثال ، إضافة عناصر أو حذفها). هذه ممارسة شائعة جدًا في شركات التكنولوجيا. إذا قرأت كتبًا عن السنوات الأولى من Amazon أو PayPal ، فستكتشف أن لدى كلتا الشركتين آلية إعلام مماثلة: كلما سجل المستخدم ، كان هناك صوت "أقرع" لإخطار الجميع في المكتب.

منذ الإطلاق في أوائل عام 2017 ، لم يكن تطبيق Listen Notes قد توقف عن العمل بشكل خطير (أكثر من 5 دقائق) ، باستثناء هذا . أنا دائما حذرة جدا وعملية في DevOps العمل. بالنسبة للخوادم ، يتم توفير تكاليف حمل كبيرة في حالة حدوث زيادة كبيرة في الحضور بسبب الدخول إلى الصحافة أو أي شيء آخر.

تصميم


أنا أعمل في WeWork في سان فرانسيسكو. قد يتساءل البعض ، لماذا لا يعمل فقط من المنزل أو من بعض المقاهي غير الرسمية. حسنًا ، أقدر حقًا الإنتاجية وأرغب في استثمار الأموال فيها. لا أعتقد أن الفوضى المنزلية تسهم في تطوير البرامج (أو أي عمل في مجال المعرفة / الإبداع). نادراً ما أعمل أكثر من 8 ساعات في اليوم (آسف 996 شخصًا ). أريد كل دقيقة العد. وبالتالي ، فإن المكتب الخاص الجيد والمكلف نسبيًا هو ما أحتاج إليه. بدلاً من توفير المال على حساب الوقت ، أقوم بتحسين الوقت لاستخدامه بشكل مربح وكسب المال.


مكتبي في WeWork

أنا أعمل على جهاز MacBook Pro. تعمل بنية تحتية متطابقة تقريبًا داخل Vagrant + VirtualBox . بالنسبة لبيئة التطوير ، يستخدم Vagrant نفس مجموعة ملفات Ansible yaml الموضحة أعلاه.

أنا أؤيد فلسفة مستودع متجانسة . وبالتالي ، يوجد مستودع واحد فقط لقائمة المستعرضات يحتوي على برامج نصية DevOps والواجهة الأمامية ورمز الواجهة الخلفية. يتم استضافته كمستودع خاص على GitHub. كل التطوير في الفرع الرئيسي. أنا نادرا ما تستخدم الغداء.

أنا أكتب الكود وأعمل خوادم dev (Django runerver و webpack dev server) باستخدام PyCharm . نعم ، أنا أعلم ، إنه ممل. بعد كل شيء ، هذا ليس Visual Studio Code أو Atom أو نوعًا من IDE بارد. ولكن بالنسبة لي ، PyCharm يعمل بشكل جيد. المدرسة القديمة ، ماذا يمكنك أن تفعل.


بيشارم

miscellanea


هناك الكثير من الأدوات والخدمات المفيدة التي يمكنني استخدامها لإنشاء ميزة "استمع إلى Notes" كمنتج وشركة:


حافظ على هدوئك ولا تهتز ...


كما ترون ، نحن نعيش في وقت كبير لإطلاق أعمالنا. هناك العديد من الأدوات والخدمات الجاهزة التي توفر الوقت والمال ، مما يزيد من إنتاجيتك. الآن هو أفضل وقت في التاريخ لإنشاء شيء مفيد للبشرية من خلال فريق صغير (أو فقط بجهود شخص واحد) ، باستخدام تقنيات بسيطة ومملة.

مع مرور الوقت ، تصبح الشركات أصغر وأصغر. لم تعد بحاجة إلى استئجار طن من الموظفين بدوام كامل. للقيام بكل العمل ، يمكنك استخدام خدمات SaaS والمقاولين للطلب.

أساسا ، العقبة الرئيسية في إنشاء مشروع هو التفكير المفرط. ماذا لو كان هذا ، ماذا لو كان ذلك. الصبي ، لا أحد يحتاج إليك. الجميع مشغول بشؤونهم الخاصة. لا أحد يهتم بك ومشروعك حتى تثبت أنك تستحق الاهتمام. حتى لو قمت بقفل الإطلاق ، فلن يلاحظ أحد. فكر كبيرًا ، وابدأ صغيرًا ، وسارع. من الطبيعي للغاية استخدام تقنية مملة والبدء بشيء بسيط (حتى قبيح) إذا كنت حقًا تحل المشكلة.


الآن هناك الكثير من الناس مع عبادة البضائع . تجاهل الضوضاء. حافظ على هدوئك ولا تهتز.

Source: https://habr.com/ru/post/ar467793/


All Articles