ميكروسيرفيسات PHP: الهندسة والممارسة من الألف إلى الياء

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة: لماذا PHP والميكروسيرفيسات؟

لفترة طويلة، ارتبطت PHP حصريًا بالتطبيقات المتكاملة (Monolithic) مثل WordPress أو Laravel أو Symfony. ومع ذلك، تحولت PHP الحديثة (بدءًا من الإصدار 7.4 وخاصة 8.x) إلى أداة قوية لبناء هندسة الميكروسيرفيسات. بفضل الأداء المحسّن، والكتابة الصارمة (Strict Typing)، والإمكانيات غير المتزامنة (عبر ReactPHP أو Swoole)، والنظام البيئي الناضج، أصبحت PHP لغة كاملة للميكروسيرفيسات.

في هذه المقالة، سنشرح: ما هي الميكروسيرفيسات بلغة PHP، وكيفية تصميم الهندسة، وما هي التقنيات التي يجب استخدامها، وسنكتب أمثلة كود حقيقية.



ما هي هندسة الميكروسيرفيسات؟

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



المبادئ الأساسية للميكروسيرفيسات بلغة PHP

  • الاستقلالية — يمكن كتابة كل خدمة بلغة PHP أو Node.js أو Go، لكننا نستخدم PHP لجميعها.
  • لامركزية البيانات — كل قاعدة بيانات تخص خدمة واحدة فقط.
  • التنسيق (Orchestration) مقابل التصميم التنسيقي (Choreography) — الاختيار بين الإدارة المركزية (Kubernetes) والنهج القائم على الأحداث.
  • تحمل الأخطاء — يجب ألا يؤدي تعطل خدمة واحدة إلى تعطيل النظام بأكمله.


هندسة الميكروسيرفيسات بلغة PHP: من النظرية إلى التطبيق

لنفكر في مشروع نموذجي: متجر إلكتروني. سنقسمه إلى ميكروسيرفيسات:

  • خدمة المستخدم (User Service) — التسجيل، المصادقة، الملفات الشخصية.
  • خدمة المنتج (Product Service) — كتالوج المنتجات، الأسعار، المخزون.
  • خدمة الطلب (Order Service) — إنشاء الطلبات، الحالات.
  • خدمة الدفع (Payment Service) — معالجة المدفوعات.
  • خدمة الإشعارات (Notification Service) — إشعارات البريد الإلكتروني/الرسائل النصية القصيرة.


الخطوة 1: تصميم بوابة API (API Gateway)

بوابة API هي نقطة الدخول الموحدة. يمكن تنفيذها بلغة PHP باستخدام Slim Framework أو باستخدام Nginx + PHP-FPM. مثال على بوابة بسيطة باستخدام Slim 4:



<?php// api-gateway/public/index.phpuse Slim\\Factory\\AppFactory;use Psr\\Http\\Message\\ServerRequestInterface as Request;use Psr\\Http\\Message\\ResponseInterface as Response;

require __DIR__ . '/../vendor/autoload.php';

$app = AppFactory::create();

// التوجيه إلى الميكروسيرفيسات$app->post('/api/orders', function (Request $request, Response $response) { // إعادة توجيه الطلب إلى خدمة الطلبات $client = new GuzzleHttp\\Client(['base_uri' => 'http://order-service:8080']); $res = $client->post('/orders', [ 'json' => $request->getParsedBody() ]); $response->getBody()->write($res->getBody()); return $response->withStatus($res->getStatusCode());});

$app->run();


الخطوة 2: التفاعل المتزامن (REST)

أبسط طريقة هي طلبات HTTP بين الخدمات. نستخدم Guzzle أو Symfony HttpClient. مثال على خدمة المنتج:



<?php// product-service/src/Controller/ProductController.phpnamespace App\\Controller;

use Symfony\\Component\\HttpFoundation\\JsonResponse;use Symfony\\Component\\HttpFoundation\\Request;

class ProductController{ public function getProduct(int $id): JsonResponse { // منطق الحصول على المنتج من قاعدة البيانات $product = $this->productRepository->find($id); if (!$product) { return new JsonResponse(['error' => 'Product not found'], 404); } return new JsonResponse([ 'id' => $product->getId(), 'name' => $product->getName(), 'price' => $product->getPrice() ]); }}


الخطوة 3: غير متزامن

المدونات

توصيات الكتب