libi

Results 4 issues of libi

#### Description (what this PR does / why we need it): 北极星服务发现基本不可用,在项目初始化时如果依赖的服务节点没有变化(推送watch),那么Next()函数会阻塞,导致后启动的服务获取不到其他节点信息. #### Which issue(s) this PR fixes (resolves / be part of): #### Other special notes for the reviewers:

LGTM
size:XS

可以考虑将 [robfig/cron](https://github.com/robfig/cron) 完全内置: 对内可以实现更精准的任务执行时机判断。 对外用户调用接口将与robfig/cron完全一致,只通过替换包名即可无缝替换单机模式。 如果需要分布式支持,只需要配置额外的 option 选项开启分布式。 例如开启某个定时任务: cron 用法 ``` c := cron.New(cron.WithSeconds()) c.AddJob("* * * * * ?", job) c.Start() ``` dcron用法 ``` c := dcron.New(dcron.WithSeconds()) c.AddJob("*...

help wanted
idea
difficulty

大部分服务节点都部署在同一子网内,节点间通信不需要经过多级路由转换,通信效率会非常高。 所以可以考虑直接通过节点间通信来同步状态,大概思路如下: 1. 初始化driver时,传入所有节点ip:port列表。 2. 服务启动阶段每个节点依次与其他节点建立 rpc 连接,连接成功后当前节点保存所有节点状态。 3. Job 执行判定阶段,直接通过 rpc 获取目前所有节点状态,如状态列表与上次不一致则重建 hash 环。 4. 一致性hash选举执行节点。 这么做的优势在于可以去掉存储依赖,并且状态同步将更精准,不会产生心跳周期导致的瞬间状态不一致情况。 当然如果存在节点间跨机房等情况,不适用该 driver。

idea
difficulty