mt-olympus / metis
PHP 中的负载均衡实现
1.1.1
2020-03-06 12:13 UTC
Requires
- php: ^7.1
- laminas/laminas-cache: ^2.8 || ^2.9
- laminas/laminas-servicemanager: ^3.1
- laminas/laminas-stdlib: ^3.0
- mt-olympus/hermes: ^1.5
This package is auto-updated.
Last update: 2024-09-06 22:26:31 UTC
README
简介
这是一个使用 PHP 编写的动态路由和负载均衡库。
其目标是“选择”在分布式系统(如微服务架构)中连接到的端点。
您可以使用此库与 Athena 服务器一起使用,该服务器可以返回多个服务器,并使用此模块根据某些规则和关于服务器的统计信息来选择其中一个。
您可以将 Metis 实例注入到 Hermes 中,它将自动选择要连接的服务器。有关 Hermes 文档的更多信息。
组件
- 服务列表
- 规则
服务列表
- 静态:来自配置文件
- 获取:来自远程服务器
获取方法可通过以下库之一获得
- metis-athena:从 Athena(服务发现)服务获取列表
- metis-demeter:从 Demeter(分布式配置)服务获取列表
静态服务器列表
列表是一个格式良好的数组
return [ 'metis' => [ 'services' => [ 'service1' => [ // a unique service identification [ 'host' => 'server1', 'uri' => 'http://192.168.1.2/v1/service1', ], [ 'host' => 'server2', 'uri' => 'https://server2/v1/service1', ], [ 'host' => 'server3', 'uri' => 'https://server3.mycompany.com:7001/v1/service1', ], ], 'service2' => [ // a unique service identification [ 'host' => 'server1', 'uri' => 'http://192.168.1.2:7002/v1/service2', ], ], ], ], ];
策略
无论选择哪种策略,如果连接了一个 Cerberus(熔断器),则不可用的服务将被过滤。
- RoundRobin:按特定顺序循环服务
- Random:每次从列表中随机选择一个服务
- ResponseTime:每个服务都有其响应时间进行测量,这个时间会被加权。响应时间更快的服务有更大的概率被选择。
安装
composer require mt-olympus/metis
Zend Expressive
只需将 config/metis.global.php.dist
复制到您的 expressive 项目中的 config/autoload/metis.global.php
Zend Framework
将模块包含在您的 application.config.php 中