随笔-50  评论-74  文章-9  trackbacks-0
  2011年3月24日
关于ibatis, 连接池,事务的总结:
1. ibatis和proxool配合。session.close()并不真正调用connection.close(). 而proxool采用委托动态代理的方式替换了connection.close()实现,必须调用connection.close()方可回收链接,而非真正物理断开。 所以我们使用了proxool连接池后,每次使用完session, 都要session.getConnection.close();
2. ibatis 3 + spring的事务并没有内部支持,所以无法在spring+ibatis 3默认采用生命式事务,需要额外写个针对ibatis 3声明式事务的TransactionManager实现.上次发给chris的有类似实现.
3. mysql innodb引擎方可支持事务和级联引用完整性;
4. jdbc 3方可支持savePoints()分阶段回滚. e.g.: 
Savepoint sp1 = connection.setSavepoint("savePoint 1");
...
connection.rollback(sp1);
java.sql.Savepoint 必须存在, 即 jdk 版本要 1.4+;
MySQL InnoDB引擎从MySQL 5.0.3开始支持SAVEPOINT(详见: http://dev.mysql.com/doc/refman/5.0/en/savepoint.html);
5. spring托管的事务可支持: 同一连接的数据库事务,跨分布式数据库的JTX分布式事务;
6. spring声明式事务的事务级别浅显含义:
PROPAGATION_REQUIRED: 传承当前上下文事务,若当前上下文没有事务,则创建一个新事务;这是最常见的选择。
PROPAGATION_SUPPORTS: 支持当前上下文事务,若当前上下文没有事务,则以非事务方式执行;也即事务可选;
PROPAGATION_MANDATORY: 当前上下文必须存在事务;若当前上下文没有事务,则抛出异常;
PROPAGATION_REQUIRES_NEW:忽略当前上下文事务,总是创建新事务,挂起上下文事务直到新事务结束; 也即外部事务成败不影响当前事务结果;
PROPAGATION_NOT_SUPPORTED: 忽悠当前上下文事务,以非事务方式;
PROPAGATION_NEVER: 不允许在事务上下文中执行,若当前上下文存在事务,则抛出异常;
PROPAGATION_NESTED: 内嵌事务(EJB中没有对等概念), 只在某些transactionManager中支持.只在JDBC 3.0+的DataSourceTransactionManager中支持;
如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。
前六个策略类似于EJB CMT,第七个(PROPAGATION_NESTED)是Spring所提供的一个特殊变量。 
它要求事务管理器或者使用JDBC 3.0 Savepoint API提供嵌套事务行为(如Spring的DataSourceTransactionManager) 
7. ibatis 3的事务操作注意事项:
1). 开启session方式: SqlSession session = sessionFactory.openSession(TransactionIsolationLevel.READ_COMMITTED);
2). 设置非自动commit(否则每条语句都被当作一个事务): session.getConnection().setAutoCommit(false);
3). 提交注意事项: session.getConnection().commit(); 采用session.commit()无效,很诡异; 估计session.rollback()也无效;
4). 如果部分语句需要采用批量操作(e.g.: addBatch): 则可用同一connection来创建一个新的session:
SqlSession session1 = sessionFactory.openSession(ExecutorType.BATCH, session.getConnection() );
不过有个诡异事情: 测试发现JDBC批量操作的效率反而不如直接插入;网上也有其他人同样反馈;
8. 综合来看,若能采用spring的生命式事务,是最好的选择。最灵活,可透明支持 本地(同一数据库连接) 和 分布式事务(通过JTX分布式事务实现);
参考: 
http://www.javaeye.com/topic/35907
posted @ 2011-03-24 17:03 彭帅 阅读(390) 评论(0) 编辑
  2009年12月13日
今天随便看了下Ucenter和uchome的统一账户机制。感觉设计上面不是很合理.

如果想让某应用a在登录时同时也登录其它挂接到对应ucenter的应用b(入uhome).
那么应该采用synlogin方式.

synlogin方式会让ucenter生成若干条js嵌入脚本.(每个第三方应用对应一条),如下:

<script src="http://host:port/uchome/api/uc.php?code=xxx" />

以uchome为例, uchome/api/uc.php的执行关键过程如下:
1. 从code解编出字段: username, password, uid.
2. 在uchome自身数据库中判断此uid是否存在,如果存在便设置授权cookie.(认为登录成功).



这里头引出了几个问题:

1. 如果用户初次从a站点登录并sync到uchome, 那么uchome自身数据库中是不存在对应账户的,那通过第三方应用登录到uchome的过程会失败.
  除非你显示从uchome登录一次, uchome的登录过程如下:

  1). 从ucenter登录,获取用户信息.

  2). 判断本地数据库是否存在此用户,如不存在则插入用户信息.
关键在第二步, 所以你必须通过uchome的入口才能让新用户插入uchome自身的数据库.

2. 有安全漏洞.

  由于uchome/api/uc.php中的判断只是简单判断uid是否存在, 如果uid存在便认为可以正常登录.
  那么假如我们的账号某次被盗了,只要攻击者记录下那串<script src = "http://host:port/uchome/api/uc.php?code=xxx"/>
  那么后续该用户无论怎么修改密码都无用, 因为uchome的跨应用登录入口api/uc.php根本不检查password,也不与ucenter作通信.
  或者如果你知道了某个uchome应用的UC_KEY, 那么你就可以构造伪造请求来模拟任意用户登录了.

posted @ 2009-12-13 01:56 彭帅 阅读(3119) 评论(14) 编辑
  2009年12月2日

周末用app engine随便做了个google wave类似的评论系统demo
地址是: http://xiaoyuan-huodong.appspot.com/
posted @ 2009-12-02 16:39 彭帅 阅读(2700) 评论(10) 编辑
  2009年10月20日
-----Step 1-----: 架构分析
 

Eucalyptus架构特征

  非侵入式
  高度模块化(highly modular cooperative)
  采用公开,标准的通信协议
  API与AWS兼容(SOAP & REST)

分层架构(Layer architecture)
  一站式管理平台(Management Platform)
  虚拟网络(Virtualized Network)
  虚拟计算 & 存储(Virtualized Compute & Virtualized Storage)




Eucalyptus组件
  每个Eucalyptus服务组件都提供了一个well-formed,语言无关的WSDL文档格式的API和数据结构.内部服务的安全认证采用标准的WS-Security机制.

Eucalyptus由5个核心组件组成:
Cloud Controller(CLC): 虚拟化底层资源.

Cluster Controller(CC): 对Cluster作抽象. CC从一批VM采集信息并调度VM在具体NC上执行. CC同时管理着virtual instance network和执行由CLC指定的SLA.由单个CC管理的所有节点必须处于同一个广播域中.

Node Controller(NC): 用于托管虚拟机.在当前主机上负责虚拟机的执行,检测,终止等生命周期管理.
NC在当前主机上运行,获取和清理本地VM实例镜像(kernel, root file system, ramdisk image), 同时也可通过查询/控制接口来查询/控制当前节点(host OS and the hypervisor)的系统软件.NC同时负责管理虚拟网络端点.

SC(Storage Controller): 实现了基于块访问的网络存储(类似Amazon EBS), 负责和各种第三方存储系统(NFS,iSCSI等)通信.
弹性块存储服务(EBS)作为一个标准Linux块设备挂接到虚拟机, 磁盘流量通过LAN(locally attached network)发送到远端存储.
EBS卷(volume)不能跨VM实例共享, 但是允许对其创建一个快照并存储到一个中央存储系统如Eucalyptus的存储服务Walrus.

Walrus(put/get存储): 允许用户存储持久化数据.(类似Amazon S3).通过bucket和对象的方式组织,延迟一致.
允许的用户级操作: 创建, 删除, list buckets, put, get, delete, 设置访问控制权限. Walrus在接口上与Amazon S3兼容,并支持AMI(Amazon Machine Image),提供了一个可同时访问VM镜像和用户数据的机制.

Management Platform: 为cloud管理员提供了一站式控制台,用于配置和管理cloud.
MP同时为administrator, project manager, developer或其它用户提供了可定制的界面,并具有授权,认证等访问控制.
具体功能包括: VM管理, 存储管理, 用户/组管理, 帐户管理, 监控,  SLA定义和执行,cloud-bursting, provisioning等.


-----Step 2-----: 代码概要分析

 

初步浏览了eucaplytus的代码.

项目结构如下:
clc
  modules
    cluster-manager: cluster WEB管理模块
    group-manager: 用户/组 WEB管理模块
    storage-manager: 存储(S3)管理模块
    storage-controller: (EBS)块存储管理模块,也可以看作是EBS的代理.
    image-manager: 镜像管理模块.

cluster: Cluster Controller模块.控制局域网内的node controller

node: Node Controller模块.控制当前机器节点上的虚拟机实例.通过libvirt来操纵具体虚拟机实例.

storage: Storage Controller,也就是Walrus. 实际上相当于一个存储委托,后端挂接具体的存储系统(如S3).


补充
WEB管理平台用Java + GWT开发的,作核心调度和管理.
其它模块都是用c编写的:
  cluster controller管理局域网内的node controller.
  node controller通过libvirt来操纵具体的VM: KVM或XEN.
  Storage只是一个存储proxy, 具体存储系统依赖于第三方.目前可以认为是一个S3的代理.


每个模块都使用AXIS来提供一个WSDL web服务操作接口.

目前的代码实现只可以看作一个prototype.在架构设计上有一定指导意义, 但仍有非常多的扩展工作要做.

posted @ 2009-10-20 17:05 彭帅 阅读(2489) 评论(0) 编辑
  2009年10月14日
摘要: 个人总结的一套基于hadoop的海量数据挖掘的开源解决方案. BI系统:Pentahopentaho是开源的BI系统中做得算顶尖的了.提供的核心功能如下: 报表功能: 可视化(client, web)的报表设计. 分析功能: 可以生成分析视图,作数据作动态分析. Dashboard功能: 可以定制动态图表(image/flash)页面. 调度功能: 可对指定的任务进行crontab式调...阅读全文
posted @ 2009-10-14 18:27 彭帅 阅读(2388) 评论(4) 编辑
  2009年9月25日
posted @ 2009-09-25 00:47 彭帅 阅读(524) 评论(0) 编辑
  2009年9月8日
摘要: hadoop设计的初衷就是容错.计算任务(MapReduce task)能够在节点宕机或其它随机错误下自行恢复.但是hadoop并不完美,在实际运营中,我发现MapReduce Job仍然经常会因为一些偶发性错误而运行失败.所以我决定深入探究一下各种不同因素是如何导致job失败的.如果一个hadoop job的某个给定task在失败预定次(默认是4)后,整个job就会失败.这可以通过"mapred...阅读全文
posted @ 2009-09-08 02:07 彭帅 阅读(2067) 评论(6) 编辑
  2009年9月1日
摘要: 聊天模式无非点对点聊天和群组聊天.下面一一来分析.1. Peer-to-Peer聊天消息格式:[from, to, body, timestamp, isread].(根据from来识别是个人还是group消息)消息读取方式标记模式置位模式是否要存储:不需要需要[Group Chatting]:标记模式每个用户拥有一个timestamp类型的消息游标.(sequence number不利于shar...阅读全文
posted @ 2009-09-01 16:57 彭帅 阅读(417) 评论(0) 编辑
  2009年8月27日
posted @ 2009-08-27 17:34 彭帅 阅读(283) 评论(0) 编辑
  2009年8月26日
posted @ 2009-08-26 01:53 彭帅 阅读(553) 评论(0) 编辑
昵称:彭帅
园龄:5年3个月
粉丝:14
关注:2
<2012年2月>
2930311234
567891011
12131415161718
19202122232425
26272829123
45678910

搜索

 
 

常用链接

我的标签

随笔分类

随笔档案

最新评论

阅读排行榜

评论排行榜

推荐排行榜