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

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

  •  
  •   0576coder · 2021-07-07 14:00:16 +08:00 · 3882 次点击
    这是一个创建于 995 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景

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

    需求

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

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

    有没有简单版的注册中心

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

    题外话

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

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

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

    K8S Headless Services 会自动维护可用 EndPoint 节点,配置好健康检查探针及时将不可用服务踢出去就好了。
    Rwing
        13
    Rwing  
       2021-07-07 15:51:50 +08:00
    Consul ?
    securityCoding
        14
    securityCoding  
       2021-07-07 15:56:51 +08:00
    consul 或者 etcd 质量是绝对有保证的
    wizzer
        15
    wizzer  
       2021-07-07 16:01:42 +08:00
    zk 啊 占用资源少
    julyclyde
        16
    julyclyde  
       2021-07-07 16:18:50 +08:00
    建议别选阿里的,过几天就没人管了
    jorneyr
        17
    jorneyr  
       2021-07-07 16:35:43 +08:00
    K8S 可以使用网络插件 Calico 固定 Pod IP 啊: annotations:
    cni.projectcalico.org/ipAddrs: '["${podIp}"]' # For Calico
    jorneyr
        18
    jorneyr  
       2021-07-07 16:36:34 +08:00
    实在不行,使用 Service 也可以,甚至 Statefulset 的域名也能在 Pod 内部访问目标机器。
    sppan
        19
    sppan  
       2021-07-07 18:03:20 +08:00
    hazelcast 可以看下是否满足你的需求,一个 jar 搞定。
    Jooooooooo
        20
    Jooooooooo  
       2021-07-07 18:14:09 +08:00
    自己搞个 zk 就行了
    sjzjams
        21
    sjzjams  
       2021-07-07 18:38:06 +08:00
    站在巨人的肩膀上 有时间的话可以再造轮子
    misaka19000
        22
    misaka19000  
       2021-07-07 20:49:47 +08:00
    zk 不行
    misaka19000
        23
    misaka19000  
       2021-07-07 20:49:53 +08:00
    zhenjiachen
        24
    zhenjiachen  
       2021-07-07 23:21:33 +08:00 via iPhone
    上了 k8s 难道不能直接用 k8s 的 service 调用服务吗?
    louchenabc
        25
    louchenabc  
       2021-07-07 23:28:46 +08:00
    用了 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
        26
    xuanbg  
       2021-07-08 08:10:06 +08:00
    Consul 不也挺好的?直接 docker 运行就行,没有任何代码维护的心智负担,还不够轻量级?
    caixiaomao
        27
    caixiaomao  
       2021-07-08 08:29:11 +08:00
    etcd ? 用的人挺多的
    kright
        28
    kright  
       2021-07-08 10:56:32 +08:00
    nacos 用起来倒是挺简单的,但是有两个问题
    1,服务启动后 10s 左右,是没法调通的,还没注册好
    2,如果你哪天发现磁盘空间慢了,记得去看下 nacos 的日志。。。
    mosliu
        29
    mosliu  
       2021-07-08 11:30:46 +08:00
    eureka 也可以单机啊?
    就是不是高可用就是了。。
    不过 eureka 似乎确实也不算轻量
    mmdsun
        30
    mmdsun  
       2021-07-08 12:37:57 +08:00 via Android
    阿里 nacos BUG 很多,前段时间还爆出鉴权漏洞,传特定 header 就不用鉴权了。

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

    所以需要一个简易版的服务注册就行了
    xjlnjut730
        36
    xjlnjut730  
       2021-07-09 06:15:45 +08:00   ❤️ 1
    我做技术选型,都是什么流行用什么,看看 github /gitee 上 top20 的 java 微服务框架流行啥用啥,大概率不会出大问题。
    按这种思路就是无脑 nacos,不用纠结太多,不过我们实测下来的话,1.x 的版本是稳定可用的,2.x 的在容器环境下不太稳定,暂时不太建议用。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3247 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 12:05 · PVG 20:05 · LAX 05:05 · JFK 08:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.