1.为什么要服务发现【https://www.nginx.com/blog/service-discovery-in-a-microservices-architecture/】

2.选型

3.业界使用【http://www.infoq.com/cn/articles/background-architecture-and-solutions-of-service-discovery】

DNS可以算是最为原始的服务发现系统,但是在服务变更较为频繁,即服务的动态性很强的时候,DNS记录的传播速度可能会跟不上服务的变更速度,这将导致在一定的时间窗口内无法提供正确的服务位置信息,所以这种方案只适合在比较静态的环境中使用,不适用于微服务。

基于ZooKeeper、Etcd等分布式键值对存储服务来建立服务发现系统在现在看起来也不是一种很好的方案,一方面是因为它们只能提供基本的数据存储功能,还需要在外围做大量的开发才能形成完整的服务发现方案。另一方面是因为它们都是强一致性系统,在集群发生分区时会优先保证一致性、放弃可用性,而服务发现方案更注重可用性,为了保证可用性可以选择最终一致性,这两方面原因共同导致了ZooKeeper、Etcd这类系统越来越远离服务发现方案的备选清单,像SmartStack这种依赖ZooKeeper的服务发现方案也逐渐发觉ZooKeeper成了它的薄弱环节。

Netflix的Eureka是现在最流行的服务发现方案,服务端和客户端都是Java编写的,针对微服务场景,并且和Netflix的其他开源项目以及Spring Cloud都有着非常好的整合,具备良好的生态,如果你使用Java语言开发,Eureka几乎是你的最佳选择。与ZooKeeper、Etcd或者依赖它们的方案不同,Eureka是个专门为服务发现从零开始开发的项目,Eureka以可用性为先,可以在多种故障期间保持服务发现和服务注册功能可用,虽然此时会存在一些数据错误,但是Eureka的设计原则是“存在少量的错误数据,总比完全不可用要好”,并且可以在故障恢复之后按最终一致性进行状态合并,清理掉错误数据。

前面为什么说Eureka“几乎是”最佳选择,因为它还有个强大的对手Consul。Consul是HashiCorp公司的商业产品,它有一个开源的基础版本,这个版本在基本的服务发现功能之外,还提供了多数据中心部署能力,包括内存、存储使用情况在内的细粒度服务状态检测能力,和用于服务配置的键值对存储能力(这是一把双刃剑,使用它可以带来便捷,但是也意味着和Consul的较强耦合性),这几个能力Eureka目前都没有。而Consul的商业版本功能更为强大,如果你不介意依赖单一公司提供的商业产品,也可以从Consul的开源版本开始用起。

最后还有一个比较有趣的方案是SkyDNS,这是一个结合古老的DNS技术和时髦的Go语言、Raft算法的有趣项目,主要在Kubernetes里使用,因为Kubernetes有一层较为稳定的Service抽象,有点类似于问题2里描述的服务端服务发现方式,所以不存在DNS时间窗口的问题。

这里我就不对上述的各个方案做具体功能特性上的对比了,我在做方案选型时不太喜欢做这种微观对比,因为具体的功能特性是易变的,今天Consul出一个新功能,明天Eureka出一个新特性,如果依赖这个做选择,会摇摆不定,我更注重这些方案背后的一些根深蒂固的必然性,比如ZooKeeper永远都不会为了服务发现放弃它的强一致性,所以即使它有再多适合服务发现的功能特性,它也不会成为服务发现的优选方案,再比如Consul由一家商业软件公司提供,那么必然或多或少的存在商业软件的某些弊端,如果你非常在意这些弊端,Consul再强大,你也不会选择它。

转载于:https://www.cnblogs.com/davidwang456/p/9250493.html

微服务实践分享(3)服务发现相关推荐

  1. 京东、宅急送的微服务实践分享(上)- 架构师小组交流会

    架构师小组交流会是由国内知名公司技术专家参与的技术交流会,每期选择一个时下最热门的技术话题进行实践经验分享. 本期话题:微服务.微服务架构以其高度的弹性.灵活性和效率的巨大提升,快速受到各领域架构师和 ...

  2. 微服务实践分享(8) 控制调用中心

    1.熔断 在微服务领域,熔断机制是从消费端保护微服务提供者的措施,当微服务的运行质量低于某个临界值时,启动熔断机制,暂停微服务调用一段时间,以保障后端的微服务不会因为持续过负荷而宕机. 2.降级 服务 ...

  3. 微服务实践分享(4)配置中心

    1.配置中心 在系统架构中,和安全.日志.监控等非功能需求一样,配置管理也是一种非功能需求.配置中心是整个微服务基础架构体系中的一个组件,如下图,它的功能看上去并不起眼,无非就是简单配置的管理和存取, ...

  4. 微服务实践分享(1) 概况

    1.微服务的技术体系,如下图所示: 后面针对每一个最近 转载于:https://www.cnblogs.com/davidwang456/p/9248502.html

  5. 微服务实践分享(5)缓存中心

    1.redis应用场景[https://www.huaweicloud.com/product/dcs.html] 2.选型 3.业界情况: 阿里云[1] 京东金融[2] 携程开源Redis多数据中心 ...

  6. 微服务实践分享(9)文档中心

    1.文档中心 在项目中,需要协同开发,所以会写许多API文档给其他同事,以前都是写一个简单的TXT文本或Word文档,口口相传,这种方式比较老土了,所以,需要有个api管理系统专门来管理这些api 2 ...

  7. 微服务实践分享(2)api网关

    1.作用[http://chuansong.me/n/465796751848]: 一个完整的.「面向接入」的API GW需要包含以下功能: 面向运行期 对客户端实现身份认证 通信会话的秘钥协商,报文 ...

  8. 2019年微服务实践第一课,网易谐云蘑菇街奥思技术大咖深度分享

    微服务的概念最早由Martin Fowler与James Lewis于2014年共同提出,核心思想是围绕业务能力组织服务,各个微服务可被独立部署,服务间是松耦合的关系,以及数据和治理的去中心化管理.微 ...

  9. 唯品会、滴滴、沪江架构师,关于微服务粒度、高可用、持续交互的实践分享交流(下)...

    架构师小组交流会:每期选择一个时下最热门的技术话题进行实践经验分享. 本期小组交流会邀请到了沪江黄凯.唯品会郑明华.滴滴赵伟.七牛云肖勤,对微服务粒度.高可用.持续交互展开了交流. 本期接着上期唯品会 ...

最新文章

  1. sas和python哪个更容易_我该选择谁?SAS VS Python
  2. 为 Python Web App 编写 Dockerfiles
  3. 解决Ubuntu17.04不能安装git的问题 E: Package 'git' has no installation candidate
  4. linux 系统arp检测工具,linux网络常用诊断工具
  5. 领导者/追随者(Leader/Followers)模型和半同步/半异步(half-sync/half-async)模型
  6. Java中如何防止内存泄漏的发生
  7. kingcms php 排序 标签,Phpcms v9 如何设置排序listorder
  8. head禁用页面缓存
  9. 关于IP地址定位、IP查询和IP地址库 你想了解的历史都在这里
  10. arm模拟器手机版_基于ARM的模拟器
  11. 红米2怎么升android l,红米2的1G内存少装app够用?怎样让1G内存的安卓手机多装app而不卡?...
  12. Oracle安装时先决条件检查失败
  13. 关于工作总结中的感悟
  14. windows服务简介
  15. 斐讯路由器宽带运营商服务器,新版斐讯p.to路由器的设置教程
  16. 150个节点的本地机房建设解决方案
  17. Ubuntu20.04挂载4T数据盘流程
  18. 非核心版本的计算机上_哪个版本的Microsoft Office最好使用、来占用最少的资源...
  19. 小技巧 | 关于问卷星如何粘贴复制
  20. RPA机器人流程自动化的灯塔效应

热门文章

  1. skb_shinfo(skb)-dataref 含义
  2. matlab 蜂窝网格,blender怎么制作蜂巢网格 蜂窝式网格画法
  3. python语言使用什么语句实现上下文管理协议_Python with语句上下文管理器两种实现方法分析...
  4. php根据时间段分组,php按月分组(时间戳)
  5. 爬虫+数据分析,制作一个世界疫情人数增长动态柱状竞赛图2
  6. php 子类名,php的继承方法获取子类名
  7. AT网络抽象层的实现
  8. android库项目管理,一个android工程代码多个差异化项目管理方法探讨
  9. java udp 多播 广播_Java UDP 广播与多播
  10. Linux下C语言程序的内存布局(内存模型)