【日志归档】 03月, 2009

星期五, 03月 6th, 2009

向出色的测试分析师致敬



最近参与一个范围很大的项目,已经进行开发阶段,测试分析也在并行中,这一段时间来,她们每天都有多个问题向项目组的关键同事咨询,确认,从中发现了近百个问题点,这些问题:或者领域边界没有足够的清晰,或者概念没有明确的定义,或者业务规则不完整,或者方案存在矛盾,或者操作链路存在断层,或者某些属性的限制有冲突,或者某个格式、数字不明确,或者…….!!!想来很惭愧,居然有这么多问题点没有能够细化,系统分析师、设计程序员也没有完全发现,我由衷的为与这么出色的测试分析师工作而深感荣幸,她们是这场战斗中坚强的后盾,向她们致敬!!!

她们的武器很简单:测试用例;她们的思想很简单:尽职、尽责、尽心。



星期五, 03月 6th, 2009

Mule技术架构(摘译)



更多明细,请阅读原文 《 Mule 1.x Architecture Guide 》,2.0版本缺少相应的文章,但技术架构没有发生更本的变化。

一.需求

  • 简化不同数据源之间的数据交互
  • 简化不同应用之间的服务交互
  • 可扩展、轻量级、可嵌入、可定制、简单易用

二.架构风格选择

Mule使用的是基于消息的架构风格(如上图所示),消息具有程序语言无关系、组件无关性、数据格式灵活性、消息无状态等特征,基于消息的服务也同样具有无状态的特征,此外,消息风格有非常成熟的应用模式,能够满足当前遇到的大部分数据应用需求以及SOA的需要。因而能够很好的满足需求中的前2个和第三个的可扩展、可定制的需求。

  • Application:可以是程序段、外部系统。
  • Channel:连接任何2个应用点(计算点),通过消息进行沟通,可参考《EIP - Message Channel (60)
  • Message Receiver:用来从应用节点中读取、写入消息。
  • Inbound Router:进入计算组件(component)之前的控制和处理,例如:过滤、聚合、排序等。
  • Connector:在Channel上建立链路层,Message Receiver绑定在connector上监听数据、派发数据。
  • Transformers:转换消息格式。
  • Endpoint:把channel抽象为服务的一种配置组件,这些被配置的元素有connector, endpoint URI, transformers, filters and transactional。
  • Outbound Router:消息从计算组件(component)流出后的控制和处理,例如:过滤、Pub/Sub、拆分、路由等。

三. 技术框架和领域对象介绍

  1. The Model:提供框架的运行时环境,管理配置、组件实例,提供运行模式;用户甚至可以定制自己的运行模式(很强大)。Model模型包含如下内容 Descriptors、UMO components、 An endpoint resolver、A lifecycle-adapter factory、A component resolver、A pool factory、An exception strategy。
  2. Entry Point Resolver:与应用组件(POJO等)的交互。
  3. Lifecycle Adapter:将MULE实例的生命周期映射到应用组件,间接接管应用组件。
  4. Component Pool Factory:应用组件管理,提供pool能力。
  5. Transport Providers:使Mule组件发送和接收消息的部件。
  6. Connectors:对Connector的实现。
  7. Endpoints Address:资源标识的一种方法。例如,pop3://user:password@mail.mycompany.com ,file:///tmp/data/in,vm://MyUMO,axis:http://mycompany.com/mule/services/MyUMO等
  8. Endpoint Resolution:对附加在Endpoint的配置进行解析,例如,jms://topic:myTopic?durable=true。
  9. Message Receivers:消息接收者或监听者,不同类型的协议实现方式不同。例如TCP协议,只需要监听端口即可,File协议,需要定制一个线程去扫描文件系统,VM协议,可以不做任何事。
  10. Message Adapters:负责消息的转换。
  11. Transactions:提供事务支持。(没敢用,实际中,都是通过其它方式实现事务)
  12. Container Contexts:嵌入式的时候使用,能够把Mule容器和外部容器打通。与Spring整合的已经非常完美。
  13. UMO Components:mule的核心抽象之一,主要用来包装应用组件(POJO等)。
  14. Component Lifecycle:组件的生命周期。
  15. Events:Mule框架采用事件(SEDA,强烈推荐阅读Using SEDA to Ensure Service Availability )架构来实现。
  16. Inbound Routers、Outbound Routers:对应于消息架构中的2个部件。
  17. Event Processing:Mule提供三种事件处理方式,(1)Asynchronously,(2)Synchronously ,(3)Request-Response相当于用异步实现的同步。 (具体使用模式,请参考原文
  18. Interceptors:Mule框架提供拦截器模式,以方便用户扩展组件整体行为。
  19. Exception Management:提供异常管理的机制,默认的异常粗略很糟糕,最好自己定制。
  20. Agents:为运维人员提供的管理接口。
  21. Thread Pool:线程池管理,Mule的线程池和池策略需要仔细配置,否则很容易出现错误。Mule提供共用线程池和独立线程池模式,建议使用共用线程池模式。


星期四, 03月 5th, 2009

SOA模式短文推荐



强烈推荐SOA爱好者下载收藏《SOA Pattern》一文,又有精品全文《SOA Design Pattern》推荐下载


作者将模式分为三类:(1)基本服务模式,是最小粒度的服务模式,已经无法再次拆分,可以认为是模式原语,多用在服务层面使用。(2)架构模式,通用的SOA系统设计要素,多用在系统设计时,做为架构风格的一个元素。(3)复合模式,基本服务模式的组合,用来定义系统的衔接特征,多用在应用系统整合场景。下面按照自己的理解和使用经验,简单说明一下,具体的介绍还请研究原文。

基本模式说明:

  1. Aggregator:将多个独立的消息体通过该计算组件组合为一个消息体。
  2. Service Bus:将多个独立的系统(已有系统、新系统)通过统一机制整合起来。
  3. Dynamic Routing:与规则库配合,实现一个消息体的路由,实现上常采用基于消息头路由、基于内容路由2中情况。
  4. Event-Driven Consumer:常用在资源有限的场景,解决资源竞争的问题,例如,网络接入时,系统所能接收到socket有受限的,此时即可通过该模式解决。
  5. Filter:消息内容的过滤,例如,关键字过滤,也可用在信息补全场景。
  6. Router:将消息发送到不同的应用,与Dynamic Routing的区别在于,此时规则是固定的,常常有2中使用方式,单播、多播。
  7. Translator or Transformer:用在消息格式的转换场景。

架构模式说明:

  1. Asynchronous Processing:异步事件风格解决服务之间的交互,例如,ATM到银行账务系统,多用该模式。在实践中,也鼓励使用这种风格,实现SOA,以弱化一致性、事务性,缓解资源受限等场景,该模式需要业务配合才能完全发挥。
  2. Bridge:常用在2中体系之间的交互,把一种协议转换为另一种协议。它与Translator的区别在,Translator是针对消息的,它针对链路。
  3. Cross-Service Operation:把多个服务封装为一个服务来使用,以确保一致性、事务性,可以把该风格弱化为分布式事务风格。
  4. Event-Driven Dispatching:基于事件的派发,常用在pub/sub场景。
  5. Process Aggregation:把多个过程聚合在一起,按照一定顺序进行消息处理,此时不要求一致性,每个过程都是独立的,用BPM技术更容易理解该场景。
  6. Routing and Filtering:实现一个消息的多种渠道应用,例如,一个业务通知,通过Mail,IM、SMS、语言、甚至特殊应用传达给用户的场景,一个产品为多个渠道提到内容的场景。
  7. Replicator:实现一份消息,服务处理的时候,同时往数据库复制一份,例如,数据备份容灾、数据采集、数据审计等。

复合模式说明:

  1. Centralized Schema:解决跨应用边界的数据共享问题。
  2. Concurrent Contracts:解决一个服务多个消费者时,每个消费者接口不同的问题。
  3. Decomponse Capability:??
  4. Enterprise Service Bus:通过一个消息总线,解决应用整合的问题,化解复杂的网状链接。
  5. Fault-Tolerant Service Provider:通过负责均衡解决服务高可靠性的问题。
  6. Wrapper:解决传统应用服务化的问题。


星期三, 03月 4th, 2009

StarMx,Jopr,Galaxy介绍



StarMx是一款利用Jmx实现资源自我管理的框架(下图是一张自动系统的架构),业务目的是:自我配置、自我优化、自我恢复、自我保护。

  1. 自我配置:系统能够自己动态完成组件的安装和卸载;自己实现条件的改变和校正。
  2. 自我优化:系统能够监控自己的容量和状态,通过优化一些行为来改善性能。
  3. 自我恢复:系统能够自己发现、诊断、恢复问题;也能够从故障中自我恢复。
  4. 自我保护:系统能够自我低于风险。



Galaxy是一款SOA治理平台,主要提供了服务的注册和仓储,业务目的:服务描述和组织、服务静态生命周期管理、依赖管理、服务搜索、网络部署(依赖Netboot)。

Jopr 是一款可插入的框架,提供管理、监控、报警、操作控制、配置的能力。

三款产品,选择的核心业务目标有所不同,但业务域还是一致的,就是服务与IT治理。下图展示了把3款产品的核心概念整合起来使用的一个示意图:


要实现SOA治理,关键的一点还是为每个服务注入一个探测器,从而实现服务数据采集、治理中心指令传达的目的;对于这三款产品,由于其架构的差异,整合起来还是有点挑战的。



星期三, 03月 4th, 2009

产品领域探讨(互联网领域)



该文主要探讨了如下一些问题:产品与业务的关系是什么;用事物本质来理解互联网产品;产品风格与产品品质是啥关系;产品服务质量和产品品质是啥关系;产品风格与用户需求;产品品质转换为产品需求;业务分析师的价值;产品风格与架构风格;产品分类和产品标识;产品与产品模型;产品与商品。该文也是希望抛个砖头,和大家一起探讨这些产品领域。详细请进