I/O

最近在看Tomcat 7.0的源码,一直对Tomcat以下几块比较感兴趣: - 容器的架构和各组件的启动过程 - 容器Deploy一个Servlet webapp的过程 - 容器接受并处理客户端请求 而最后一块是我最感兴趣的部分,Tomcat 7.0提供了BIO(blocking I/O)和NIO(non-blocking I/O)及AJP协议的实现, 不过默认启用BIO和AJP,大家可以通过修改Tomcat安装目录下的conf/server.xml来启用NIO ,只需把protocol="HTTP/1.1"改为protocol="org.apache.coyote.http11.Http11NioProtocol"即可。 Blocking I/O JDK 5.0以前只有BIO的API,通常我们写Client/Server程序都会这么写: ServerSocket ss = createServerSocket(); ss…

Metrics简介

Metrics是一个用于代码监控的开源工具包,通过在Java代码中嵌入Metrics的一些组件,实现对业务代码的监控。Metrics提供了对 Jetty,Logback,HttpClient,Ehcache等支持模块。Metrics还可以和Ganglia、Graphite集成提供图形化界面。 详细介绍请参见官方网站。 Metrics Maven setup 只需要在pom文件里加入metrics-core依赖就可以了,目前最新稳定版为3.0.1。 <dependency> <groupId>com.codahale.metrics</groupId> <artifactId>metrics-core</artifactId> <version>${metrics.version}</version> </dependency> Metrics instruments…

2013总结

2013对我而言是个特别的年份,这一年发生了许多事,也想明白了一些东西。一些感悟: 兴趣真的真的很重要。如果工作是你的兴趣,那么恭喜你,你是你自己的老板。 人生本无常,不如意十之八九;平和的心态去面对人生。 也许做好一件事只有1%的可能,但不去做毫无可能。 专注、极致、开放、敏捷 拖延症对于我来说是最大的敌人,怎么打败它是我接下来首先需要考虑的问题 其实根本没必要去做到不以物喜,不以己悲,人生起伏不平,本应喜怒哀乐 看到一段话:当你坚持不下去的时候,就闭上眼睛,想象自己已是一个步履蹒跚的老人,此时无比悔恨年轻时的碌碌无为,浪费光阴;多想再一次回到年轻的时候。这时就睁开眼睛,瞬间你又有了年轻。 阅读很重要,可惜上学毁了我们阅读的兴趣,这不得不说是件很讽刺的事。但是无论如何,你还是需要阅读,the more,the better。 如果你对你的老板很不满,还继续浪费生命为他打工吗?人生这么短暂,赶紧炒了他吧! 人之间本应真诚相待,奈何总会碰到许多阴险狡诈的小人;Anyway,你还是需要保持真诚…

Cloud Foundry之gorouter源码剖析

Router是Cloud foundry里很重要的一个组件,最初的Router是由Nginx作为入口,调用Lua代码连接一个由Ruby写的Server,根据客户端请求Header决定由不同的后端去处理。这种架构的局限在于:Nginx是个Web服务器,它不支持非HTTP请求,例如TCP或者Websocket;而且由于HTTP必须要一个Request/Response来回导致效率低下。因此从Cloud foundry v2版本开始,Router开始用Go语言实现从而解决了上述局限;总所周知,Go语言是为多线程、高并发而生的语言。为了突出与v1版的router不同,取名gorouter。gorouter提供了对Websocket的支持,并且整个组件由单进程实现,从而减少了不必要的延迟。 gorouter核心源码并不庞大,我统计了下不到3000行。算上所有依赖库等代码,一共有53000多行。 main.go是gorouter的入口文件,与一般的开源工程的入口文件一样,main.go很简单:加载用户指定的配置文件,如未指定,则加载默认配置,默认配置在config.go中。接着调用router.go中的NewRouter与Run方法。 var configFile string func init() { flag.StringVar(&configFile, "c", "", "Configuration…

Web service based on Hessian

这几天项目上线碰到了一个的问题:手机后端应用部署在一台有公网IP的服务器A上,后端应用访问的数据库部署在与A在同一子网的服务器B上,考虑到安全性等问题,B没有公网IP。现在有另一个同样需要访问数据库服务器B的应用部署在服务器C上,C与A有着相同的DAO,但是C与A、B不在同一子网内,也就是说C无法访问B。该如何解决这个问题? 很明显,C只能通过A来访问B;同时考虑到A与C有着相同的数据库访问接口,所以思考能否把数据库访问层剥离出来,以Web service的形式对外提供服务。这样A与C上的应用都通过这个web service访问B上的数据库。 由于基于XML/JSON的ws涉及到marshal/unmarshal,而我们A、C上的应用使用同样的DAO和data model,这样看来,Hessian貌似是个挺好的选择。 那么,Hessian是什么? 官方的描述是: The Hessian binary web service protocol makes web services usable without requiring a large framework, and without learning yet another…

关于Spring farm

一直想建个个人网站写写博客、发布点小破应用玩玩,但是一直没有去做,想了好几年都没真正去做。昨天下午突然心血来潮,从了解建站过程到注册域名再到租服务器,折腾了好久,这才懂得搞个网站还是相当麻烦的,更别说PV几百万的网站。 由于国内的政策大家都懂的,搞个破网站都需要备案,否则公仆们根本不让开;至于备案嘛,各种麻烦各种折腾,再加上国内申请个域名就死贵,租个服务器(还是那种虚拟共享的垃圾)都狠狠宰你一刀,所以还是打算去自由的美利坚合众国注册吧,把服务器也选在美利坚。这样一来latency就比较大了,平均达到300 ms,考虑到只是搞个博客而已,所以速度慢点可以忍受。 关于租服务器,了解了下,美利坚果然很牛,提供了国内基本没有的VPS,就是给你一台虚拟的服务器,你拥有root权限。换句话说你在上面怎么折腾都行,可以装任何你想装的软件,甚至可以重装系统。由于最近本人在学习Go和Node.js,所以这点对我很重要。国内大多只提供局限的几种技术支持,比如ASP,JSP;稍微好点的云平台不是死贵就是各种不支持,都2014了居然还不支持Ruby,我去。 关于注册域名,真的是个折腾人的事儿,喜欢的名字早被注册了,最后经聪明人提醒,一查springfarm居然还有几个顶级域名未被注册(虽然.com没了…

My first blog

Here is my first blog for testing. I will spent much time here posting blogs. Feel freee to contact me if you have any question. Welcome my friends…