mt-olympus/metis

PHP 中的负载均衡实现

1.1.1 2020-03-06 12:13 UTC

This package is auto-updated.

Last update: 2024-09-06 22:26:31 UTC


README

简介

这是一个使用 PHP 编写的动态路由和负载均衡库。

其目标是“选择”在分布式系统(如微服务架构)中连接到的端点。

您可以使用此库与 Athena 服务器一起使用,该服务器可以返回多个服务器,并使用此模块根据某些规则和关于服务器的统计信息来选择其中一个。

您可以将 Metis 实例注入到 Hermes 中,它将自动选择要连接的服务器。有关 Hermes 文档的更多信息。

组件

  • 服务列表
  • 规则

服务列表

  • 静态:来自配置文件
  • 获取:来自远程服务器

获取方法可通过以下库之一获得

静态服务器列表

列表是一个格式良好的数组

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 中