imi-etcd 正式发布,由社区贡献开发——imi 框架微服务配置中心开发进度 20220820

2年前 (2022) 程序员胖胖胖虎阿
283 0 0

进度说明(20220820)

此次公布的 imi-etcd 是由社区贡献的,作者是 @青玄Chris,现已正式成为 imi 开发组成员!

imi-etcd 实现了配置中心的功能,由于 imi-config-center 抽象出了接口,所以使用上和 imi-nacos 非常类似。


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

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

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

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

实现并发布了 v2.1.0-beta 版本:

  • imi-nacos
  • imi-etcd

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

imi-etcd 的使用

安装

composer require imiphp/imi-etcd:~2.1.0

使用说明

配置

@app.beans

[
    'ConfigCenter' => [
        // 'mode'    => \Imi\ConfigCenter\Enum\Mode::WORKER, // 工作进程模式
        'mode'    => \Imi\ConfigCenter\Enum\Mode::PROCESS, // 进程模式
        'configs' => [
            'etcd' => [
                'driver'  => \Imi\Etcd\Config\EtcdConfigDriver::class,
                // 客户端连接配置
                'client'  => [
                    'scheme'              => env('IMI_ETCD_SCHEME', 'http'), // http or https
                    'host'                => env('IMI_ETCD_HOST', '127.0.0.1'), // 主机名
                    'port'                => env('IMI_ETCD_PORT', 2379), // 端口号
                    'timeout'             => env('IMI_ETCD_TIMEOUT', 6000), // 网络请求超时时间,单位:毫秒
                    'ssl'                 => env('IMI_ETCD_SSL', false), // 是否使用 ssl(https) 请求
                    'version'             => env('IMI_ETCD_VERSION', 'v3'), /**
                     * v3 v3alpha v3beta v2
                     * etcd v3.2以及之前版本只使用[CLIENT-URL]/v3alpha/*。
                     * etcd v3.3使用[CLIENT-URL]/v3beta/*保持[CLIENT-URL]/v3alpha/*使用。
                     * etcd v3.4使用[CLIENT-URL]/v3/*保持[CLIENT-URL]/v3beta/*使用。
                     * [CLIENT-URL]/v3alpha/*被抛弃使用。
                     * etcd v3.5以及最新版本只使用[CLIENT-URL]/v3/*。
                     * [CLIENT-URL]/v3beta/*被抛弃使用。
                     */
                    'pretty'              => env('IMI_ETCD_PRETTY', true),
                    'sslCert'             => '',
                    'sslKey'              => ''
                ]
            ],
        ],
    ],
]
获取配置
\Imi\Config::get('etcd'); // 对应 imi-etcd-key1
写入配置
/** @var \Imi\ConfigCenter\ConfigCenter $configCenter */
$configCenter = App::getBean('ConfigCenter');
$name = 'imi-etcd-key1';
$value = json_encode(['imi' => 'niubi']);
$options = [];
$configCenter->getDriver('etcd')->push($name, $value);
$configCenter->getDriver('etcd')->push($name, $value, $options);

配置中心的好处

我们通常会把一些配置放到专门的配置文件里,一般会随着代码分发和部署。

在需要修改配置的时候,需要重新走发版流程,显得非常笨重和不方便。

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

我们从配置中心拿配置,而不是写死在项目里,可以比较灵活地实现不中断服务的配置发布。

imi 配置中心组件设计

监听模式

工作进程模式

每个进程自己监听,适用于 Swoole 环境。

进程模式

由一个专门的进程监听,并通知到其它进程。适用于 Swoole、Workerman 环境。

对配置中心压力更小。


php-fpm 模式比较特殊,是走的文件缓存逻辑。超过一定时间才去请求配置中心,获取数据,实时性有一定影响。

监听方式

客户端轮询

客户端定时请求配置中心,对配置中心服务端压力较大,但是最为通用。

服务端推送(长轮询)

如果配置中心支持服务端推送(长轮询),建议用这个方式,对配置中心服务端压力较小。

近期开发计划

  • 继续维护迭代 imi 核心功能万年不变
  • 开发更多 imi 配置中心的具体实现(Apollo、Zookeeper、Consul)

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

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


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

开发组成员

宇润(张润宇),94年植树节生,无锡人。Swoole 开发组成员、php-src 内核贡献者、TDengine 贡献者、2021 中国开源码力榜前百名。
开源项目包括但不限于:imi、PaySDK、YurunHttp、Guzzle-Swoole、YurunOAuthLogin、ChineseUtil 等
Github:https://github.com/Yurunsoft


NHZEX,主要贡献:代码优化、bug修复、测试优化、PHP 8.1 兼容
Github:https://github.com/NHZEX


封尘,93年,狮子座,宣城人。imi 框架开发组成员,开源作者。
开源项目包括但不限于:fcup、mjs、university font icon library、fcphp、fcblog 等
主要贡献:imi 早期用户,imi 1.0、2.0 官网页面作者
Github:https://github.com/lovefc


阿诺Eno,99年出生,成都人,全栈程序员(主后端),医学生(本科护理学专业),硕士二战考生。
常用编程语言PHP、NodeJs等,imi 框架开发组成员。

一名热衷于用代码创造世界的护士小哥,独爱PHP,大学期间主导过20多个主要以PHP为后端的WEB项目的开发,具有丰富的码农经验,也擅长接国内外软件毕业设计。

主要贡献:文档编写、bug 修复

Github:https://github.com/Gumo666


青玄Chris,96年,广东人,时长n年半的PHP练习生,喜欢唱\跳\RAP\PHP , imi 框架开发组成员

喜欢参与开源用爱发电,imi 框架开发组成员 ,EasySwoole社区贡献者

主要贡献:imi-etcd 作者

Github:https://github.com/ChrisLeeAr...


相关文章

暂无评论

暂无评论...