- 浏览: 753080 次
- 性别:
- 来自: 北京
最新评论
-
萨琳娜啊:
Java读源码之Netty深入剖析网盘地址:https://p ...
使用JAVA操作netty框架 -
小灯笼:
Netty源码剖析视频教程网盘地址:https://pan.b ...
使用JAVA操作netty框架 -
luckywind:
请问怎么下载那个svn上的源码啊?
本地调试Hbase源码详解 -
heng123:
Netty视频教程https://www.douban.com ...
使用JAVA操作netty框架 -
kongdong88:
Netty简单应用与线上服 ...
使用JAVA操作netty框架
文章列表
跟学我Kakfa源码搭建环境(一)
- 博客分类:
- kafka源码分析
Kafka is a distributed,partitioned,replicated commit logservice。它提供了类似于JMS的特性,但是在设计实现上完全不同,此外它并不是JMS规范的实现。kafka对消息保存时根据Topic进行归类,发送消息者成为Producer,消息接受者成为Consumer,此外kafka集群有多个kafka实例组成,每个实例(server)成为broker。无论是kafka集群,还是producer和consumer都依赖于zookeeper来保证系统可用性集群保存一些meta信息。
跟我学分布式事务之2PC和3PC
- 博客分类:
- 数据库
分布式一致性回顾
在分布式系统中,为了保证数据的高可用,通常,我们会将数据保留多个副本(replica),这些副本会放置在不同的物理的机器上。为了对用户提供正确的增\删\改\差等语义,我们需要保证这些放置在不同物理机器上的副本是一致的。
为了解决这种分布式一致性问题,前人在性能和数据一致性的反反复复权衡过程中总结了许多典型的协议和算法。其中比较著名的有二阶提交协议(Two Phase Commitment Protocol)、三阶提交协议(Two Phase Commitment Protocol)和Paxos算法。
分布式事务
SPI 简介
SPI 全称为 (Service Provider Interface) ,是JDK内置的一种服务提供发现机制。 目前有不少框架用它来做服务的扩展发现, 简单来说,它就是一种动态替换发现的机制, 举个例子来说, 有个接口,想运行时动态的给它添加实现,你只需要添加一个实现,
通过一个简单例子来说明SPI是如何使用的。 首先通过一张图来看看,用SPI需要遵循哪些规范,因为spi毕竟是JDK的一种标准。
跟我学系列之趣解NIO和IO的区别
- 博客分类:
- java基础
在上一次分享中,咱们谈到了阻塞与非阻塞,同步与异步的区别,http://www.jianshu.com/p/e9c6690c0737
那么在这一次分享中,咱们主要是以讲故事的方式讲述一下NIO和IO的区别。那么在下一次分享中,将进行Java NIO源码的分析。
故事的背景:
有一个动物园,动物园里面有狮子,老虎,猴子等动物,他们每天定期来吃不同的水果,而这些水果要由动物园管理员到货场领取分配。
一、IO
同步,异步,阻塞和非阻塞的区别
- 博客分类:
- java基础
一、概念
异步:某个事情需要10s完成。而我只需要调用某个函数告诉xxx来帮我做(然后我再干其他的事情)
同步:某个事情需要10s完成,我需要一直等它完成(等10s),再能继续后面的工作。
阻塞:做某件事情,直到完成,除非超时
非阻塞:尝试做,如果不能做,就不做(直接返回),如果能做,就做。
前两者和后两者不容易区分,不过前两者更多的有涉及到多线程交互(消息)的场景。
二、举个例子
小李喝了想喝水,于是去煮开水。1、小李把水壶放到炉子上,等待水烧开。(同步阻塞) 小李感觉这样太费时间。2、小李把水壶放到炉子上,去客厅看电视,时不时去厨房看看水开没有。(同步非阻 ...
./rabbitmq-plugins enable rabbitmq_management
跟我学系列之JVM远程性能监控
- 博客分类:
- java基础
新写的文章在这里:
http://www.jianshu.com/p/fe37a62ba155
概述
开发大型 Java 应用程序的过程中难免遇到内存泄露、性能瓶颈等问题,比如文件、网络、数据库的连接未释放,未优化的算法等。随着应用程序的持续运行,可能会造成整个系统运行效率下降,严重的则会造成系统崩溃。为了找出程序中隐藏的这些问题,在项目开发后期往往会使用性能分析工具来对应用程序的性能进行分析和优化。
VisualVM 是一款免费的性能分析工具。它通过 jvmstat、JMX、SA(Serviceability Agent)以及 Attach API 等多种方式从程序运行时获得实时数据,从而进行动态的性能分析。同时,它能自动选择更快更轻量级的技术尽量减少性能分析对应用程序造成的影响 ...
周末有空翻译了:http://redis.io/topics/lru-cache#maxmemory-configuration-directive
具体如下:
当用Redis作为一个LRU存储时,有些时候是比较方便的,在你增添新的数据时会自动驱逐旧的数据。这种行为在开发者论坛是非常有名的,因为这是流行的memcached系统的默认行为。
LRU实际上只是支持驱逐的方式之一。这页包含更多一般的Redis maxmemory指令的话题用于限制内存使用到一个定额,同时它也深入的涵盖了Redis所使用的LRU算法,实际上是精确LRU的近似值。
...
【转】如何用消息系统避免分布式事务?
- 博客分类:
- 方案总结
前阵子从支付宝转账1万块钱到余额宝,这是日常生活的一件普通小事,但作为互联网研发人员的职业病,我就思考支付宝扣除1万之后,如果系统挂掉怎么办,这时余额宝账户并没有增加1万,数据就会出现不一致状况了。
上述场景在各个类型的系统中都能找到相似影子,比如在电商系统中,当有用户下单后,除了在订单表插入一条记录外,对应商品表的这个商品数量必须减1吧,怎么保证?!在搜索广告系统中,当用户点击某广告后,除了在点击事件表中增加一条记录外,还得去商家账户表中找到这个商家并扣除广告费吧,怎么保证?!等等,相信大家或多或多少都能碰到相似情景。
本质上问题可以抽象为:当一个表数据更新后,怎么保证另一个表的数据也必 ...
一段JAVA线程池的设置引发的血案
- 博客分类:
- java基础
应公司需求我们对一个项目进行了线上压力测试,结果发现,三台服务器一共只有59TPS,结果惨不忍睹。
那么针对这样的场景,我们利用一周时间进行专注性的优化,寻找性能的瓶颈点。
第一步:我们针对线上的 ...
在之前的文章中,我们介绍了如何使用Scala IDE也就是eclipse中集成的Scala开发插件来进行Scala语言程序的开发,在使用了一段时间之后,发现eclipse对Scala的支持并不是很好。用户体验比较差,比如联想速度比较慢等。由于在公司一直使用的Scala开发工具是Intellij IDEA(好吧,其实我使用Scala IDE的目的就是想试一下这两个各有什么优缺点),各方面感觉还不错,所以在此介绍一下这个开发环境。
Intellij IDEA是jetbrain开发的一个IDE,用于Java、Groovy、Scala等的开发,自称是当前最智能的Java开发环境(The most i ...
JVM的GC日志的主要参数包括如下几个:
-XX:+PrintGC 输出GC日志
-XX:+PrintGCDetails 输出GC的详细日志
-XX:+PrintGCTimeStamps 输出GC的时间戳(以基准时间的形式)
-XX:+PrintGCDateStamps 输出GC的时间戳(以日期的形式,如 2013-05-04T21:53:59.234+0800)
-XX:+PrintHeapAtGC 在进行GC的前后打印出堆的信息
-Xloggc:../logs/gc.log 日志文件的输出路径
在我做了如下的设置
Java代码
【转】Java常见内存溢出异常分析
- 博客分类:
- java基础
Java虚拟机规范规定JVM的内存分为了好几块,比如堆,栈,程序计数器,方法区等,而Hotspot jvm的实现中,将堆内存分为了三部分,新生代,老年代,持久带,其中持久带实现了规范中规定的方法区,而内存模型中不同的部分都会出现相应的OOM错误,接下来我们就分开来讨论一下。 栈溢出(StackOverflowError) 栈溢出抛出java.lang.StackOverflowError错误,出现此种情况是因为方法运行的时候栈的深度超过了虚拟机容许的最大深度所致。 出现这种情况,一般情况下是程序错误所致的,比如写了一个死递归,就有可能造成此种情况。 下面我们通过一段代码来模拟一下此种情况的内存 ...
【转】分布式锁的实现
- 博客分类:
- 开源工具总结
在很多互联网产品应用中,有些场景需要加锁处理,比如:秒杀,全局递增ID,楼层生成等等。大部分的解决方案是基于DB实现的,Redis为单进程单线程模式,采用队列模式将并发访问变成串行访问,且多客户端对Redis的连接并不 ...