美文网首页分布式架构
什么是服务发现

什么是服务发现

作者: 顽强的猫尾草 | 来源:发表于2019-01-23 10:05 被阅读0次

假设我们写的代码会调用 REST API 或者 Thrift API 的服务。为了完成一次请求,代码需要知道服务实例的网络位置(IP 地址和端口)。

运行在物理硬件上的传统应用中,服务实例的网络位置是相对固定的,代码能从一个偶尔更新的配置文件中读取网络位置。

对于基于云端的、现代化的微服务应用而言,这却是一大难题。将容器应用部署到集群时,其服务地址是由集群系统动态分配的。那么,当我们需要访问这个服务时,如何确定它的地址呢?这时就需要服务发现(Service Discovery)了。

服务发现有两大模式:客户端发现模式和服务端发现模式。

客户端发现模式

使用客户端发现模式时,客户端决定相应服务实例的网络位置,并且对请求实现负载均衡。客户端查询服务注册表,后者是一个可用服务实例的数据库;然后使用负载均衡算法从中选择一个实例,并发出请求。

服务实例的网络位置在启动时被记录到服务注册表,等实例终止时被删除。服务实例的注册信息通常使用心跳机制来定期刷新。

客户端发现模式优缺点兼有。

  • 这一模式相对直接,除了服务注册外,其它部分无需变动。此外,由于客户端知晓可用的服务实例,能针对特定应用实现智能负载均衡,比如使用哈希一致性。
  • 这种模式的一大缺点就是客户端与服务注册绑定,要针对服务端用到的每个编程语言和框架,实现客户端的服务发现逻辑。

服务端发现模式

客户端通过负载均衡器向某个服务提出请求,负载均衡器查询服务注册表,并将请求转发到可用的服务实例。

Kubernetes 和 Marathon 这样的部署环境会在每个集群上运行一个代理,将代理用作服务端发现的负载均衡器。客户端使用主机 IP 地址和分配的端口通过代理将请求路由出去,向服务发送请求。代理将请求透明地转发到集群中可用的服务实例。

服务端发现模式兼具优缺点。

  • 它最大的优点是客户端无需关注发现的细节,只需要简单地向负载均衡器发送请求,这减少了编程语言框架需要完成的发现逻辑。并且如上文所述,某些部署环境免费提供这一功能。
  • 这种模式也有缺点。除非负载均衡器由部署环境提供,否则会成为一个需要配置和管理的高可用系统组件。

相关文章

  • 什么是服务发现?

    什么是服务发现? 服务发现并没有怎样的高深莫测,它的原理再简单不过。只是市面上太多文章将服务发现的难度妖魔化,读者...

  • 什么是服务发现

    假设我们写的代码会调用 REST API 或者 Thrift API 的服务。为了完成一次请求,代码需要知道服务实...

  • 什么是service和服务发现

    什么是service 通过创建service,可以为一组具有相同功能的容器应用提供一个统一的入口地址,并且将请求负...

  • 服务发现之consul

    什么是服务发现 服务发现有三个角色,服务提供者,服务消费者,服务中介。服务中介是联系服务提供者和服务消费者的桥梁。...

  • 服务注册与发现的原理和实现

    什么是服务注册发现? 对于搞微服务的同学来说,服务注册、服务发现的概念应该不会太陌生。 简单来说,当服务A需要依赖...

  • springcloud-服务注册与发现Eureka

    什么是服务注册与发现 服务消费者找到服务提供者的这种机制称为服务发现,又或者服务注册。 服务提供者、服务消费者、服...

  • 微服务技术栈---大纲

    微服务技术栈什么是微服务组织架构与微服务什么时候用中台战略物理分层总体架构注册发现注册发现:SpringCloud...

  • 服务发现:服务端服务发现

    背景 服务通常需要调用其他服务。单体应用中,服务通过语言级别的方法或者过程调用另外的服务。在传统的分布式部署中,服...

  • Spring Cloud Alibaba Nacos 初探

    什么是Nacos? 官方文档 概括:服务发现、服务配置、服务共享与管理等 解决什么问题? 服务直接如何相互调用 服...

  • 服务发现 - consul 的介绍、部署和使用

    相关源码: spring cloud demo 什么是服务发现 微服务的框架体系中,服务发现是不能不提的一个模块。...

网友评论

    本文标题:什么是服务发现

    本文链接:https://www.haomeiwen.com/subject/ydfjjqtx.html