imi 介绍

imi 是一款反对长连贯微服务分布式的 PHP 开发框架,它能够运行在 PHP-FPM、Swoole、Workerman、RoadRunner 等多种容器环境下。

imi 领有丰盛的性能组件,v2.1 版本内置了 2 个分布式长连贯服务的解决方案。

imi 框架当初曾经稳固运行在:文旅电商平台、物联网充电云平台、停车云平台、领取微服务、短信微服务、钱包微服务、卡牌游戏服务端、数据迁徙服务(虎扑)等我的项目中。

imi 第一个版本公布于 2018 年 6 月 21 日

我的项目地址

  • Github:https://github.com/imiphp/imi
  • Gitee:https://gitee.com/yurunsoft/IMI
  • 官网:https://www.imiphp.com/
  • 文档:https://doc.imiphp.com/v2.1/

取得过的荣誉

  • InfoQ 举荐:https://mp.weixin.qq.com/s/oB...
  • 码云 GVP 我的项目:https://gitee.com/yurunsoft/IMI

作者介绍

宇润(张润宇),Swoole 开发组成员、php-src 内核贡献者、TDengine 贡献者、2021 中国开源码力榜前百名


进度阐明(20220709)

宇润在 imi 周围年直播流动中,向大家介绍了下一步的开发计划。

其中,明确指出了 imi 开发组要大力发展微服务生态,为 PHP 微服务添砖加瓦。

第一步,是为 imi 接入配置核心。

目前曾经实现了 imi-config-center 配置核心组件的抽象化。

以及基于 Nacos 开发了一个 imi-nacos 用于实现配置核心组件。

都已编写并通过了自动化集成测试,有测试用例是 imi 开发组对 imi 相干开发的根本要求

正在开发中,随时可能批改,请勿用于生产环境!(但也欢送大家尝鲜和提倡议)


在开发 imi-nacos 的时候,因为现有的 PHP Nacos 组件都有各种各样的问题,所以我本人开发了一个: nacos-php

开发 nacos-php 的过程中发现了 Nacos 文档里的一些问题(其实可能是设计和标准问题),棘手帮他们欠缺了文档:https://github.com/nacos-grou...

配置核心的益处

咱们通常会把一些配置放到专门的配置文件里,个别会随着代码散发和部署。

在须要批改配置的时候,须要从新走发版流程,显得十分轻便和不不便。

这时候,配置核心的作用就体现了。

咱们从配置核心拿配置,而不是写死在我的项目里,能够比拟灵便地实现不中断服务的配置公布。

imi 配置核心组件设计

监听模式

工作过程模式

每个过程本人监听,实用于 Swoole 环境。

过程模式

由一个专门的过程监听,并告诉到其它过程。实用于 Swoole、Workerman 环境。

对配置核心压力更小。


php-fpm 模式比拟非凡,是走的文件缓存逻辑。超过肯定工夫才去申请配置核心,获取数据,实时性有肯定影响。

监听形式

客户端轮询

客户端定时申请配置核心,对配置核心服务端压力较大,然而最为通用。

服务端推送(长轮询)

如果配置核心反对服务端推送(长轮询),倡议用这个形式,对配置核心服务端压力较小。

imi-nacos 的应用

装置

composer require imiphp/imi-nacos

应用阐明

配置

@app.beans

[    'ConfigCenter' => [        // 'mode'    => \Imi\ConfigCenter\Enum\Mode::WORKER, // 工作过程模式        'mode'    => \Imi\ConfigCenter\Enum\Mode::PROCESS, // 过程模式        'configs' => [            'nacos' => [                'driver'  => \Imi\Nacos\Config\NacosConfigDriver::class,                // 客户端连贯配置                'client'  => [                    'host'                => '127.0.0.1', // 主机名                    'port'                => 8848, // 端口号                    'prefix'              => '/', // 前缀                    'username'            => 'nacos', // 用户名                    'password'            => 'nacos', // 明码                    'timeout'             => 60000, // 网络申请超时工夫,单位:毫秒                    'ssl'                 => false, // 是否应用 ssl(https) 申请                    'authorizationBearer' => false, // 是否应用申请头 Authorization: Bearer {accessToken} 形式传递 Token,旧版本 Nacos 须要设为 true                ],                // 监听器配置                'listener' => [                    'timeout'         => 30000, // 配置监听器长轮询超时工夫,单位:毫秒                    'failedWaitTime'  => 3000, // 失败后期待重试工夫,单位:毫秒                    'savePath'        => Imi::getRuntimePath('config-cache'), // 配置保留门路,默认为空不保留到文件。php-fpm 模式请肯定要设置!                    'fileCacheTime'   => 30, // 文件缓存工夫,默认为0时不受缓存影响,此配置只影响 pull 操作。php-fpm 模式请肯定要设置为大于0的值!                    'pollingInterval' => 10000, // 客户端轮询间隔时间,单位:毫秒                ],                // 配置项                'configs' => [                    'nacos' => [                        'key'   => 'imi-nacos-key1',                        'group' => 'imi',                    ],                ],            ],        ],    ],]
获取配置
\Imi\Config::get('nacos'); // 对应 imi-nacos-key1
写入配置
/** @var \Imi\ConfigCenter\ConfigCenter $configCenter */$configCenter = App::getBean('ConfigCenter');$name = 'imi-nacos-key1';$group = 'imi';$type = 'json';$value = json_encode(['imi' => 'niubi']);$configCenter->getDriver('nacos')->push($name, $value, [    'group' => $group,    'type'  => $type,]);

近期开发计划

  • 持续保护迭代 imi 外围性能万年不变
  • 开发更多 imi 配置核心的具体实现(Apollo、etcd、Zookeeper、Consul)

如果你对开源和 imi 我的项目感兴趣,无妨一起来开发。

只需开发一个受认可的 imi 组件或基于 imi 的开源我的项目,即可成为 imi 开发组成员之一。