Rust的功能标志经理-MongoDB Atlas Hackathon 2022 on Dev
#rust #mongodb #atlas #atlashackathon22

目录

介绍

另一个黑客马拉松开始了,我不能错过这个机会来贡献,联系并查看社区正在建立的东西!
我决定借此机会通过构建功能标志经理应用程序来学习Rust和MongoDB。

什么是功能标志?

应用程序越生长,部署新版本的代码和额外功能就越困难。这意味着要拥有一个允许远程启用/禁用功能的过程,而无需重新部署代码,这一点非常重要。功能标志(也称为功能切换)是一种解决方案,它使我们能够在不影响代码的情况下在运行时远程控制功能。最重要的是,这样的解决方案还允许控制用户可以启用功能的用户,推出类型等等。

此过程可以实现非常强大的用例,例如A/B测试,金丝雀部署,基于中继的开发和功能切换为断路器。

类别提交:

在JS框外思考

应用链接

Demo

它是如何工作的?

此解决方案允许我们管理功能标志和环境。
它的构建是,每个标志都有一组规则,可以通过呼叫者的上下文来验证。

客户的用法

假设您在环境中具有功能标志管理器设置,则您的应用程序可以将请求发送给FF Manager,其中具有JSON对象,该对象具有系统中定义的预期值(创建每个功能标志时,您定义了这些值) 。

样本用例:

让我们假设系统中定义了以下功能标志:

{
  "name": "sample_flag",
  "label": "Sample Flag",
  "enabled": true,
  "rules": {
    "parameter": "tenant",
    "operator": { "Is": "tenant_1" }
  }
}

您的应用程序可以使用Endpoint POST /flags
将请求发送给功能标志管理器

// Request
// POST /flags
body = {
  "tenant": "tenant_1"
}

// Response
{
  "sample_flag": true
}

客户还可以使用端点POST /flags/:environment_name
依靠特定的环境配置

// Request
// POST /flags/<ENVIRONMENT_NAME>
body = {
  "tenant": "tenant_1"
}

// Response
{
  "sample_flag": true
}

管理用法

管理仪表板允许我们创建,编辑和删除和模拟标志使用。
它还使我们能够在环境上执行上述操作。

要创建功能标志,请导航到左上方的Feature Flags选项卡,然后单击页面右下角的+按钮:
Add feature flag

Add Feature Flag page上时,请您提示您以下屏幕添加标志:
Add feature flag page

您可以添加任意数量的规则,其中每个规则都有parameteroperatorvalues

  • 参数:参数是客户上下文可以期望的关键。
  • 操作员:操作员定义了如何在客户端上下文中匹配参数。
  • 值:值定义应匹配的参数。 这是一个快速示例:
// Rule definition
{
  parameter: "tenant",
  operator: "Is",
  value: "tenant_1"
}

此规则定义期望客户端上下文包含以下内容:

// client's context
{ "tenant": "tenant_1" }

添加功能标志后,您可以通过转到SIMULATION选项卡,编写JSON有效负载并单击发送:
来模拟其用法 Simulate feature flags

环境管理

要创建环境,请转到“环境”选项卡,然后单击页面右下角的 +按钮:
Add environment

键入环境名称,然后单击“保存”。

创建环境后,您可以通过单击列表中的环境名称并打开编辑屏幕来输入并自定义标志的用法。
Customize environment

单击override flag
可以覆盖标志 Override flag

默认情况下,如果没有进行自定义,则系统中定义的所有标志将根据其规则返回。

要模拟此环境设置,我们可以访问SIMULATION选项卡,并以相同的方式发送JSON有效载荷,以对功能标志模拟:

Simulate environment

链接到源代码

Source code

允许许可证

什么

背景

今天有许多功能标志管理解决方案,但是,通过不得不处理一段时间,我注意到它们针对他们解决的问题的价格过高。

因此,我决定与黑客马拉松一起借此机会建立一个可以根据您的需求自定义的开源功能标志管理解决方案。

我如何建造它

这是一个在真实项目上使用Rust的绝佳机会,因此我决定使用堆栈:Rust,React和Mongodb。

Rust是我的首选,因为它的速度和安全性,并且为软件开发带来了新的范式。
即使它主要用于系统编程,Rust仍为使用Rocket和Actix Web等库的Web开发提供了惊人的支持。

Mongodb地图集

MongoDB Atlas提供了令人惊叹的工具来管理收藏品,我在整个开发过程中都使用了这些工具。
该界面使得很容易测试我需要创建的查询,并且它帮助我相应地学习了Mongo语法。

后端服务

使用MongoDB rust driver来管理数据库集合并使用Actix Web库创建端点。

前端

使用MUI库具有一个易于构建的界面,并使用React查询来处理API调用。

其他资源/信息

如果您想在本地运行此应用程序,请访问main repo并关注有关如何使用它的教程。
不要忘记阅读后端和前端文件夹中的重新记录,因为如果需要任何自定义,它们都具有特定的解释。

应用程序处于很早的阶段,我很想听听您对此的想法。我愿意接受建议和贡献,因此,如果您认为这是有效的用例,并且想贡献,请继续创建一些PRS:)

缺少功能和已知问题:

  • 身份验证和授权尚未到位;
  • 后端测试应依靠内存DB;
  • 创建一个LRU缓存,以使客户更快地响应;
  • 添加前端测试;
  • 添加前端验证
  • 修复前端自动完成,需要单击“添加”以工作。