摘要:
HotSpot 使用 OopMap 把引用类型的指针记录下来,让 GC Roots 的枚举变得快速准确。
为了减少更新 OopMap 的开销,引入了 安全点。GC STW 时,线程需要跑到距离自己最近的安全点,更新完 OopMap 才能挂起。
处于Sleep 或者 Blocked 状态的线程无法跑到安全点,需要引入安全区域。GC 的时候,不会去管处于安全区域的线程,线程离开安全区域的时候,如果处于 STW 则需要等待直至恢复。 阅读全文
摘要:
什么是垃圾:没有任何引用指向的一个或多个对象。
如何识别垃圾,有两种算法:
1. 引用计数法:通过给对象添加被引用的次数来识别。优点是回收简单及时;缺点是无法解决循环引用。
2. 可达性分析法:从一系列根对象(GC Roots)开始,根据引用关系向下搜索,如果某个对象到 GC Roots 间没有任何引用,则此对象就是垃圾。优点是解决了循环引用;缺点是耗时和 STW。 阅读全文
摘要:
心跳是用于服务端和客户端保持有效连接的一种手段,客户端每隔一小段时间发一个心跳包,以告知服务端其在线。
重连机制是连接断开之后,要使用的时候自动重连的机制。
心跳和重连机制,结合起来让服务端和客户端的连接使用更加合理,该断开的断开节省服务端资源,该重连的重连提高可用性。 阅读全文
摘要:
Netty 在服务端与客户端的网络通信中,使用的是异步双向通信(双工)的方式,即客户端和服务端可以相互主动发请求给对方,发消息后不会同步等响应。这样就会有一下问题:
1. 如何识别消息是请求还是响应?
2. 请求如何正确对应到响应? 阅读全文
摘要:
TCP 是一个“流”协议,所谓流,就是没有界限的一长串二进制数据。TCP 作为传输层协议,并不了解上层业务数据的具体含义,它会根据 TCP 缓冲区的实际情况进行数据包的划分,所以在业务上认为是一个完整包的,可能会被 TCP 拆分成多个包进行发送,也有可能把多个小的包封装成一个大的数据包发送,这就是所谓的 TCP 拆包和粘包问题。那么如何解决粘包拆包问题呢? 阅读全文
摘要:
ccx-rpc 选择的网络框架是 Netty,Netty 是一款大名鼎鼎的异步事件驱动的网络应用程序框架,支持快速地开发可维护的高性能的面向协议的服务器和客户端。 阅读全文
摘要:
从现在开始,我们要开始讲网络通信相关的内容了。既然是网络通信,那必然会涉及到序列化的相关技术。
序列化器的定义,很简单,只有序列化,反序列化两个方法。
常见的序列化算法有:Java 序列化、FastJson、Jackson、Kryo、Hessian、Protobuf 等。这些算法各有优缺点,大家在使用时,可以结合自己的业务情况进行选择。 阅读全文
摘要:
RPC 中 Consumer 需要请求 Provider 的接口,必须要知道 Provider 的地址才能请求到。那么,Consumer 要从哪里获取 Provider 的地址呢?答案是:注册中心 阅读全文
摘要:
URL 可以理解为配置总线,所有扩展点参数都包含 URL 参数,URL 作为上下文信息贯穿整个扩展点设计体系。 阅读全文
摘要:
RPC 框架有很多可扩展的地方,最好的做法就是留下扩展点,让使用者可以不需要修改框架,就能自己去实现扩展。
JDK 原生已经为我们提供了 SPI 机制,ccx-rpc 在此基础上,进行了性能优化和功能增强。 阅读全文
摘要:
RPC 框架是后端攻城狮永远都绕不开的知识点,本系列 "造轮子系列之RPC",手把手教大家如何打造自己的RPC框架。 阅读全文
摘要:
有序集合有两种编码方式:压缩列表 ziplist 和跳表 skiplist。 阅读全文
摘要:
集合对象的编码有两种:intset 和 hashtable。 阅读全文
摘要:
哈希对象的编码有两种:ziplist、hashtable。 阅读全文
摘要:
列表对象有 3 种编码:ziplist、linkedlist、quicklist。ziplist 和 linkedlist 是 3.2 版本之前的编码。quicklist 是 3.2 版本新增的编码,ziplist 和 linkedlist 在 3.2 版本及后续版本将不再是列表对象的编码。 阅读全文
摘要:
字符串的编码有 raw、embstr、int 三种。raw 用于长字符串; embstr 用于短字符串; int 用于整数类型。 阅读全文
摘要:
压缩列表是 ZSET、HASH和 LIST 类型的其中一种编码的底层实现,是由一系列特殊编码的连续内存块组成的顺序型数据结构,其目的是节省内存。 阅读全文
摘要:
Redis 中,字典是基础结构。Redis 数据库数据、过期时间、哈希类型都是把字典作为底层结构。 阅读全文
摘要:
在 Redis 中,字符串都用自定义的结构 简单动态字符串(Simple Dynamic Strings,SDS)。 阅读全文
摘要:
在 Redis 中,有五大数据类型,都统一封装成了一个数据类型:redisObject。 阅读全文
摘要:
Redis 服务器将绝大部分的信息都保存在 server.h/redisServer。redis 的数据是保存在 redisServer 中的 redisDb 结构中。 阅读全文
摘要:
前言 在分布式系统中,要改个配置涉及到很多个系统,一个一个改效率低下,吃力不讨好。用配置中心可以解决这个问题。当然配置中心有不少,以下对比的表格是照搬Apollo Wiki的。 功能点 Apollo Spring Cloud Config 备注 配置界面 一个界面管理不同环境、不同集群配置 无,需要 阅读全文
摘要:
前言 由于本人是个docker控,不喜欢安装各种环境,而且安装redis-trib也有点繁琐,索性用docker来做redis cluster。 本文用的是伪集群,真正的集群放到不同的机器即可。端口是7001-7006。 工作目录:/data/redis 创建文件夹 首先创建一堆对应端口的文件夹,下 阅读全文
摘要:
拉registry镜像 假设在 服务器上搭建私服 registry的github地址:https://github.com/docker/distribution 配置docker push之前需要在 添加一行 重启docker push 打标签 开始push pull的话同理 阅读全文
摘要:
简单的投影 稍微用过MongoDB的都知道,投影很简单,就直接 添加$slice的投影 然而,当我要给comments分页( )如何做呢? 错误的做法 以下给出了 错误 的做法 这样写的话,就只有分页,然后字段 显示全部 。 原因 : 对象中,同名字段,后者会覆盖前者。所以 中实际生效的只有 。 同 阅读全文