自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 java对象转成byte数组的三种方法

java对象转成byte数组,在使用netty进行通信协议传输的场景中是非常常见的。比如,协议有一些定好的协议头、classid,messageid等等信息,还有一个关键的内容是payload。不同的协议内容都会放到payload中,而这个payload往往就是一个byte数组。 那么,如何方便...

2018-06-16 17:51:02 31377 2

原创 一站式分布式缓存解决方案codisX

1 研究背景 分布式缓存是各大公司业务系统必不可少的组件,目前市面上开源的分布式缓存解决方案主要有redis cluster和codis,在进行了一系列调研之后,redis cluster现阶段的模块耦合使得我最后放弃了这一方案,转向了codis。在使用过程中,发现了一些codis的不足之处。因...

2018-04-25 11:44:43 1457 1

转载 大型网站系统与Java中间件实践

第一章 分布式系统介绍分布式系统的定义:组件分布在网络计算机上,组件间仅仅通过消息传递来通信并协调行动。分布式系统的意义: 升级单机处理能力的性价比越来越低 单机处理能力存在瓶颈 处于稳定性和可用性的考虑 摩尔定律:当价格不变时,每隔18个月,集成电路上可容纳的晶体管数目会增加一倍,性...

2018-01-09 12:35:00 504 0

转载 详解tomcat的连接数与线程池

出处: http://www.cnblogs.com/kismetv/p/7806063.html前言 在使用tomcat时,经常会遇到连接数、线程数之类的配置问题,要真正理解这些概念,必须先了解Tomcat的连接器(Connector)。 在前面的文章 详解Tomcat配置文件server.xm...

2017-11-14 16:57:18 557 0

转载 Java消息队列任务的平滑关闭

出处: https://my.oschina.net/lujianing/blog/787745对于消息队列任务的监听,我们一般使用Java写一个独立的程序,在Linux服务器上运行。当订阅者程序启动后,会通过消息队列客户端接收消息,放入线程池中并发的处理。那么问题来了,当我们修改程序后,需要重...

2017-11-09 12:23:53 731 0

转载 如何优雅地关闭Go channel

出处: http://www.jianshu.com/p/d24dfbb33781 本文译自:How To Close Channels in Golang Elegantly。几天前,我写了一篇文章来说明golang中channel的使用规范。在reddit和HN,那篇文章...

2017-11-08 14:54:14 531 0

转载 使用LVS实现负载均衡原理及安装配置详解

负载均衡集群是 load balance 集群的简写,翻译成中文就是负载均衡集群。常用的负载均衡开源软件有nginx、lvs、haproxy,商业的硬件负载均衡设备F5、Netscale。这里主要是学习 LVS 并对其进行了详细的总结记录。一、负载均衡LVS基本介绍    LB集群的架构和原理很简...

2017-10-17 11:03:11 448 0

原创 java实现Multipart/form-data

maven新的maven和先前的版本的API不同<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpmime</artifactId...

2017-10-13 15:16:45 10427 0

转载 Java 里如何实现线程间通信?

出处: http://wingjay.com/2017/04/09/Java%E9%87%8C%E5%A6%82%E4%BD%95%E5%AE%9E%E7%8E%B0%E7%BA%BF%E7%A8%8B%E9%97%B4%E9%80%9A%E4%BF%A1%EF%BC%9F/正常情况下,每个子线...

2017-10-11 18:39:23 374 0

原创 es & kibana & filebeat 部署与使用

1 概述考虑到logstash性能比较差,而且我们并不需要对日志进行解析,主要进行的是搜索日志关键字,因此我们选择跳过logstash,直接从filebeat将日志读取到es2 es部署为了保证高可用,es应该部署三台以上,下面以部署三台距离下载es安装包,5.X的版本都是要求 linux ker...

2017-10-11 15:10:12 2232 0

转载 Go语言 channel详解

出处: http://hustcat.github.io/channel/“网络,并发”是Go语言的两大feature。Go语言号称“互联网的C语言”,与使用传统的C语言相比,写一个Server所使用的代码更少,也更简单。写一个Server除了网络,另外就是并发,相对python等其它语言,Go对...

2017-09-30 18:26:20 592 0

转载 go里面select-case和time.Ticker的使用注意事项

出处: https://studygolang.com/articles/5224上周末参加Go技术聚会,京东的美女工程师讲到一个select-case和time.Ticker的使用注意事项(真实的应用场景是:在测试收包的顺序的时候,加了个tick就发现丢包了),觉得很有意思,记录一下。pack...

2017-09-30 14:25:54 873 1

原创 Codis源码解析——sentinel的重同步(2)

Topom.ha.monitor本身相当于一个上帝视角的sentinel。它本身并不是一个实际的sentinel服务器,但是它负责收集各个sentinel的监控信息,并对集群作出反馈。这一讲我们就来看看Topom.ha.monitor。下面参数中的servers []string就是添加的sent...

2017-09-30 11:44:52 913 0

原创 Codis源码解析——sentinel的重同步(1)

sentinel是redis集群高可用的保障。怎么搭建sentinel,网上有很多教程,我们这里就不重复了。 添加sentinel的过程很简单。新建sentinel,调用sentinel flushconfig强制 sentinel 重写所有配置信息到配置文件,然后更新ctx.sentinel和...

2017-09-27 17:39:50 1950 0

转载 Go语言并发模型:使用 context

出处: https://segmentfault.com/a/11900000067442131 简介在 Go http包的Server中,每一个请求在都有一个对应的 goroutine 去处理。请求处理函数通常会启动额外的 goroutine 用来访问后端服务,比如数据库和RPC服务。用来处理...

2017-09-25 16:08:01 535 0

原创 navicat无法连接阿里云mysql

阿里云服务器上布了一个mysql,然后本地想要通过navicat连接,一直连接不上。后来索性本地telent阿里云服务器的3306端口,发现连不通,于是想到3306端口并没有对外开放。一开始以为是linux服务器的防火墙,不过查看了服务器的防火墙等等也都没有开。后来才知道,阿里云的服务器默认端口是...

2017-09-04 11:29:37 18369 8

原创 Codis源码解析——Jodis

我们在java项目里面连接已经搭建好的Codis集群时,需要用到其java客户端——Jodis。这一篇我们就来看看Jodis是如何操作对Codis集群进行操作的。 import io.codis.jodis.JedisResourcePool; import io.codis.jodis.R...

2017-09-01 18:17:03 4193 2

转载 Tomcat中更改网站根目录和默认页的配置方法

出处: http://blog.csdn.net/u011101881/article/details/375693151.tomcat原来的默认根目录是http://localhost:8080,如果想修改访问的根目录,可以这样: 找到tomcat的server.xml(在conf目录下),...

2017-09-01 11:37:33 606 0

转载 Java程序员修炼之道 之 Log

出处: http://www.blogjava.net/justfly/archive/2014/08/13/416925.html1. 一个最基本的例子使用Logging框架写Log基本上就三个步骤引入loggerg类和logger工厂类声明logger记录日志下面看一个例子//1. 引入sl...

2017-08-30 14:32:48 441 0

转载 Kafka+Spark Streaming+Redis实时计算整合实践

出处: http://shiyanjun.cn/archives/1097.html基于Spark通用计算平台,可以很好地扩展各种计算类型的应用,尤其是Spark提供了内建的计算库支持,像Spark Streaming、Spark SQL、MLlib、GraphX,这些内建库都提供了高级抽象,可...

2017-08-28 10:44:10 652 0

原创 Codis源码解析——sharedBackendConn

在Codis源码解析——proxy监听redis请求一篇中,我们介绍过,SharedBackendConn负责实际对redis请求进行处理。上一篇,在fillslot的过程中通过codis-server地址获取SharedBackendConn是这样用的slot.backend.bc = s.po...

2017-08-17 16:25:18 1198 0

原创 Codis源码解析——处理slot操作(2)

这一篇我们把处理slot操作的机制讲完。还剩最后两个部分。一个是fillSlot,一个是每一个槽具体的处理方式。本例中有两个group,将之前auto-rebalance过的slot(0-511属于group1,512-1023属于group2)现在将slot 400到500移动到group2。我...

2017-08-16 20:40:05 1938 0

原创 Codis源码解析——处理slot操作(1)

上一篇我们讲了slot在集群中的分配方式,重点讲了auto-rebalance的原理。之前我们说过,再启动dashboard的时候,有一个goroutine专门用来处理slot的操作。这一篇我们就来看看slot的操作是如何进行的。我们这里举例也是用集群中有两个group和1024个从未分配的slo...

2017-08-14 21:08:53 3064 0

原创 Codis源码解析——slot的分配

上一篇我们给codis集群中添加了codis-server,接下来就是把1024个slot分配给每个codis-server。Codis给我们提供了多种方式,可以将指定序号的slot移到某个group,也可以将一个group中的多少个slot移动到另一个group。不过最方便的方式就是通过自动re...

2017-08-09 20:30:37 3320 0

原创 Codis源码解析——codis-server添加到集群

上一篇,我们成功在集群中添加了proxy。这一篇来讲讲codis-server添加到集群的过程中发生了什么。第一步,先别急着添加server,而应该是创建分组。创建分组的过程很简单,主要就是校验group的id在不在1~9999这个范围内,如果在的话(以group1为例),就调用zkClient创...

2017-08-02 17:42:10 784 0

原创 Jodis报错- JedisException- Proxy list empty

先把代码贴上来import io.codis.jodis.JedisResourcePool; import io.codis.jodis.RoundRobinJedisPool; import redis.clients.jedis.Jedis; /** * @author wujiang ...

2017-08-01 10:29:01 4820 2

原创 Codis源码解析——proxy添加到集群

前面我们说过,proxy启动之后,会默认处于 waiting 状态,以一秒一次的频率刷新状态,监听proxy_addr 地址(默认配置文件中的19000端口),但是不会 accept 连接,通过fe或者命令行添加到集群并完成集群状态的同步,才能改变状态为online。那么,将proxy添加到集群的...

2017-07-29 17:06:35 2229 0

原创 Codis源码解析——fe的启动

虽然dashboard负责对集群的实际操作,但是用户的最直观操作,都是来自于fe的。这一节我们就来讲fe的启动,没有proxy和dashboard那么复杂。首先,启动的时候指定fe的监听端口,这个就是我们最后通过浏览器打开fe的端口--listen=0.0.0.0:18090然后根据系统参数找到a...

2017-07-25 15:11:24 871 0

原创 Codis源码解析——dashboard的启动(2)

首先认识两个重要的structtype Future struct { sync.Mutex wait sync.WaitGroup vmap map[string]interface{} } type RedisStats struct { //储存了集群中Red...

2017-07-24 20:07:56 1382 0

原创 Codis源码解析——dashboard的启动(1)

dashboard是codis的集群管理工具,支持proxy和server的添加、删除、数据迁移,所有对集群的操作必须通过dashboard。dashboard的启动过程和proxy类似。dashboard的启动只是初始化一些必要的数据结构,复杂的在于对集群的操作,这个日后的文章会有详细的描述,本...

2017-07-23 18:23:10 2722 0

原创 Codis proxy error : dial tcp : lookup cnsz22vla888.novalocal on 127.0.1.1:53 : no such host

笔者之前在云主机上启动codis,这次是在本地启动。dashboard,proxy,fe都成功启动之后,打开 fe 的页面,点击最左侧自己创建的product_name,却发现页面显示残缺不全再看fe的控制台日志,发现报错http : proxy error : dial tcp : lookup...

2017-07-22 14:01:38 6704 0

原创 Codis源码解析——proxy监听redis请求

上一篇我们讲到,pkg/proxy/proxy.go的构造函数中,传入Config,返回Proxy。其中有一步是//s是Proxy go s.serveProxy()接到一个redis请求,就创建一个独立的session进行处理。这里的第一个参数是net.Conn,Conn是一个通用的面向流的网络...

2017-07-18 12:46:07 1962 0

原创 Codis源码解析——proxy的启动

proxy启动的时候,首先检查输入的命令行,一般情况下,启动proxy的命令如下:nohup ./bin/codis-proxy --ncpu=2 --config=./conf/proxy.conf --log=./logs/proxy.log --log-level=WARN &程序会...

2017-07-17 21:28:27 3184 0

转载 Netty版本升级血泪史之线程篇

原文: http://www.infoq.com/cn/articles/netty-version-upgrade-history-thread-part/1.1. Netty 3.X系列版本现状根据对Netty社区部分用户的调查,结合Netty在其它开源项目中的使用情况,我们可以看出目前Ne...

2017-07-16 21:58:59 509 0

转载 java调试技能之dubbo调试 ---telnet

原文出处: http://www.cnblogs.com/yougewe/p/6673845.html  dubbo作为一个远程调用框架,虽与同类型的框架,不知道谁优谁劣,但是就公司层面使用来说,还是很棒的。这里简单的写一下怎么使用和调试技巧,就算是作个使用总结吧,供快速使用和问题解决!  du...

2017-07-10 14:35:29 1714 0

转载 Executor, ExecutorService 和 Executors 间的不同

出处: https://yemengying.com/2017/03/17/difference-between-executor-executorService/java.util.concurrent.Executor, java.util.concurrent.ExecutorServic...

2017-06-19 10:41:54 407 0

转载 Netty 超时机制及心跳程序实现

出处: http://waylau.com/netty-time-out-and-heartbeat/本文介绍了 Netty 超时机制的原理,以及如何在连接闲置时发送一个心跳来维持连接。Netty 超时机制的介绍Netty 的超时类型 IdleState 主要分为: ALL_IDLE : 一段时...

2017-06-11 14:52:21 909 0

转载 epoll浅析以及nio中的Selector

出处: https://my.oschina.net/hosee/blog/730598首先介绍下epoll的基本原理,网上有很多版本,这里选择一个个人觉得相对清晰的讲解(详情见reference):首先我们来定义流的概念,一个流可以是文件,socket,pipe等等可以进行I/O操作的内核对象...

2017-06-11 14:12:20 428 0

转载 写给后端程序员的 HTTP 缓存原理介绍

出处: www.cnblogs.com/xinzhao/p/5099807.html 通过Internet获取资源既缓慢,成本又高。为此,Http协议里包含了控制缓存的部分,以使Http客户端可以缓存和重用以前获取的资源,从而优化性能,提升体验。虽然Http中关于缓存控制的部分,随着协议演进,...

2017-06-05 09:03:01 415 0

转载 Java CompletableFuture 详解

出处: http://colobu.com/2016/02/29/Java-CompletableFuture/Future是Java 5添加的类,用来描述一个异步计算的结果。你可以使用isDone方法检查计算是否完成,或者使用get阻塞住调用线程,直到计算完成返回结果,你也可以使用cancel...

2017-05-21 21:40:22 1321 0

提示
确定要删除当前文章?
取消 删除