热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

知识整理(八):SpringCloud相关知识

一、SpringCloud相关知识1.SpringCloud架构图2.Eureka原理答:Eureka两大核心功能:服务的发现与注册、心跳和故障。3.

一、SpringCloud 相关知识




1. Spring Cloud 架构图

在这里插入图片描述


2. Eureka 原理

   答:Eureka两大核心功能:服务的发现与注册心跳和故障
在这里插入图片描述


3. Eureka 集群原理

   答:Eureka集群是peer to peer模式,也就是说集群中的每个Eureka实例是平等的,每个实例都可以进行服务的发现和注册,这点与ZooKeeper是不同的。
在这里插入图片描述


4. Eureka和ZooKeeper的区别

   答:


  1. 集群模式不同:Eureka是peer to peer模式,ZooKeeper是leader - follower模式。
  2. 一致保障性不同:

   什么是CAP?

   答:C是一致性,A是可用性,P是分区容错性

   Eureka可以保障AP,ZooKeeper可以保障CP。

   当Eureka集群中一台机器“死掉”时,调用者仍可在Eureka其他节点中获取注册表,但是这个注册表可能不是最新的数据。因为假设当服务A向Eureka-1注册时,Eureka-1死掉了,它还没来及将服务A的数据同步给其他Eureka节点,所以调用者从其他Eureka节点中可能获取不到服务A。所以,Eureka集群保障了可用性,但是强一致性没法保障。

   当ZooKeeper集群中的leader“死掉”时,整个ZooKeeper集群将不可用,直到选举出新的leader并同步完数据后,ZooKeeper集群才可以对外使用。所以,ZooKeeper集群保障了一致性,却无法保障始终可用。


  1. 服务注册感知的时效性

   Eureka默认配置速度比较慢,甚至能达到两三分钟。而ZooKeeper感知速度很快,秒级感知。


5. Eureka 参数优化(必须)

   答:因为如果使用Eureka默认参数配置,服务的注册和发现会很慢,不符合生产使用。所以,必须手动配置参数。

   以下为调整后的参数:


参数说明
eureka.server.responseCacheUpdateintervalMs= 3000(单位毫秒)Eureka server刷新readCacheMap的时间,注意,client读取的是readCacheMap,这个时间决定了多久会把readWriteCacheMap的缓存更新到readCacheMap上(默认30秒)
eureka.client.registryFetchintervalSeconds=3(单位秒)从Eureka服务器注册表中获取注册信息的时间间隔(s),默认为30秒
eureka.client.leaseRenewalintervalSeconds=3Eureka客户需要多长时间发送心跳给eureka服务器,表明它仍然活着,默认为30 秒
eureka.server.evictionintervalTimerinMs=3000过期实例应该启动并运行的时间间隔,单位为毫秒,默认为60 * 1000
eureka.instance.leaseExpirationDurationinSeconds=3Eureka服务器在接收到实例的最后一次发出的心跳后,需要等待多久才可以将此实例删除,默认为90秒

   
   
   

   经过调整后,服务发现变为秒级。


6. 生产机器选择

   答:

   服务注册中心部署个2台机器,每台机器就是4核8G,每台机器每秒钟轻松抗几百请求,上千请求也是可以的,高可用冗余,任何一台机器死掉,不会影响系统的运行。

   微服务通常来说,如果每秒钟的并发在1000以内的话,每个服务部署2台机器,每台机器4核8G,每台机器每秒抗个几百请求,一点问题都没有
   大部分的系统,高峰期每秒几百请求,低峰期每秒几十请求,甚至几个请求。

   网关系统,4核8G的机器,一台机器抗每秒几百请求,部署3~4台机器,保证可以网关系统每台机器的压力比较小,进一步保证网关系统可靠性。

   MySQL数据库,16核32G,物理机最佳,最多抗个每秒钟几千请求问题不大,平时抗个每秒钟几百或者几十请求。


7. 如何统计QPS、接口请求数等

   答:

   做一个简单的metric统计机制,AtomicLong,原子性,并发下数据统计准确,不会错误,每个接口被调用的时候,一个是可以对每个接口每分钟都做一个Metric统计。

   对每个接口每天的请求使用一个AtomicLong做一个计数,统计出来每天的请求次数。


8. 如何实现幂等性

   答:插入新数据保障订单字段是唯一索引,更新数据先查再更新。


9. 分布式事务如何实现

   答:常用TCC可靠消息一致性。前者需要使用TCC框架,给需要保持事务的接口多写一个回滚接口,这样如果发生异常,TCC框架会调用回滚接口,保障事务。可靠消息一致性则需要使用消息中间件。


推荐阅读
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 深入理解Kafka服务端请求队列中请求的处理
    本文深入分析了Kafka服务端请求队列中请求的处理过程,详细介绍了请求的封装和放入请求队列的过程,以及处理请求的线程池的创建和容量设置。通过场景分析、图示说明和源码分析,帮助读者更好地理解Kafka服务端的工作原理。 ... [详细]
  • 十大经典排序算法动图演示+Python实现
    本文介绍了十大经典排序算法的原理、演示和Python实现。排序算法分为内部排序和外部排序,常见的内部排序算法有插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。文章还解释了时间复杂度和稳定性的概念,并提供了相关的名词解释。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 本文介绍了Java高并发程序设计中线程安全的概念与synchronized关键字的使用。通过一个计数器的例子,演示了多线程同时对变量进行累加操作时可能出现的问题。最终值会小于预期的原因是因为两个线程同时对变量进行写入时,其中一个线程的结果会覆盖另一个线程的结果。为了解决这个问题,可以使用synchronized关键字来保证线程安全。 ... [详细]
  • 本文介绍了在使用Python中的aiohttp模块模拟服务器时出现的连接失败问题,并提供了相应的解决方法。文章中详细说明了出错的代码以及相关的软件版本和环境信息,同时也提到了相关的警告信息和函数的替代方案。通过阅读本文,读者可以了解到如何解决Python连接服务器失败的问题,并对aiohttp模块有更深入的了解。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 标题: ... [详细]
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
  • Oracle seg,V$TEMPSEG_USAGE与Oracle排序的关系及使用方法
    本文介绍了Oracle seg,V$TEMPSEG_USAGE与Oracle排序之间的关系,V$TEMPSEG_USAGE是V_$SORT_USAGE的同义词,通过查询dba_objects和dba_synonyms视图可以了解到它们的详细信息。同时,还探讨了V$TEMPSEG_USAGE的使用方法。 ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • 本文介绍了在iOS开发中使用UITextField实现字符限制的方法,包括利用代理方法和使用BNTextField-Limit库的实现策略。通过这些方法,开发者可以方便地限制UITextField的字符个数和输入规则。 ... [详细]
  • MPLS VP恩 后门链路shamlink实验及配置步骤
    本文介绍了MPLS VP恩 后门链路shamlink的实验步骤及配置过程,包括拓扑、CE1、PE1、P1、P2、PE2和CE2的配置。详细讲解了shamlink实验的目的和操作步骤,帮助读者理解和实践该技术。 ... [详细]
author-avatar
fjfzfisher
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有