إطار عمل PHP microservice هو "Micro Service Framework For PHP". وهو إطار خدمة PHP coroutine حديث تم تطويره بشكل مستقل بواسطة فريق خادم مجتمع Camera360 استنادًا إلى Swoole. ويشار إليه باسم msf أو php-msf. وهو المستوى الهندسي لـ Swoole إطار عمل تطبيق المؤسسة وقد صمد أمام اختبار Camera360 للتزامن العالي وحركة المرور الكبيرة لمئات الملايين من المستخدمين. php-msf يقوده فريق خادم Camera360 وسيتم تحديثه وصيانته بشكل مستمر ونأمل أيضًا أن ينضم إليه المزيد من مطوري تطبيقات Swoole المتميزين. تتمثل فكرة التصميم الأساسية لـ php-msf في استخدام الوسائل التقنية المبتكرة للكوروتين وغير المتزامن والتوازي لتحسين قدرة إنتاجية الجهاز الواحد للنظام وتقليل تكاليف الخادم الإجمالية.
دليل الإطار (Gitbook): دليل تطوير PHP-MSF
مستند API (Rawgit): مستند الفصل
نموذج مشروع تجريبي: PHP-MSF DEMO
ساعد في تحسين الوثائق: https://github.com/pinguo/php-msf-docs، يرجى تقديم العلاقات العامة.
مجموعة PHP-MSF#1 (QQ): 614054288
$ > php -r " copy('https://raw.githubusercontent.com/pinguo/php-msf-docker/master/installer.php', 'installer.php');include('installer.php'); " && source ~ /.bashrc
سيقوم installer.php
بفحص بيئة التشغيل، وإنشاء قالب مشروع تلقائيًا بناءً على التكوين المخصص الخاص بك، وتثبيت التبعيات مع الملحن، وبدء الخدمة. إذا تعذر الوصول إلى cdn.rawgit.com
، فيمكنك استنساخ أو تنزيل php-msf-docker مباشرة، واستخراج installer.php
، ثم تشغيل php installer.php
مباشرة
إذا سار كل شيء على ما يرام، في نهاية التشغيل سترى الإخراج التالي:
[2017-09-06 16:08:34] Run composer install success
[2017-09-06 16:08:34] Congratulations, all are installed successfully !
[2017-09-06 16:08:34] You can, visit http://127.0.0.1:8990/Welcome for test
_______ ____
________ / /_ ____ ____ ___ _____/ __/
___/ __ / __ / __ _ _____/ __ ` __ / ___/ /_
__/ /_/ / / / / /_/ /_____/ / / / / (__ ) __/
_/ .___/_/ /_/ .___/ /_/ /_/ /_/____/_/
/_/ /_/ Camera360 Open Source TM
[2017-09-06 16:08:34] Swoole Version: 1.9.18
[2017-09-06 16:08:34] PHP Version: 7.1.8
[2017-09-06 16:08:34] Application ENV: docker
[2017-09-06 16:08:34] Listen Addr: 0.0.0.0
[2017-09-06 16:08:34] Listen Port: 8990
اختبار الوصول:
$ > curl http://127.0.0.1:8990/Welcome
hello world !
انتبه إلى المنفذ إذا لم يكن 8990، فستحتاج إلى تعديله ثم الوصول إلى الاختبار.
├── app // PHP业务代码
│ ├── AppServer.php // 应用server类,可根据需求自定义
│ ├── Controllers // 控制器类目录
│ ├── Lib // 特殊逻辑处理类目录
│ ├── Models // Model类目录
│ ├── Route // 特殊路由规则类目录
│ ├── Tasks // Task类目录
│ └── Views // 视图文件目录
├── build.sh // 构建脚本(拉取docker镜像,启动容器)
├── checkstyle.sh // 代码检查脚本
├── composer.json // composer包依赖配置文件
├── config // 配置目录
├── server.php // server启动脚本
├── console.php // 命令行脚本
├── test // 单元测试目录
ما ورد أعلاه عبارة عن بنية تطبيق قياسية تعتمد على php-msf. سيقوم برنامج التثبيت installer.php بنقرة واحدة تلقائيًا بإنشاء دليل. يمكن للمستخدمين إنشاء بعض الأدلة المخصصة وفقًا لاحتياجاتهم، طالما أنهم يستوفون معيار psr4 يتم تحميلها تلقائيا.
وضع التصحيح
$ > ./server.php start
الوضع الخفي
$ > ./server.php start -d
إيقاف الخدمة
$ > ./server.php stop
إعادة تشغيل الخدمة
$ > ./server.php restart
لقد أنشأنا صورة Docker لتسهيل مستخدمي Docker على تثبيت البيئة بسرعة وتشغيل مشروع PHP-MSF DEMO. بالإضافة إلى ذلك، إذا كنت ترغب في معاينة تأثير تعديل التعليمات البرمجية في بيئة التطوير في الوقت الفعلي، فمن المستحسن استخدام Docker لإصدار سطح المكتب لنظام التشغيل Mac/Windows.
إذا قمت بترقية Docker، فسوف يقوم تلقائيًا بترحيل الصور والحاويات الأصلية. يرجى الانتظار بصبر والتأكد من عدم إنهاء عملية Docker في منتصف الطريق، وإلا فسيكون من الصعب الترحيل مرة أخرى.
سجل دوكر (سحابة علي بابا):
docker pull registry.cn-hangzhou.aliyuncs.com/pinguo-ops/php-msf-docker:latest
docker pull registry-internal.cn-hangzhou.aliyuncs.com/pinguo-ops/php-msf-docker:latest
docker pull registry-vpc.cn-hangzhou.aliyuncs.com/pinguo-ops/php-msf-docker:latest
docker pull pinguoops/php-msf-docker
نحن نركز على بناء إطار خدمة صغيرة مستقر وعالي الأداء وغير متزامن تمامًا يعتمد على HTTP، كمجموعة تقنية بديلة لـ nginx+php-fpm لتحقيق الخدمات الصغيرة للهندسة المعمارية وسيتم دعم Tcp/WebSocket Server كمكون إضافي ، أو كمشروع مستقل آخر مفتوح المصدر.
بالنسبة للفرق الصغيرة أو أنظمة الأعمال، نوصي باستخدام مكدس تقنية nginx+php-fpm التقليدي، ولا توجد اختناقات من حيث التكلفة والأداء، وليست هناك حاجة لتقديم مكدس تكنولوجي جديد.
بالنسبة للفرق الكبيرة والمتوسطة الحجم أو أنظمة الأعمال التي تمر بمرحلة مهمة من إدارة الخدمة أو التطور الموجه نحو الخدمة، يعد php-msf أحد الخيارات.
بالنسبة لمجموعات تطبيقات PHP الكبيرة، إذا كنت تريد توفير تكاليف الخادم بشكل كبير وتحسين أداء الخدمة، فإن php-msf هو أحد الخيارات.
بالنسبة لخدمات التجميع، مثل الصفحات الرئيسية لمواقع الويب الكبيرة، إذا كنت تريد دمج البيانات من خلال محتوى التجميع من جانب الخادم، فإن php-msf هو أحد الخيارات.
طريقة التثبيت الموصى بها هي إضافة التبعية pinguo/php-msf
عن طريق تحرير composer.json
{
"require" : {
"pinguo/php-msf" : " >=3.0.0 "
},
"minimum-stability" : " dev "
}
يجب إضافة خيار التكوين "minimum-stability": "dev"
لأن مكون السجل يعتمد على "monolog/monolog": "2.0.x-dev"
، ولا يحتوي monolog/monolog
على حزمة إصدار 2.0، ولكن لدينا تم ذلك بالفعل في بيئة الإنتاج والتحقق من استقرارها.
لقد صمد php-msf أمام حركة المرور العالية والتزامن العالي لخدمة مجتمع Camera360، وتم التحقق من استقراره بالكامل. الاستقرار هو القضية الأكثر أهمية التي ننفق الكثير من الوقت والطاقة لحلها، وهو أهم مبدأ من المبادئ الثلاثة.
يتم زيادة قدرة معالجة الجهاز الواحد للأعمال كثيفة الإدخال والإخراج بمقدار 5 إلى 10 مرات. وهذه بيانات حقيقية تم الحصول عليها في بيئة الإنتاج. على سبيل المثال، تتطلب خدمة التجميع في مجتمع Camera360 40 خادمًا لتحمل حركة المرور أثناء ذروة حركة المرور. بعد إعادة الإنشاء باستخدام php-msf، هناك حاجة إلى 4 خوادم بنفس التكوين لتحمل كل حركة المرور.
نظرًا لنموذج عملية Swoole المعقد، والذي ينقسم إلى حظر متزامن وغير متزامن، عند تشغيل نفس منطق الكود، قد تكون طريقة الاتصال ومعلمات التمرير غير متسقة، مما يزيد بشكل مباشر من تكلفة التعلم من أجل حماية التكلفة المنخفضة. الاختلافات في المستوى، لقد تم إنجاز الكثير من العمل، والفرق الوحيد بين التنفيذ وإطار عمل MVC التقليدي هو إضافة الكلمة الأساسية "العائد". نشير إلى بعض ممارسات التعليمات البرمجية لإطار عمل Yii2، ونتوقع التحول بسلاسة من تطوير Yii2.
المبادئ الثلاثة المذكورة أعلاه هي أساس التصويت أو دمج التعليمات البرمجية عندما نقوم بتنفيذ ميزات ووظائف جديدة، وسيتم أيضًا رفض أي علاقات عامة تؤثر على هذه المبادئ.
في الوقت الحاضر، هناك العديد من مشاريع PHP مفتوحة المصدر في المجتمع التي تدعم coroutines. يستخدم معظمها Generator+Yield لتنفيذها، ومع ذلك، فإن الاختلافات الدقيقة في التنفيذ ستؤدي إلى أداء مختلف تمامًا. يجب أن ندرك أن coroutines يمكن أن تعمل بمنطق غير متزامن بطريقة كتابة التعليمات البرمجية المتزامنة، لذلك coroutine يجب أن يكون أداء المجدول عاليًا بدرجة كافية. يبلغ أداء جدولة coroutine لـ php-msf 80٪ من طريقة رد الاتصال غير المتزامنة الأصلية، وهذا يعني أن واجهة برمجة تطبيقات معينة تستخدم طريقة كتابة رد الاتصال غير المتزامنة الأصلية لديها QPS تبلغ 10000 جدولة coroutine php-msf جدولة QPS هي 8000.
في الوقت الحاضر، لا يزال php-msf في بداياته، لقد أمضينا الكثير من الوقت والطاقة في حل مشاكل الاستقرار والأداء العالي والذاكرة، لأننا نعتقد أن "حجر الزاوية" هو الضمان الأساسي لـ "الارتفاع الشاهق". "البناء." فقط إذا كان الأساس متينًا، بهذه الطريقة فقط يمكن بناء "البناء" "على مستوى أعلى". الإصدار 3.0 هو الإصدار الأولي لمصدرنا المفتوح وهو خطوة مهمة بالنسبة لنا. بعد ذلك، سينصب تركيزنا على تحسين إطار عمل الخدمات الصغيرة الموزعة.
بالإضافة إلى ذلك، نظرًا لأنها تعتمد على عملية PHP المقيمة وتقوم بتحليل طلبات HTTP أو TCP مباشرةً، فهذا هو الدعم الأكثر أهمية للخدمة. وبناءً على ذلك، يمكننا القيام بالعديد من الأفكار التي لم نجرؤ على تنفيذها من قبل. هناك مجال كبير للخيال.
تم تطوير php-msf في الأصل استنادًا إلى SwooleDistributed-1.7.x، وفي هذا الإصدار مفتوح المصدر، يستخدم تجمع الاتصال بشكل أساسي تطبيق SD. نظرًا لاختلاف موضع أطر العمل لدينا، وسيناريوهات الأعمال التي تحلها، ومتطلبات الاستقرار، وأنماط الترميز، فقد قررنا تطوير أطر عمل الخدمات الصغيرة بشكل مستقل. كل إطار عمل له خصائصه ومزاياه الخاصة. اختر الإطار الذي يناسب شركتك وعملك السيناريوهات هي الأهم، وأود أن أشكر White Cat على ذلك، بالإضافة إلى ذلك، أثناء تطوير إطار عمل php-msf وتطبيقات بيئة الإنتاج، واجهت العديد من المشكلات الأساسية، ولكن تم حلها جميعًا واحدة تلو الأخرى. أحد أهم الأشياء التي يمكن أن تحل هذه المشكلات هو مشروع Swoole مفتوح المصدر، وأود أن أعرب عن امتناني العميق للمؤسس Han Tianfeng-Rango لدعمه القوي.
رخصة جنو العامة، الإصدار 2، راجع https://www.gnu.org/licenses/gpl-2.0.html