惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
G
GRAHAM CLULEY
WordPress大学
WordPress大学
人人都是产品经理
人人都是产品经理
Apple Machine Learning Research
Apple Machine Learning Research
Jina AI
Jina AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
大猫的无限游戏
大猫的无限游戏
MyScale Blog
MyScale Blog
Forbes - Security
Forbes - Security
Hugging Face - Blog
Hugging Face - Blog
博客园 - 聂微东
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
The Last Watchdog
The Last Watchdog
N
News and Events Feed by Topic
TaoSecurity Blog
TaoSecurity Blog
SecWiki News
SecWiki News
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
小众软件
小众软件
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
L
LINUX DO - 最新话题
腾讯CDC
博客园 - 三生石上(FineUI控件)
Attack and Defense Labs
Attack and Defense Labs
S
Secure Thoughts
博客园 - 叶小钗
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Webroot Blog
Webroot Blog
Google Online Security Blog
Google Online Security Blog
S
Security @ Cisco Blogs
S
Schneier on Security
罗磊的独立博客
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - Franky
Hacker News: Ask HN
Hacker News: Ask HN
T
Tenable Blog
V
V2EX
J
Java Code Geeks
AWS News Blog
AWS News Blog
博客园 - 司徒正美
V
Visual Studio Blog
T
The Exploit Database - CXSecurity.com
H
Hacker News: Front Page
Security Latest
Security Latest
月光博客
月光博客
The Hacker News
The Hacker News
T
Tor Project blog
Project Zero
Project Zero
P
Privacy & Cybersecurity Law Blog
阮一峰的网络日志
阮一峰的网络日志

夜行人

回家路上 第一期的直播演示项目 震动检测器 正能量 在线参观CodeLab Neverland 发布 CodeLab Adapter 3.3.1 DynamicTable 之 纸糊方向盘 CodeLab DynamicTable: 一个可实施的技术方案 CodeLab Insight 发布 Alpha 版 情人节 Home Assistant 周报 && IoT 周报 (02) Joplin: 关注隐私的 Evernote 开源替代软件 浏览器的未来与 Web 传感器 Home Assistant 周报 && IoT 周报 (01) 百宝箱(01) 论自由 介绍 WebThings Home Assistant 周报 && iot 周报 (00) 百宝箱(00) 毛姆读书心得 传世之作 周末徒步 CodeLab Adapter ❤️ Jupyter/Python 航班 躲雨 夏令营途中 [译]思想--作为一种技术 The future of coding 美国之行 三门问题的程序模拟 从Python转向Pharo https://blog.just4fun.site/post/iot/iot-open-source-projects/ Python异步编程笔记 https://blog.just4fun.site/post/iot/iot-open-source-hardware-community/ 万物积木化开发者社区 CodeLab ❤️ Blender Scratch3技术分析之云变量 API(第7篇) [译]对管道(Pipes)的偏爱 [译]提出正确的问题比得到正确答案更重要 蓝牙设备与Scratch3.0 创建你的第一个Scratch3.0 Extension Scratch3技术分析之项目内部数据(第6篇) Scratch3技术分析之社区 API(第5篇) Scratch3技术分析之User API(第4篇) Scratch3技术分析之项目主页API(第3篇) Scratch3技术分析之静态资源API(第2篇) Scratch3.0、micro:bit与Windows7 https://blog.just4fun.site/post/iot/zerynth-vs-micropython/ 核聚变、方所与半宅空间 可视化编程为何是个糟糕的主意 codelab.club周末聚会 关于codelab.club '下一件大事'是一个房间 Hungry Robot - Eat everything 编程作为一种思考方式 今日简史 史蒂夫·乔布斯传 罗素自选文集 https://blog.just4fun.site/post/edx/tianjin-scratch-ai/ https://blog.just4fun.site/post/edx/richie-cms-openedx/ 徒步武功山 WebUSB与micro:bit 积木化编程与3D场景 夜宿武功山顶 scratch3-adapter接入优必选Alpha系列机器人 https://blog.just4fun.site/post/edx/video-migration-note/ scratch3-adapter重构笔记 https://blog.just4fun.site/post/edx/edx-community-members/ 两种硬件编程风格的比较 使用micro:bit自制PPT翻页笔 柏拉图对话集 scratch3.0 + micro:bit 七月电影放映计划 非营利组织的管理 Screenly--用树莓派让任何屏幕变为可编程的数字标牌 以最佳实践开始你的Django项目 micro:bit与事件驱动 为Scratch3.0设计的插件系统(上篇) OCR应用一例 近两年读过的一些好书 blockly开发之使用python驱动浏览器中的turtle(2) 牛顿新传 文学理论入门 逻辑的引擎 人生的意义 blockly开发之生成并运行js代码(1) blockly开发之hello world(0) micro:bit使用笔记 神器之Termux https://blog.just4fun.site/post/iot/micropython-notes/ Cozmo what is this Scratch的前世今生 下段旅程 我行在远方 爆裂 途中杂记 https://blog.just4fun.site/post/edx/open-edx-startup/ cozmo系列之入门 - 有性格且可编程的机器人 PaperWeekly开发笔记 创业二三事
Python Banyan学习笔记之架构设计
种瓜 · 2019-06-18 · via 夜行人

文章目录

A lightweight, reactive framework used to create flexible, non-blocking, event driven, asynchronous applications.

前言

MrYsLab构建了一个非常有意思的项目python_banyan,该项目基于ZeroMQ. 基于消息为异步编程提供框架。

ZeroMQ非常适合用于构建消息系统,我们此前在codelab-adapter的架构设计中论述过这点。

如果你喜欢将message作为构建世界的积木,ZeroMQ为你开箱提供了很多有用的消息通信模式。

ZeroMQ极为通用,完全有取代socket的能力。networkzeropython_banyan都试图基于ZeroMQ构建更加易用的编程API,因为ZeroMQ的高度灵活性,可能让人一时无从下手。

本文关注Banyan的架构设计。

是什么(翻译:原文

Python Banyan是一个轻量级的反应式(reactive)框架,用于创建灵活、非阻塞、事件驱动的异步应用程序。它主要用于帮助构建Raspberry Pi,ESP8266和Arduino等设备的实时物理计算应用程序,当然也可以轻松用于物理编程领域之外的项目。

Banyan使用 类似于MQTT发布/订阅模型,但在实时控制和数据监视应用程序中比MQTT快得多(codelab-adpater选择ZeroMQ的理由之一也是这个)。官方文档里有一份关于Banyan和MQTT的基准比较用以说明Banyan的效率。如果你的应用程序需要连接到MQTT broker,已经有可用的网关了。

大多数传统的物理计算库或框架使用面向对象的模型,它产生单个、紧耦合的完整可执行映像(image)(耦合于编程语言runtime)。Banyan使用面向对象模型的扩展,称为基于组件的 面向服务的体系结构模型。基于组件的应用程序由一组独立的、松耦合的部件,即通过一组独立于平台的、用户定义的、通过TCP网络发送的协议消息彼此通信。

Banyan应用程序由一组作为单独进程并发运行的组件组成。这些组件可以使用单一语言平台(如Python)开发,也可以使用任何其他Banyan框架开发。有可用于JavaScript、Ruby和Java的Banyan版本。使用不同语言开发的组件可以在不进行修改的情况下进行组合,以形成单一、内聚的应用程序。

Banyan使用称为Backplane的中央消息分发机制。首次启动Banyan应用程序时,Backplane将彼此连接,然后启动应用程序的组件。在启动时,每个组件自动“插入”Backplane,在Backplane之间建立彼此之间的TCP/IP通信通道。

在建立通信之后,组件可以将消息发布到Backplane,从其他组件接收消息或者发布和接收消息。Python Banyan的一个主要特性是它能够无缝轻松地将Numpy数据合并到协议消息中。

无需修改,Banyan应用程序的组件可以在单台计算机上运行,​​也可以分布在多台计算机上。

更多技术细节

Banyan 基类

基类充当ZeroMQ的包装器,该库已配置为以发布/订阅网络模式运行。此外,基类使用MessagePack对协议消息进行编码和解码,以实现高效的网络传输。

Banyan 协议消息

Banyan协议消息由2部分组成, “topic” 和 “payload”.

topic

消息的topic只是简单字符串。为了收到消息,你需要订阅相应topic。

前缀匹配: 当你订阅abcd,abcde也会匹配。 默认是前缀匹配吗?(todo)

payload

数据类型是Python字典。

Banyan消息不是特定于计算机语言的,JS中的demo

应用设计

基于Banyan设计应用,最佳实践是保持组件的精简。通过将组件的关注点限制在一个小的范围,大大简化了测试并且增加组件的可重用行。

设计引导

  • 每个组件尽可能订阅少的主题消息。
  • 尽可能保持消息简短。
  • 将组件限制为其手头的任务。例如,如果要记录应用程序的活动,请创建特定的日志记录组件。所有其他组件都可以以一致的方式利用此日志记录工具。

如何使用

如果你对使用Python Banyan这个Python库感兴趣,可以翻阅其文档,完整而清晰.

应用案例

商业上, Python Banyan已经被旧金山的Palace Games选中来监控他们的Palace Games Edison Room(Raspberry Pi Blog)

这儿包含数百个传感器和执行器,Banyan帮助将所有设备及其相关的微控制器连接在一起,使他们能够快速、透明地相互通信。Banyan支持Numpy数据的传输,Edison Room使用这些数据来有效地建模。

Banyan还在利用Raspberry Pi、Arduino和ESP8266的众多物理计算项目中使用。Python Banyan的早期版本,称为razmq,用于控制Raspberry Pi机器人。

参考