对于 Java 开发者来说,有技术相当成熟的 Dubbo 和 Spring Cloud 微服务框架可供选择。作为一名 PHPer,我用 Google 查了一下「PHP + 微服务」,发现有用的相关内容少之又少 ,没有什么实质性的参考价值,无限惆怅。。。幸好,有大神在基于 Swoole 扩展的基础上,实现了高性能、高灵活性的 PHP 协程框架 Hyperf ,并提供了微服务架构的相关组件。
Hyperf 是基于 Swoole 4.3+ 实现的高性能、高灵活性的 PHP 协程框架,内置协程服务器及大量常用的组件,性能较传统基于 PHP-FPM 的框架有质的提升,提供超高性能的同时,也保持着极其灵活的可扩展性,标准组件均基于 PSR 标准 实现,基于强大的依赖注入设计,保证了绝大部分组件或类都是 可替换 与 可复用 的。
于是,我在学习了微服务架构相关的基础知识之后,使用 Hyperf 框架构建了一个基于 PHP 的微服务集群,这是项目源码地址:https://github.com/Jochen-z/p...。该项目使用 Dokcer 搭建,docker-compose.yml 代码如下:
- version: "3"
-
- services:
- consul-server-leader:
- image: consul:latest
- container_name: consul-server-leader
- command: "agent -server -bootstrap -ui -node=consul-server-leader -client=0.0.0.0"
- environment:
- - CONSUL_BIND_INTERFACE=eth0
- ports:
- - "8500:8500"
- networks:
- - microservice
-
- microservice-1:
- build:
- context: .
- container_name: "microservice-1"
- command: "php bin/hyperf.php start"
- depends_on:
- - "consul-server-leader"
- volumes:
- - ./www/microservice-1:/var/www
- networks:
- - microservice
- tty: true
-
- microservice-2:
- build:
- context: .
- container_name: "microservice-2"
- command: "php bin/hyperf.php start"
- depends_on:
- - "consul-server-leader"
- volumes:
- - ./www/microservice-2:/var/www
- networks:
- - microservice
- tty: true
-
- app:
- build:
- context: .
- container_name: "app"
- command: "php bin/hyperf.php start"
- depends_on:
- - "microservice-1"
- volumes:
- - ./www/web:/var/www
- ports:
- - "9501:9501"
- networks:
- - microservice
- tty: true
-
- networks:
- microservice:
- driver: bridge
-
- volumes:
- microservice:
- driver: local
这里启动了一个 Consul 容器 consul-server-leader 作为服务注册和服务发现的组件,容器 microservice-1 和 microservice-2 分别提供了加法运算和除法运算的服务。容器 app 作为服务调用方,配置了 consul-server-leader 容器的 URL,通过访问 consul-server-leader 获取 microservice-1 和 microservice-2 服务的 IP 地址和端口,然后 app通过 RPC 协议调用加法运算和除法运算的服务获取结果并返回给用户。
(编辑:ASP站长网)
|