V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ninechi
V2EX  ›  程序员

公司的一个内网系统,映射到外网,可随时访问,最近几天发现会丢失数据

  •  
  •   ninechi · 2019-07-30 09:07:30 +08:00 · 3467 次点击
    这是一个创建于 1725 天前的主题,其中的信息可能已经有所发展或是发生改变。

    本人在月初刚开发完成、上线一个公司内部的综合管理系统,由于要挂在钉钉上使用,所以有将内网地址解析了公网 IP,一切正常。然而昨天到今天,我发现有一两个表单的数据在新增的时候,总是会丢失几个字段的内容(之前都不会)。

    个人分析:

    1、可能是解析公网 IP 导致的。因为解析后的 IP 地址固定是一个,但是公司一共有两个运营商的六个公网 IP,貌似在不同情况下回自动切换。而在切换的过程中,刚好系统正在接收数据,所以导致丢失?(网络这方面我懂的不多)

    2、系统 bug ?这部分的代码已经检查过若干次,测试环境也正常,应该不是这个原因。

    3、也是网络相关。由于是解析后的公网地址,即使在内网访问,也要绕一圈先从外网再到内网,在这过程中又因为某些原因导致数据丢失。

    有无大神来指点迷津。

    22 条回复    2019-07-30 13:42:53 +08:00
    Sornets
        1
    Sornets  
       2019-07-30 09:11:25 +08:00
    事务?
    fishlium
        2
    fishlium  
       2019-07-30 09:13:35 +08:00
    我觉得不是网络问题,你直接在内网访问内网地址就可以排出网络问题了
    arthas2234
        3
    arthas2234  
       2019-07-30 09:17:48 +08:00
    这种问题复现很容易啊,打日志,把数据打印出来看一眼就知道了
    MonoLogueChi
        4
    MonoLogueChi  
       2019-07-30 09:29:00 +08:00 via Android
    那个从内网访问的话数据不会在外网绕一圈,只是解析的时候会有一个流程,而且 DNS 地址是缓存的,只要解析一次就可以好长时间有效
    GuangXiN
        5
    GuangXiN  
       2019-07-30 09:30:11 +08:00 via Android
    1. 你域名解析出来是哪个 ip 就是哪个 ip,和你公司有几个公网 ip 没关系。除非你自己把六个公网 ip 全加进去了。

    2. 你的字段是一次 http 请求中提交的还是多次分部分提交的?如果是后者,你有做提交失败重新发起的处理吗?

    3. 只要你是 http 请求里提交数据,就不存在绕一圈会丢失的问题。http 底层的 tcp 协议保证了数据包丢了也会自动重传,重传失败多次会断开连接。上层程序只需要处理成功和失败的情况,不会出现缺少字段的情况。
    lcy630409
        6
    lcy630409  
       2019-07-30 09:34:48 +08:00
    你的猜测都错误 没有依据
    你在添加数据库的地方 直接把数据写到 txt 里,然后对比缺失数据,首先确定是不是数据库的问题
    对了 看看公司的电脑 会不会被别人关电了?
    arrow8899
        7
    arrow8899  
       2019-07-30 09:40:05 +08:00
    看一下网关的日志,http 不会出现只丢一部分字段的情况,估计是客户端没传。
    encro
        8
    encro  
       2019-07-30 10:16:38 +08:00
    http 不存在丢失的问题,所以可能是:
    1,客户端丢失了;
    2,程序丢失了;
    3,数据库丢失了;
    4,在其他地方被改写了;

    排查方法是:1,接口日志; 2,数据表增加最后修改时间(自动);
    yylyan
        9
    yylyan  
       2019-07-30 10:18:26 +08:00
    1,本机多次刷新看下公网 ip 是否更换,一般内网网关设置都是源 ip+目的 ip 端口为同一个连接,不会切换 ip
    2,写日志,打 log
    3,pppoe 运营商为释放资源,一般会隔几天需重新拨号更换公网 ip,重拨也是一俩分钟的事情,一般不会存在这种问题
    autogen
        10
    autogen  
       2019-07-30 10:19:46 +08:00
    丢失什么类型的数据? 用户发送的请求后台日志没有搜到,还是数据在 db 里丢了?
    reus
        11
    reus  
       2019-07-30 10:41:49 +08:00
    一个 print 就能确定的事情,还要发帖……
    ninechi
        12
    ninechi  
    OP
       2019-07-30 13:37:06 +08:00
    @reus 哈哈哈,不懂就要问
    ninechi
        13
    ninechi  
    OP
       2019-07-30 13:38:20 +08:00
    @autogen int 型,估计是在数据库丢失的。前端 js 有判断必填项,否则不能提交
    ninechi
        14
    ninechi  
    OP
       2019-07-30 13:38:45 +08:00
    @yylyan 好的,谢谢
    ninechi
        15
    ninechi  
    OP
       2019-07-30 13:39:44 +08:00
    @encro 估计第 3、4 点的概率大。系统日志有查了没有报错
    ninechi
        16
    ninechi  
    OP
       2019-07-30 13:40:41 +08:00
    @arrow8899 网络的管理不在我这边,我去找网络工程师问问
    ninechi
        17
    ninechi  
    OP
       2019-07-30 13:41:00 +08:00
    @lcy630409 好的,谢谢指点
    ninechi
        18
    ninechi  
    OP
       2019-07-30 13:41:19 +08:00
    @GuangXiN 受教了,谢谢
    ninechi
        19
    ninechi  
    OP
       2019-07-30 13:41:51 +08:00
    @MonoLogueChi 了解了,受教了,谢谢
    ninechi
        20
    ninechi  
    OP
       2019-07-30 13:42:20 +08:00
    @arthas2234 好的,谢谢
    ninechi
        21
    ninechi  
    OP
       2019-07-30 13:42:44 +08:00
    @Sornets 增删改都有事务
    ninechi
        22
    ninechi  
    OP
       2019-07-30 13:42:53 +08:00
    @fishlium 好的,谢谢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5254 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 08:48 · PVG 16:48 · LAX 01:48 · JFK 04:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.