《架构中的物联网》文章主要是记录我在学习和思考物联网架构设计中的思路。主要从架构设计的角度解析物联网业务场景的解决方式。这些解决方式不仅仅局限于物联网领域,我希望能够透过这些设计来看到架构背后的思想。
业务场景
物联网领域中,设备的在线和离线是不可预知的。由于设备所在的网络环境复杂,甚至可能是极弱的网络条件。那么当我们需要读取当前的设备属性时,并不能保证一定可以读到。我们没有办法保证我们对设备的操作一定能够传达到设备中。那么在这种情况下如何保证我们服务的可靠性?
思路
我们如果对设计模式有一些了解,我们会发现有一种设计模式的思路很适合这个业务场景,那就是代理模式。既然我们无法保证操作自己的操作一定生效,那么我们就创建一个设备的代理,在物联网领域中,一般称之为设备影子(Device Shadow)。
设计
那么我们如何来设计设备影子呢?或者说一个设备影子至少需要具备什么能力才能称之为设备影子?我们来梳理一下:
设备影子至少要能缓存设备的状态,这个是基本的需求,也就是满足对设备“读”的需求。
设备影子需要能够处理针对设备的操作并保证最后生效,也就是满足对设备“写”的需求。
设备影子需要正确处理自身状态,保证和真实设备最终趋于一致。
基于我们得到的需求,我们设计了四个模块:
同步器:负责与真实设备的同步,主要是解决设备状态的下发和设备状态的检测。
接口层:供上层服务调用,和真实设备的接口一致,可拓展接口。也就是设备的代理。
处理引擎:负责保证设备真实状态和期望状态达成一致。保证设备影子和设备最终一致。
状态存储:包括设备状态和上层操作的存储,也就是真实状态和期望状态。
总结
我们回过头来看,设备影子的架构符合了架构设计的以下原则:
低耦合:通过抽象屏蔽了真实业务的复杂性,将上层服务和真实设备解耦。
依赖抽象:上层服务不再依赖多变的真实设备,而是依赖可控的设备抽象。
通过这些原则,我们可以检查设备影子设计的优势。设备影子来源于真实的业务场景,目前被很多物联网架构所采用的。
如果喜欢,欢迎点亮
本文分享自微信公众号 - 雨夜随笔(yuye_suibi)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
来源:oschina
链接:https://my.oschina.net/u/4904983/blog/4885743