问题描述
我正在使用一些FIWARE组件(Orion 2.4.0-bext和Cygnus 2.3.0)。另外,我正在使用mongoDB(版本3.6)获取当前上下文信息,并使用MysqL(版本5.7)使用Cygnus保存历史更改。所有组件都经过docker化,每个组件都放在自己的容器中。
在我当前的解决方案中,我收到许多消息(每秒100到500之间),这些消息存储在mongoDB(通过Orion)和MysqL(通过Cygnus)中。我发现的问题是
Cygnus已配置为在MysqL中每个属性更改存储1行。这些是Cygnus的docker-compose环境变量,与MysqL中的映射配置有关。
environment:
- ...
- "CYGNUS_LOG_LEVEL=DEBUG" #
- "CYGNUS_MysqL_DATA_MODEL=dm-by-entity-type"
- "CYGNUS_MysqL_ATTR_NATIVE_TYPES=true"
- "CYGNUS_MysqL_ATTR_PERSISTENCE=column"
为说明第二点),我将向您展示之后使用Cygnus并运行bofere一段时间的空间。
当我检查使用的磁盘时:
[root@maaster-docker-test docker]# du -h --max-depth=1
4.0K ./trust
20K ./builder
11M ./image
12G ./overlay2
4.0K ./runtimes
72K ./buildkit
100K ./network
4.0K ./tmp
807M ./volumes
4.0K ./swarm
20K ./plugins
38G ./containers
50G .
我们可以看到container文件夹正在使用38G的空间。检查更多:
[root@maaster-docker-test containers]# du -h --max-depth=1
35G ./dd1c103dd7d1a5ecbab0e3a2e039a6c4d3fd525837a766a9bab28b29ba923a32
1.4M ./ebf1c3978077a727d414d3e2de5974b03a236999cc66c29f66c0e517d6bbe055
40K ./2c92baf1368ee292b7cf33db86369d0b6f7941753f54f145a14e5793eac6eba2
40K ./047c082e1f1e8f26be0bb1a063e93907f55b4736ad88fd29736e383c6e03d559
175M ./63c715643cfbd7695dc538081e4a963e270dc03a4ffdb528bb375cf57438a477
152M ./cbb5fe85b16411dc94c8ab00dcd7b40b728acaa422398445be4130aa0197d287
1.4M ./e7c01dca2246f17c5f0aa9f413772b7b73be2d962ae772e062c5257ce95252fa
2.6G ./534b92fe6f1dac9f56d59b1e9feeb0d013199d17fae0af1df150dd20b96c9f70
38G .
以 dd1c103dd7d1 开头的容器占用了35G的空间。当我检查此容器与谁相对应时:
[root@maaster-docker-test containers]# docker ps
...
dd1c103dd7d1 fiware/cygnus-ngsi:latest "/cygnus-entrypoint.…" 2 days ago Up 2 days (healthy) 0.0.0.0:5050-5051->5050-5051/tcp,0.0.0.0:5080->5080/tcp fiware-cygnus
...
结果是天鹅座。此时,我已经在MongoDB中插入了大约12000个不同的实体,反映了MysqL中大约300.000个更改(行)。因此,数据量不是那么疯狂。
最后,在重启docker-compose中定义的服务后,这将停止Cygnus,删除容器并再次启动它们):
[root@maaster-docker-test containers]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
...
0fb5ab78b70b fiware/cygnus-ngsi:latest "/cygnus-entrypoint.…" 3 minutes ago Up 3 minutes (healthy) 0.0.0.0:5050-5051->5050-5051/tcp,0.0.0.0:5080->5080/tcp fiware-cygnus
...
并再次检查已用空间
[root@maaster-docker-test containers]# du -h --max-depth=1
48K ./e8d32c563ad0a22f70a83b576592b32b6336b0b39cc401cfe451896e6b76a897
40K ./043069752e112cdce051d3792b8a261133b869e939bed263b9e0eb7dc265c379
80K ./f1f40e29a8d620fc38b7b12cfcd4986f3ffcc2f970f08d582cb826c2f2a41ff0
1.1M ./0fb5ab78b70bcc856c91b9b99266049b20f05f5d1d6d7d224cdfde9eec47b801
40K ./047c082e1f1e8f26be0bb1a063e93907f55b4736ad88fd29736e383c6e03d559
128K ./aa3c63cafe57c6ea1b4ed01bee9415b6a87bf538d6d7a700750be21c738d39d5
68K ./11388b7090bcd08ac0235129b7354e5c9b68f1d4855abdc97f025ad597b73e68
68K ./84a6aaf4221fde5cb0e21b727e33e21ff58d275597b121ba22f87296148b38db
1.6M .
我们可以看到天鹅座( 0fb5ab78b70b )使用的容器仅占用了1.1M的空间。
那么,有谁知道Cygnus,Docker或在Docker环境中运行的Cygnus是否有问题? 我应该在Cygnus上进行任何配置更改以提高效率并减少磁盘空间吗?
此外,我很高兴知道是否必须对mongoDB(或者也许是ORION)进行任何配置更改,才能使mongodb更加高效?我认为每秒插入200个新实体不会影响mongo进程的cpu使用率。
非常感谢
解决方法
我发现该配置
"CYGNUS_LOG_LEVEL=DEBUG"
正在生成大量数据,这些数据降低了服务的性能,增加了磁盘使用率。
改变这种价值解决了我的问题。