心跳包

面试连环炮系列(二):你们的项目Redis做了集群部署吗

怎甘沉沦 提交于 2019-11-29 04:44:50
你们的项目Redis做了集群部署吗? 我们有大量数据需要缓存,而单实例的容量毕竟是有限的,于是做了Redis集群部署。 采取的方案是什么,Codis还是Redis Cluster,为什么要选择这个方案? 我们采用的官方Redis Cluster方案。Codis是一整套缓存解决方案,采取的代理模式实现了高可用、数据分片、监控、动态扩态等功能,但是部署太复杂了。Cluster要简单很多,而且也基本满足目前的需要。 Redis Cluster有什么缺点吗,或者说不适合什么场景? 这种模式将存储和元数据管理放一起的,出现问题不好排查,如果是大规模集群或者多地域情况下不适合, 可能会有较高的网络通讯成本以及脑裂等问题。 Redis Cluster的集群分片原理是什么? Redis集群没有使用一致性hash, 而是引入了哈希槽的概念。Redis集群有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定放置哪个槽,集群的每个节点负责一部分hash槽,举个例子,比如当前集群有3个节点,那么:节点 A 包含 0 到 5500号哈希槽;节点 B 包含5501 到 11000 号哈希槽;节点 C 包含11001 到 16384号哈希槽。 为什么哈希槽偏偏是16384个? 在redis节点发送心跳包时需要把所有的槽放到这个心跳包里,以便让节点知道当前集群信息,16384=2^14

SpringCloud服务的注册发现--------Eureka自我保护机制

有些话、适合烂在心里 提交于 2019-11-28 00:37:20
1,Eureka 自我保护机制 Eureka注册中心,一些服务会注册到Eureka 服务器上,例如之前的member服务,order服务。 在网络不通的情况下,如果一个bmember 挂了,但是Eureka注册中心并不会立即将这个服务剔除,还在注册中心上显示出来。会被认为这个服务还可用。 因此需要Eureka客户端(注册到Eureka上的服务)定时的向Eureka服务端发送心跳包,Eureka服务端没有收到心跳包,会将服务剔除。 但是,如果短时间内,但是在短时间内丢失大量的实例心跳,这时候EurekaServer会开启自我保护机制,Eureka不会踢出该服务。 2,但是我们在开发测试阶段,需要频繁地重启发布,如果触发了保护机制,则旧的服务实例没有被删除,这时请求有可能跑到旧的实例中,而该实例已经关闭了,这就导致请求错误,影响开发测试。所以,在开发测试阶段,我们可以把自我保护模式关闭,只需在eureka server配置文件中加上如下配置即可: 但在生产环境,不会频繁重启,所以,一定要把自我保护机制打开,否则网络一旦中断,就无法恢复。 3,配置 Eureka 服务器端:即Eureka配置中心的配置 红色部分代表关闭保护机制 ###服务端口号 server: port: 8100 ###eureka 基本信息配置 spring: application: name: eureka

HSF的原理分析

百般思念 提交于 2019-11-28 00:07:53
一.HSF的基本概念 HSF全称为High-Speed Service Framework,旨在为淘系的应用提供一个分布式的服务框架,HSF从分布式应用层面以及统一的发布/调用方式层面为大家提供支持,从而可以很容易的开发分布式的应用以及提供或使用公用功能模块,而不用考虑分布式领域中的各种细节技术,例如远程通讯、性能损耗、调用的透明化、同步/异步调用方式的实现等等问题。 二.知识准备 通过以上的说明,大致了解了一下RPC与HSF的总体架构,但是总体架构离具体实现还想差很多,有些知识准备还是很有必要的。 1.对象的序列化 对象的序列化过程在RPC过程中是很重要的一个环节,序列化对于远程调用的响应速度、吞吐量、网络带宽消耗等同样也起着至关重要的作用。在HSF1.0时只支持两种序列化方式:java 和 hessian,在HSF2.0之后就支持了五种序列化方式:java、hessian、hessian2、json、kyro。但是目前版本中常用的序列化方式还是java 和 hessian两种。如果想细致的了解也可以多做了解。 2.动态代理 对于消费方来说,所存在的只有一个接口,虽然底层的实现原理我们知道,但是为了在使用时的高度透明,在JAVA语言层面上的表现形式则是通过动态代理的方式实现的,很多的逻辑都在InvocationHandler 中处理的。关于如何实现动态代理

一文读懂即时通讯应用中的网络心跳包机制:作用、原理、实现思路等

ぐ巨炮叔叔 提交于 2019-11-26 12:34:34
本文原文由作者“张小方”原创发布于“高性能服务器开发”微信公众号,原题《心跳包机制设计详解》,即时通讯网收录时有改动。 1、引言 一般来说,没有真正动手做过网络通信应用的开发者,很难想象即时通讯应用中的心跳机制的作用。但不可否认,作为即时通讯应用,心跳机制是其网络通信技术底层中非常重要的一环,有没有心跳机制、心跳机制的算法实现好坏,都将直接影响即时通讯应用在应用层的表现——比如:实时性、断网自愈能力、弱网体验等等。 总之,要想真正理解即时通讯应用底层的开发,心跳机制必须掌握,而这也是本文写作的目的,希望能带给你启发。 需要说明的是:本文中涉及的示例代码是使用 C/C++ 语言编写,但是本文中介绍的心跳包机制设计思路和注意事项,都是是些普适性原理,同样适用于其他编程语言。虽然语言可以不同,但逻辑不会有差别! 学习交流: - 即时通讯/推送技术开发交流4群: 101279154 [推荐] - 移动端IM开发入门文章:《 新手入门一篇就够:从零开发移动端IM 》 (本文同步发布于: http://www.52im.net/thread-2697-1-1.html ) 2、相关文章 《 为何基于TCP协议的移动端IM仍然需要心跳保活机制? 》( 推荐 ) 《 微信团队原创分享:Android版微信后台保活实战分享(网络保活篇) 》( 推荐 ) 《 移动端IM实践