目录
SpringCloud的常用组件有哪些:
Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,常见的springCloud的常用组件如:
服务调用组件:Feign
Feign通过处理注解,将请求模板化,当实际调用的时候,传入参数,根据参数再应用到请求上,进而转化成真正的 Request 请求。通过Feign以及JAVA的动态代理机制,使得Java 开发人员,可以不用通过HTTP框架去封装HTTP请求报文的方式,完成远程服务的HTTP调用。
服务注册组件:eurka,Nacos
服务提供者:提供服务,在启动时,根据服务发布文件中的配置的信息,向注册中心注册自身服务,并向注册中心定期发送心跳汇报
服务消费者:调用服务,在启动时,根据服务引用文件中配置的信息,将注册中心订阅服务,把注册中心返回的服务节点列表缓存在本地内存中,并于服务提供者建立连接
- 当服务提供者节点发生变更时,注册中心会同步变更。服务消费者感知后会刷新本地缓存的服务节点列表
- 服务消费者从本地缓存的服务节点列表中,基于负载均衡算法选择服务提供者的一个节点发起调用
负载均衡组件:nginx,Ribbon
俄罗斯人开发的一个高性能的 HTTP和反向代理服务器。由于Nginx 超越 Apache 的高性能和稳定性,使得国内使用 Nginx 作为 Web 服务器的网站也越来越多,其中包括新浪、网易、腾讯、搜狐等企业的一些门户网站等,在3w以上的高并发环境下,ngnix处理能力相当于apache的10倍。
服务保护组件:sentinel
Sentinel 是面向分布式服务架构的高可用流量防护组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。
网关组件:gateway,Zuul
服务配置管理组件:Nacos,SpringCloudConfig
Nacos的服务注册表结构是怎样的?
Nacos的服务注册表结构与分级存储模型是分不开的,首先,在nacos的分级存储模型中,在Namespace中以Map结构存储着以name_id为key与其结构下的Map类型的键值Group,在Group中的结构中又存储着同样的servcic,在之后,service同样存储同类型的Cluster,在Cluster的键值对中存储着Set类型的实例。
Nacos如何支撑数十万服务注册压力?
Nacos内部接收到注册的请求时,不会立即写数据,而是将服务注册的任务放入一个阻塞队列就立即响应给客户端。然后利用线程池读取阻塞队列中的任务,异步来完成实例更新,从而提高并发写能力。
Nacos如何避免并发读写冲突问题?
Nacos在更新实例列表时,会采用CopyOnWrite技术,首先将旧的实例列表拷贝一份,然后更新拷贝的实例列表,再用更新后的实例列表来覆盖旧的实例列表。
这样在更新的过程中,就不会对读实例列表的请求产生影响