v1.5.1 增强程序稳定性

This commit is contained in:
robin
2026-03-22 17:37:40 +08:00
parent afbaaa869c
commit 17e182b413
652 changed files with 22949 additions and 34397 deletions

View File

@@ -34,6 +34,7 @@ import (
"regexp"
"runtime"
"runtime/debug"
"sync/atomic"
"syscall"
"time"
)
@@ -46,7 +47,18 @@ var sharedDomainManager *DomainManager
var sharedRecordManager *RecordManager
var sharedRouteManager *RouteManager
var sharedKeyManager *KeyManager
var sharedNodeConfig = &dnsconfigs.NSNodeConfig{}
var sharedNodeConfig atomic.Pointer[dnsconfigs.NSNodeConfig]
func init() {
// 初始化默认空配置
sharedNodeConfig.Store(&dnsconfigs.NSNodeConfig{})
}
// dnsNodeConfig 返回当前 DNS 节点配置(并发安全)
func dnsNodeConfig() *dnsconfigs.NSNodeConfig {
return sharedNodeConfig.Load()
}
func NewDNSNode() *DNSNode {
return &DNSNode{
@@ -105,13 +117,19 @@ func (this *DNSNode) Start() {
events.Notify(events.EventStart)
// 监控状态
go NewNodeStatusExecutor().Listen()
goman.New(func() {
NewNodeStatusExecutor().Listen()
})
// 连接API
go NewAPIStream().Start()
goman.New(func() {
NewAPIStream().Start()
})
// 启动
go this.start()
goman.New(func() {
this.start()
})
// Hold住进程
logs.Println("[DNS_NODE]started")
@@ -224,7 +242,7 @@ func (this *DNSNode) listenSock() error {
}
// 启动监听
go func() {
goman.New(func() {
this.sock.OnCommand(func(cmd *gosock.Command) {
switch cmd.Code {
case "pid":
@@ -262,7 +280,7 @@ func (this *DNSNode) listenSock() error {
if err != nil {
logs.Println("NODE", err.Error())
}
}()
})
events.On(events.EventQuit, func() {
logs.Println("[DNS_NODE]", "quit unix sock")
@@ -317,9 +335,9 @@ func (this *DNSNode) start() {
return
}
sharedNodeConfig = config
sharedNodeConfig.Store(config)
configs.SharedNodeConfig = config
configs.SharedNodeConfig.Store(config)
events.Notify(events.EventReload)
sharedNodeConfigManager.reload(config)
@@ -343,29 +361,47 @@ func (this *DNSNode) start() {
return
}
go sharedNodeConfigManager.Start()
goman.New(func() {
sharedNodeConfigManager.Start()
})
sharedDomainManager = NewDomainManager(db, config.ClusterId)
go sharedDomainManager.Start()
goman.New(func() {
sharedDomainManager.Start()
})
sharedRecordManager = NewRecordManager(db)
go sharedRecordManager.Start()
goman.New(func() {
sharedRecordManager.Start()
})
sharedRouteManager = NewRouteManager(db)
go sharedRouteManager.Start()
goman.New(func() {
sharedRouteManager.Start()
})
sharedKeyManager = NewKeyManager(db)
go sharedKeyManager.Start()
goman.New(func() {
sharedKeyManager.Start()
})
agents.SharedManager = agents.NewManager(db)
go agents.SharedManager.Start()
goman.New(func() {
agents.SharedManager.Start()
})
// 发送通知这里发送通知需要在DomainManager、RecordeManager加载完成
time.Sleep(1 * time.Second)
// 等待所有 Manager 初始加载完成后再发送通知
<-sharedDomainManager.readyCh
<-sharedRecordManager.readyCh
<-sharedRouteManager.readyCh
<-sharedKeyManager.readyCh
<-agents.SharedManager.ReadyCh
events.Notify(events.EventLoaded)
// 启动循环
go this.loop()
goman.New(func() {
this.loop()
})
}
// 更新配置Loop
@@ -439,8 +475,9 @@ func (this *DNSNode) updateDDoS(rpcClient *rpc.RPCClient) error {
return err
}
if len(resp.DdosProtectionJSON) == 0 {
if sharedNodeConfig != nil {
sharedNodeConfig.DDoSProtection = nil
var cfg = dnsNodeConfig()
if cfg != nil {
cfg.DDoSProtection = nil
}
} else {
var ddosProtectionConfig = &ddosconfigs.ProtectionConfig{}
@@ -449,8 +486,9 @@ func (this *DNSNode) updateDDoS(rpcClient *rpc.RPCClient) error {
return fmt.Errorf("decode DDoS protection config failed: %w", err)
}
if sharedNodeConfig != nil {
sharedNodeConfig.DDoSProtection = ddosProtectionConfig
var cfg = dnsNodeConfig()
if cfg != nil {
cfg.DDoSProtection = ddosProtectionConfig
}
err = firewalls.SharedDDoSProtectionManager.Apply(ddosProtectionConfig)