`
chong_zh
  • 浏览: 72332 次
  • 来自: 杭州
社区版块
存档分类
最新评论
文章列表

TCP协议梳理

1. TCP数据段格式 TCP数据段的格式如下图所示,其中每一格代表一个比特位。 1.1 Source Port和Destination Port 为了让同一主机上的多个进程可以同时使用TCP层,定义端口,分配给每个需要使用TCP的进程。 1.1.1 Socket和Connection Internet层地址加上TCP层端口确定一个Socket 两端的两个Socket唯一确定一条Connection 1.2 Sequence Number 给出数据部分第一个字节的Sequence Number,由此TCP传输的每个字节都拥有Sequence Number编号。 1.2.1 Initia ...
1. IP数据包格式 IP数据包格式如下图所示,其中每个短横线的长度代表1个比特位: 1.1 Version 取值为常量4. 1.2 IHL 即Internet Header Length,给出头部的长度,即指向数据部分的开始。 单位为32位(4字节),最小取值为5。 1.3 Type of Service 描述该数据包的传输需求,8个比特位可划分为以下几个字段: 1.3.1 Bit 0~2: Precedence Precedence字段的取值列表如下: 取值含义111Network Control110Internetwork Control101CRITIC/ECP100 ...
源文件方法流程图redis.cmain()流程图redis.cinitServerConfig()流程图redis.cinitServer()流程图redis.clistenToPort()流程图redis.cbeforeSleep()流程图 源文件方法流程图ae.caeCreateEventLoop()流程图ae.caeMain()流程图ae.caeProcessEvents()流程图 源文件方法流程图ae_epoll.caeApiCreate()流程图 源文件方法流程图dict.cdictScan()
设计目标是高可用,易伸缩的RedisCache集群方案,Cache的应用可以允许Key丢失,但应当越少越好: 故障转移:某个Redis实例故障应当可以把负责的key转移到其他实例。故障实例保存的数据可能丢失(符合Cache应用场景需求) 动态水平伸缩:应当可以在运行时动态增加Redis实例,以达到容量水平扩容。水平扩容可能造成部分Cache Key丢失(符合Cache应用场景需求) 配置简单,操作简便 1. 总体架构 每一个Redis实例都在Zookeeper当中注册一个SEQUENTIAL节点,每个Redis实例获得一个唯一ID方便一致性哈希算法的实现 Client通过读取Zooke ...
Redis提供两种持久化机制,供用户灵活的选用、组合使用: 基于快照的持久化机制:rdb 基于日志的持久化机制:aof 1.快照 1.1 基于快照的持久化 基于快照的持久化(rdb):在系统满足用户设置的条件(时间间隔和累计的写操作 ...
调研比较了三个Redis集群的解决方案: 系统贡献者是否官方Redis实现编程语言TwemproxyTwitter是CRedis ClusterRedis官方是CCodis豌豆荚否Go+C 1.基本架构 1.1 Twemproxy 增加Proxy层,由Proxy实现一致性哈希算法(支持:KETAMA/取模/随机) 数据分片算法: 采用一致性哈希算法,以KETAMA为例: 1.2 Redis Cluster 无中心自组织的结构 各节点维护Key->Server的映射关系 Client可以向任意节点发起请求,节点不会转发请求,只是重定向Client 如果在Client第一次请 ...
数据库的隔离性是数据库ACID保证中的重要组成部分。应当区分开原子性与隔离性的不同含义,为了实现原子性有悲观/乐观的两种并发控制策略,在原子性的基础上,实现隔离性,既可以使用悲观的并发控制策略,也可以使用乐观的并发控制策略。 不同的应用场景会对数据库隔离性有不同的要求,越高的隔离性可以越高程度的保证数据的一致性,但是会带来越多的性能开销。反之,降低隔离性要求将会牺牲一些数据一致性,但是可以提供数据库的性能。选择数据库的一致性应当从应用的逻辑要求出发,选择满足数据逻辑要求的最低隔离级别。 本文以数据库技术中的Read Phenomenon(读取现象)为线索,详细解释了ANSI SQL标准中定义 ...
Java提供了三个并发编程功能包,它们是: java.util.concurent java.util.concurent.locks java.util.concurent.atomic 本文意在厘清这三个包的概念结构,关于具体功能的实现,将另文详记。 1. Overview java.util.concurent/locks/atomic三个包主要提供了以下三块功能: 功能涉及包一组线程安全数据结构concurrent+atomic一组比synchronized关键子功能更丰富的同步工具concurrent+locks一套线程池实现框架concurrent 本文接下来,按照功能整理这 ...
方式1 最Naive的实现,即按照参数的输入顺序进行依次解析,例如: private void parseArguments(String[] args) { dbIP = args[0]; dbName = args[1]; threadNo = Integer.parseInt(args[2]); timeout = Integer.parseInt(args[3]); } 这种方式比较简单直接,对于许多后台任务类程序的参数配置,如果参数数量不是很多,可以作为首先解决方案。 方式2 已经是一种比较Comprehensive的解决方案,已经可以 ...
本文是一系列并发编程文章的学习笔记之一,意在厘清非阻塞、无锁、无等待着三个概念。 非阻塞 阻塞是操作系统层面的概念,发生阻塞的准确含义为:当前执行上下文通过调用操作系统的接口,使自己进入等待某一事件发生 ...
调用Java的反射API是有较高的性能开销的,这方面的性能比较文章较多,在此不赘述。 原因 纠其原因,性能的开销主要在两方面: 1.产生了Dynamic Resolve 无论是通过字符串获取Class、Method还是Field,都需要JVM的动态链接机制动态的进行解析和匹配,势必造成性能开销。 2.安全性验证 每一次的反射调用都会造成Java安全机制进行额外的安全性验证,造成性能开销。 3.影响运行时优化 反射代码使得许多JVM的运行时优化无法进行。 处理方法 针对此,常见的处理方法主要有以下几种: 1.使用Cache 针对上述原因1: 对通过反射调用获得的Class、Method ...
以下两种模式都可以用于实现线程池 模式1由各个Worker线程自己负责从TaskPool中获取Task。 模式2由1个Dispatcher线程不断遍历Worker线程数组来负责检查各个Worker线程的 状态,如果状态符合则分配新的任务。 模式1: 模式2: 优缺点 模式1的优势在于由各个Worker线程自己负责取Task,不需要额外的Dispatcher线程负 责维护。劣势在于由于取Task是并发的需要在 Access TaskPool时做同步。 模式2的优势在于可以避免上述模式1的同步开销,但是多了一个Dispatcher线程来维 护,Naive的Dispatcher实现需要忙等 ...
以下代码可以在运行时获取Java Class的磁盘路径: <YOUR CLASS>.class.getProtectionDomain().getCodeSource().getLocation()
1. 什么是Meta分析 Meta分析是指将多个研究结果整合在一起的统计方法,所以又叫整合分析或荟萃分析。脑补通道-> 2.Meta分析的步骤分解 Meta分析的步骤可以分解为以下几步: [1]通过对研究问题和数据类型的分析,确定使用何种Effect Measure。所谓Effect Measure就是用何种方式来度量治疗方法/政策/教育方法的研究对象的效果。例如对某种治疗手段的研究,分为一个治疗组和一个对照组来进行研究。则治疗组和对照组的效果差别就可以用来度量该治疗手段的效果,作为Effect Measure。 [2]计算各个Study的Effect Size和方差。所谓Eff ...
原委 利用乐观的并发控制在共享内存的粒度上,所构建的高层的同步控制机制就称作Software Transactional Memory(STM)。 命名渊源起于: 【1】Transactional是指乐观的并发控制中所需要提供的事务回滚特性。而基于锁的并发控制在获得所有所需锁之前只会Block,一旦获得所有锁开始操作之后是不需要回滚的(除非出现死锁)。 【2】首先由Tom Knight在1986年提出的Hardware Transactional Memory,随后由Nir Shavit和Dan Touitou在1995年提出了完全在软件层面实现的Transactional Memory。 ...
Global site tag (gtag.js) - Google Analytics