يتضمن الاتصال المتزامن تفاعلًا في الوقت الفعلي حيث ترسل إحدى الخدمات طلبًا إلى خدمة أخرى وتوقف تشغيلها مؤقتًا حتى يتم تلقي الرد. تعد REST APIs وgRPC من البروتوكولات الشائعة المستخدمة لتسهيل هذا النوع من الاتصال.
تعد واجهة RESTful API (نقل الحالة التمثيلية) إحدى الطرق الأكثر شيوعًا للخدمات للتواصل مع بعضها البعض في نظام الخدمات الصغيرة. يستخدم REST تنسيقات HTTP/HTTPS وJSON أو XML لتبادل البيانات.
عادةً، تتفاعل الخدمات مع بعضها البعض عن طريق استدعاء واجهة برمجة التطبيقات لخدمة أخرى مباشرة.
مثال للطلب والرد:
GET /users/12345 HTTP/1.1 Host: api.userservice.com Accept: application/json Authorization: Bearer your-access-token { "userId": "12345", "name": "Michel J", "email": "[email protected]", "address": "Mountain View, Santa Clara, California" }
مثال التعليمات البرمجية المصدر
import org.springframework.web.client.RestTemplate; import org.springframework.http.ResponseEntity; public class OrderService { private final RestTemplate restTemplate = new RestTemplate(); private final String userServiceUrl = "https://api.userservice.com/users/"; public User getUserById(String userId) { String url = userServiceUrl userId; ResponseEntityresponse = restTemplate.getForEntity(url, User.class); return response.getBody(); } }
المزايا:
سهولة النشر والتكامل مع مختلف اللغات والأدوات.
يمكن بسهولة استخدام أدوات الاختبار والمراقبة.
العيوب:
قد لا تكون فعالة لمتطلبات السرعة العالية بسبب طبيعتها المتزامنة.
قد تواجه صعوبات في التعامل مع أخطاء الشبكة أو انقطاع الاتصال.
gRPC، وهو اختصار لـ Google Remote الإجراء Call، هو إطار عمل RPC عالمي عالي الأداء ومفتوح المصدر. يستخدم HTTP/2 لنقل البيانات بكفاءة ويعتمد عادةً على مخازن البروتوكول المؤقتة، وهي آلية محايدة للغة ومحايدة للنظام الأساسي وقابلة للتوسيع لتسلسل البيانات المنظمة، لتحديد بنية البيانات التي يتم إرسالها واستلامها.
مثال، تعريف المخازن المؤقتة للبروتوكول
syntax = "proto3"; package userservice; // Define message User message User { string userId = 1; string name = 2; string email = 3; string address = 4; } // Define service UserService service UserService { rpc GetUserById (UserIdRequest) returns (User); } // Define message UserIdRequest message UserIdRequest { string userId = 1; }
بالنسبة لخدمة إدارة المستخدمين، يجب عليك تنفيذ خادم gRPC الذي يلتزم بتعريف الخدمة المقدم في ملف .proto. يتضمن ذلك إنشاء المنطق الضروري من جانب الخادم للتعامل مع طلبات gRPC الواردة وإنشاء الاستجابات المناسبة.
import io.grpc.stub.StreamObserver; import userservice.User; import userservice.UserIdRequest; import userservice.UserServiceGrpc; public class UserServiceImpl extends UserServiceGrpc.UserServiceImplBase { @Override public void getUserById(UserIdRequest request, StreamObserverresponseObserver) { // Assuming you have a database to retrieve user information. User user = User.newBuilder() .setUserId(request.getUserId()) .setName("Michel J") .setEmail("[email protected]") .setAddress("Mountain View, Santa Clara, California") .build(); responseObserver.onNext(user); responseObserver.onCompleted(); } } import io.grpc.Server; import io.grpc.ServerBuilder; public class UserServer { public static void main(String[] args) throws Exception { Server server = ServerBuilder.forPort(9090) .addService(new UserServiceImpl()) .build() .start(); System.out.println("Server started on port 9090"); server.awaitTermination(); } }
المزايا:
أداء عالي وكفاءة عرض النطاق الترددي بسبب استخدام HTTP/2 والمخازن المؤقتة للبروتوكول.
يدعم لغات برمجة متعددة ولديه قابلية توسعة جيدة.
العيوب:
يتطلب طبقة ترجمة إذا كانت الخدمات لا تدعم gRPC.
يمكن أن يكون أكثر تعقيدًا في النشر والإدارة.
يشير الاتصال غير المتزامن إلى عملية إرسال الخدمة لطلب إلى خدمة أخرى دون حظر عملها الخاص في انتظار الرد. يتم تحقيق ذلك عادةً من خلال قوائم انتظار الرسائل أو أنظمة النشر/الاشتراك.
تعمل أنظمة انتظار الرسائل، مثل RabbitMQ وApache ActiveMQ، على تسهيل الاتصال غير المتزامن بين الخدمات.
المزايا:
تحسين قابلية التوسع والتسامح مع الأخطاء: يمكن للنظام التعامل بشكل أفضل مع أعباء العمل المتزايدة ويكون أقل عرضة للفشل.
تقليل الحمل على الخدمات: من خلال فصل إرسال الطلبات واستلامها، يمكن للخدمات الرئيسية التركيز على معالجة المهام دون أن تطغى عليها الطلبات المستمرة.
العيوب:
قد تتطلب جهدًا إضافيًا للإدارة والصيانة: يمكن أن تكون الأنظمة المستندة إلى قائمة الانتظار أكثر تعقيدًا وتتطلب المزيد من الموارد للتشغيل.
صعوبة التعامل مع الطلب وضمان تسليم الرسائل: يمكن أن يشكل ضمان معالجة الطلبات بالترتيب الصحيح وعدم فقدان أي رسائل تحديًا تقنيًا.
يسمح نظام النشر/الاشتراك (النشر/الاشتراك)، مثل Apache Kafka أو Google Pub/Sub، للخدمات بنشر الرسائل والاشتراك في المواضيع.
المزايا:
يدعم تدفقات البيانات واسعة النطاق وعالية الإنتاجية.
يقلل من التبعيات بين الخدمات.
العيوب:
يتطلب طبقة أكثر تعقيدًا لإدارة ومراقبة المواضيع والرسائل.
يمكن أن يكون من الصعب التعامل مع مشكلات الطلب والموثوقية مع الرسائل."
إذا كنت مهتمًا، يمكنك قراءة مقالاتي السابقة حول موضوع النشر/الفرعي.
قائمة انتظار الرسائل الميتة في وسيط الرسائل الجزء 1
قائمة انتظار الرسائل الميتة في وسيط الرسائل الجزء 2
مخاوف الاتساق والموثوقية داخل نظام وسيط الرسائل
يتم الاتصال المبني على الحدث عندما ترسل الخدمة حدثًا وتستجيب الخدمات الأخرى أو تتخذ إجراءات بناءً على تلك الأحداث.
تحدث الأحداث المتزامنة عندما ترسل الخدمة حدثًا وتنتظر استجابة من الخدمات الأخرى.
المزايا:
سهولة التحكم ومراقبة عملية معالجة الأحداث.
العيوب:
يمكن أن يسبب اختناقات إذا كانت خدمات الاستجابة بطيئة أو واجهت أخطاء
تحدث الأحداث غير المتزامنة عندما تقوم الخدمة بإصدار حدث ولا تحتاج إلى انتظار استجابة فورية.
المزايا:
يقلل من وقت الانتظار ويحسن قابلية التوسع.
يساعد الخدمات على العمل بشكل أكثر استقلالية ويقلل من التبعيات المتبادلة.
العيوب:
يتطلب آليات إضافية لضمان معالجة الأحداث بشكل صحيح وفي الوقت المناسب.
- صعوبة ضمان النظام والتعامل مع الأحداث المكررة.
يعتمد اختيار طريقة الاتصال بين الخدمات في نظام الخدمات الصغيرة على عوامل مثل متطلبات الأداء والموثوقية وتعقيد النظام. كل طريقة لها مزاياها وعيوبها، وفهم هذه الأساليب سيساعدك على بناء نظام خدمات صغيرة أكثر كفاءة ومرونة. فكر بعناية في متطلبات نظامك لاختيار طريقة الاتصال الأنسب.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3