เฟรมเวิร์กไมโครเซอร์วิสของ PHP คือ "Micro Service Framework สำหรับ PHP" ซึ่งเป็นเฟรมเวิร์กบริการ PHP coroutine สมัยใหม่ที่พัฒนาขึ้นอย่างอิสระโดยทีมงานเซิร์ฟเวอร์ชุมชน Camera360 ที่ใช้ Swoole กรอบแอปพลิเคชันระดับองค์กรและทนทานต่อ Camera360 การทดสอบการทำงานพร้อมกันสูงและการรับส่งข้อมูลจำนวนมากสำหรับผู้ใช้หลายร้อยล้านคน php-msf นำโดยทีมเซิร์ฟเวอร์ Camera360 และจะได้รับการอัปเดตและบำรุงรักษาอย่างต่อเนื่อง เรายังหวังว่านักพัฒนาแอปพลิเคชัน Swoole ที่โดดเด่นอีกมากมายจะเข้าร่วมด้วย แนวคิดการออกแบบหลักของ php-msf คือการใช้วิธีการทางเทคนิคที่เป็นนวัตกรรมของคอร์รูทีน อะซิงโครนัส และขนานเพื่อปรับปรุงความสามารถในการรับส่งข้อมูลของเครื่องเดียวของระบบและลดต้นทุนเซิร์ฟเวอร์โดยรวม
คู่มือกรอบงาน (Gitbook): คู่มือการพัฒนา PHP-MSF
เอกสาร API (Rawgit): เอกสารคลาส
ตัวอย่างโครงการ DEMO: PHP-MSF DEMO
ช่วยปรับปรุงเอกสาร: https://github.com/pinguo/php-msf-docs โปรดส่ง PR
กลุ่ม 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 โปรแกรมติดตั้งเพียงคลิกเดียวจะสร้างไดเร็กทอรีโดยอัตโนมัติ ผู้ใช้สามารถสร้างไดเร็กทอรีที่กำหนดเองได้ตามความต้องการ จะถูกโหลดโดยอัตโนมัติ
โหมดแก้ไขข้อบกพร่อง
$ > ./server.php start
โหมดภูต
$ > ./server.php start -d
หยุดให้บริการ
$ > ./server.php stop
เริ่มบริการใหม่
$ > ./server.php restart
เราได้สร้างอิมเมจ Docker เพื่ออำนวยความสะดวกให้ผู้ใช้ Docker ติดตั้งสภาพแวดล้อมอย่างรวดเร็วและรันโปรเจ็กต์ PHP-MSF DEMO นอกจากนี้ หากคุณต้องการดูตัวอย่างผลของการแก้ไขโค้ดในสภาพแวดล้อมการพัฒนาแบบเรียลไทม์ ขอแนะนำให้ใช้ Docker สำหรับ Mac/Windows เวอร์ชันเดสก์ท็อป
หากคุณอัปเกรด Docker ระบบจะย้ายรูปภาพและคอนเทนเนอร์ต้นฉบับโดยอัตโนมัติ โปรดรอสักครู่ และอย่าหยุดกระบวนการ Docker กลางคัน ไม่เช่นนั้นจะเป็นการยากที่จะย้ายอีกครั้ง
Docker Registry (อาลีบาบาคลาวด์):
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 จะได้รับการสนับสนุนเป็นปลั๊กอิน หรือเป็นโครงการโอเพ่นซอร์สอิสระอื่น ๆ
สำหรับทีมขนาดเล็กหรือระบบธุรกิจ เราขอแนะนำให้ใช้สแต็กเทคโนโลยี 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 และความเสถียรของมันก็ได้รับการตรวจสอบอย่างสมบูรณ์แล้ว ความมั่นคงเป็นปัญหาที่สำคัญที่สุดที่เราใช้เวลาและพลังงานอย่างมากในการแก้ปัญหา และเป็นหลักการที่สำคัญที่สุดของหลักการทั้งสามข้อ
ความสามารถในการประมวลผลด้วยเครื่องเดียวของธุรกิจที่ใช้ IO มากเพิ่มขึ้น 5-10 เท่า นี่คือข้อมูลจริงที่ได้รับในสภาพแวดล้อมการใช้งานจริง ตัวอย่างเช่น บริการการรวมกลุ่มในชุมชน Camera360 ต้องใช้เซิร์ฟเวอร์ 40 เครื่องเพื่อรองรับการรับส่งข้อมูลในช่วงที่มีการรับส่งข้อมูลสูงสุด หลังจากสร้างใหม่ด้วย php-msf จำเป็นต้องใช้เซิร์ฟเวอร์เพียง 4 เครื่องที่มีการกำหนดค่าเดียวกันเท่านั้นจึงจะสามารถรองรับการรับส่งข้อมูลทั้งหมดได้
เนื่องจากรูปแบบกระบวนการที่ซับซ้อนของ Swoole ซึ่งแบ่งออกเป็นการบล็อกแบบซิงโครนัสและการไม่บล็อกแบบอะซิงโครนัส เมื่อรันตรรกะโค้ดเดียวกัน วิธีการเรียกและพารามิเตอร์การส่งผ่านอาจไม่สอดคล้องกัน ซึ่งจะเพิ่มต้นทุนการเรียนรู้โดยตรง เพื่อป้องกันค่าต่ำ เราทำงานไปมากแล้วและความแตกต่างเพียงอย่างเดียวระหว่างการใช้งานและกรอบงาน MVC แบบดั้งเดิมคือการเพิ่มคำหลัก "yield" เราอ้างถึงแนวปฏิบัติโค้ดบางประการของกรอบงาน Yii2 และเราคาดว่าจะเปลี่ยนจากการพัฒนา Yii2 ได้อย่างราบรื่น
หลักการสามประการข้างต้นเป็นพื้นฐานสำหรับการลงคะแนนเสียงหรือการรวมรหัสเมื่อเราใช้คุณสมบัติและฟังก์ชันใหม่ ๆ PR ใด ๆ ที่ส่งผลกระทบต่อหลักการเหล่านี้จะถูกปฏิเสธเช่นกัน
ปัจจุบันมีโครงการโอเพ่นซอร์ส PHP หลายโครงการในชุมชนที่รองรับ Coroutines ส่วนใหญ่ใช้ Generator+Yield เพื่อนำไปใช้งาน อย่างไรก็ตาม ความแตกต่างเล็กน้อยในการนำไปใช้งานจะนำไปสู่ประสิทธิภาพที่แตกต่างกันมาก เราควรตระหนักว่า Coroutines สามารถเรียกใช้ตรรกะแบบอะซิงโครนัสได้ ในวิธีการเขียนโค้ดแบบซิงโครนัส ดังนั้น coroutine ประสิทธิภาพของตัวกำหนดตารางเวลาจะต้องสูงเพียงพอ ประสิทธิภาพการกำหนดเวลา coroutine ของ php-msf คือ 80% ของวิธีการโทรกลับแบบอะซิงโครนัสดั้งเดิม กล่าวคือ API บางตัวที่ใช้วิธีการเขียนการเรียกกลับแบบอะซิงโครนัสดั้งเดิมมี QPS อยู่ที่ 10,000 ตัวกำหนดเวลา 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 สำหรับการสนับสนุนที่แข็งแกร่งของเขา
ใบอนุญาตสาธารณะทั่วไปของ GNU เวอร์ชัน 2 ดู https://www.gnu.org/licenses/gpl-2.0.html