分享

widows环境下go并发访问mysql数据库 e usage of each socket address (protocol/network address/port) is normally p

 quasiceo 2018-07-14


这是一个创建于 2017-08-30 02:10:15 的文章,其中的信息可能已经有所发展或是发生改变。

###测试环境 整个应用由多个微服务组成,涉及前端与后端,在widows环境中如果进行链条则需要把 涉及到的微服务都启动在 windows主机上(关键点时 用到的 mysql数据 rabbitmq消息队列 redis 等服务都是以容器方式运行在 linux 服务器上),但是此时会产生一个问题,每次访问数据库都会开启一个tcp链接而widows的对应用程序开放的端口

   TCP客户端和办事器连接时,客户端必须分派一个动态端口,默认景象下这个动态端口的分派局限为 1024-5000,
   也就是说默认景象下,客户端最多可以同时创议3977 个Socket 连接。我们可以批改如下注册表来调剂这个动态端口
   的局限[HKEY_LOCAL_MACHINE System CurrentControlSet Services Tcpip Parameters] 
   MaxUserPort = 5000 (Default = 5000, Max = 65534)

    因此就出现了上述问题,

###生产环境 在实际的生产环境中,是用docker-compose来管理整个应用的所有微服务, 顺便提下,微服务之间的通信 有rabbitmq(rabbitmq用到了 发布订阅机制 与 生产消费机制)和微服务之间对外 暴露的 restfull API(此时会涉及到超时的问题,并不能很好保证的每次的稳定性 )

   docker container 的tcp最大链接数,并未找到数据,根据官方阐述 应该在65535 个,
   所以当所有微服务都以容器方式跑在linux服务器上时go大量并发链接数据库产生的tcp端口不够用的现象,则会
   减少,具体情款,待验证完补充

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多