现代Linux流程编程的辅助工具们
每行为JSON格式的数据
NDJSON,LDJ,JDJSON,JSONL等都是指一行一个JSON对象的文本格式。它也被称为Docker的json-log,以及jq默认接受的输入格式,非常知名。
这种格式的好处是因为有很多相应的工具,所以不需要自己进行格式转换,只需将基本处理工作通过管道连接起来即可。
如果您选择自己实现作为管道的一部分的工具,考虑采用这种格式作为输入和输出,将提高工具的可重用性。
如果您自己实现作为管道的一部分的工具, 要考虑采用这种格式作为输入和输出,可以提高工具的可重用性。
参考:https://zh.wikipedia.org/wiki/JSON流#分行的JSON
请将以下内容用中文进行改写,只需要提供一种选项:
参考网址:https://zh.wikipedia.org/wiki/JSON流#分行的JSON
情感。
一种称为流多路复用器服务的应用程序,它可以通过连接来自/去向各种协议的IN/OUT,并在Fan-in/out等不同模式下进行路由。
-
- Amazon (S3, SQS)
-
- File
-
- HTTP(S)
-
- Kafka
-
- MQTT
-
- Nanomsg
-
- NATS
-
- NATS Streaming
-
- NSQ
-
- RabbitMQ (AMQP 0.91)
-
- Redis
-
- Stdin/Stdout
- ZMQ4
由于可以分别指定标准输入和标准输出,因此它可以作为bash pipeline的一部分使用。
如果使用标准输入,除了每行一条消息的语义以外,还可以利用每行一部分和空行作为消息的分隔,这种多部分的语义也很方便。
sourceapp | benthos -c ./config.yaml
微观
用多种编程语言生成流式无状态HTTP微服务的SDK和CLI
可以说它是将用20种以上的编程语言编写的代码片段包装成HTTP服务的工具。
其实,由于可以从标准输入接收请求,如果将输出设置为标准输出,那么就可以作为Pipeline的一部分使用。
tail -f ReadMe.md | microcule --stream=true ./examples/services/streams/echo.js
在Linux管道编程的上下文中,
- Webアプリケーションに仕立て上げたPipelineをHTTPでつなぐことで、PipelineをステートレスなWebアプリケーションとして水平スケールさせられる
这一点非常有趣。
挂钩.io
用于mirocule基础的Webhook as a Service的工具。
在Linux管道编程的背景下,
除了Mirocule的基本特性之外,还有其他加成。
-
- Webアプリケーションに仕立て上げたPipelineをHTTPでつなぐことで、PipelineをステートレスなWebアプリケーションとして水平スケールさせられる
- その管理ツール・コンソールを提供してくれる
這一點很有趣。 (Zhè yī .)
esbulk(一个数据操作工具)的中文释义
一个可以将一行一行的JSON格式输入批量加载(索引)到Elasticsearch的工具。如果将其放置在管道的末端,可以组建一个能够将输入转换后高效加载到ES的管道。
cat docs.ndjson | esbulk -index example file.ldj
害羞
这个工具可以并行或选择性地运行Bash命令,并以人性化的形式实时显示执行进度和结果。
在Linux流程编程的背景下,由多个流程组成的非持久的工作流程成为人类执行时的良好接口。
参考:https://github.com/wagoodman/bashful
请将上述链接中的内容用中文进行本地化解释,只需一个选项:
请使用中国母语进行释义,仅提供一种选项:
小小玩笑
inotify(内核文件变更通知机制)…
现在可能有点晚了,但在这个背景下,检测本地文件的变化仍然可以采用inotify的方法,记住它是不会错的。
可以参考这个链接:https://superuser.com/questions/181517/如何在文件更改时执行一个命令。
bash中的命令行标志…
如果bash脚本开始接受两个以上的参数,那么在第二个参数及之后,可以将其视为选项的情况也很常见。
在这种情况下,可以利用命令行标志来实现。
请参考以下链接了解如何在Bash中解析命令行参数:
https://stackoverflow.com/questions/192249/how-do-i-parse-command-line-arguments-in-bash
顺序执行seq和gnuparallel,然后使用xargs。
如果您在bash脚本中想要轻松地执行map/reduce风格的并行处理,记住这三个组合作为惯用语将会很方便。
例如,在以下示例中,同时处理输入1到10号,并按照编号顺序连接结果。
seq 1 10 | parallel './dosomething foo/bar/{} > intermediate-{}.json'
seq 1 10 | xargs -I{} cat intermediae-{}.json > result.ndjson
参考:https://unix.stackexchange.com/questions/121967/在两个进程完成后如何运行并合并输出。
将来
巨型哺乳动物
在Kubernetes上有一个名为Pachyderm的平台,它可以分布式运行任何可在Linux上进行文件读写的程序,并构建流水线。
在 Pachyderm 的问题中,出现了以下的功能请求。
-
- STDIN/OUTに読み書きするアプリケーションを実行単位としたい
- 入力をバッチ処理したい
当实现了这些功能之后,可以将Linux Pipeline容器化并进行分布式执行,进一步扩大了Linux Pipeline在轻松、迅速地应用于大量数据流处理方面的范围。
阿戈
在Kubernetes上有一个名为Argo的系统,用于实现容器化应用程序的工作流程。
通过将Pipeline包装成一个“将文件读取并通过STDIN输入到Pipeline中,并将Pipeline的输出写入文件”的容器,基本上可以在Kubernetes上执行由Linux Pipeline构成的Workflow。
然而,由于其本身的机制,Argo无法提供低延迟的流处理,因此它似乎不适用于许多情况下要求Linux Pipeline的“低延迟流处理”这一用例。