CQRS架构,C端的职责是处理从上层发送过来的command.对于单台机器来说,我们如何尽快的处理command呢?本文想通过不断提问和回答的方式,把我的思考写出来. 首先,我们最容易想到的是使用多线程.那当我们要处理一个command时,能直接丢到线程池中,直接交给线程池去调度吗?不行.因为假如多个command修改同一个聚合根时,会导致db的并发冲突,从而会导致command的不断重试,大大降低了command的处理速度. 那该怎么解决呢?既然直接多线程处理会有并发冲突的问题,那就对comm…
ENode 2.0 - 介绍一下关于ENode中对Command的调度设计 摘要: CQRS架构,C端的职责是处理从上层发送过来的command.对于单台机器来说,我们如何尽快的处理command呢?本文想通过不断提问和回答的方式,把我的思考写出来.首先,我们最容易想到的是使用多线程.那当我们要处理一个command时,能直接丢到线程池中,直接交给线程池去调度吗?不行.因为假如多个...阅读全文 posted @ 2015-01-26 00:24 netfocus 阅读(847) | 评论 (8…
前言 今天是个开心的日子,又是周末,可以安心轻松的写写文章了.经过了大概3年的DDD理论积累,以及去年年初的第一个版本的event sourcing框架的开发以及项目实践经验,再通过今年上半年利用业余时间的设计与开发,我的enode框架终于可以和大家见面了. 自从Eric Evan提出DDD领域驱动设计以来已经过了很多年了,现在已经有很多人在学习或实践DDD.但是我发现目前能够支持DDD开发的框架还不多,至少在国内还不多.据我所知道的java和.net平台,国外比较有名的有:基于java平台的是…
前言 今天是个开心的日子,又是周末,可以轻轻松松的写写文章了.去年,我写了ENode 1.0版本,那时我也写了一个分析系列.经过了大半年的时间,我对第一个版本做了很多架构上的改进,最重要的就是让ENode实现了分布式,通过新增一个分布式消息队列EQueue来实现.之所以要设计一个分布式的消息队列是因为在enode 1.0版本中,某个特定的消息队列只能被某个特定的消费者消费.这样就会导致一个问题,就是如果这个消费者挂了,那这个消费者对应的消息队列就不能自动被其他消费者消费了.这个问题会直接导致系统…
前言 经过不断的坚持和努力,ENode 2.0的第一个真实案例终于出来了.这个案例是一个简易的论坛,开发这个论坛的初衷是为了验证用ENode框架来开发一个真实项目的可行性.目前这个论坛在UI上是使用了最终一致性,也就是说当我们发帖或回帖后不会立马显示你的帖子或回复.当我们下一次刷新页面时,会显示出来.这点貌似很多人向我反馈不太习惯,接受不了,呵呵.我之所以这样做也是想看看最终一致性大家的接受程度如何,看来UI层面上的最终一致性,大部分人接受不了.回头我改进下效果,改为立即可以看到帖子或回复吧!另…
项目开源地址:https://github.com/tangxuehua/enode 上一篇文章,简单介绍了enode框架中消息队列的设计思路,本文介绍一下enode框架中关系消息的重试机制的设计思路. 对于一个EDA架构为基础的框架,核心就是消息驱动,然后基于最终一致性的原则.所以,非常重要的一点是,如果消息一次执行不成功,那该怎么办?我能想到的对策就是消息的重试.我发现,这篇文章比较难写,因为感觉要把复杂的事情清晰的表达出来,感觉确实不容易.说到重试,那什么是消息的重试呢?怎么重试呢?我这里…
开源地址:https://github.com/tangxuehua/enode 上一篇文章,简单介绍了enode框架的command service api设计思路.本文介绍一下enode框架对Staged Event-driven architecture思想的运用.通过前一篇文章我们知道command service是会被高并发的访问,我们除了可以用异步的方式执行command以及集群的方式来提高系统响应性能外.最根本上要解决的问题是尽量快的处理单个command.这样才能在单位时间内处理…
开源地址:https://github.com/tangxuehua/enode 本文想介绍一下enode框架要实现的目标以及部分实现分析思路剖析.总体来说enode框架是一个基于cqrs架构和消息驱动的应用开发框架.在说实现思路之前,我们先看一下enode框架希望实现的一些目标吧! 框架总体目标 高吞吐量(High Throughput).低延迟(Low Latency).高可用性(High Availability): 需要能充分利用CPU,即要允许方便配置需要使用的并行处理线程数,以提高单…
OAuth 2.0 协议 OAuth是一个开发标准,允许用户授权第三方网站或应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方网站或分享他们数据的内容. OAuth 2.0不兼容1.0. 协议的参与者 RO (resource owner): 资源所有者,对资源具有授权能力的人. RS (resource server): 资源服务器,它存储资源,并处理对资源的访问请求. Client: 第三方应用,它获得RO的授权后便可以去访问RO的资源. AS (authoriz…
Windows PE3.0制作方法(从Win7中提取制作 在d:新建文件夹winpe,在winpe中新建sources.pe3和new文件夹,把附件中提供的工具imagex连文件夹一起放到winpe目录中. 制作方法: 1.把windows7光盘(或光盘镜像)里的\sources\boot.wim文件复制到d:\winpe\sources目录 2.在附件提供imgaex目录里右键点击inf文件,选安装.(Imagex 6.0 AIK 封装工具) 3.运行cmd,进入imgaex目录. 4.ima…