- 浏览: 71929 次
- 来自: 杭州
最新评论
-
buqutianya:
buqutianya 写道感觉codis故障迁移的地方有问题, ...
Redis集群解决方案比较 -
buqutianya:
感觉codis故障迁移的地方有问题,看架构图是包含sentin ...
Redis集群解决方案比较 -
liubey:
不错,不过想造一个轮子。目前貌似还没有支持partition并 ...
Redis集群解决方案比较 -
chong_zh:
xudonu 写道架构中的cache manage与web界面 ...
基于Client端一致性哈希的Redis Cache 集群方案设计 -
xudonu:
架构中的cache manage与web界面需要自己实现?
基于Client端一致性哈希的Redis Cache 集群方案设计
文章列表
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 ...
IP协议(RFC791)梳理
- 博客分类:
- 未索引
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持久化机制详解
- 博客分类:
- 已索引
Redis提供两种持久化机制,供用户灵活的选用、组合使用:
基于快照的持久化机制:rdb
基于日志的持久化机制:aof
1.快照
1.1 基于快照的持久化
基于快照的持久化(rdb):在系统满足用户设置的条件(时间间隔和累计的写操作 ...
Redis集群解决方案比较
- 博客分类:
- 已索引
调研比较了三个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反射的性能问题及其常见的处理方法
- 博客分类:
- 已索引
调用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的载入路径
- 博客分类:
- 已索引
以下代码可以在运行时获取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 ...
Java Instrumentation浅析
- 博客分类:
- 已索引
原委
利用乐观的并发控制在共享内存的粒度上,所构建的高层的同步控制机制就称作Software Transactional Memory(STM)。
命名渊源起于:
【1】Transactional是指乐观的并发控制中所需要提供的事务回滚特性。而基于锁的并发控制在获得所有所需锁之前只会Block,一旦获得所有锁开始操作之后是不需要回滚的(除非出现死锁)。
【2】首先由Tom Knight在1986年提出的Hardware Transactional Memory,随后由Nir Shavit和Dan Touitou在1995年提出了完全在软件层面实现的Transactional Memory。
...