2024年PHP微服务:新手入门指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

PHP微服务:从何入手并保持清醒

\n\n

您是否曾看着一个膨胀到20万行代码的PHP单体应用,内心感到无比压抑?一次提交——整个系统就崩溃。购物车模块的一个错误——整个网站就瘫痪。熟悉吗?欢迎加入单体应用幸存者俱乐部。

\n\n

但好消息是:PHP微服务并非高深莫测的火箭科学。它只是一组小型、独立的应用程序,通过HTTP或消息队列相互通信。是的,PHP非常适合这个任务。不相信?Laravel、Symfony甚至“纯”PHP都能很好地扮演微服务的角色。

\n\n

在本文中,我将向您展示PHP微服务架构,并附上真实代码示例。您将了解从何入手、选择哪些工具以及如何避免踩坑。开始吧!

\n\n

用通俗语言解释PHP微服务

\n\n

想象一家披萨店。单体应用就像一位厨师做所有事情:和面、切香肠、烘烤、包装、接单、洗碗。如果厨师生病了——披萨店就关门。微服务则像您有专门的和面师傅、专门的馅料师傅、专门的烘烤师傅和专门的配送员。每个人独立工作,如果“和面师傅”生病了,其他人仍能继续工作。

\n\n

在PHP世界中,这看起来像这样:

\n\n
    \n
  • 用户服务 — 注册、登录、个人资料
  • \n
  • 订单服务 — 创建、支付、状态管理
  • \n
  • 通知服务 — 邮件、短信、推送通知
  • \n
  • API网关 — 客户端的统一入口
  • \n
\n\n

每个服务都是一个独立的PHP应用程序,拥有自己的数据库、自己的代码仓库和自己的业务逻辑。所有这些协同工作,构成了PHP微服务架构。

\n\n

何时应该转向微服务?

\n\n

说实话:微服务并非万能灵药。如果您只有3000个用户和10个页面——请忘记它。您需要的是单体应用。但如果出现以下情况:

\n\n
    \n
  • 开发团队扩大到5人以上
  • \n
  • 每次部署小改动都提心吊胆
  • \n
  • 单个数据库成为瓶颈
  • \n
  • 应用的不同部分需要不同技术(例如,搜索用Elasticsearch,订单用PostgreSQL)
  • \n
\n\n

……那么PHP微服务就是您的选择。

\n\n

从何入手:基于PHP的基础微服务

\n\n

我们从简单的开始。创建一个返回用户列表的微服务。这将是一个PHP REST API微服务。

\n\n

第一步:项目结构

\n\n
user-service/\n├── public/\n│   └── index.php\n├── src/\n│   ├── Controllers/\n│   │   └── UserController.php\n│   ├── Models/\n│   │   └── User.php\n│   └── Services/\n│       └── UserService.php\n├── config/\n│   └── database.php\n├── composer.json\n└── .env
\n\n

第二步:入口文件 (index.php)

\n\n
<?php\n// public/index.php\nrequire_once __DIR__ . '/../vendor/autoload.php';\n\nuse Symfony\\Component\\Dotenv\\Dotenv;\nuse App\\Controllers\\UserController;\n\n$dotenv = new Dotenv();\n$dotenv->load(__DIR__ . '/../.env');\n\n$uri = $_SERVER['REQUEST_URI'];\n$method = $_SERVER['REQUEST_METHOD'];\n\n// 简单路由器\nif ($uri === '/api/users' && $method === 'GET') {\n    $controller = new UserController();\n    echo json_encode($controller->index());\n} elseif (preg_match('/\\/api\\/users\\/(\\d+)/', $uri, $matches) && $method === 'GET') {\n    $controller = new UserController();\n    echo json_encode($controller->show($matches[1]));\n} else {\n    http_response_code(404);\n    echo json_encode(['error' => 'Not found']);\n}
\n\n

第三步:控制器

\n\n
<?php\n// src/Controllers/UserController.php\nnamespace App\\Controllers;\n\nuse App\\Services\\UserService;\n\nclass UserController\n{\n                

博客

书籍推荐