- 博客(100)
- 资源 (4)
- 收藏
- 关注
原创 Spring Actuator源码分析
Spring Actuator源码分析Actuator EndpointActuator模块通过Endpoint暴露一些接口,可以是Rest方式,也可以是JMX等其他方式.如果使用Rest方式,通常SpringMVC是使用@RequestMapping,以及@Controller标注一个控制器方法,如果不使用SpringMVC,即没引入SpringMVC的包,那么Springboot就会出错.所以为
2015-12-03 21:13:59 4615
翻译 使用Elasticsearch,Kafka和Cassandra构建流式数据中心
在过去的一年里,我遇到了一些软件公司讨论如何处理应用程序的数据(通常以日志和metrics的形式)。在这些讨论中,我经常会听到挫折感,他们不得不用一组零碎的工具,随着时间的推移将这些数据汇总起来。这些工具,如: - 运维人员使用的,用于监控和告警的工具 - 开发人员用于跟踪性能和定位问题的工具 - 一个完整独立的系统,商业智能(BI)和业务依赖其分析用户行为虽然这些工具使用不同的视角,适用不同
2015-12-03 21:08:22 5851 2
翻译 使用Netflix Hystrix编写弹性可容错的应用程序
弹性指的是在复杂网络环境下,面对各种故障和挑战,仍能提供和维持一个可以接受的服务水平,并正常运作。 -来自Wikipedia自从长期服务和最近的微服务被大家熟知和使用,很多应用程序开发人员已经将整体式的API,转换成简单的、功能单一的微服务。然而,这样的转换,导致为了保证一致的响应时间和弹性,依赖关系变得不可用时,造成额外的损耗。例如,一个单体式的web应用程序,执行一次重试,在一定程度上是弹性的
2015-12-03 21:07:00 9601
原创 Spring Boot自动配置源码
Spring Boot自动配置源码SpringBoot初始化上下文环境SpringBoot会从META-INF/spring.factories文件中加载Initializers,Auto ConfigureInitializers用于加载配置(Environment) Auto Configure用于自动配置类如果是web类型的工程,SpringBoot会创建EmbeddedWebApplica
2015-11-27 12:00:19 8829
原创 关于GhostDriver的Cookie隔离问题
关于GhostDriver的Cookie隔离问题GhostDriver包括了Java驱动phantomjsdriver,PhantomJS WebDriver,详细的不再赘述。看上一片文章。Java用phantomjsdriver时,碰到需要Cookie隔离问题,同一个网页,多个RemoteWebDriver会共享同一个Cookie。比如想要并行登陆并执行操作,这样是不行的。PhantomJS We
2015-02-11 11:29:57 3172
原创 PhantomJS其他语言调用
PhantomJS其他语言调用我本身是使用Java语言的,所以会考虑phantomjs如何与java交互。目前考虑方案有如下两种:1. Java Process抓取逻辑还是用Javascript,封装成JS脚本,用Java Process去调用和管理每个Phantomjs的进程,但是多开进程,估计对机器性能要求比较高。而且Java只能通过phantomjs的标准输出,来判断脚本执行情况。2.Phan
2015-02-08 22:05:17 4770
原创 Phantomjs,Casperjs重要的概念:执行顺序
Phantomjs,Casperjs重要的概念:执行顺序Phantomjs和Javascript一样,是基于消息驱动的。代码的执行都是异步化的。 要理解phantomjs的代码执行是基于一个step栈。在执行脚本时,会将所有step压入栈。 wait,then,open,等这些都是一个step。 举几个例子:casper.wait(1000,function() { do1}do2
2015-02-08 17:23:23 4036 1
原创 Java在Linux下如何维持大量链接
修改用户进程可打开文件数限制在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)。可使用ulimit命令查看系统允许当前用户进程打开的文件数限制:[speng@as4 ~]$ ulimit
2014-12-12 16:10:10 2004
原创 ServiceLoader服务提供者模式,实现动态插件加载,类责任链模式
EditServiceLoader服务提供者模式,实现动态插件加载,类责任链模式ServiceLoader的功能比ClassLoader简单,它可以帮我们获取所有实现了某接口或基类的类。当然前提是ClassLoader已经加载过的类。举个例子:定义一个接口:public interface IService { public String sayHello(
2014-12-04 14:21:24 4421 2
原创 Linux Shell的锁:flock
Linux Shell的锁:flock在写分布式系统的时候,需要同步进程之间的调用顺序。我的需求是,多个进程同时要在一个maven工程中编译打包接口。通过new一个Process去跑一个Shell脚本,Shell脚本会将接口源代码拷贝到Maven工程,运行打包命令并将打包好的Jar包移动到对应进程的Classpath下。当然也可以通过为每个进程拷贝一份maven打包工程,来绕过这个
2014-11-25 17:56:21 8827
原创 Java时间:GMT以及UTC
EditJava时间:GMT以及UTCGMT即格林威治标准时间,以英国伦敦郊区皇家格林威治天文台的标准时间。世界被分为24个时区。而北京在东八区UTC即世界协调时间,以格林威治时间为准,经过平均太阳时等修正后,以秒为单位的国际原子时所综合计算而成的时间。所以UTC比GMT更加精准。Java Date使用UTC时间,如Tue Nov 11 16:59:08 CST
2014-11-12 11:16:10 12172
原创 Java操作Mongo
Java操作Mongo// 创建连接MongoClient mongoClient = new MongoClient(Arrays.asList(new ServerAddress("localhost", 27017), new ServerAddress("localhost", 27018),
2014-11-12 11:08:38 4057
原创 MongoDB入门概念
MongoDB入门概念Mongo的一些概念:documents:类似json的数据结构,是最基础的存储单位,如:{ name : "mongo" }collection:每个collection下面可以有很多个不同的documentscursor:每个查询都会返回cursor,用于迭代获取每行结果数据#进入shellbin/mongo#查看当前数据库db#查看所有数
2014-11-12 11:07:45 1019
原创 Java Metrics
Java MetricsJava Metrics是一个功能比较强大的java统计库,它的输出组件也很强大,帮我们做好了:输出到Ganglia输出到控制台输出到JMX输出Json详细见:dropwizard.github.io/metrics/依赖添加依赖,如gradle: compile "io.dropwizard.metrics:metrics
2014-10-24 10:33:52 8376 4
原创 Flume数据传输事务分析
Flume数据传输事务分析本文基于ThriftSource,MemoryChannel,HdfsSink三个组件,对Flume数据传输的事务进行分析,如果使用的是其他组件,Flume事务具体的处理方式将会不同。一般情况下,用MemoryChannel就好了,我们公司用的就是这个,FileChannel速度慢,虽然提供日志级别的数据恢复,但是一般情况下,不断电MemoryChannel是不会
2014-09-30 14:59:48 11344 2
原创 Actor生命周期理解
Actor生命周期理解镇图:Actor内功心法图Actor的生命周期可以用Hooks体现和控制,下面是默认的Actor Hooks的方法,我们可以选择性的进行重写:def preStart(): Unit = ()def postStop(): Unit = ()def preRestart(reason: Throwable, message: Option[Any]
2014-08-27 19:22:04 10409 1
原创 Akka相关概念理解
Akka相关概念理解Actor适用Actors可以替代:一个线程一个对象或者组件一个callback或者listener一个单例或者服务一个路由转发者,负载均衡器,池一个Java EE的session bean或者事件驱动bean创建很多的Actors:Actors不像线程一样重,可以把它们当做轻量级的对象来看为每个请求创建一个actor?没问题为处理一
2014-08-26 11:23:31 5323
原创 IDEA跑Tomcat异常
IDEA跑Tomcat异常具体异常如下Artifact :war exploded: Server is not connected. Deploy is not avail根据别人的回答,去掉tomcat/bin下的setenv.*文件即可。原因是该脚本里含有set JAVA_OPTS=-server -Xmx768m -XX:MaxPermSize=256M
2014-08-23 11:10:01 52713 31
原创 scala的类与类型
scala的类与类型类和类型List和List类型是不一样的,但是jvm运行时会采用泛型擦除。导致List和List都是Class.为了得到正确的类型,需要通过反射。泛型擦除Java中的泛型基本上都是在编译器这个层次来实现的。在生成的Java字节码中是不包含泛型中的类型信息的。使用泛型的时候加上的类型参数,会在编译器在编译的时候去掉。这个过程就称为类型擦除。泛型擦除
2014-08-08 15:35:48 14449 1
原创 Akka学习笔记(七):配置
Akka学习笔记(七):配置使用Akka可以不用任何配置,Akka提供了明智的默认配置。为了适应特别的运行环境,修改默认行为,你可能需要修改:log level and logger backendenable remoting消息系列化路由设置调度器调优Akka使用Typesafe Config Library,纯java实现的配置库。之前博客有介绍过here从哪
2014-08-07 16:42:49 15393 1
原创 Akka学习笔记(六):消息传递可靠性
Akka学习笔记(六):消息传递可靠性一般规则关于消息发送,有两条基本规则:最多一次,即不保证消息传递可靠性message ordering per sender–receiver pair消息传递机制最多一次,意味消息有可能丢失最少一次,保证消息传递可靠,但可能冗余保证只成功一次,性能最差,消息成功传递,不冗余为什么不保证传递可靠性问题是,
2014-08-07 16:42:13 6165
原创 Akka TestKit测试包的使用
Akka TestKit测试包的使用TestKit,测试类必须继承几个接口:class SendingActor01Test extends TestKit(ActorSystem("testsystem")) //TestKit创建testsystem用于测试 with WordSpecLike //可以用must,in等语句描述测试方法 with MustMatchers
2014-08-07 16:41:50 6476
原创 Akka学习过程的疑问
- actor要如何分解才合适,在一个JVM上随意为每个功能启动多个actor?那远程actor一般作为其中的一个功能还是服务?- actor和线程的关系actor数和线程数不是一一对应的。2.7 million actors占1GB内存. 而1GB内存只能运行4096个线程.奥秘在于Actor直接可以复用线程。Actor和线程是不同的抽象,他们的对应关系是由Dispa
2014-08-07 16:41:25 2504
原创 Akka学习笔记(五):Akka与Java的内存模型
Akka学习笔记(五):Akka与Java的内存模型Akka简化了编写并发软件的过程,本文主要讨论Akka如何在并发应用中访问共享内存。Java内存模型Java5之前的JMM是相当混乱的。多线程访问共享内存很有可能会得奇怪的结果,如:可见性问题,无法及时看到其他线程写入的值指令乱序,观测到其他线程不可能的行为从Java 5的JSR 133的实现,很多问题就解
2014-08-07 16:39:29 6401
原创 Hive与Hbase整合
Hive与Hbase整合我们这边开始使用hbase做实时查询,但是分析的任务还是得交给hive,hive计算的结果导入到hbase.hive提供了几个jar包,帮助我们实现:创建与hbase共享的表,数据(表两边都有,数据只在hbase)映射来自hbase的表到hivehive查询的结果直接导入hbase启动hive启动命令如下,主要是指定jar包,以及hbas
2014-08-07 16:20:16 1932
原创 Logistic Regression 分类算法
Logistic Regression 分类算法Logistic Regression包含三个部分:回归,线性回归,Logistic方程1) 回归Logistic regression是线性回归的一种,线性回归是一种回归。那么回归是虾米呢?回归其实就是对已知公式的未知参数进行估计。比如已知公式是y=a∗x+b,未知参数是a和b。我们现在有很多真实的(x,y)数据(训练样
2014-07-28 16:53:58 3153
原创 Akka学习笔记(三):什么是Actor
Akka学习笔记(三):什么是Actor上一节讲到actor是actor system最基本的单元。这一节详细的讲讲actor.更详细here。actor是一个拥有state,behavior,mailbox,children,supervisor strategy的容器.Akka保证所有actor都只运行在自己的轻量级线程,并一次处理一个消息,这样程序员就不用处理同步、竞态A
2014-07-28 16:53:48 4748
原创 Akka学习笔记(二):Actor Systems
Akka学习笔记(二):Actor Systems图中表示的是一个Actor System,它显示了在这个Actor System中最重要实体之间的关系。什么是actor,是一个封装了状态和行为的对象,每个actor都通过message交流,从自己的mailbox中读取别的actor发送的消息。注意:ActorSystem是重量级的对象,会创建1...N个线
2014-07-28 16:53:07 17067 2
原创 Akka学习笔记(四):监督和监控
Akka学习笔记(四):监督和监控Supervision是什么supervision表示actors之间的关系。监督者分配任务给下属,因此需要处理反馈的错误。根据不同的错误,监督者supervisor可以做如下操作:恢复下属,让下属继续运行,继续接收message。当且仅当下属还可以正常运行重启下属,清空status。一般是第一条情况中,child的异常导致无法正常运行。关
2014-07-28 16:51:51 7830
原创 Akka学习笔记(一):创建Hello World工程
Akka学习笔记(一):创建Hello World工程创建工程使用IDEA,创建SBT工程,在build.sbt中添加akka依赖:name := "My Project"version := "1.0"scalaVersion := "2.10.4"resolvers += "Typesafe Repository" at "http://repo.typesaf
2014-07-28 16:49:59 6564
原创 Coursera Scala 5-5 List:Reduction of Lists
Coursera Scala 5-5 List:Reduction of Lists另一个list常用的操作是:连结集合元素。例如sum(list)ReduceLeft使用ReduceLeft可以很方便的编写通用的连结方法def sum(xs: List[Int]) = (0 :: xs) reduceLeft ((x,y) => x+y)def product(xs
2014-07-11 16:52:45 905
原创 Coursera Scala 5-3:Implicit
Coursera Scala 5-3:Implicit归并排序上一节课的排序函数不够通用,类型只适用Int:object mergesort{ def msort(xs: List[Int]):List[Int] = { val n = xs.length/2 if(n==0) xs else{ d
2014-07-11 16:52:04 983
原创 Coursera Scala 5-2:Pairs和Tuple
Coursera Scala 5-2:Pairs和Tuplepair: (x,y)scala> val (label,value) = (1,"s")label: Int = 1value: String = sscala> (1,"s")res0: (Int, String) = (1,s)超过两个元素的就是tuple了(T1,....,Tn)是Scala.Tu
2014-07-11 16:50:55 1061
原创 Scala的foldLeft和foldRight
Scala的foldLeft和foldRightFoldLeft定义如下: override /*TraversableLike*/ def foldLeft[B](z: B)(f: (B, A) => B): B = { var acc = z var these = this while (!these.isEmpty) { acc
2014-07-11 16:50:16 13759 1
原创 Coursera Scala 5-4:List的高阶函数
Coursera Scala 5-4:List的高阶函数Recurring Patterns for Computations on Lists重复出现的Lists计算模式lists的很多函数有相似的结构,重复出现的模式有:用某个方法转换每个元素用某个条件提取元素用某种方法链接元素函数式编程语言,让程序员能写出更通用的计算模式,通过使用高阶函数。Ap
2014-07-11 16:49:39 1216
原创 Coursera Scala 4-3:子类型和泛型
Coursera Scala 4-3:子类型和泛型Type Boundsdef assertAllPos[S ](r: S): S = ...S S >: T表示S是T的父类也可以这么用:[S >: NonEmpty <: IntSet]协变covariant这个的意思是:如果List是convariant的,Scovariant带来
2014-07-11 16:49:17 2122
原创 Coursera Scala 2-5,6:类
Coursera Scala 2-5,6:类class Rational(n: Int, d: Int) { require(d != 0) private val g = gcd(n.abs, d.abs) //将构造器传入的参数,赋值成成员变量,外部才可以访问 val numer = n / g val denom = d / g def this(n: Int)
2014-07-11 16:47:53 835
原创 Coursera Scala 4-7:Lists
Coursera Scala 4-7:ListsListsval nums = List(1,3,4)val empty = List()val fruit = List("apples","oranges")val diag3 = List(List(1,0,0),List(0,1,0),List(0,0,1))immutableList是递归的,arrays则不是
2014-07-11 16:47:14 720
原创 Coursera Scala 4-6:模型匹配
Coursera Scala 4-6:模型匹配匹配值val times = 1times match { case 1 => "one" case 2 => "two" case _ => "some other number"} List(('a',1), ('b',2), ('a',1)) match { case Nil => printl
2014-07-11 16:46:55 891
原创 Coursera Scala 4-1:函数作为对象
Coursera Scala 4-1:函数作为对象Functions Types Relate to ClassesScala是纯粹的面向对象的语言,函数是拥有apply方法的对象。函数类型A=>B等价于:package scalatrait Function1[A,B]{ def apply(x:A):B}Functions Values Ralate
2014-07-11 16:45:50 924
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人