龙浩的blog
用技术创造价值,用艺术塑造自我!
用技术创造价值,用艺术塑造自我!
Jul 26th
服务分离的方式有时候显得很高深,总是觉得API的方式不那么靠谱,所以,玩玩远程调用来让系统显得性感一点。性感的装扮有多种,总得找个适合自己的玩 法,虽然本人不善打扮,对打扮系统的方法还是知道那么几个滴。Spring做了远程调用的封装,为了假装自己不是一个轮子的重复制造者,还是让系统在 Sping框架上实现了。
Spring的远程调用大概有以下几种:RMI,HttpInvoker,Hessian,Burlap,JAX RPC,JAX-WS,JMS,Jetty+Servlet 。偶只玩过RMI,HttpInvoker,JMS。其他几种也是听说了下。当然,同集群内的的服务,用 RMI,HttpInvoker,Jetty+Servlet都是较好选择(限本人了解的情况)。
Spring RMI:
推荐你去看文档了解具体的配置细节,这种玩法的优点是:在远程启动服务后,你可以像调用本地bean一样调用远程的bean,如果考虑下安全问题加一个 taken或密钥,简单,实用,满足同集群的多数需求。
Spring HttpInvoker:
继续去看文档吧!这个需要依赖HttpClient包,有个依赖,总是觉得不爽,而且在web.xml中也需要配置相关的servlet的信息,所以总是 感觉有点麻烦,然后还需要在远程调用的时候返回做相关的bean,能用,不够简洁。
Spring + Jetty:
Ya!这个不是我想出来的,这样玩只是孙*的建议。启动Spring的时候,就能把相关的servlet服务暴露出去。当然,返回的就是 HttpServlet了,没有你渴望的bean,我有点忽悠你了,可是如果返回一个流行的json,是不是也算玩远程调用了。玩嘛……
首先你还是需要到jetty的官网上去下载个jetty来,把lib/jetty-6.1.24.jar,jetty-util- 6.1.24.jar,servlet-api-2.5-20081211.jar加入到你的工程的编译目录下面,如果你用maven的话,在 pom.xml配置一下:
建一个servlet,简单的如下:
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String name = request.getParameter("name");
if (name != null) {
name = new String(name.getBytes("ISO-88590-1"),"utf-8");
} else {
name = "longhao";
}
PrintWriter out;
String title = "HelloWorld";
response.setContentType("text/html;charset=GB2312");
out = response.getWriter();
out.print("<html><head><title>" + title + "</title>");
out.print("</head><body>");
out.println("<h1><p> Hello " + name + "</p></h1>");
out.print("</body></html>");
out.close();
}
}
然后配置一把spring的xml,把相关的配置信息加上去。
打开你的浏览器,输入:http://localhost:8080/hello ,恭喜,看到了hello longhao 。什么原因,你懂滴!
由于个人不太喜欢用HttpInvoker的方式调用,所以推荐的排序是:RMI > Jetty + Servlet > HttpInvoker。环肥燕瘦啊!如果你的爱好不同,请低调的告诉我,保持低调。
Jul 14th
Jul 13th
编译参数:
–with-mpm=MPM Choose the process model for Apache to use.
MPM={beos|worker|prefork|mpmt_os2|perchild|leader|threadpool|win_nt}
linux和unix下面默认为profork模式,常用的有worker模式和profork模式,windows下面是win_nt模式。
1:profork
工作原理:一个单独的控制进程(父进程)负责产生子进程,这些子进程用于监听请求并作出应答。Apache总是试图保持一些备用的(spare)或者是空 闲的子进程用于迎接即将到来的请求。这样客户端就不需要在得到服务前等候子进程的产生。将MaxClients设置为一个足够大的数值以处理潜在的请求高 峰,同时又不能太大,以致需要使用的内存超出物理内存的大小。
优点:具有很强的自我调节能力,只需要很少的配置指令调整。
| 默认值 | 说明 | |
| MaxSpareServers | 10 | 设置空闲子进程的最大数量。如果当前有超过MaxSpareServers数量的空闲子进程,那么父进程将杀死多余的子进程。只有非常繁忙的机器才用设置这个值,不要设置的太大。 |
| MinSpareServers | 5 | 空闲子进程的最小数量 |
| StartServers | 5 | 设置了服务器启动时建立的子进程数量。因为子进程数量动态的取决于负载的轻重,所有一般没有必要调整这个参数 |
| ServerLimit | 最大200000,编译默认20000 | 只有在你需要将MaxClients设置成高于默认值256的时候才需要使用这个指令。要将此指令的值保持和MaxClients一样。 |
| MaxClients | 256 | MaxClients指令设置了允许同时伺服的最大接入请求数量。任何超过MaxClients限制的请求都将进入等候队列,直到达到ListenBacklog指令限制的最大值为止。一旦一个链接被释放,队列中的请求将得到服务。对于非线程型的MPM(也就是prefork),MaxClients表示可以用于伺服客户端请求的最大子进程数量,默认值是256。要增大这个值,你必须同时增大ServerLimit 。 |
| MaxRequestsPerChild | 10000 | 设置每个子进程在其生存期内允许伺服的最大请求数量。到达MaxRequestsPerChild的限制后,子进程将会结束。如果MaxRequestsPerChild为"0",子进程将永远不会结束。 |
2:worker
工作原理:每个进程可以拥有的线程数量是固定的。服务器会根据负载情况增加或减少进程数量。一个单独的控制进程(父进程)负责子进程的建立。每个子进程可 以建立ThreadsPerChild数量的服务线程和一个监听线程,该监听线程监听接入请求并将其传递给服务线程处理和应答。
优点:由于使用线程来处理请求,所以可以处理海量请求,而系统资源的开销小于基于进程的MPM,是apache2.0后的发展趋势。
典型设置:
ServerLimit 16
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
| 默认值 | 说明 | |
| MaxSpareThreads | 250 | 最大空闲线程数 |
| MinSpareThreads | 75 | 最小空闲线程数 |
| StartServers | 3 | 设置了服务器启动时建立的子进程数量。因为子进程数量动态的取决于负载的轻重,所有一般没有必要调整这个参数 |
| ServerLimit | 最大200000,编译默认20000 | 只有需要将MaxClients和ThreadsPerChild设置成需要超过默认值16个子进程的时候才需要使用这个指令。不要将该指令的值设置的比MaxClients 和ThreadsPerChild需要的子进程数量高。 |
| MaxClients | 50 | 表示可以用于伺服客户端请求的最大线程数量。对于混合型的MPM默认值是16(ServerLimit)乘以25(ThreadsPerChild)的结果。因此要将MaxClients增加到超过16个进程才能提供的时候,你必须同时增加ServerLimit的值。 |
| ThreadsPerChild | 25 | 这个指令设置了每个子进程建立的线程数。子进程在启动时建立这些线程后就不再建立新的线程了。如果使用一个类似于mpm_winnt只有一个子进程的MPM,这个数值要足够大,以便可以处理可能的请求高峰。如果使用一个类似于worker有多个子进程的MPM,每个子进程所拥有的所有线程的总数要足够大,以便可以处理可能的请求高峰。 |
3:event
event多路处理模块(MPM)被设计成面向需要处理大量并发连接的场合(特别是在开启KeepAlive的场合),它基于worker开发,并且配置 指令与worker完全相同。
要使用event MPM,你必须在配置脚本configure的命令行上使用–with-mpm=event选项。
该MPM依赖于APR用于线程同步的compare-and-swap原子操作,并且你还需要在configure命令行上使用–enable- nonportable-atomics=yes选项。如果你为x86平台编译,那么最低要求i486以上的CPU支持;如果你为SPARC平台编译,那 么最低要求UltraSPARC芯片。因为更老的CPU不支持compare-and-swap原子操作。
Jul 10th
在豆瓣上看这本书的提纲时,觉得非常的诧异:因为每章的标题都能够写一本很厚的书。再向上看看书的页数,我感觉这本书多半是个人经验的分享,经验之外的就是做简单的介绍而已。其实一谈到分布式,很多码农就开始膜拜了,作为码农的一份子,也就买书学习先了。
读完这本书,合上书回忆了大概的内容,印象最为深刻的还是 深入理解JVM 这一章,因为里面很多知识我都不了解,我对JVM的调优还停留在小儿科的阶段,对gc的算法和hotspot几乎一无所知,所以,有收获,有印象。也尝试自己在设定eden space的情况下,实现5次monitor gc 和一次 full gc,其实这是个好玩的题目,由于面试过的人无一人说精通gc,所以也没有用上。JVM调优在小型系统中关注的并不是很多,还是因为用户少的时候,很多问题无法暴露出来,但是如果不在初见端倪的时候就及时调整,问题很快就变成了灾难。
还有就是性能调优这章算是在读的过程中操作比较多的,通过动手能够理解后面自己碰到问题应该怎么做。记得自己写过一段很弱智的代码导致系统的cpu使用率过高,但是查找问题却用了很长时间,最后还是借助了jprofile来搞定。如果是能够用jdk和系统自带的工具就搞定的话,我也没有必要搞个D版的jprofile来玩自己。这本书上讲到的一些经验还是很有价值的。
由于对集合包和并发包相对较熟悉,所以这块简单的带过了。其实我觉得SOA这个概念中,我不喜欢SCA这种玩法,倒是对ESB比较感兴趣,这部分内容讲的比较少,较为遗憾,看来想好好的玩玩ESB,还是需要找找支付宝的那帮技术大佬们。
分布式系统中,读多于写的问题基本解决了,在大型应用中,httpserver前面搞个memcached集群,后端mysql用master-slaver的方式,slaver负责读,master负责写基本可以解决问题。但是自动twitter和webgame的出现,让写和读几乎一样的多了,这样问题就接踵而至。前面谈到的架构显然不能解决问题,怎样解决这样的问题,国内估计只有tencent这样的公司能够立刻说搞定,如果能够在书中抛出这样的问题,谈到一些解决方案,或许能够锦上添花了。
对做过较长时间javaer,如果读过《SOA in Practice》《java并发编程实践》《Java NIO》《构建可拓展的web站点》《深入Java虚拟机》等书,同时对书上的内容有过实践,我觉得读这本书就没有必要了!普通的码农还是读读提高自己(例如我)。
Jul 3rd
云计算才开始出来的时候,Oracle CEO 埃里森并不看好,或许他估计这个概念会和网格计算一个,成为历史的灰尘。2008年,埃里森在一次分析会上做过这样一段评价:“我们已经重新定义了云计算,它将囊括我们所做的一切。最近发布的一切新产品新服务都是云计算。事实上,如果有哪个行业比女人们的时尚业更赶潮流和时尚,那非计算机业莫属了。” (点击 这里 看看oracle的云计算很酷的展示)。后来,我们只能说:大公司的老板们更像赶时髦的女人。
其实:赶时髦的何止一些老板,程序员们也在被时髦。如今,你的简历上没有WebService,SOA,SCA,ESB,IaaS,PaaS,SaaS……你都不好意思出来找工作,或者别人会以为你很菜。总是在没有海量用户的情况下追求master-slaver,搞个分表,号称以后会怎么样,假装模拟未来的所谓的海量,这真的会出现吗?在java代码中,请先用3种方式实现singleton吧。
SOA是个啥?
SOA(Service-Oriented Architecture)这个概念最早由Gartner公司在玩,后来发现孤掌难鸣,就先暂时放弃了下。随着互联网的发展,大规模的web服务(例如: 电子商务)开始兴起,技术也慢慢的在不断演化,所以到了04,05年的时候,大厂商们逐渐发现自己的组件类商品这么多了,需要打包销售一下,就SOA吧!
工业革命给我们带来了标准化,在计算机领域,同样也受着标准化的限制,毕竟,谁制定了标准,谁就控制了游戏规则。几乎当前所有的主要工具供应商和平台提供商都参与了SOA标准的制定,包括微软、IBM、BEA、Oracle、Sun、SAP AG、Nokia、Xcalia、Zend 、Sonic Software……仔细看看这些厂商,骤然发现:SOA是寡头们的游戏,我们又一次在被引导。
2007年将有三个重量级的标准问世,它们目前都属于规范级别。它们就是SCA、SDO、WS-Policy。SCA和SDO构成了SOA组件开发的核心,而WS-Policy则成为SOA组件间安全通讯的标准,其作用类似于安全套接层在浏览器与服务器通讯中的重用。事实上,WS-Policy的基本原理与SSL是一致的。2007年将会有许多SOA的规范升级为标准。SCA和SDO计划于2007年由OASIS审核通过,而WS-Policy也将于2007年8月正式成为 W3C标准。
某些高级民工,写了几行基于组件的代码,就号称我们SOA了;还有一些人,基于Tuscany做了个封装,然后把小东西都搞的很复杂,也号称自己SOA了。这或许就是传说中的“大炮打蚊子”吧!在小规模,小用户群的情况下,API的方式或许更靠谱一些。何必为了时髦,硬是弄个“皇帝的新装”出来?对多数程序民工来说,远观SOA就好了,何必去玩?
不能因为她穿了件漂亮的衣服,你就以为是换了个女人。
?aaS是个啥?
IaaS,PaaS,SaaS……
SaaS(Software-as-a-service)软件即服务,这个是Salesforce先玩出名气的,或许就是发现些C++代码不怎么在行,同时windows和linux要写2个版本,那就搞个网页版本的吧。也就是把以前的应用软件搬到了互联网上,做了件事,那就得起个名字,后来发现没有SaaS这个概念更好的了,所以在没有云之前,我们称这类服务为SaaS,有了云,这个就被淡化了。
IaaS(Infrastructure as a Service)基础设施即服务,是amazon搞出名气的。amazon发现自己的小老婆(虚拟机服务)其实并不怎么时髦,为了给这个妾叫个好听的名字已方便接人待物,就折腾了个IaaS。在08年年底,这个妾的带宽消耗超过了正室,未来或许就被扶为正室了。
PaaS(Platform-as-a-Service)平台即服务,这个是google的妾(GAE)。后来google给这个妾取了个更好听的字:云计算。
2年前,云计算的概念没有现在这么火,大家都在?aaS了。金蝶,用友,阿里软件……其实就是写了个网页,有必要把东西搞的这么概念么?话又说回来,不搞概念,我们开会说什么?不搞概念,用户会买单么?
云计算是个啥?
云计算的一统江湖(?aaS),还是要感谢google和amazon的联合炒作。这个感念都被炒熟了,现在到处是云,我也不用解释,你知道滴!
目前这个只是计算机界一个新的皇帝新装而已。没有标准化,只有概念玩……
自己是个啥?
炒作概念是商务部和领导们的事情,如果你发现自己是个码农,在多数场合还是低调的讨论代码的一些问题比较靠谱。低头一看,还是《编程珠玑》上讲的内容很有道理。这些计算机概念,让别人去玩吧!
我们不要被概念玩,就如同不能被女人玩一样!
Jun 23rd
面试的时候,如果求职者用的是gmail,我是会加些分的。从表面上看,这个人找到了一些好用的资源,而且这个资源的产品设计是值得我们学习的。作为一个拥有多个邮箱的人,其实在互联网上我的很多账号的注册邮件都是126.com的,例如:淘宝,支付宝,豆瓣,twitter等,主要是这个邮箱地址我用的时间太久了,无法割舍,很多老朋友都用这个账号联系我。用gmail更多的是为了使用google的服务,尽管我也号称想研究一下这个mail产品为什么做的好用。
既然建议别人使用gmail,那么还是要给点使用它的理由吧!俗话说“货比货要扔”,还是和163的邮箱,QQmail对比一下。
服务
和gmail相关的最常用的google服务:日历,文档,Picasa,Analytics,Google Groups,Google Code ,GAE等,作为想成为互联网企业的员工的人,了解这些基础服务对我们开发产品的细节有一定的指导意义。尤其是阿里云这样的公司,没玩过GAE,投简历需要谨慎出手,除非你是技术高人。说句比较空的话:站在巨人的肩上玩技术。
相对google的服务,你可以想一下,你拥有qqmail和163的邮箱除了邮件功能还可以做什么?网盘?百宝箱?
快
用公司的邮箱转发一个测试邮件,Google收到邮件的速度最快,163邮箱速度次之,qqmail最慢。回去深圳,原来的室友感叹gmail速度怎么这么快,我发送出去吼了一声,他就收到了。
收邮件的快还是次要的,Gmail的搜索功能快才是主要的。无论是和朋友的聊天记录,还是收到过的邮件,借助google的搜索这个核心业务,效果真的不一般。
附件预览
gmail可以把邮件和文档结合起来使用,将附件保存到docs中;163可以预览doc和pdf的附件,是自己做的falsh插件;qqmail估计认为这个功能不核心,所以干脆就没做。
图片是邮件发送较多的附件,其中gmail和qqmail可以预览缩率图,163邮箱只能在线预览。
同时gmail和youtube的视频可以结合起来,有预览的功能,其他邮箱做视频就只能链接过去了。
离线功能
当不在线上的时候也能浏览自己的邮件,处理一些必要的事情。随着无线业务逐渐“飞入寻常百姓家”,离线操作的需求会被逐渐的弱化,但是现在在断网情况下查看邮件还是相当普遍,当你使用天威宽带这种经常掉线的服务提供商的时候就知道厉害了。还有就是飞机上需要回复一些邮件。
现在qqmail和163邮箱其实动作都很快,在google推出什么创新服务的时候,他们都会根据自身特点适当的调整。在2005年,看到126邮箱改版,我的眼睛为之一亮,4年过去了,163没落了。qqmail随着那个超大附件的创新和简洁好用的模式,在中国逐渐做大是必然的。
用什么邮箱是个人的选择,如果是我表弟,我肯定推荐126.com,如果你是互联网从业者,使用gmail会让你更贴近互联网而已。