نحن لا نستخدم عامل ميناء

5

التحديث: تعديلات طفيفة لذكر أن لدينا خادم بناء مخصص بعد نشر هذا على reddit.

قد ينتهي بك الأمر بالحصول على الكثير من الكراهية. في وظائف أخرى ، استخدمنا عامل الإرساء وقد نجح الأمر على ما يرام (بالنسبة للجزء الأكبر … كان هناك وقت تم فيه تسريب نظام ملفات RedHat على خادم الإنتاج الخاص بنا بشكل غامض – ربما لم يكن خطأ عامل الإرساء .) لكن لا ، سبب عدم استخدامنا عامل الإرساء هو أننا لسنا بحاجة إليه. حرفيًا. كتابة خدمات ويب golang و html ثابت مدمج مع توجيه golang 1.16 الجديد // التضمين ، ينتهي بنا الأمر بتوجيه واحد قابل للنشر الثنائية.

كشركة ناشئة مكتفية ذاتيا ، لدينا موارد محدودة لتخصيصها للمهام. اخترنا golang لهذا السبب بالضبط. سيكون بالتأكيد رائعًا إذا تمكنا من قضاء بضعة أسابيع في بناء خط أنابيب CI / CD مثالي ، عملية نشر أنيقة ، جنبًا إلى جنب مع لوحات معلومات جميلة. ولكن لدينا برامج نحتاج إلى شحنها من أجل الحصول على المستخدمين من أجل زيادة الاشتراكات. أي شيء لا يخدم هذا الهدف بشكل مباشر يعد تعقيدًا.
لذلك في أحسن الأحوال ، عامل الإرساء هو تعقيد. 9 ملايين من مضاعفات LoC التي تجلب الأخطاء الخاصة بها وخصوصياتها الخاصة

يسمح لنا Golang ببناء خدمات ويب سريعة بجنون (على الأقل بالنسبة لمستوى النمو الذي نحققه حاليًا) وقابلة للتطوير بجنون (مرة أخرى ، بالنسبة لمستوى النمو الذي نحن عليه حاليًا). يمكننا التعامل مع آلاف المعاملات في الثانية على خادم واحد. ليس لدينا ما يقرب من ألف معاملة في الثانية. ولكن ، بالتأكيد ، ربما كان بإمكاننا فعل الشيء نفسه مع العقدة أو دينو. محرك V8 سريع أيضًا بجنون. عندما تكون حركة المرور المرتفعة لتطبيقك على الأرجح معاملتان في الثانية (لدينا تطبيق فيديو للتمارين الرياضية – ليس لدينا نفس مشكلات قابلية التوسع مثل Twitter) ، لا يهم حقًا لغة البرمجة التي تختارها. إذا نفدت سعته ، قم بترقية خادمك الفردي.

لا ، السبب الذي دفعنا إلى استخدام go هو أن عبوة golang أفضل بكثير من node. أو java. أو C #. نحصل على ثنائي واحد.

البناء سهل مثل:

go build

الاختبار سهل مثل

go test

يعد نشر التطبيق سهلاً مثل:

scp app user @ host:
ssh user @ host “nohup ./app”

ملاحظة ، لقد حصلنا على القليل أكثر تعقيدًا وقم بإنشاء برنامج نصي SystemD لإطلاقه عند بدء التشغيل. لقد تأكدنا أيضًا من أن لدينا خادم بناء مخصص ، والذي يقوم بشكل أساسي بتشغيل نص برمجي مكون من 10 أسطر يقوم بكل ما يلزم للبناء (git clone، go build، go test، go lint، go vet) ولكن كان هناك من منا يجادل بأنه حتى هذا كان معقدًا للغاية. في مرحلة ما ، قد نضيف واجهة مستخدم مثل https://www.rundeck.com/ للتحكم في عمليات النشر.

كان الوقت الإجمالي لإنشاء نظامنا للبناء والنشر صغيرًا جدًا لدرجة أننا لا نعرف حتى كيفية قياسه.

الآن ، فكر في كيفية قضيت الكثير من الوقت في تعلم عامل ميناء. نشر عامل الميناء. استكشاف الأخطاء وإصلاحها. حتى لو كنت تحبها ، فقد غيرت حياتك ، فهي أفضل من شرائح الخبز وهي تحل الجوع في العالم … في النهاية يمكن أنت تقول حقًا إنها أبسط مما لدينا مجانًا مضمنة في golang؟ أؤكد لك أنها ليست كذلك.