mainflux 物联网平台要不要试用?
那里来的好感
这个代码框架也是订阅号推荐的,好感+1
看到他使用了golang,好感+1
postgresql数据库,好感+1
参与了edgex的建设,好感+1
有一个边缘网关的实物图,好感+1
比edgeX文档差,好感-1
golang 还在用vendor 好感 -1 (国内已经不需要用这个来避免引用被墙)
mqtt的实现选择js(文档这么写的,感觉会更新成golang版本)-1
我认为他们的推荐, 是不太合格的。 没验证。
学习与商用之间沟有点宽
咱们假定一个场景, 一个工厂, 网络断了, 整个工厂的管理还需要正常进行。
需要持久的数据存储和管理,引入postgresql。
需要有稳定的设备管理。
从而能够运行一个大型的管理系统, docker上面可以很容易的建立一套golang的管理系统。
和edgeX一样, 都有一个基于事件的总线来降低研发成本。
看一下下面的架构图
从刚才关注的重点来说, 图上都有了。 毕竟是个老牌的系统, 没有设计缺陷。 如果谈一下高可用, 能不能处理板卡坏掉的问题。 应用层设计需要的思想还不少。 比如要把pg的数据同步到云端或者其他板卡上。 或者业务应用设计本地数据库没有就去远端拉取数据。 都不算难, 互联网行业有很成熟的解决方案。
当然edgeX也是没有解决的,但是他默认使用的是redis缓存。 默认就不是持久化的。 可能不会给人带来误解。
学习价值还是不错的
协议支持的比较全,但是mqtt选了一个js版本的实现???最新的是否已经切换成golang的了??
The MQTT Microservice in Mainflux is special, as it is currently the only microservice written in NodeJS. It is not compiled, but node modules need to be downloaded in order to start the service:
如果这些代码不值得移植的话,那商用价值就要打折了。 但是学习价值还是不错的。 前提是能很容易的运行起来,这件事似乎还没那么简单。
开始使用文档
Getting Started https://mainfluxlabs.github.io/docs/getting-started/
开始文档是我对他最失望的。
重点提供了一个cli的命令行。 是无法下载的
wget -O- https://github.com/MainfluxLabs/mainflux/releases/download/0.12.1/mainflux-cli_0.12.1_linux-amd64.tar.gz | tar xvz -C $GOBIN
并且只有x86的链接, 请问你怎么在你的嵌入式网关上跑起来? 这文档是不维护了? 只收付费咨询了?
在后面有一个指导如何编译Cli的。
git clone git@github.com:MainfluxLabs/mainflux.git
下载了代码 make cli
OK, 编译成功了。
icecut@jiangyiundeMBP2 mainflux % make cli
CGO_ENABLED=0 GOOS= GOARCH=amd64 GOARM= go build -mod=vendor -tags nats -ldflags "-s -w -X 'github.com/MainfluxLabs/mainflux.BuildTime=2023-12-11_19:09:45' -X 'github.com/MainfluxLabs/mainflux.Version=0.16.5' -X 'github.com/MainfluxLabs/mainflux.Commit=6087b204b2dbc0c5072e6771710b3832d179c0f5'" -o build/mainfluxlabs-cli cmd/cli/main.go
开发向导
developer’s Guild https://mainfluxlabs.github.io/docs/dev-guide/
直接编译所有服务。 可以看到那些是golang来实现的
icecut@jiangyiundeMBP2 mainflux % make
CGO_ENABLED=0 GOOS= GOARCH=amd64 GOARM= go build -mod=vendor -tags nats -ldflags "-s -w -X 'github.com/MainfluxLabs/mainflux.BuildTime=2023-12-11_19:26:07' -X 'github.com/MainfluxLabs/mainflux.Version=0.16.5' -X 'github.com/MainfluxLabs/mainflux.Commit=6087b204b2dbc0c5072e6771710b3832d179c0f5'" -o build/mainfluxlabs-users cmd/users/main.go
CGO_ENABLED=0 GOOS= GOARCH=amd64 GOARM= go build -mod=vendor -tags nats -ldflags "-s -w -X 'github.com/MainfluxLabs/mainflux.BuildTime=2023-12-11_19:26:10' -X 'github.com/MainfluxLabs/mainflux.Version=0.16.5' -X 'github.com/MainfluxLabs/mainflux.Commit=6087b204b2dbc0c5072e6771710b3832d179c0f5'" -o build/mainfluxlabs-things cmd/things/main.go
CGO_ENABLED=0 GOOS= GOARCH=amd64 GOARM= go build -mod=vendor -tags nats -ldflags "-s -w -X 'github.com/MainfluxLabs/mainflux.BuildTime=2023-12-11_19:26:11' -X 'github.com/MainfluxLabs/mainflux.Version=0.16.5' -X 'github.com/MainfluxLabs/mainflux.Commit=6087b204b2dbc0c5072e6771710b3832d179c0f5'" -o build/mainfluxlabs-http cmd/http/main.go
CGO_ENABLED=0 GOOS= GOARCH=amd64 GOARM= go build -mod=vendor -tags nats -ldflags "-s -w -X 'github.com/MainfluxLabs/mainflux.BuildTime=2023-12-11_19:26:12' -X 'github.com/MainfluxLabs/mainflux.Version=0.16.5' -X 'github.com/MainfluxLabs/mainflux.Commit=6087b204b2dbc0c5072e6771710b3832d179c0f5'" -o build/mainfluxlabs-coap cmd/coap/main.go
CGO_ENABLED=0 GOOS= GOARCH=amd64 GOARM= go build -mod=vendor -tags nats -ldflags "-s -w -X 'github.com/MainfluxLabs/mainflux.BuildTime=2023-12-11_19:26:13' -X 'github.com/MainfluxLabs/mainflux.Version=0.16.5' -X 'github.com/MainfluxLabs/mainflux.Commit=6087b204b2dbc0c5072e6771710b3832d179c0f5'" -o build/mainfluxlabs-ws cmd/ws/main.go
CGO_ENABLED=0 GOOS= GOARCH=amd64 GOARM= go build -mod=vendor -tags nats -ldflags "-s -w -X 'github.com/MainfluxLabs/mainflux.BuildTime=2023-12-11_19:26:14' -X 'github.com/MainfluxLabs/mainflux.Version=0.16.5' -X 'github.com/MainfluxLabs/mainflux.Commit=6087b204b2dbc0c5072e6771710b3832d179c0f5'" -o build/mainfluxlabs-lora cmd/lora/main.go
CGO_ENABLED=0 GOOS= GOARCH=amd64 GOARM= go build -mod=vendor -tags nats -ldflags "-s -w -X 'github.com/MainfluxLabs/mainflux.BuildTime=2023-12-11_19:26:14' -X 'github.com/MainfluxLabs/mainflux.Version=0.16.5' -X 'github.com/MainfluxLabs/mainflux.Commit=6087b204b2dbc0c5072e6771710b3832d179c0f5'" -o build/mainfluxlabs-influxdb-writer cmd/influxdb-writer/main.go
CGO_ENABLED=0 GOOS= GOARCH=amd64 GOARM= go build -mod=vendor -tags nats -ldflags "-s -w -X 'github.com/MainfluxLabs/mainflux.BuildTime=2023-12-11_19:26:19' -X 'github.com/MainfluxLabs/mainflux.Version=0.16.5' -X 'github.com/MainfluxLabs/mainflux.Commit=6087b204b2dbc0c5072e6771710b3832d179c0f5'" -o build/mainfluxlabs-influxdb-reader cmd/influxdb-reader/main.go
CGO_ENABLED=0 GOOS= GOARCH=amd64 GOARM= go build -mod=vendor -tags nats -ldflags "-s -w -X 'github.com/MainfluxLabs/mainflux.BuildTime=2023-12-11_19:26:19' -X 'github.com/MainfluxLabs/mainflux.Version=0.16.5' -X 'github.com/MainfluxLabs/mainflux.Commit=6087b204b2dbc0c5072e6771710b3832d179c0f5'" -o build/mainfluxlabs-mongodb-writer cmd/mongodb-writer/main.go
CGO_ENABLED=0 GOOS= GOARCH=amd64 GOARM= go build -mod=vendor -tags nats -ldflags "-s -w -X 'github.com/MainfluxLabs/mainflux.BuildTime=2023-12-11_19:26:21' -X 'github.com/MainfluxLabs/mainflux.Version=0.16.5' -X 'github.com/MainfluxLabs/mainflux.Commit=6087b204b2dbc0c5072e6771710b3832d179c0f5'" -o build/mainfluxlabs-mongodb-reader cmd/mongodb-reader/main.go
CGO_ENABLED=0 GOOS= GOARCH=amd64 GOARM= go build -mod=vendor -tags nats -ldflags "-s -w -X 'github.com/MainfluxLabs/mainflux.BuildTime=2023-12-11_19:26:22' -X 'github.com/MainfluxLabs/mainflux.Version=0.16.5' -X 'github.com/MainfluxLabs/mainflux.Commit=6087b204b2dbc0c5072e6771710b3832d179c0f5'" -o build/mainfluxlabs-postgres-writer cmd/postgres-writer/main.go
CGO_ENABLED=0 GOOS= GOARCH=amd64 GOARM= go build -mod=vendor -tags nats -ldflags "-s -w -X 'github.com/MainfluxLabs/mainflux.BuildTime=2023-12-11_19:26:22' -X 'github.com/MainfluxLabs/mainflux.Version=0.16.5' -X 'github.com/MainfluxLabs/mainflux.Commit=6087b204b2dbc0c5072e6771710b3832d179c0f5'" -o build/mainfluxlabs-postgres-reader cmd/postgres-reader/main.go
CGO_ENABLED=0 GOOS= GOARCH=amd64 GOARM= go build -mod=vendor -tags nats -ldflags "-s -w -X 'github.com/MainfluxLabs/mainflux.BuildTime=2023-12-11_19:26:23' -X 'github.com/MainfluxLabs/mainflux.Version=0.16.5' -X 'github.com/MainfluxLabs/mainflux.Commit=6087b204b2dbc0c5072e6771710b3832d179c0f5'" -o build/mainfluxlabs-timescale-writer cmd/timescale-writer/main.go
CGO_ENABLED=0 GOOS= GOARCH=amd64 GOARM= go build -mod=vendor -tags nats -ldflags "-s -w -X 'github.com/MainfluxLabs/mainflux.BuildTime=2023-12-11_19:26:23' -X 'github.com/MainfluxLabs/mainflux.Version=0.16.5' -X 'github.com/MainfluxLabs/mainflux.Commit=6087b204b2dbc0c5072e6771710b3832d179c0f5'" -o build/mainfluxlabs-timescale-reader cmd/timescale-reader/main.go
CGO_ENABLED=0 GOOS= GOARCH=amd64 GOARM= go build -mod=vendor -tags nats -ldflags "-s -w -X 'github.com/MainfluxLabs/mainflux.BuildTime=2023-12-11_19:26:24' -X 'github.com/MainfluxLabs/mainflux.Version=0.16.5' -X 'github.com/MainfluxLabs/mainflux.Commit=6087b204b2dbc0c5072e6771710b3832d179c0f5'" -o build/mainfluxlabs-cli cmd/cli/main.go
CGO_ENABLED=0 GOOS= GOARCH=amd64 GOARM= go build -mod=vendor -tags nats -ldflags "-s -w -X 'github.com/MainfluxLabs/mainflux.BuildTime=2023-12-11_19:26:24' -X 'github.com/MainfluxLabs/mainflux.Version=0.16.5' -X 'github.com/MainfluxLabs/mainflux.Commit=6087b204b2dbc0c5072e6771710b3832d179c0f5'" -o build/mainfluxlabs-bootstrap cmd/bootstrap/main.go
CGO_ENABLED=0 GOOS= GOARCH=amd64 GOARM= go build -mod=vendor -tags nats -ldflags "-s -w -X 'github.com/MainfluxLabs/mainflux.BuildTime=2023-12-11_19:26:25' -X 'github.com/MainfluxLabs/mainflux.Version=0.16.5' -X 'github.com/MainfluxLabs/mainflux.Commit=6087b204b2dbc0c5072e6771710b3832d179c0f5'" -o build/mainfluxlabs-auth cmd/auth/main.go
CGO_ENABLED=0 GOOS= GOARCH=amd64 GOARM= go build -mod=vendor -tags nats -ldflags "-s -w -X 'github.com/MainfluxLabs/mainflux.BuildTime=2023-12-11_19:26:26' -X 'github.com/MainfluxLabs/mainflux.Version=0.16.5' -X 'github.com/MainfluxLabs/mainflux.Commit=6087b204b2dbc0c5072e6771710b3832d179c0f5'" -o build/mainfluxlabs-mqtt cmd/mqtt/main.go
CGO_ENABLED=0 GOOS= GOARCH=amd64 GOARM= go build -mod=vendor -tags nats -ldflags "-s -w -X 'github.com/MainfluxLabs/mainflux.BuildTime=2023-12-11_19:26:27' -X 'github.com/MainfluxLabs/mainflux.Version=0.16.5' -X 'github.com/MainfluxLabs/mainflux.Commit=6087b204b2dbc0c5072e6771710b3832d179c0f5'" -o build/mainfluxlabs-provision cmd/provision/main.go
CGO_ENABLED=0 GOOS= GOARCH=amd64 GOARM= go build -mod=vendor -tags nats -ldflags "-s -w -X 'github.com/MainfluxLabs/mainflux.BuildTime=2023-12-11_19:26:27' -X 'github.com/MainfluxLabs/mainflux.Version=0.16.5' -X 'github.com/MainfluxLabs/mainflux.Commit=6087b204b2dbc0c5072e6771710b3832d179c0f5'" -o build/mainfluxlabs-certs cmd/certs/main.go
CGO_ENABLED=0 GOOS= GOARCH=amd64 GOARM= go build -mod=vendor -tags nats -ldflags "-s -w -X 'github.com/MainfluxLabs/mainflux.BuildTime=2023-12-11_19:26:29' -X 'github.com/MainfluxLabs/mainflux.Version=0.16.5' -X 'github.com/MainfluxLabs/mainflux.Commit=6087b204b2dbc0c5072e6771710b3832d179c0f5'" -o build/mainfluxlabs-smtp-notifier cmd/smtp-notifier/main.go
CGO_ENABLED=0 GOOS= GOARCH=amd64 GOARM= go build -mod=vendor -tags nats -ldflags "-s -w -X 'github.com/MainfluxLabs/mainflux.BuildTime=2023-12-11_19:26:29' -X 'github.com/MainfluxLabs/mainflux.Version=0.16.5' -X 'github.com/MainfluxLabs/mainflux.Commit=6087b204b2dbc0c5072e6771710b3832d179c0f5'" -o build/mainfluxlabs-smpp-notifier cmd/smpp-notifier/main.go
上面是所有服务的入口。 都比较规范。 第三方代码放在了vendor目录影响代码统计。 但是我不确定vendor里面有没有这个项目的代码。 暂时忽略。 我删掉了vendor目录。 因为我想统计一下这个项目的成本。 也就是代码量。 因为第三方代码太多了。
vendor 删除之前
icecut@jiangyiundeMBP2 mainflux % find . | grep ".go" |wc -l
5057
icecut@jiangyiundeMBP2 mainflux % find . | grep ".go" |xargs cat | wc -l
1408071
vendor 删除之后
icecut@jiangyiundeMBP2 mainflux % find . | grep ".go" |wc -l
489
icecut@jiangyiundeMBP2 mainflux % find . | grep ".go" |xargs cat | wc -l
254115
25w行代码也是很多的。
为了判定是不是可以编译成功。 作为一个5年golang工程师准备作死一把, 执行了go mod tidy
但是最后还是报错,说要使用vendor文件夹。 这是要翻车的节奏么?
虽然我makefile不专业还是看了一下, 把 -mod=vendor给删了。 编译没有问题。 其中我是arm m1的笔记本, 兼容默认的amd64, 就不改了。
到这里编译成功了。 我相信golang版本的跑起来不是问题。 因为只要编译成功的,都能跑起来。互联网语言是硬件无关的。
官方文档说make dockers就可以构建docker, 但是如果是arm版本, 考虑用下面的语句后面加dockers
arm的编译
GOOS=linux GOARCH=arm GOARM=7 make
看到这里, 应该就是没有坑了。 无非就是docker要找一个镜像库提交一下。 阿里。腾讯都有免费的仓库。
然后在树莓派上用docker compose启动
如果在树莓派上使用, 可以直接在板子上执行编译和启动, 这样更加简单一些。
因为我不推荐大家使用, 启动日志就不在这粘贴了。
暂不推荐深度使用, 可以看源代码学习
mainflux 找到约 95,500 条结果 edgeX 找到约 296,000 条结果 我用谷歌验证了一下他们两个的流行程度。 和我得到的结论比较吻合