• 请不要在回答技术问题时复制粘贴 AI 生成的内容
0576coder
V2EX  ›  程序员

Java 有没有轻量级的服务注册中心,现在搜了一圈下来就看到阿里的有个 nacos,如果自己写的话 是不是更好

  •  
  •   0576coder · Jul 7, 2021 · 5496 views
    This topic created in 1945 days ago, the information mentioned may be changed or developed.

    背景

    目前只是简单的几个按业务不同,单独以域名的方式分割了两三个服务,每个服务三四台机器,都是 spring boot 单机版

    需求

    现在有两个服务可能有相互通信的必要,因为要更新应用内部的一些信息,所以需要按 IP 加端口的形式去通知。比如说后台更新了分组,需要通知到特征计算各个机器上去。目前就是简单的特征项目启动的时候上报自己的 IP+节点,然后后台挨个去通知。

    但是为了响应统一号召,我们全面再切 k8s,所以就不像之前的物理机了,IP 都是固定,机器数量也可能变得动态,所以可能需要一个简单的服务注册中心。并且实时的判断特征服务的节点是否还活着

    有没有简单版的注册中心

    目前有个想法是直接用公司现有基于 etcd 的,我自己做个轻量级常驻的 watch 就行了

    题外话

    阿里的 nacos 不知道实际用起来轻量不轻量,但是福报厂的东西有些质量很一般,还有些没法自定义的东西,或者宣传吹的很牛逼,实际跑起来 250 。

    36 replies  •  2021-07-09 06:15:45 +08:00
    Lonely
    Lonely
    Jul 7, 2021 via iPhone
    1
    eureka 啊
    0576coder
    0576coder
    OP
    Jul 7, 2021
    2
    @Lonely
    感觉 eureka 得至少 3 节点 单机的是不是不太好 0 -
    damai0419
    damai0419
    Jul 7, 2021
    3
    没啥其他要求的话,用中间件可不可以?比如 MQ ?
    Dragonphy
    Dragonphy
    Jul 7, 2021❤️1
    4
    一上线生产就疯狂占用资源,到现在还没解决,阿里的开源就是屎🐶
    w292614191
    w292614191
    Jul 7, 2021
    5
    为什么觉得自己写的会轻量呢?
    wellsc
    wellsc
    Jul 7, 2021
    6
    中间件为什么要被语言限制
    0576coder
    0576coder
    OP
    Jul 7, 2021
    7
    @Dragonphy

    哈哈哈 我之前用过他们的熔断限流的 sentinel 先不说占不占资源 这东西有两种 log 没法自定义格式 写死了的
    0576coder
    0576coder
    OP
    Jul 7, 2021
    8
    @wellsc
    但是这边是 java 要用 所以不管怎么样 client 服务注册的代码还是要用 java 写的
    所以就这样问了
    0576coder
    0576coder
    OP
    Jul 7, 2021
    9
    @w292614191
    不考虑真·高可用,我单机实现一个简易版的 我感觉会很轻量
    wateryessence
    wateryessence
    Jul 7, 2021
    10
    Curator 复合你需求吗
    heheda11
    heheda11
    Jul 7, 2021
    11
    自己写难点就在于 CAP 分布式一致性问题,弄好这个其他的就是 CURD 了
    coolcoffee
    coolcoffee
    Jul 7, 2021
    12
    如果是在同一个集群,应该可以直接用自带 Headless Services 来实现吧。 我看携程的 apollo 在本来是 Eureka 作为服务发现,在 K8S 里面就用 K8S 自带的了。

    K8S Headless Services 会自动维护可用 EndPoint 节点,配置好健康检查探针及时将不可用服务踢出去就好了。
    Rwing
    Rwing
    Jul 7, 2021
    13
    Consul ?
    securityCoding
    securityCoding
    Jul 7, 2021
    14
    consul 或者 etcd 质量是绝对有保证的
    wizzer
    wizzer
    Jul 7, 2021
    15
    zk 啊 占用资源少
    julyclyde
    julyclyde
    Jul 7, 2021
    16
    建议别选阿里的,过几天就没人管了
    jorneyr
    jorneyr
    Jul 7, 2021
    17
    K8S 可以使用网络插件 Calico 固定 Pod IP 啊: annotations:
    cni.projectcalico.org/ipAddrs: '["${podIp}"]' # For Calico
    jorneyr
    jorneyr
    Jul 7, 2021
    18
    实在不行,使用 Service 也可以,甚至 Statefulset 的域名也能在 Pod 内部访问目标机器。
    sppan
    sppan
    Jul 7, 2021
    19
    hazelcast 可以看下是否满足你的需求,一个 jar 搞定。
    Jooooooooo
    Jooooooooo
    Jul 7, 2021
    20
    自己搞个 zk 就行了
    sjzjams
    sjzjams
    Jul 7, 2021
    21
    站在巨人的肩膀上 有时间的话可以再造轮子
    misaka19000
    misaka19000
    Jul 7, 2021
    22
    zk 不行
    misaka19000
    misaka19000
    Jul 7, 2021
    23
    ?
    zhenjiachen
    zhenjiachen
    Jul 7, 2021 via iPhone
    24
    上了 k8s 难道不能直接用 k8s 的 service 调用服务吗?
    louchenabc
    louchenabc
    Jul 7, 2021
    25
    用了 k8s,就不需要服务注册中心了,spring cloud 项目中有 k8s 的 discovery 的 starter,直接使用就好了。
    k8s 上面的 pod 信息本身就保存在 etcd 里,它的基础架构就支持了服务发现。

    我这份 ppt 里面有提到这个,感兴趣的话可以看下。

    https://github.com/lcomplete/TechShare/blob/master/docs/java/%E5%88%86%E5%B8%83%E5%BC%8F%E7%B3%BB%E7%BB%9F%E5%BC%80%E5%8F%91-%E5%BE%AE%E6%9C%8D%E5%8A%A1%E5%9F%BA%E7%A1%80%E8%AE%BE%E6%96%BD%E6%9E%B6%E6%9E%84.pptx
    xuanbg
    xuanbg
    Jul 8, 2021
    26
    Consul 不也挺好的?直接 docker 运行就行,没有任何代码维护的心智负担,还不够轻量级?
    caixiaomao
    caixiaomao
    Jul 8, 2021
    27
    etcd ? 用的人挺多的
    kright
    kright
    Jul 8, 2021
    28
    nacos 用起来倒是挺简单的,但是有两个问题
    1,服务启动后 10s 左右,是没法调通的,还没注册好
    2,如果你哪天发现磁盘空间慢了,记得去看下 nacos 的日志。。。
    mosliu
    mosliu
    Jul 8, 2021
    29
    eureka 也可以单机啊?
    就是不是高可用就是了。。
    不过 eureka 似乎确实也不算轻量
    mmdsun
    mmdsun
    Jul 8, 2021 via Android
    30
    阿里 nacos BUG 很多,前段时间还爆出鉴权漏洞,传特定 header 就不用鉴权了。

    推荐 eureka,sping 还在维护更新没有停更。
    Lighfer
    Lighfer
    Jul 8, 2021
    31
    我们写了一个 redis 版的,然后用 java 按照 redis 的协议极其轻量级的服务器,用于本地做测试用
    Lighfer
    Lighfer
    Jul 8, 2021
    32
    @Lighfer 然后用 java 按照 redis 的协议写了一个极其轻量级的服务器
    0576coder
    0576coder
    OP
    Jul 8, 2021
    33
    @louchenabc
    感谢大佬 我研究下
    ciki
    ciki
    Jul 8, 2021
    34
    @0576coder 单机用啥微服务啊
    0576coder
    0576coder
    OP
    Jul 8, 2021
    35
    @ciki
    你可以看下我的背景
    更新应用内部的一些信息,所以需要按 IP 加端口的形式去通知。比如说后台更新了分组,需要通知到特征计算各个机器上去

    所以需要一个简易版的服务注册就行了
    xjlnjut730
    xjlnjut730
    Jul 9, 2021❤️1
    36
    我做技术选型,都是什么流行用什么,看看 github /gitee 上 top20 的 java 微服务框架流行啥用啥,大概率不会出大问题。
    按这种思路就是无脑 nacos,不用纠结太多,不过我们实测下来的话,1.x 的版本是稳定可用的,2.x 的在容器环境下不太稳定,暂时不太建议用。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   5098 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 84ms · UTC 07:15 · PVG 15:15 · LAX 23:15 · JFK 02:15
    ♥ Do have faith in what you're doing.