摘要: 1 场景描述 在分布式应用, 往往存在多个进程提供同一服务. 这些进程有可能在相同的机器上, 也有可能分布在不同的机器上. 如果这些进程共享了一些资源, 可能就需要分布式锁来锁定对这些资源的访问。 2 思路 进程需要访问共享数据时, 就在"/locks"节点下创建一个sequence类型的子节点, 阅读全文
posted @ 2017-01-09 11:58 _1900 阅读(414) 评论(0) 推荐(0) 编辑
摘要: Zookeeper集群中server数量总是确定的,所以集群中的server交互采用比较可靠的bio长连接模型;不同于集群中sever间交互zookeeper客户端其实数量是未知的,为了提高zookeeper并发性能,zookeeper客户端与服务器端交互采用nio模型。下面我们主要来讲讲zooke 阅读全文
posted @ 2017-01-05 11:44 _1900 阅读(1141) 评论(0) 推荐(0) 编辑
摘要: 1)处理器链 这部分内容我们主要讲解zookeeper请求在zookeeper server端的处理流程,对于不同角色的zookeeper具有不同的处理流程, ZookeepeerServer的start方法中会调用setupRequestProcessors()来初始化处理器链,它被子类覆写实现。 阅读全文
posted @ 2017-01-05 11:39 _1900 阅读(512) 评论(0) 推荐(0) 编辑
摘要: 1)QuorumPeerMain加载 Zookeeper集群启动的入口类是QuorumPeerMain来加载配置启动QuorumPeer线程。首先我们来看下QuorumPeer, 谷歌翻译quorum是法定人数,定额的意思, peer是对等的意思,那么QuorumPeer中quorum代表的意思就是 阅读全文
posted @ 2017-01-05 11:38 _1900 阅读(1406) 评论(2) 推荐(0) 编辑
摘要: 1)底层通信数据封装与操作 BinaryInputArchive& BinaryOutputArchive底层通信数据封装与操作 BinaryInputArchive是对于DataInput的封装,用于处理基于zookeeper协议的底层数据,其实是从DataInputStream输入中读取数据。 阅读全文
posted @ 2017-01-05 11:34 _1900 阅读(1192) 评论(0) 推荐(0) 编辑
摘要: 综述 最近笔者阅读并研究redis源码,在redis客户端与服务器端交互这个内容点上,需要参考网上一些文章,但是遗憾的是发现大部分文章都断断续续的非系统性的,不能给读者此交互流程的整体把握。所以这里我尝试,站在源码的角度,将redis client/server 交互流程尽可能简单地展现给大家,同时 阅读全文
posted @ 2016-12-26 13:04 _1900 阅读(2092) 评论(2) 推荐(0) 编辑
摘要: Zookeeper内存结构 Zookeeper是怎么存储数据的,什么机制保证集群中数据是一致性,在网络异常,当机以及停电等异常情况下恢复数据的,我们知道数据库给我们提供了这些功能,其实zookeeper也实现了类似数据库的功能。 1. Zookeeper内存结构 Zookeeper数据在内存中的结构 阅读全文
posted @ 2016-12-10 16:29 _1900 阅读(4093) 评论(0) 推荐(0) 编辑
摘要: Remoting2. 通信层底层传输协议 RocketMq服务器与客户端通过传递RemotingCommand来交互,通过NettyDecoder,对RemotingCommand进行协议的编码与解码 协议格式 <length> <header length> <header data> <body 阅读全文
posted @ 2016-11-11 17:46 _1900 阅读(757) 评论(0) 推荐(0) 编辑
摘要: Namesrv名称服务,是没有状态可集群横向扩展。 一:Namesrv功能: 二:Namesrv启动流程: 三: RouteInfoManager 路由信息RouteInfoManager类的管理 四:Namesrv与broker间的心跳: 阅读全文
posted @ 2016-11-11 17:42 _1900 阅读(4014) 评论(0) 推荐(2) 编辑
摘要: broker 1. broker的启动 brker的启动 Broker向namesrv注册 Topic在broker文件上的存储json格式 Namesrv接收Broker注册的topic信息, namesrv只存内存,但是broker有任务定时推送 1. 接收数据向RouteInfoManager 阅读全文
posted @ 2016-11-11 17:21 _1900 阅读(22264) 评论(0) 推荐(0) 编辑
摘要: consumer 1.启动 有别于其他消息中间件由broker做负载均衡并主动向consumer投递消息,RocketMq是基于拉模式拉取消息,consumer做负载均衡并通过长轮询向broker拉消息。 Consumer消费拉取的消息的方式有两种 1. Push方式:rocketmq已经提供了很全 阅读全文
posted @ 2016-11-11 16:43 _1900 阅读(10403) 评论(2) 推荐(3) 编辑
摘要: 大型网站的挑战主要来自庞大的用户,高并发的访问和海量数据,任何简单的业务一旦需要处理数以P计的数据和面对数以亿计的用户,问题就会变得棘手。大型网站架构主要就是解决这类问题。 本文内容大部分来自《大型网站技术架构》,这本书很值得一看,强烈推荐。 网站系统架构层次如下图所示: 1、前端架构 前端指用户请 阅读全文
posted @ 2016-11-09 11:37 _1900 阅读(660) 评论(0) 推荐(0) 编辑
摘要: NIO(Non-blocking I/O,在Java领域,也称为New I/O),是一种同步非阻塞的I/O模型,也是I/O多路复用的基础,已经被越来越多地应用到大型应用服务器,成为解决高并发与大量连接、I/O处理问题的有效方式。 那么NIO的本质是什么样的呢?它是怎样与事件模型结合来解放线程、提高系 阅读全文
posted @ 2016-11-09 11:35 _1900 阅读(456) 评论(0) 推荐(0) 编辑
摘要: 为了使网站的能够应对高并发访问,海量数据处理,高可靠运行等一系列问题,我们可以选择横向或纵向两个方向来入手 基本思路 首先可以对整个架构进行分层,一般可以分为 应用层,服务层,数据层;实践中,大的分层结构中还可以继续分层,比如 应用层还可以继续分为 视图层 和 业务逻辑层,服务层也可以继续细分为 数 阅读全文
posted @ 2016-11-09 11:31 _1900 阅读(321) 评论(0) 推荐(0) 编辑
摘要: 网站都是从小网站一步一步发展为大型网站的,而这之中的挑战主要来自于庞大的用户、安全环境恶劣、高并发的访问和海量的数据,任何简单的业务处理,一旦需要处理数以 P 计的数据和面对数以亿计的用户时,问题就会变的很棘手 下面我们就来说说这个演变过程: 初始阶段 大型网站都是由小型网站演变而来的,网站架构也一 阅读全文
posted @ 2016-11-09 11:30 _1900 阅读(330) 评论(0) 推荐(0) 编辑
摘要: producer producer 1.启动流程 Producer如何感知要发送消息的broker即brokerAddrTable中的值是怎么获得的, 1. 发送消息的时候指定会指定topic,如果producer集合中没有会根据指定topic到namesrv获取topic发布信息TopicPubl 阅读全文
posted @ 2016-11-08 10:19 _1900 阅读(10540) 评论(1) 推荐(1) 编辑
摘要: 分布式消息系统作为实现分布式系统可扩展、可伸缩性的关键组件,需要具有高吞吐量、高可用等特点。而谈到消息系统的设计,就回避不了两个问题: RocketMQ作为阿里开源的一款高性能、高吞吐量的消息中间件,它是怎样来解决这两个问题的?RocketMQ 有哪些关键特性?其实现原理是怎样的? 关键特性以及其实 阅读全文
posted @ 2016-11-07 13:50 _1900 阅读(6299) 评论(0) 推荐(3) 编辑
摘要: 需要的工具 iTerm 目前最新版本是iTerm2,下载地址http://iterm2.com/,这个没什么好说的,解压以后扔到Application里,然后你就可以把系统自带的终端从Dock栏移除了~ oh-my-zsh 手动安装前需要先安装git,这里就不说了,Google一下即可,或者使用自动 阅读全文
posted @ 2016-11-06 12:13 _1900 阅读(6144) 评论(0) 推荐(0) 编辑
摘要: 准备工作 如果没有安装brew,可以按照官网的步骤安装 nginx的安装与配置 安装nginx 修改配置文件 给予管理员权限 mysql的安装与配置 php的安装与配置 测试环境 结语 到目前为止,我们的Nginx、MySQL、PHP-FPM三大软件已经安装好了,针对不同的系统版本和软件版本,可能会 阅读全文
posted @ 2016-11-03 15:20 _1900 阅读(9311) 评论(2) 推荐(1) 编辑
摘要: Redis有一系列的命令,特点是以NX结尾,NX是Not eXists的缩写,如SETNX命令就应该理解为:SET if Not eXists。这系列的命令非常有用,这里讲使用SETNX来实现分布式锁。 用SETNX实现分布式锁 利用SETNX非常简单地实现分布式锁。例如:某客户端要获得一个名字fo 阅读全文
posted @ 2016-10-26 15:02 _1900 阅读(443) 评论(0) 推荐(0) 编辑
摘要: 简介 Queue是一种很常见的数据结构类型,在java里面Queue是一个接口,它只是定义了一个基本的Queue应该有哪些功能规约。实际上有多个Queue的实现,有的是采用线性表实现,有的基于链表实现。还有的适用于多线程的环境。java中具有Queue功能的类主要有如下几个:AbstractQueu 阅读全文
posted @ 2016-09-25 19:20 _1900 阅读(2173) 评论(0) 推荐(0) 编辑
摘要: TCP是什么? 具体的关于TCP是什么,我不打算详细的说了;当你看到这篇文章时,我想你也知道TCP的概念了,想要更深入的了解TCP的工作,我们就继续。它只是一个超级麻烦的协议,而它又是互联网的基础,也是每个程序员必备的基本功。首先来看看OSI的七层模型:我们需要知道TCP工作在网络OSI的七层模型中 阅读全文
posted @ 2016-09-14 08:28 _1900 阅读(319) 评论(0) 推荐(0) 编辑
摘要: 摘要 本篇介绍下Mysql的InnoDB索引相关知识,从各种树到索引原理到存储的细节。 InnoDB是Mysql的默认存储引擎(Mysql5.5.5之前是MyISAM,文档)。本着高效学习的目的,本篇以介绍InnoDB为主,少量涉及MyISAM作为对比。 这篇文章是我在学习过程中总结完成的,内容主要 阅读全文
posted @ 2016-09-13 22:39 _1900 阅读(985) 评论(0) 推荐(0) 编辑
摘要: [转]MYSQL索引结构原理、性能分析与优化 第一部分:基础知识 索引 官方介绍索引是帮助MySQL高效获取数据的数据结构。笔者理解索引相当于一本书的目录,通过目录就知道要的资料在哪里, 不用一页一页查阅找出需要的资料。 唯一索引(unique index) 强调唯一,就是索引值必须唯一。 创建索引 阅读全文
posted @ 2016-09-13 22:19 _1900 阅读(554) 评论(0) 推荐(0) 编辑
该文被密码保护。 阅读全文
posted @ 2016-09-12 18:12 _1900 阅读(24) 评论(0) 推荐(0) 编辑
摘要: 原文:http://tech.meituan.com/mysql-index.html 一个慢查询引发的思考 系统使用者反应有一个功能越来越慢,于是工程师找到了上面的SQL。并且兴致冲冲的找到了我,“这个SQL需要优化,给我把每个字段都加上索引”我很惊讶,问道“为什么需要每个字段都加上索引?”“把查 阅读全文
posted @ 2016-09-07 11:24 _1900 阅读(470) 评论(0) 推荐(0) 编辑
摘要: 1. docker version docker version 显示 Docker 版本信息。 2. docker info docker info 显示 Docker 系统信息,包括镜像和容器数。 3. docker search docker search [options] term doc 阅读全文
posted @ 2016-08-24 14:15 _1900 阅读(618) 评论(0) 推荐(0) 编辑
摘要: 前言 redis 是我们目前大规模使用的缓存中间件,由于它强大高效而又便捷的功能,得到了广泛的使用。现在的2.x的稳定版本是2.8.19,也是我们项目中普遍用到的版本。 redis在年初发布了3.0.0,官方支持了redis cluster,也就是集群。至此结束了redis 没有官方集群的时代,之前 阅读全文
posted @ 2016-08-23 11:15 _1900 阅读(5378) 评论(0) 推荐(4) 编辑
摘要: cluster命令 redis 有很多命令,同意,加入到cluster后,也有一些列的命令,现在一一来看下 (http://redis.io/commands/cluster-addslots): 我们来一个一个的实践一下。 我按照上一篇的理论实践知识的基础上,再次搭建了一个集群,这次运行了8个端口 阅读全文
posted @ 2016-08-23 10:42 _1900 阅读(21630) 评论(0) 推荐(0) 编辑
摘要: 我们将上面开发的服务提供方服务,部署到2个独立的节点上(192.168.14.1和10.10.4.125),然后可以通过Dubbo管理中心查看对应服务的状况,如图所示: 上图中可以看出,该服务有两个独立的节点可以提供,因为配置的集群模式为failover,如果某个节点的服务发生故障无法使用,则会自动 阅读全文
posted @ 2016-08-02 16:35 _1900 阅读(635) 评论(0) 推荐(0) 编辑
摘要: 上面配置中,使用dubbo协议,集群容错模式为failover,服务级别负载均衡策略为random,方法级别负载均衡策略为roundrobin(它覆盖了服务级别的配置内容),其他一些配置内容可以参考Dubbo文档。我们这里是从Redis读取数据,所以使用了Redis连接池。启动服务示例代码如下所示: 阅读全文
posted @ 2016-08-02 16:33 _1900 阅读(728) 评论(0) 推荐(0) 编辑
摘要: Dubbo是Alibaba开源的分布式服务框架,我们可以非常容易地通过Dubbo来构建分布式服务,并根据自己实际业务应用场景来选择合适的集群容错模式,这个对于很多应用都是迫切希望的,只需要通过简单的配置就能够实现分布式服务调用,也就是说服务提供方(Provider)发布的服务可以天然就是集群服务,比 阅读全文
posted @ 2016-08-02 16:29 _1900 阅读(585) 评论(0) 推荐(0) 编辑
摘要: 一、消息队列概述 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题。实现高性能,高可用,可伸缩和最终一致性架构。是大型分布式系统不可缺少的中间件。 目前在生产环境,使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,Roc 阅读全文
posted @ 2016-08-02 16:25 _1900 阅读(583) 评论(0) 推荐(1) 编辑
摘要: Redis Cluster本身提供了自动将数据分散到Redis Cluster不同节点的能力,分区实现的关键点问题包括:如何将数据自动地打散到不同的节点,使得不同节点的存储数据相对均匀;如何保证客户端能够访问到正确的节点和数据;如何保证重新分片的过程中不影响正常服务。这篇文章通过了解这些问题来认识R 阅读全文
posted @ 2016-08-02 16:23 _1900 阅读(12438) 评论(0) 推荐(0) 编辑
摘要: Redis五种结构 1、String 可以是字符串,整数或者浮点数,对整个字符串或者字符串中的一部分执行操作,对整个整数或者浮点执行自增(increment)或者自减(decrement)操作。 字符串命令: ①get、获取存储在指定键中的值 ②set、设置存储在指定键中的值 ③del、删除存储在指 阅读全文
posted @ 2016-08-02 16:20 _1900 阅读(38299) 评论(1) 推荐(1) 编辑
摘要: 作为Java开发者,我们每天创建很多对象,但我们通常使用依赖管理系统,比如Spring去创建对象。然而这里有很多创建对象的方法,我们会在这篇文章中学到。 Java中有5种创建对象的方式,下面给出它们的例子还有它们的字节码 使用new关键字 } → 调用了构造函数 使用Class类的newInstan 阅读全文
posted @ 2016-07-19 18:26 _1900 阅读(174391) 评论(6) 推荐(22) 编辑
摘要: 1. 背景 1.1. 惊人的性能数据 最近一个圈内朋友通过私信告诉我,通过使用 Netty4 + Thrift 压缩二进制编解码技术,他们实现了 10 W TPS(1 K 的复杂 POJO 对象)的跨节点远程服务调用。相比于传统基于 Java 序列化 +BIO(同步阻塞 IO)的通信框架,性能提升了 阅读全文
posted @ 2016-07-02 15:56 _1900 阅读(645) 评论(1) 推荐(0) 编辑
摘要: 接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法。 抽象类与接口是 Java 语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予 Java 强大的面向对象的能力。他们两者之间对抽象概念的支持有很大的相似,甚至可以互换,但是也有区别。 一、抽象类 我们都知道在面向对象的领域一切 阅读全文
posted @ 2016-07-02 15:21 _1900 阅读(450) 评论(0) 推荐(0) 编辑
摘要: 在Mac下做开发,用Fiddler抓包由于离不开Windows比较痛苦,还好有Charles,到官网http://www.charlesproxy.com/可下载到最新版本(若不支持rMBP可拖到Retinizer中把文字变清晰) HTTP抓包 HTTPS抓包 接下来就跟HTTP抓包一样了 阅读全文
posted @ 2016-07-01 16:06 _1900 阅读(421) 评论(0) 推荐(0) 编辑
摘要: 电商的秒杀和抢购,对我们来说,都不是一个陌生的东西。然而,从技术的角度来说,这对于Web系统是一个巨大的考验。当一个Web系统,在一秒钟内收到数以万计甚至更多请求时,系统的优化和稳定至关重要。这次我们会关注秒杀和抢购的技术实现和优化,同时,从技术层面揭开,为什么我们总是不容易抢到火车票的原因? 一、 阅读全文
posted @ 2016-07-01 12:13 _1900 阅读(735) 评论(0) 推荐(0) 编辑