在我的物联网设计中,以Twsited为基础构建了:
TCP/UDPSocketServer,
WebServer,
CoAP Proxy,
MQTT Clients。
这些都通过Redis Pub/Sub交换数据和任务。算是最简单的微服务架构了。
但是一些任务需要采用单独进程完成,比如接收到的接入端报警、电邮请求、事件触发、IP地址查询等。这些都从之前的服务器中剥离出来。目前我也打算从Twisted开始构建,作为Redis Sub Client,然后分别启动新的线程去做。
但是,我觉得以Python社区的风格,应该有更加现成的框架吧?我到不在乎是否是Twisted,还是其他运维框架。
更新1
这个应该算是分布式任务队列,属于业务系统的一部分,和SaltStack之类的运维工具不一样。归类在这个类别的Python框架有:Celery, RQ,MRQ,Huey。其中Celery依赖性太多,RQ只用Pickle做序列化,而MRQ的Redis居然没有AUTH,Huey没有测试。
更新2
MRQ的Mongo没有删除,Huey测试成功。但是,Huey尚不能够支持Twisted前端。此外,基于Twisted的后端设计已经支持了调度单独线程的方法,还需要增加对于延时任务、间隔任务、定时任务的支持。
不过现在觉得在Twisted设计中,不希望有Blocking API,所以subscribe通道可以采用异步推送的方式。而Redis列表采用的Push/Pop方式,需要Twisted不断地调用llen()/pop()方法。
走同样的路,发现不同的人生