الوداع ، الخدمات الصغيرة: من مائة طفل مشكلة إلى نجمة واحدة

إذا كنت لا تعيش في كهف ، فقد تعرف أن الخدمات الدقيقة هي هندسة اليوم. مع تطور هذا الاتجاه ، قبل منتج Segment في مرحلة مبكرة أنه أفضل ممارسة عملت بشكل جيد في بعض الحالات ، وكما سترى قريبًا ، ليست جيدة جدًا في حالات أخرى.

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

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

ونتيجة لذلك ، لم يتمكن الفريق من النجاح مع ثلاثة مهندسين بدوام كامل يقضون معظم وقتهم ببساطة في صيانة النظام. شيء ما يجب أن يتغير. هذا المنشور عبارة عن قصة عن كيفية التراجع واتباع نهج يتوافق بشكل جيد مع متطلباتنا واحتياجات الفريق.

لماذا تعمل الخدمات الصغيرة


تتلقى البنية التحتية لبيانات عملاء Segment مئات الآلاف من الأحداث في الثانية وتعيد توجيهها إلى واجهة برمجة التطبيقات للشريك ، والتي نسميها الوجهات من جانب الخادم. هناك أكثر من مائة نوع من هذه المناطق ، مثل Google Analytics أو Optimizely أو ربطات الويب المخصصة.

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

{
  "type": "identify",
  "traits": {
    "name": "Alex Noonan",
    "email": "anoonan@segment.com",
    "company": "Segment",
    "title": "Software Engineer"
  },
  "userId": "97980cfea0067"
}

, , . API , , , – Segment API, , . Segment .

, . , . , , , . , HTTP 500, -. , , , , . , .



, , , , . , , , .

, X -. , , X, . , , . , X . , .



, . -, . , , , . , , , .

image


API , . – X traits.dob, API traits.birthday. X :

const traits = {}
traits.dob = segmentEvent.birthday

Segment, . , API . , , XML .

, , . , , . , . . , .

. .


50 50 . , , HTTP , .

, , event.name() . name Name. , firstName, first_name, FirstName. , .

Identify.prototype.name = function() {
  var name = this.proxy('traits.name');
  if (typeof name === 'string') {
    return trim(name)
  }
  
  var firstName = this.firstName();
  var lastName = this.lastName();
  if (firstName && lastName) {
    return trim(firstName + ' ' + lastName)
  }
}

. .

. . . , , . .

, . , . . , , .

, . , – . , .

, , - , .

, , , . , . .


140 . . , .

, . , , . Centrifuge. Centrifuge .

image


, , , . , .

120 . . , .

, . , . .

, . , .

, . HTTP , , , .

, . , . , HTTP , . , . . , , .


HTTP . , . 5 . 140 .

Traffic Recorder. Traffic Recorder yakbak, . , , . . , . , HTTP , .

, , Traffic Recorder. , 140+ . . .


, . , . 140+ . .

. 2016, , 32 . 46. 6 , 2016 .

. , . , , .


, :

  1. . , , , . , . , , .
  2. . , , , . 3000+ , . - Redis , . , .


, . , . , . , .

, . , , , .

  1. . , , . , , .
  2. , , , . , .

. , , . .

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


All Articles