我正在做一个组织项目,其中有一个名为Gateway的嵌入式设备,通过它我们可以通过DLMS和Modbus协议读取电表。网关能够通过这些协议读取电表并解释接收到的数据,然后使用SIM或以太网通过安全的Websocket传输层协议以同构JSON数据结构将其发送到后台。 Gateway Application OS正在使用我们的自定义Linux,应用程序代码是用.NET C#编写的,并在Linux上使用Mono Framework运行。该应用程序具有6个二进制文件,4个SQLite数据库,一些dll和一些共享的C库。这在我的嵌入式设备网关上运行良好。现在,有些客户不希望使用嵌入式设备网关,而希望在Windows PC上运行的解决方案能够在TCP上读取电表,并能够通过以太网将数据发送到后台,并将其保存在适当的数据库中。现在要满足此要求,我们有2种方法:-
我们正在考虑第二种方法的方向,因为对于这两种解决方案,我们仅需维护一个代码库。但是我们的组织在Docker方面不是很专业。
请提出我们的想法是否正确。我们应该采用第二种方法,或者采用第一种方法,为此我们必须开发一个全新的代码库。
答案 0 :(得分:1)
好吧,很难提出任何建议,因为该应用程序并不简单。
但是,我可以说的是,为Windows开发新应用程序并维护两个版本的成本很高。
另一方面,尝试运行现有应用程序的dockerized版本应该非常低(至少比第一个路径低得多),毕竟您应该创建具有所有必需的自定义设置的Dockerfile并构建映像。从那时起,您只能在该映像之外运行该过程。
因此,恕我直言,您应该首先尝试该选项,然后得出结论,对于您的情况而言,这是否是可行的解决方案很快。在最坏的情况下,您最终会获得第一个解决方案,但开销却很低。
一件事,您应该知道,如果您对单个进程进行了Docker化,并且您正在按照说明运行6,通常Docker效果最好。您可能需要像supervisor.d
这样的东西来运行它们:https://docs.docker.com/config/containers/multi-service_container/
答案 1 :(得分:0)
要回答一个问题,我想知道他们为什么要这样做。 网关通常是一个现场安装的设备,它使用一个物理协议层连接到仪表,然后使用通常基于ip的回程将仪表数据传递到scada或前端系统,这是正常的。 (更复杂的网关可能会提供电表的虚拟化级别,我认为可能是这种情况)。如果仪表已经可以在tcp上运行,那么通常应该不需要网关。因此,您的客户似乎希望将网关代码用作穷人的scada系统或前端系统。 如果您可以解释端到端解决方案的体系结构,则可以理解尝试虚拟化网关设备的需求,这很可能是确定最佳方法的关键。