الميكروسيرفيسات باستخدام PHP: البنية والممارسة

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

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

ابدأ الدورة

الميكروسيرفيسز في PHP: البنية والتطبيق العملي



في تطوير الويب الحديث، البنية المتجانسة (Monolithic) تفسح المجال بشكل متزايد لبنية الميكروسيرفيسز (Microservices). PHP، التي ترتبط تقليديًا بالتطبيقات المتجانسة (WordPress, Laravel-monolith)، مناسبة تمامًا لبناء الأنظمة الموزعة. في هذه المقالة، سنشرح المبادئ الأساسية لبنية الميكروسيرفيسز في PHP، وسنستعرض أمثلة عملية للكود والأدوات التي ستساعدك على الانتقال من النظام المتجانس إلى نظام مرن.



ما هي الميكروسيرفيسز ولماذا نحتاجها في PHP



بنية الميكروسيرفيسز هي نهج يتم فيه تقسيم التطبيق إلى عدة خدمات مستقلة. كل خدمة مسؤولة عن منطق أعمالها الخاص (المصادقة، المدفوعات، الإشعارات) ويمكن تطويرها ونشرها وتوسيع نطاقها بشكل منفصل.



لماذا PHP مناسبة للميكروسيرفيسز:

  • بداية سريعة — أطر عمل PHP (Laravel, Symfony, Lumen) تتيح إنشاء خدمة في دقائق معدودة.
  • مجتمع كبير — آلاف الحزم الجاهزة للعمل مع قوائم الانتظار وواجهات API وقواعد البيانات.
  • مرونة — يمكن دمج PHP مع لغات أخرى (Go, Python) في نظام واحد.


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



بنية ميكروسيرفيس نموذجية في PHP



لننظر إلى الهيكل الأساسي لخدمة واحدة. لنفترض أن لدينا خدمة UserService، المسؤولة عن تسجيل المستخدمين وتسجيل الدخول.



هيكل المشروع:

user-service/├── api/│   └── index.php          # نقطة الدخول (REST API)├── src/│   ├── Controllers/│   │   └── AuthController.php│   ├── Models/│   │   └── User.php│   ├── Services/│   │   └── AuthService.php│   └── Database/│       └── migrations/├── config/│   └── database.php├── composer.json├── Dockerfile└── .env


كل خدمة:

  • لديها مستودع خاص بها وقاعدة بيانات خاصة بها (غالبًا PostgreSQL أو MySQL).
  • تتواصل مع العالم الخارجي عبر REST API أو gRPC.
  • مغلفة في حاوية Docker.


مثال على وحدة تحكم REST بسيطة باستخدام Lumen (إطار عمل Laravel المصغر):

<?php

namespace App\\Http\\Controllers;

use Illuminate\\Http\\Request;use App\\Models\\User;

class AuthController extends Controller{ public function register(Request $request) { // التحقق من الصحة $this->validate($request, [ 'email' => 'required|email|unique:users', 'password' => 'required|min:8' ]);

// إنشاء المستخدم $user = User::create([ 'email' => $request->input('email'), 'password' => app('hash')->make($request->input('password')) ]);

return response()->json(['user_id' => $user->id], 201); }}


تبادل البيانات بين الخدمات: متزامن وغير متزامن



لا يمكن للميكروسيرفيسز أن توجد بمعزل عن بعضها. هناك طريقتان رئيسيتان للتواصل:



1. متزامن (HTTP/REST)

الخدمة A تستدعي مباشرة API الخدمة B. بسيط، لكنه يخلق ارتباطًا وثيقًا.

<?php// في خدمة OrderService$httpClient = new \\GuzzleHttp\\Client();$response = $httpClient->post('http://user-service/api/validate', [    'json' => ['token' => $token]]);

if ($response->getStatusCode() === 200) { // المستخدم صالح}


2. غير متزامن (قوائم الانتظار / RabbitMQ)

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



مثال على إرسال حدث عبر RabbitMQ باستخدام مكتبة php-amqplib:

<?phprequire_once __DIR__ . '/ve                

المدونات

توصيات الكتب