摘要: 一、ZooKeeper简介ZooKeeper作为分布式系统中重要的组件,目前在业界使用越来越广泛,ZooKeeper的使用场景非常多,以下是几种典型的应用场景:l 数据发布与订阅(配置中心)l 负载均衡l 命名服务(Naming Service)l 分布式通知/协调l 集群管理与Master选举l ... 阅读全文
posted @ 2015-09-26 11:31 三丰SanFeng 阅读(5914) 评论(0) 推荐(0) 编辑
摘要: zookeeper提供了很多方便的功能,方便我们查看服务器的状态,增加,修改,删除数据(入口是zkServer.sh和zkCli.sh)。还提供了一系列四字命令,方便我们跟服务器进行各种交互,来确认服务器当前的工作情况(这也是服务器监控告警的基础)。本文所讲的zkCli.sh和zkServer.sh... 阅读全文
posted @ 2015-09-25 09:31 三丰SanFeng 阅读(6770) 评论(0) 推荐(1) 编辑
摘要: 原文地址:http://itindex.net/detail/40187-zookeeper-%E7%AE%A1%E7%90%86%E5%91%98-%E7%AE%A1%E7%90%86参数名说明clientPort客户端连接server的端口,即对外服务端口,一般设置为2181吧。dataDir存... 阅读全文
posted @ 2015-09-24 20:02 三丰SanFeng 阅读(4848) 评论(0) 推荐(0) 编辑
摘要: 最近公司用到了zookeeper做集群管理,这里按步骤记录一下其中的一些经验,也给后来的同学一些参考。由于这里只有一台服务器,因此搭建的其实是伪集群,多台服务器的搭建流程类似。集群搭建环境:发行版:CentOS-6.6 64bit内核:2.6.32-504.el6.x86_64 CPU:intel-... 阅读全文
posted @ 2015-09-24 17:21 三丰SanFeng 阅读(569) 评论(0) 推荐(1) 编辑
摘要: 数据与进程对等的处理场景:某服务需要支持海量用户,在一台物理机器上运行了多个进程/线程。对于数据应该如何处理以保证安全快速的访问数据呢?解决方案:“分”分号段分进程分端口分库分表单一生产者与单一消费者场景:网络接入进程与逻辑处理进程通过共享内存通讯。我们要如何进行设计?通常的实现:读写加锁示例:无锁... 阅读全文
posted @ 2015-09-23 21:15 三丰SanFeng 阅读(659) 评论(0) 推荐(0) 编辑
摘要: seqlock(顺序锁)用于能够区分读与写的场合,并且是读操作很多、写操作很少,写操作的优先权大于读操作。seqlock的实现思路是,用一个递增的整型数表示sequence。写操作进入临界区时,sequence++;退出临界区时,sequence再++。写操作还需要获得一个锁(比如mutex),这个... 阅读全文
posted @ 2015-09-23 19:49 三丰SanFeng 阅读(1815) 评论(0) 推荐(1) 编辑
摘要: RCU(Read-Copy Update)RCU就是指读-拷贝修改,它是基于其原理命名的。对于被RCU保护的共享数据结构,读操作不需要获得任何锁就可以访问,但写操作在访问它时首先拷贝一个副本,然后对副本进行修改,最后在适当的时机把指向原来数据的指针重新指向新的被修改的数据。这个时机就是所有引用该数据... 阅读全文
posted @ 2015-09-23 19:21 三丰SanFeng 阅读(1642) 评论(0) 推荐(0) 编辑
摘要: 原文地址:http://blog.csdn.net/penngrove/article/details/44175387最近看到Linux Kernel cmpxchg的代码,对实现很不理解。上网查了内嵌汇编以及Intel开发文档,才慢慢理解了,记录下来以享和我一样困惑的开发者。其实cmpxchg实... 阅读全文
posted @ 2015-09-22 21:00 三丰SanFeng 阅读(2364) 评论(0) 推荐(0) 编辑
摘要: CAS一般采用原子级的read-modify-write原语来实现Lock-Free算法,其中LL和SC是Lock-Free理论研究领域的理想原语,但实现这些原语需要CPU指令的支持,非常遗憾的是目前没有任何CPU直接实现了SC原语。根据此理论,业界在原子操作的基础上提出了著名的CAS(Compar... 阅读全文
posted @ 2015-09-22 20:55 三丰SanFeng 阅读(926) 评论(0) 推荐(0) 编辑
摘要: 概念忙等待可以认为是一种特殊的忙等待忙等待分类Peterson算法xchg解法TSL解法自旋锁Peterson算法Peterson算法是一个实现互斥锁的并发程序设计算法,可以控制两个线程访问一个共享的单用户资源而不发生访问冲突。GaryL. Peterson于1981年提出此算法。#include ... 阅读全文
posted @ 2015-09-22 17:36 三丰SanFeng 阅读(961) 评论(0) 推荐(0) 编辑
摘要: 什么是原子操作原子操作可以保证指令以原子的方式执行——执行过程不被打断,原子操作是多数无锁编程的基本前提。原子操作分为以下几类对1字节的读写对2字节数(对齐到16位边界)读写对4字节数(对齐到32位边界)读写对8字节数(对齐到64位边界)读写xchg原子操作基本原理在x86平台上,CPU提供了在指令... 阅读全文
posted @ 2015-09-22 14:34 三丰SanFeng 阅读(1916) 评论(0) 推荐(0) 编辑
摘要: Double-checked Locking,严格意义上来讲不属于无锁范畴,无论什么时候当临界区中的代码仅仅需要加锁一次,同时当其获取锁的时候必须是线程安全的,此时就可以利用 Double-checked Locking 模式来减少锁竞争和加锁载荷。目前Double-checkedLocking已经... 阅读全文
posted @ 2015-09-19 23:51 三丰SanFeng 阅读(606) 评论(0) 推荐(0) 编辑
摘要: 锁的缺点锁定被迫交出时间片。锁定意味着阻塞,多个线程(进程)排队获取资源,无法充分发挥系统性能。锁定的阻塞无法通过fd进行通知,对性能有进一步的影响(理想的服务器模型是全局一处阻塞统一等待消息)。一些锁限制了必须使用线程的方式进行开发,而线程无法充分利用系统的内存。pthread库在特殊情况下可能产... 阅读全文
posted @ 2015-09-19 21:14 三丰SanFeng 阅读(397) 评论(0) 推荐(0) 编辑
摘要: 1 对于CPU开销大的场景,能利用多核,就尽量利用多核(常常自以为某需求的运算量不大,且CPU足够快,就偷懒写个单线程,结果效率很低)2 使用多线程的时候,默认是加锁的。在加锁保证业务正常的条件下,再考虑优化互斥锁带来的性能损耗互斥锁 < 读写锁 < 自旋锁 < 无锁(原子操作)3 减少线程之间的相... 阅读全文
posted @ 2015-09-18 14:57 三丰SanFeng 阅读(305) 评论(0) 推荐(0) 编辑
摘要: 死锁(deadlock)是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。虽然进程在运行过程中,可能发生死锁,但死锁的发生也必须具备一定的条件,死锁的发生必须具... 阅读全文
posted @ 2015-09-18 10:56 三丰SanFeng 阅读(3016) 评论(0) 推荐(0) 编辑