أنماط معمارية مريحة

مرحبا يا هابر!


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


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


التحجيم الأفقي


العنصر الأبسط والأكثر شهرة. حسب التقاليد ، الأكثر شيوعًا هو نظامان لموازنة الحمل - التحجيم الأفقي والرأسي. في الحالة الأولى ، يمكنك السماح للخدمات بالعمل بالتوازي ، وبالتالي توزيع الحمل بينهما. في الثانية ، يمكنك طلب خوادم أكثر قوة أو تحسين الشفرة.


على سبيل المثال ، سآخذ تخزين ملفات سحابة مجردة ، أي بعض التناظرية من OwnCloud و OneDrive وما إلى ذلك.


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



: , — , .


CQRS


Command Query Responsibility Segregation , , . , ( ) . : . , A, .


— ( ) . - :


  1. .
  2. .
  3. .

, 2 ( , , ). , . CQRS, :


  1. .
  2. .
  3. « ».
  4. «1».


, . , request-response . , . , (, ), , .


, ( 100%) , , , .


, ( RX ). , , . .


, , . , , .


Event Sourcing


, , . ( ), , . , , — .


— , . , . eventual consistency, , - (« ») .


, , ( , ). - , — .


. eventual consistency, .



:


  • .
  • .
  • ( ).
  • "append only". .
  • FIFO ( ). , .

, . , , :



, . . : , .


(, , ):



:


  • . . , .
  • , . , «», . , , .
  • , . 1% , (. ), , .

:



, Event Sourcing CQRS. , , , , , . , . , , «», , « ». , , (, ). « ».


:


  • : « » : « » « ». , ( , ).
  • - , , , . : request-response, , . , , . : .

Sharding


, event sourcing . - . , :


  • . , / .
  • . - ,


, . , , , . « » , , , , :


  • Event Source ( — ). — id .
  • , ( — , , — , ). , , .
  • ( ).
  • (.. ), .

, , . eventual constistency, , (, , ). , , .


, , :


  • , . .
  • . , Enterprise ( ). sharding . , (, Azure self hosted).
  • — . ( ). — , . , .. , .

Static Content Hosting


, - . : , , , . , ( nginx , , Java-). CDN (Content Delivery Network) , .


— . — , CDN , .


- . ( ), . — , ( ), . — ( , , ) , -. , :


  • URL . file_id + key, key — - , .
  • nginx :
    • . , .
  • : . , , . : IO , . Java , - Rust/C++ . ( ), IO .


( -), . , , , ( ).


( ): Jenkins/TeamCity, , Java. Java-, , . , " / ". : , ( , ), . IO. , , -, . , nginx' ( ).


, :



, . -, . , API .. , , , . ( ), . , , ( ). (- ).


, - . . , . , « », « ». , : , .



. VK Static Content Hosting . - Sharding ( ). Event Sourcing . , , CQRS , . .


, , ( , ). Sharding , , . CQRS - , RX. 10 web . Event Sourcing Apache Kafka. 10 , . Static Content Hosting: - ( , ), .


, , . , , , , , ( ), (, ).


: , , , . , , 100 ( , ..).


All Articles