projectflogo是一个用于event-driven应用程序的开源生态系统
生态系统|核心|流| Flogo规则| Go开发者|何时使用Flogo |贡献|许可证
Flogo项目是一个ultra-light,Go-based开源生态系统,用于构建event-driven应用程序。Event-driven,你说?是的,触发器和操作的概念被用来处理传入的事件。操作是一个公共接口,它公开了关键功能,如应用程序集成、流处理等。
- App=触发器+动作[和活动]
- 触发器从外部源接收数据。由一个可配置的线程模型管理,有一个公共接口,任何人都可以构建Flogo触发器。
- 处理程序将事件分派到操作
- 在事件处理的过程中,有一个合适的事件处理方式
Flogo生态系统中的所有功能都有一些共同点,它们都处理事件(以适合特定目的的方式),并且都实现了由Flogo Core公开的操作接口。
一些关键亮点包括:
🎈 Ultra-light20x-50x比Java或Node.js轻⚡Event-driven基于触发器和操作的强大的event-driven编程模型⚙️ 公共核心一个单一的公共核心支持跨所有事件结构的重用和灵活性✏️ 基于Golang完全用Golang编写,以提高效率💪 部署灵活性部署为ultra-lightweight无服务器功能、容器或物联网边缘设备上的静态二进制文件🧠 用于TensorFlow SavedModel推断的本机机器学习专门构建的活动😍 为您的开发和黑客乐趣100%开源
- 集成流应用程序集成流程引擎,具有条件分支和可视化开发环境
- 流处理一个简单的pipeline-based流处理操作,具有跨多个触发器的事件连接功能和随时间窗口聚合的功能
- 上下文决策Real-time上下文决策的声明性规则
- Microgateway微网关模式,用于条件、content-based路由、JWT验证、速率限制、电路中断和其他常见模式
概念很简单,一个事件就是,一个事件,它的处理方式是不同的。Flogo Core通过启用一组通用功能减轻了负担,例如:
- threading
- logging
- 数据类型强制
- data mapping
- 跟踪和监控挂钩
同时还通过活动和触发器公开一组共同的贡献。例如,可以利用所有可用的触发器将事件分派到任何操作实现,即应用程序集成的流、流处理的流、上下文规则处理的规则等。
Flogo CoreFlogo Core是一个event-driven应用程序框架,用于开发云和物联网边缘的应用程序。它也可以被认为是开源和商业解决方案使用的轻量级应用程序内核。
Flogo Core提供以下主要优点:
⛓ 操作链允许在一个低于10MB的二进制文件中进行一个或多个功能之间的通信!🏗 公共贡献模型构建所有功能都可以利用的活动和触发器🔨 可扩展性通过使用公共接口构建自己的操作来轻松扩展可用的功能
Flogo Core Contribution Model
flogocore公开了三个主要贡献接口,使开发人员能够构建通用的功能和功能。这些贡献接口包括:
- 触发器接口用于生成event-consumers的公共接口,用于将事件分派给一个或多个操作。卡夫卡订户就是一个触发器的例子。
- 活动接口以可重用的方式公开公共应用程序逻辑的公共接口。把它看作一个函数,比如写数据库,发布到Kafka,等等,所有的Flogo应用都可以使用。
- 操作接口处理事件的通用接口。操作包含特定的功能逻辑,如集成、流处理、规则处理等。操作在如何开发以及开发人员如何在整个应用程序中利用操作方面具有很大的灵活性。例如,流和流公开JSON-baseddsl&goapi以获得最大的开发灵活性。
项目Flogo由以下sub-projects组成,可作为单独的回购:
- flogo-cli:用于构建Flogo应用程序和扩展的命令行工具
- flogo-core:核心Flogo库
- flogo-contrib:Flogo贡献/扩展
- project-flogo/stream:Flogo流操作
- project-flogo/rules:上下文,确定性规则操作
- project-flogo/microgateway:Flogo微网关操作
flogoflows提供了应用程序集成功能,并包括以下关键亮点。
🌈 轻松开发可视化建模器,具有step-back调试功能和优雅的DSL⚙️ Ultra-light用于条件流控制的进程引擎
Getting Started
我们已经尽可能容易地开始使用Flogo Flows。当前的工具集设计用于:
- 无服务器功能开发人员
- Cloud-native微服务开发者
- 物联网解决方案开发商
Zero-code Developers
如果你有背景,或者你更喜欢使用zero-coding环境开发你的应用,那么请继续阅读,因为我们为你准备了一些特别的东西。
可通过Docker Hub或弗洛戈.io. Docker映像包含Flows Web UI以及从Web浏览器开始开发、测试和构建可部署工件所需的所有组件。
报告此项目中问题跟踪程序的任何问题。
边缘设备有可能以很快的间隔产生数百万甚至数十亿个事件,通常情况下,事件本身是没有意义的,因此需要针对大量事件提供基本的流操作。
作为项目Flogo生态系统的一部分,本地流媒体活动可实现以下主要目标:
- 使应用程序能够以简单的管道方式实现基本流结构
- 为流操作提供non-persistent状态,流将一直保存在内存中,直到管道结束
- 充当pre-process管道,用于原始数据执行基本的数学和逻辑操作。适合喂养ML模型
一些关键亮点包括:
😀 简单的管道结构使处理数据流成为一种干净、简单的方法⏳ 使用时间或事件滚动和滑动窗口跨流聚合🙌 连接来自多个事件源的流🌪 利用流过滤功能滤除噪声
Getting Started
我们已经尽可能容易地构建强大的流媒体管道。开发您的管道使用:
- 一个简单、干净的JSON-basedDSL
- Golang API
请参阅下面的聚合管道示例(为简洁起见,省略了资源的触发器和元数据)。另外,不要忘记查看project-flogo/streamrepo中的示例。
"stages": [
{
"ref": "github.com/project-flogo/stream/activity/aggregate",
"settings": {
"function": "sum",
"windowType": "timeTumbling",
"windowSize": "5000"
},
"input": {
"value": "=$.input"
}
},
{
"ref": "github.com/project-flogo/contrib/activity/log",
"input": {
"message": "=$.result"
}
}
]
Flogo Rules
处理real-time中的事件以确定下一个最佳操作是事件驱动应用程序的一个重要功能。由于大量的事件是由不同的来源产生的,在给定的上下文中理解这些信息是非常有价值的。
Flogo规则简化了real-time上下文决策的复杂性。
Flogo规则支持
- 用于定义条件逻辑和触发结果规则的声明性规则
- 跨多个事件源的联接/关联
- 能够定义规则优先级
- 计时器事件;可配置的TTL(生存时间)-1-无过期,0-事件到期设置为运行到完成周期结束。
- 用于推断的前向链接
go build
开始使用CLI非常简单(有关详细说明和依赖关系,请参阅Flogo CLI repo):
- 安装CLI
go get -u github.com/project-flogo/cli/...
- 创建和构建应用程序
- 用于创建和构建应用程序的核心CLI
- flogogen一个脚手架工具,开始构建你的Flogo贡献(活动、触发器和动作)
如果您对构建自己的贡献感兴趣,请参阅Flogo文档或加入我们的project-flogo/LobbyGitter频道。
Golang API你是那种宁愿编写代码,又愿意利用Flogo生态系统功能的人吗?完全有道理,我们只是❤️ 也要编码!我们已经公开了许多goapi来利用各种操作类型、活动和触发器。开始是相当容易的,只要按照下面的步骤。
- 去拿最新的flogo-lib
go get -u github.com/project-flogo/core/...
- 或者,如果您正在使用任何Flogo贡献,也不要忘了获得回购
go get -u github.com/project-flogo/contrib/...
- 打开你最喜欢的IDE或txt编辑器并开始编码!
package main
import (
"context"
"fmt"
"github.com/project-flogo/contrib/activity/log"
"github.com/project-flogo/contrib/trigger/rest"
"github.com/project-flogo/core/activity"
"github.com/project-flogo/core/api"
"github.com/project-flogo/core/data/coerce"
"github.com/project-flogo/core/engine"
)
func main() {
app := myApp()
e, err := api.NewEngine(app)
if err != nil {
fmt.Println("Error:", err)
return
}
engine.RunEngine(e)
}
func myApp() *api.App {
app := api.NewApp()
trg := app.NewTrigger(&rest.Trigger{}, &rest.Settings{Port: 8080})
h, _ := trg.NewHandler(&rest.HandlerSettings{Method: "GET", Path: "/blah/:num"})
h.NewAction(RunActivities)
//store in map to avoid activity instance recreation
logAct, _ := api.NewActivity(&log.Activity{})
activities = map[string]activity.Activity{"log": logAct}
return app
}
var activities map[string]activity.Activity
func RunActivities(ctx context.Context, inputs map[string]interface{}) (map[string]interface{}, error) {
trgOut := &rest.Output{}
trgOut.FromMap(inputs)
msg, _ := coerce.ToString(trgOut.PathParams)
_, err := api.EvalActivity(activities["log"], &log.Input{Message: msg})
if err != nil {
return nil, err
}
response := make(map[string]interface{})
response["id"] = "123"
response["amount"] = "1"
response["balance"] = "500"
response["currency"] = "USD"
reply := &rest.Reply{Code: 200, Data: response}
return reply.ToMap(), nil
}
- 在构建应用程序之前,让我们为触发器生成元数据
go generate
- 构建应用程序
go build
何时使用Flogo
如果你是一个开发人员,并且厌倦了编写产品应用程序所带来的所有混乱的东西,那么你可以利用Flogo。例如到event-driven消息传递平台、数据存储、SaaS应用程序等的连接&希望部署到广泛的目标,比如
- serverless compute
- 物联网边缘设备
- containers
更广泛的Flogo生态系统暴露了构建event-driven应用程序的固执己见的观点。如果您希望通过以下任何一种方式处理事件,那么请继续阅读,因为项目Flogo生态系统是为您准备的!
- 支持flow-control的长时间运行的流程,面向应用程序集成
- 通过管道消费和操纵大量事件流,充当pre-processor的time-series数据,为机器学习模型等服务,或者通过数据聚合得出简单的结论
- real-time决策的上下文、声明性规则
In short...
Flogo is... | Flogo is not... |
---|---|
一个固执己见的event-driven能力的生态系统 | front-endweb应用程序或分析框架 |
提高开发人员生产力的Go-lib | 物联网平台 |
想为弗洛戈计划捐款吗?我们已经让它变得简单了,您只需对您打算贡献的存储库进行派生,进行更改并创建一个请求请求!创建请求后,系统将提示您在线签署CLA(Contributor License Agreement)。
不知道从哪里开始?没问题,这里有一些建议:
kind/help-wantedgood first issue
如果您有任何问题,请随时发布问题并将其标记为问题、发送电子邮件flogo-oss@tibco.com或与团队和社区聊天:
- project-flogo/LobbyGitter频道应该用于一般性讨论,从这里开始了解所有东西Flogo!
- project-flogo/developersGitter频道应该用于面向开发人员/参与者的对话。
有关其他详细信息,请参阅供款指南。
Licenseprojectflogo是在BSD-style许可下获得许可的。有关许可证文本,请参阅许可证。
Usage Guidelines
我们很高兴您使用Project Flogo为您的项目提供动力。在您的项目中引用Project Flogo时,请遵守使用指南,不要忘记通过自豪地展示以下徽章或此项目的品牌文件夹中的Flynn徽标,让其他人知道您正在使用Project Flogo。