nacos进阶一 - 注册中心的演变历程及原理

简介: nacos进阶一 - 注册中心的演变历程及原理

我们原来使用单题架构的时候, 没有注册中心, 注册中心是如何悄悄的就出现在了我们的日常生活中的呢?


其实, 他肯定是有自己的一个演变过程的, 一定是因为需要, 所以才出现.


下面我们就来分析注册中心是如何演变而来的.


1. 最初的单体应用时代, 如果我一个服务是产品服务,一个试订单服务. 产品服务想要去访问订单服务, 我们都是怎么做的呢?


1187916-20200709051124871-1435281350.png

也就是说: 商品服务调用订单服务, 通过的是http远程调用的方式实现的, 这样的问题是什么呢?


  • 如果订单服务宕机了, 商品服务还能调通么?
  • 如果订单服务的ip地址更改了, 商品服务的远程调用地址是不是也要一起发生变化?
  • 如果订单服务一台服务器不够用了,  需要增加一台服务器, 商品服务就要自己维护一个订单服务的ip列表. 并按照一定规则访问


这就是单体服务的问题, 因为ip是写死在商品服务里面的, 所以, 一旦发生变化, 不能自动感知, 必须手动修改.


2. 订单服务流量增多, 变成了多个订单服务



1187916-20200709052444441-1388293459.png


这个时候, 我们怎么做的呢? 我们要满足实际业务的需求, 订单量太大了, 单台服务器经常支撑不了了, 于是就想到, 部署多台服务来分担压力.


就出现了上面的模型, 可是, 这个模型存在什么样的问题呢?


  • 程序员自己维护的ip列表, 如果订单服务某一台挂了怎么办, 那就请求不通了
  • 如果订单服服务依然不能满足需求, 还要继续扩容, 程序员又要重新维护一份订单服务的ip列表.


手动维护ip列表肯定不好, 一方面一旦有任何变动, 就需要进行维护; 另一方面, 从效率上来讲, 也不高. 还容易出错. 于是慢慢有就有了nginx


3. 使用nginx来维护订单服务的ip列表


1187916-20200709053339450-271216066.png

商品服务的所有请求过来了, 不要直接去请求订单服务. 通过nginx去请求订单服务. 在nginx中维护了订单服务的ip列表. 并且可以指定负载均衡策略.


嗯, 这个选择好像还不错, 不用程序员经常改商品服务代码了, 也不用程序员自己写如何分配请求的流量了. 那么他就满足我们所有的需求么?当然也不是


  • 虽然程序员不用在代码中维护ip列表了, 但是在nginx中依然要维护. 如果订单服务有很多很多, 怎么办? 我们知道在nginx上是通过upstream来维护ip的, 如果有成百上千的服务, 那么我们要维护成百上千个ip么?
  • 如果订单服务扩缩容了, 是不是一样要修改nginx的配置文件呢?


于是我们就想,有没有一种办法, 能够让微服务自动的就被注册上呢?这个需求迫在眉睫


4. 于是, 就有了注册中心的概念. 最初, 我们的想法也很简单


1187916-20200709055839166-1161510746.png


首先有一个数据库表来维护所有的服务, 并标记这些服务的启动状态


然后, 每当有一个服务启动, 那么都调用注册接口, 其实注册接口就是一个insert服务器信息到数据库的过程


第三, 每次商品服务要调用订单服务了, 先去数据库里面查询可用的订单服务列表. 然后根据策略选择服务ip,


第四, 根据ip发送请求.

 

这里面也会有一些问题


  • 服务宕机了怎么办? 还来不及发出通知
  • 每次商品服务调用订单服务, 都要去数据库查询可用的服务列表, 这样当流量大了, 就会给数据库造成很大的压力, 而且, 每次都查数据库, 效率也不高.
  • 注册中心宕机 了怎么办?


于是, 想到将我们的注册中心进行改造. 改造的更加完美一些


5. 改造后的注册中心


1187916-20200709062456350-21008460.png


这个就是在上面的基础上改造过来的


1. 增加了一个last_heartTime, 记录心跳时间.


2. 当商品服务和订单服务启动的时候, 需要调用注册接口, 告诉注册中心, 我上线了, 实质上这是一个insert记录的过程


3. 商品服务和订单服务有一个定时任务timetask1, 定期发送心跳. 然后注册中心就会修改这个心跳时间. 通常是30秒发送一次.


4. 商品服务有一个定时任务timerTask2, 定期去任务中心拉取服务列表, 并将其保存在客户端缓存中, 当请求过来的时候, 通过ribbon拉取客户端缓存的ip, 按照负载均衡策略, 选择指定的订单服务发送远程调用,


5. 在注册中心有一个定时任务timerTask3,  如果注册中心在规定的时间内, 没有收到微服务的心跳, 那么就认为服务挂了, 将其状态设置为down, 下次拉取的时候, 这台服务器不会被拉取过去. 其实,这是一个状态修改的过程


6. 当服务停止的时候, 会调用服务注销接口, 通知注册中心,服务停止, 注册中心就是将其从注册表中删除. 其实这就是一个delete记录的过程

 

以上就是注册中心的由来, 和根本的原理.

相关文章
|
2月前
|
存储 缓存 负载均衡
Nacos注册中心
Nacos注册中心
74 1
Nacos注册中心
|
2月前
|
Java 网络安全 Nacos
Nacos作为流行的微服务注册与配置中心,其稳定性与易用性广受好评
Nacos作为流行的微服务注册与配置中心,其稳定性与易用性广受好评。然而,“客户端不发送心跳检测”是使用中常见的问题之一。本文详细探讨了该问题的原因及解决方法,包括检查客户端配置、网络连接、日志、版本兼容性、心跳检测策略、服务实例注册状态、重启应用及环境变量等步骤,旨在帮助开发者快速定位并解决问题,确保服务正常运行。
51 5
|
2月前
|
网络安全 Nacos 开发者
Nacos作为流行的微服务注册与配置中心,“节点提示暂时不可用”是常见的问题之一
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。然而,“节点提示暂时不可用”是常见的问题之一。本文将探讨该问题的原因及解决方案,帮助开发者快速定位并解决问题,确保服务的正常运行。通过检查服务实例状态、网络连接、Nacos配置、调整健康检查策略等步骤,可以有效解决这一问题。
41 4
|
2月前
|
Java 网络安全 Nacos
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。然而,实际使用中常遇到“客户端不发送心跳检测”的问题。本文深入探讨该问题的原因及解决方案,帮助开发者快速定位并解决问题,确保服务正常运行。通过检查客户端配置、网络连接、日志、版本兼容性、心跳策略、注册状态、重启应用和环境变量等步骤,系统地排查和解决这一问题。
56 3
|
2月前
|
安全 Nacos 数据库
Nacos是一款流行的微服务注册与配置中心,但直接暴露在公网中可能导致非法访问和数据库篡改
Nacos是一款流行的微服务注册与配置中心,但直接暴露在公网中可能导致非法访问和数据库篡改。本文详细探讨了这一问题的原因及解决方案,包括限制公网访问、使用HTTPS、强化数据库安全、启用访问控制、监控和审计等步骤,帮助开发者确保服务的安全运行。
72 3
|
3月前
|
负载均衡 算法 Java
蚂蚁面试:Nacos、Sentinel了解吗?Springcloud 核心底层原理,你知道多少?
40岁老架构师尼恩分享了关于SpringCloud核心组件的底层原理,特别是针对蚂蚁集团面试中常见的面试题进行了详细解析。内容涵盖了Nacos注册中心的AP/CP模式、Distro和Raft分布式协议、Sentinel的高可用组件、负载均衡组件的实现原理等。尼恩强调了系统化学习的重要性,推荐了《尼恩Java面试宝典PDF》等资料,帮助读者更好地准备面试,提高技术实力,最终实现“offer自由”。更多技术资料和指导,可关注公众号【技术自由圈】获取。
蚂蚁面试:Nacos、Sentinel了解吗?Springcloud 核心底层原理,你知道多少?
|
4月前
|
负载均衡 Java Nacos
SpringCloud基础1——远程调用、Eureka,Nacos注册中心、Ribbon负载均衡
微服务介绍、SpringCloud、服务拆分和远程调用、Eureka注册中心、Ribbon负载均衡、Nacos注册中心
SpringCloud基础1——远程调用、Eureka,Nacos注册中心、Ribbon负载均衡
|
4月前
|
Kubernetes Nacos 容器
nacos注册不上
我正在使用开源的Nacos,并已在Kubernetes中部署了Nacos服务,通过端口映射可在集群外访问Nacos控制台。Kubernetes使用NodePort类型暴露了8848、9848、9849、7848和9555端口,但在尝试注册时遇到问题,出现“Client not connected, current status: STARTING”的错误,导致启动失败。
|
5月前
|
Cloud Native Java Nacos
微服务注册中心-Nacos概述
该博客文章提供了对Nacos的全面概述,包括其基本介绍、与Spring Cloud集成的优势、主要功能以及如何在Spring Cloud Alibaba项目中作为服务注册中心使用Nacos。文章解释了Nacos是一个动态服务发现、配置管理和服务管理平台,支持服务发现、健康监测、动态配置、DNS服务和元数据管理。还介绍了如何下载和启动Nacos服务器,以及如何将微服务注册到Nacos中,包括修改pom.xml文件引入依赖、配置application.properties文件和使用@EnableDiscoveryClient注解开启服务注册发现功能。
微服务注册中心-Nacos概述
|
5月前
|
Java Nacos Docker
"揭秘!Docker部署Seata遇上Nacos,注册成功却报错?这些坑你不得不防!一网打尽解决秘籍,让你的分布式事务稳如老狗!"
【8月更文挑战第15天】在微服务架构中,Nacos搭配Seata确保数据一致性时,Docker部署Seata后可能出现客户端连接错误,如“can not connect to services-server”。此问题多由网络配置不当、配置文件错误或版本不兼容引起。解决策略包括:调整Docker网络设置确保可达性;检查并修正`file.conf`和`registry.conf`中的Nacos地址和端口;验证Seata与Nacos版本兼容性;修改配置后重启服务;参考官方文档和最佳实践进行配置。通过这些步骤,能有效排除故障,保障服务稳定运行。
383 0