Giter Club home page Giter Club logo

Comments (18)

rehiy avatar rehiy commented on September 6, 2024

我向官方产品提个iss,是否可以单列ddns记录,且我们也可以尝试使用本地文件做个缓存试试

from dnspod-shell.

rehiy avatar rehiy commented on September 6, 2024

直接向官方接口查询当前ip,会增加失败率
从dns获取则有延迟
本地文件缓存也增加io读写和权限问题
本地环境变量存储,不能使用计划任务

如果确实对这个日志接受不了,我们可以权衡下

from dnspod-shell.

rehiy avatar rehiy commented on September 6, 2024

另外,可以看下脚本的arErrCodeUnchanged参数,开启变更检测

from dnspod-shell.

genezx avatar genezx commented on September 6, 2024

没错,我就是对这个刷屏日志接受不了,一天时间就能把以前的所有改动记录刷没了。我正在向官方发工单沟通这个问题,如果官方能解决,这边就不需要改动了。

from dnspod-shell.

rehiy avatar rehiy commented on September 6, 2024

你先看下arErrCodeUnchanged

from dnspod-shell.

Vigilans avatar Vigilans commented on September 6, 2024

你先看下arErrCodeUnchanged

目前无论arErrCodeUnchanged是何值,都会调用一次更新API。当arErrCodeUnchanged不为0时,arDnspod会先拿一次旧IP,然后进行一次更新,然后再将返回的新IP与旧IP进行比对来输出0(新旧不同)或者$arErrCodeUnchanged(新旧相同)。也就是拿旧IP只起到反馈的作用。

作个折中的话,可以有下面的方案:

  1. 只要能拿到$lastRecordIp,且获取到了$hostIp$5不为0),那么就进行一次本地比对,未改变则不调用更新API。
  2. 添加一个配置,用于向指定的路径写入更新后的IP。这个文件最好符合/etc/hosts格式的,以便能被其他的服务使用(如dnsmasq使用hostsfile)。当此配置生效时,ardnspod会从这个配置中获取$lastRecordIp。这个配置默认不开启。
    • 这个配置的实现最好是增量更新的,这样可以让多个域名共用一个hosts文件,或权限允许时直接写到/etc/hosts里面。
  3. arErrCodeUnchanged不为0时,一定需要获取$lastRecordIp。若2中所述配置生效,则使用2中获取的$lastRecordIp,若未生效,则从官方接口查询$lastRecordIp
  4. 23均未开启时,继续目前的默认行为(始终调用一次更新API)。

from dnspod-shell.

genezx avatar genezx commented on September 6, 2024

我向官方产品提个iss,是否可以单列ddns记录,且我们也可以尝试使用本地文件做个缓存试试

官方已经回复我说,就这样,没法改,晕了。

from dnspod-shell.

genezx avatar genezx commented on September 6, 2024

直接向官方接口查询当前ip,会增加失败率 从dns获取则有延迟 本地文件缓存也增加io读写和权限问题 本地环境变量存储,不能使用计划任务

如果确实对这个日志接受不了,我们可以权衡下

现在的问题就是,始终调用一次更新API一定会在日志刷屏,为了不刷屏一定要想办法获取上次的IP。当然可以通过配置控制这个行为。

获取上次IP目前有几个办法,各有优缺点,就是你上面提到的:

  1. 直接向官方接口查询当前ip,会增加失败率
  2. 从dns获取则有延迟
  3. 本地文件缓存也增加io读写和权限问题
  4. 本地环境变量存储,不能使用计划任务

DDNS也可以分三个场景:

  1. 对IP变化极度敏感,不能接受秒级延迟
  2. 对IP变化中度敏感,可以接受秒级延迟,不能接受分钟级延迟
  3. 对IP变化不太敏感,可以接受分钟级的延迟

对于第一个场景,几乎一定是在计划任务里执行的,我认为可以选择第三种方案。

对于第二个场景,也几乎一定是在计划任务里执行的,我认为选择方案一、三均可,因为失败一两次影响不大。

对于第三个场景,我认为选择方案一、二、三、四均可,既然可以接受分钟级延迟,那么多延迟一两次也能接受。

我认为io读写并不是什么问题,毕竟IP发生变化是小概率事件,多数时候仅仅只是在读取,况且还有/dev/shm这种内存文件系统可以用。权限就更不是问题了。

from dnspod-shell.

rehiy avatar rehiy commented on September 6, 2024

常规linux的确没问题,很多嵌入式设备,有各种写限制,我之前尝试过,很多反馈用不了。所以之后有一版改为了从dnspod查询当前地址。再之后推动dnspod优化了ddns接口,从此不再需要担心接口请求速率,而对比地址。目前的日志又给大家带来不便,我们尝试更改下,留一个手动开关。

from dnspod-shell.

bluehj777 avatar bluehj777 commented on September 6, 2024

3. 本地文件缓存也增加io读写和权限问题
感觉相对来说,用本地缓存验证一下的方式更通用些

from dnspod-shell.

rehiy avatar rehiy commented on September 6, 2024

尝试在/run/记录了最后的ip,可以测试下新版。另一个方案是写入到 /tmp,看看大家的反馈后决定哪个作为默认值吧

from dnspod-shell.

bluehj777 avatar bluehj777 commented on September 6, 2024

尝试在/run/记录了最后的ip,可以测试下新版。另一个方案是写入到 /tmp,看看大家的反馈后决定哪个作为默认值吧

新版在一般的LINUX发行版下基本没问题。

from dnspod-shell.

rehiy avatar rehiy commented on September 6, 2024

临时文件目录只要可写,就不是大问题

from dnspod-shell.

okyaa avatar okyaa commented on September 6, 2024

目前2023/5/24的版本使用/tmp临时目录文件的方案在同时更新IPV4和IPV6 多域名解析的时候会造成校验本地存储的IP和获取的HOSTIP不一致,反复发起IP更新,建议在临时文件中能分别记录。

from dnspod-shell.

rehiy avatar rehiy commented on September 6, 2024

可以考虑根据子域名和ip类型缓存

from dnspod-shell.

okyaa avatar okyaa commented on September 6, 2024

是的,但我不会写:),暂时注释了,还直接和dnspod上获取的进行比较。

from dnspod-shell.

rehiy avatar rehiy commented on September 6, 2024

fixed,可以测试下

from dnspod-shell.

okyaa avatar okyaa commented on September 6, 2024

测试正常,感谢!

from dnspod-shell.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.