分布式系统如何寻址?

简介: 分布式系统如何寻址?

分布式系统如何寻址?


通过 RPC 框架,能够解决服务之间的跨网络通信问题,是微服务改造的基础。

服务拆分之后,需要维护更多细粒度的服务,这样就涉及到 RPC 客户端服到服务端的 部署地址问题,如何维护? 这个时候就需要服务注册和发现。


什么叫服务发现?


所谓的服务发现,就是让服务调用方知道服务提供方的地址是啥?比如 Ngnix 作为反向代理器,可以这样当请求到来时,可以通过 nginx 知道应用服务器的地址是什么。这个就叫:服务发现


Nginx 是怎么做服务发现的?

答案:Nginx 是将应用服务器的地址放在配置文件中。

vi nginx.conf
location  / {
                proxy_pass http://39.107.125.254:8080/springwebdemo/loginaction.do?op=tologin;
                proxy_set_header Host $host:8080;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Via "nginx";
         }
#刷新配置
./nginx -s reload


proxy_pass 配置的就是对应的 url .

配置proxy_pass代理转发时,如果在proxy_pass后面的url加/,表示绝对根路径;如果没有/,表示相对路径,把匹配的路径部分也给代理走。

但是这样存在一些问题:

  • 需要扩容的时候,需要修改客户端配置,重启客户端进程,操作起来比较麻烦。
  • 一旦一个服务器出故障,需要修改配置,然后重启,无法自动修复
  • RPC 服务端上线无法提前摘除流量,也就是说,发往服务端的请求流量依然会存在,客户端被重启服务端的请求还没有返回,会造成客户端请求失败。


注册中心是怎么解决这些问题的?


注册中心两点功能:

  • 提供服务地址的存储
  • 当存储内容发生变化时,可以将变更的内容推送给客户端

有了第二个内容,当需要紧急扩容时,当服务器发生故障时,需要快速摘除节点,都不用重启就可以实现。

使用注册中心后,RPC 的通信:

image.png

  • 客户端与注册中心建立连接,告诉注册中心。
  • 服务端向注册中心注册服务后,注册中心会将最新的服务注册信息通知给客户端。
  • 客户端拿到服务端的地址之后,就可以向服务端发起调用请求。

服务端的增加减少对于客户端来说是透明的,这样可以实现不重启客户端,就可以动态地变更服务节点,并且实现优雅关机。


什么是优雅关机


优雅关机的相对面是暴力关机,暴力停止服务,已经发送的请求还没有来得及处理,就被杀掉,这样会造成部分请求失败。因此需要在服务端退出的时候,先停止掉流量,不再受理新的请求,当服务处理完之后再关闭。

相关文章
|
21天前
|
存储 分布式计算 Hadoop
ChunkServer 原理与架构详解
【8月更文第30天】在分布式文件系统中,ChunkServer 是一个重要的组件,负责存储文件系统中的数据块(chunks)。ChunkServer 的设计和实现对于确保数据的高可用性、一致性和持久性至关重要。本文将深入探讨 ChunkServer 的核心原理和内部架构设计,并通过代码示例来说明其实现细节。
22 1
|
2月前
|
存储 缓存 NoSQL
深入理解分布式缓存在后端系统中的应用与实践
【7月更文挑战第20天】 本文将探讨分布式缓存技术在后端系统设计中的关键角色,并揭示其如何优化性能和扩展性。文章不仅剖析了分布式缓存的基本原理和工作机制,而且提供了实际案例分析,展示了其在处理大规模数据时的优势。我们将深入了解几种流行的分布式缓存解决方案,并讨论它们在不同场景下的适用性。最后,文章将指导读者如何在真实世界的应用中实施分布式缓存,包括架构设计、性能调优以及故障排除的最佳实践。
|
存储 缓存 应用服务中间件
微服务架构间数据传输,我坚决反对用缓存!
微服务架构间数据传输,我坚决反对用缓存!
135 0
|
10月前
|
存储 消息中间件 移动开发
分布式系统中的数据复制
网络故障可能会导致主主架构中的数据不一致。 让我们用一个例子来理解这一点,假设我们有两个数据库实例 A 和 B。
43 1
|
存储 缓存 移动开发
【软考学习6】计算机存储结构——局部性原理、Cache、主存地址单元、磁盘存取、总线和可靠性
【软考学习6】计算机存储结构——局部性原理、Cache、主存地址单元、磁盘存取、总线和可靠性
178 0
|
缓存 Java Android开发
12 张图看懂 CPU 缓存一致性与 MESI 协议,真的一致吗?
什么是缓存一致性问题,CPU Cache 的读取和写入过程是如何执行的,MESI 缓存一致性协议又是什么?今天我们将围绕这些问题展开。
1343 0
|
存储
指令系统——数据寻址
指令系统——数据寻址
180 0
指令系统——数据寻址
|
存储 安全 内存技术
【计算机系统】寻址模式详解与总结
【计算机系统】寻址模式详解与总结
328 0
【计算机系统】寻址模式详解与总结
openflow多级流表机制的优点?
openflow多级流表机制的优点?
268 0