33 | 服务发现如何做到持续维护服务地址在动态运维中的时效性?
服务发现解耦对位置的依赖
- 深入了解
- 翻译
- 解释
- 总结
服务发现在动态运维中的时效性是如何实现的?本文从解耦对位置的依赖出发,阐述了服务发现的重要性,并对服务发现的两种理解进行了比较。文章指出,随着微服务的流行,服务的非正常宕机重启和正常的上下线操作变得更加频繁,传统的基础设施已经无法满足服务变动的需求。因此,文章介绍了ZooKeeper、Eureka、Consul和Nacos等服务发现框架的发展历程,以及它们的功能和特点。最后,文章提到了云原生时代对基础设施和网络协议层面的要求,以及服务发现的三个关键子问题。 本文详细介绍了服务发现的三大功能问题:服务的注册、维护和发现。服务注册中心在整个系统中扮演着特殊的角色,作为其他所有服务直接依赖的基础服务,其可用性对整个系统至关重要。在服务发现框架的选择上,文章提到了AP和CP两种取舍,以及不同的实现形式对系统的可用性和可靠性的影响。 通过本文的总结,读者可以快速了解服务发现的重要性,不同服务发现框架的发展历程和特点,以及在选择服务发现框架时需要考虑的AP和CP取舍,为读者提供了指导和参考。 在微服务架构中,服务发现是将固定的代表服务的标识符转化为动态的真实服务地址,并持续维护这些地址在动态运维过程中的时效性。为了完成这个目标,服务发现需要解决注册、维护和发现三大功能问题,并且需要妥善权衡分布式环境下一致性与可用性之间的矛盾,由此派生出了以DNS、专有服务等不同形式,AP和CP两种不同权衡取向的实现方案。 欢迎在留言区分享你的思考和见解。如果你觉得有收获,也欢迎把今天的内容分享给更多的朋友。
请先领取课程
全部留言(14)
- 最新
- 精选
- 樊野老师您好!我们原有的应用是使用zookeeper来做服务发现的,随着应用向k8s迁移,目前纠结是继续使用zk做服务发现,还是该用k8s的DNS机制来做服务发现,想请教一下老师这两种方案的考量。
作者回复: 没有具体场景的话,这个比较很难言之有物。 zk和dns各自的优势在文章中多提到了,你可以自己把握一下。如果只说一个大方向的话,我的意见是如无必要,勿增实体。如果向k8s迁移是既定的方案,如果k8s的dns能满足需要,那拆除掉zk是值得的,哪怕花费一点测试的成本,在日后的运维中也能找补回来。。
2021-02-0117 - longslee老师您好!恕我愚笨,不知道理解是否有误:我的理解 DNS 只能翻译到 IP 级,那是不是同一个服务只能放不同的 IP 上;而 Eureka 这样的框架,可以在一个 IP 下挂多个进程(端口不一样) ?
作者回复: 大家最常说的域名查询,没有特定上下文的话,一般是指DNS的A记录和AAAA记录,它们返回的是IPv4\IPV6地址,这个确实是只到IP层面的,但DNS并不只能做到这些,如返回SRV记录,用来标识某台服务器使用了某个服务,这个就可以包含端口。
2021-02-23215 - neohope感觉其实要解决的问题并不一样: 1、基于DNS,其实要解决的问题是流量的流向,可以做到流量监控,但无法管理到具体业务,功能简单,效率更高;正好符合K8S的需要; 2、服务发现框架,其实是深入到业务层面,在应用框架集成、业务监听支持、健康检查、服务保护等功能。而且基于业务需求,进一步提供配置管理、环境管理等、多数据中心管理、业务紧密结合的功能; 有点像前面说的四层负载和七层负载的意思。 一个功能简单,效率高花头少;一个功能复杂,效率低可发挥空间更大;2021-04-0515
- 大力水手Jerry“Consul 采用的是Raft 协议,要求多数派节点写入成功后,服务的注册或变动才算完成,这就严格地保证了在集群外部读取到的服务发现结果一定是一致的”好像有点问题,首先“在集群外部读取到的服务发现结果一定是一致的”指的是强一致性,但consul实际提供了三种一致性模式。 其次所有分布式共识算法从集群内部看,我理解应该都是异步且弱一致的。要想给外界强一致的感觉,必须在共识机制之上增加额外的限制条件,比如W+R>N,相当于牺牲读的速度,保证强一致性。 再次,CAP中的C是linearizability,如果我们把服务注册与发现系统视为一个黑盒,将客户发起请求操作的先后顺序作为语义正确性条件,那么它实际是一个sequential consistency,我觉得中文世界有很多对CAP的错误理解和过度使用。如果将外部的强弱一致性与内部一致性/共识的具体实现分开讲,这样会更简单清晰。AP和CP真把我看迷糊了。。2021-04-124
- zhanydZooKeeper、Doozerd、Etcd、SkyDNS、CoreDNS、Eureka、Consul、Necos 仅仅一个服务发现就有这么种方案,真是百家争鸣,好不热闹。 不过这么多方案,对新人来说也太不友好了,光听这么多名字就快把我劝退了,会不会有个带头大哥出来统一江湖呢?2021-02-014
- Jxin1.DNS无法及时感知服务集群的增减变动。 2.DNS由于多级缓存的问题应该是不适合服务发现的场景的。如果必须要有DNS的参与,感觉得在DNS后面挂一层负载均衡器集群,负责完成时效性更好的服务发现功能。链路就变成请求->DNS->负载均衡器->服务集群。多一跳,也别扭。2021-02-102
- Zhi LiuDNS的问题应该是TTL和多级缓存。公司实际应用过程中是DNS返回负载均衡器的地址,负载均衡器再负责分派到服务。一次一台负载均衡器背后的服务在部署的时候被暂停了导致所有发送到这个负载均衡器的http request 都失败,我们把这个负载均衡器的IP从DNS中删除,但是并没有作用,因为IP已经在多级缓存中了。 我没用过consul或者其他的框架和工具,但是应该可以避免DNS协议的这个缺点。2023-08-22归属地:美国1
- lecuryconsul相对于DNS来说, 1)优势:它以服务为主体提供了服务信息查询、注册、健康检查等众多管理工具,功能较为强大,也提供了WebUI界面。 2)劣势:对于轻量级、低延迟要求业务场景下,有一些较高的管理成本。2022-11-18归属地:上海1
- 静心最后的问题是个好问题啊。2021-11-231
- hillwaterdns相比框架集成,我倾向于后者,后者性能高、功能丰富、开发量小,包括长链接加持,元数据管理,web UI,微服务治理功能;dns尽管透明,但是周边隐藏开发量很高2023-08-22归属地:浙江