`
michael.softtech
  • 浏览: 208783 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论
文章列表
     最近在看SOA相关的东西,综合看下来,发现几乎所有教材都在讲解正常流程;但是个人感觉下来,觉得 SOA的实施真正的问题反而是在服务的治理方面。遗憾的是教程几乎都着眼于基于ACID的分布式事务——实际上在现实世界里面,比如在淘宝,EBay里面,这种强一致性的两阶段事务根本就是被抛弃的,例如淘宝,用的是Best Efforts 1 Phase Commit .也就是说,是一种最终一致性模型。 当然,在一个所谓的事务(或者原子服务)里面,涉及到的数据源可能是数据库,Message,也可能是其他服务的某个服务。既然是非强一致性(实际上,因为涉及到WebService或者Restful这种服 ...
      好久木有写博客了。罪过罪过,实在是太忙,好在闲余没有白白浪费,Oracle的水平有了一个质的飞跃,越来越喜欢在命令行模式里面直接管理数据库的感觉了。            前段时间参加Velocity China 2012 _ web性能大会,期 ...
终于又有时间和精力来写写东西啦,真开心~ 这两天闲来没事翻了翻Mina的源码,小有感触,于是决定简单分享一下。 从服务端出发来分析一下吧。Mina有这么几个核心的接口类: IoAcceptor:  启动server段监听,启动Acceptor线程,处理连接请求同时生成IoSession并放到一个数组里面。 IoProcessor: 启动Processor线程。循环处理上面提到的数组里面的IoSession. 该读读,该写写。 IoSession:    客户端和服务端的会话抽象 IoFilter:         Mina用来处理消息的节点链中的节点 IoHander:     M ...
最近公司决定做一个面向个人的应用。虽然前期可能并发不会很大但是还是研究了一下支付宝和Ebay的分布式架构,以备用。   首先CAP理论。 我们通常在集中式环境中遇到的事务基本都是遵循ACID原则的。也就是说数据库中的数据有着很强的一致性。 但是在一个分布式环境中由于会遇到读写分离的情况,根据著名的CAP理论,为了更大程度的保证A(availability)和P(partition tolerance),需要在一些情况下对C(consistency)有所妥协。这就是俗称的弱一致性。但是弱贵弱,终归还是要回到一致状态的,于是这个叫最终一致性(Eventually Consistent). 最 ...
晚上翻 林昊 写的 <<分布式java应用>>,感觉很精辟。 还没系统看,刚刚看了下java内存模型这一块,做点笔记:)   首先为了跨系统的特性,java中是没有寄存器的。   然后分析一下jvm是怎么瓜分内存的~   线程栈(书中的jvm内存栈):线程私有的运行时的方法栈 jvm 堆: java用来存放对象的地方。根据对象的生命周期长短以及为了根据不同垃圾回收算法的特性取得更大性能,             划分为: Eden,S0,S1,Old java永久内存区:存放加载的类的信息(名称,修饰符,field信息,method信息),类中的静态常 ...
哎,昨晚又加班。可是还是很准时的醒了....上午不用去公司,正好继续补全我的博客:)   大家都知道自从jdk5开始,java中多了java.nio和java.util.concurent包,这两个包 可谓威力无穷啊,像tomcat最新版本(用了concurrent包),mina等纷纷在此基础上进行了 更新(mina更是直接就通过java.nio来实现的)。   其实nio说起来很简单。 java通信的基础是socket.和serversocket 在此基础上封装一下,就是socketchannel和serversocketchannel, 封装成channel的最大好处就是可以 ...
Runnable作为线程的接口已经广为大家所知。 但是在执行任务的时候如果想要返回结果怎么办?如果想抛出异常怎么办? 这些都是Runnable无法做到的。这时候另一个线程接口就出现了: Callable: V call() throws Exception;  Oh,perfect! 可以返回值,可以抛异常!   我们知道Runnable是通过Thread 类来执行的:new Thread(new Runnable(){..}).start(); 那么Callable呢? 这个是通过RunnableFuture来执行的(当然RunnableFuture也可以用来执行Runnab ...
昨晚闲来翻了一会Java ConcurrentCy in Practise, 进一步明确了java 一些 Synchronizers的用法,在此简单记录一下 昨日随手写的demo代码。只是为了加深印象,所以不怎么讲究,如有看官路过请不要挑剔:   import java.util.concurrent.BrokenBarrierException; import java.util.concurrent.CountDownLatch; import java.util.concurrent.CyclicBarrier; import java.util.concurrent.Sem ...
近日在项目中用到了memcached缓存。在此总结了一些常用的进行监控的命令: 1. stats 。列出一些常用的状态信息。比如缓存的命中次数啊,miss次数啊 2. stats items . 列出详细的Item信息。 3. stats cachedump 3 10  列出某个slab下面的items的信息。     签名的3表示一个slab id,后面的10表示列出的item的最大条数。     这个slab id 在上面一条命令里面可以看到。   4. 查看某个Item的内容。     get mykey     在步骤3里面已经列出了key,通过get命令可以查看对应的 ...
近日在做报表的时候,有时候cpu利用率会很高,查看了一下发现主要是一些全表扫描(full scan) , 于是 了解了一下这个概念,顺带温习了一下oracle索引的相关知识,记录如下:   1. rowno与rowid    前者是oracle对select出来的数据按 ...
昨天跟朋友讨论到一个有趣的问题:java中variable有没有override? 真是惭愧啊,到现在才知道原来java中的override只是针对method来讲的,对于变量是hide. 闲言少叙,先上两段代码: public class Base { public int x=1; public void echo(){ System.out.println(x); } } public class Sub extends Base{ public int x=2; public static void main(String[] args) { ...
1. top (linux下面),然后在top下面 Shift+H,就能看到到底是哪个线程(注:top默认的只显示进程信息)占用cpu高了;  solaris下面的话用prstat. 2. pstack pid(占用cpu高的进程)     在出来的文件里面找到对应的在步骤1里面找到的线程的trace信息,然后看一下这个线程究竟在干啥吧~   在linux下面还有一个比较有用的命令,gcore . 能够生成对应的进程的 core dump信息。 然后可以用一些分析工具看一下。  
大家都知道spring中的bean是有生命周期的,比如:singleton,prototype,session,request,globalsession. 那么这些生命周期是如何实现的呢?   继续前面章节的分析,回到AbstractBeanFactory中对bean的获取代码上面来: private <T> T doGetBean( final String name, final Class<T> requiredType, final Object[] args, boolean typeCheckOnly) throws BeansExc ...
前面分析了bean解析的过程,知道了bean都是以beandefinition的形式放在bean factory里面的。下面来看一下bean具体的获取过程。   Spring 提供了一个获取bean的工具方法: WebApplicationContextUtils.getRequiredWebApplicationContext(ServletContext sc).getBean(String beanName); OK,稍微追踪了一下代码,发现着落在了AbstraceBeanFactory下面: public Object getBean(String name) throws ...
前面分析了spring aop的实现原理。为了突出整个流程的清晰,其中有些细节部分没有详细分析。 现在就分析一下aop生成代理对象的细节。言乘上文,spring aop 生成代理对象是在 AbstractAutoProxyCreator的如下方法中: protected Object createProxy( Class<?> beanClass, String beanName, Object[] specificInterceptors, TargetSource targetSource) { ProxyFactory proxyFactory = ne ...
Global site tag (gtag.js) - Google Analytics