敏捷微服务构建

王威: TW咨询师、架构转型教练、敏捷技术教练

敏捷的目标

敏捷的目标是提升效率?降低成本?减员增效?



敏捷:关注价值、快速反馈、快速响应。其的目标是提升响应力,响应力的提升不一定会提升效率、降低成本、减员增效

敏捷追求的是加速度,而不是速度(个人理解)。短期来看加速度不能提升速度,甚至会降低速度,但长期来看加速度可以提升速度!

敏捷的软件架构

敏捷的软件架构需要支持关注价值、快速反馈、快速响应。如何体现软件架构的响应力(或加速度)?相对单体、分层的架构来说,微服务具有独特的优势:高内聚低耦合、独立开发、独立运维、高可测试性、延迟决策….

  • 大泥团

    Product类承担了过多的职责:产品价格的职责、产品运输的职责、产品购买的职责、产品的个人化信息等等。各种职责的代码相互纠缠,形成一个大泥团。

  • DDD(领域驱动设计)与界限上下文

    从业务领域角度抽象界限上下文,对于产品分离出不同界限上下文的领域概念:市场领域的产品概念、销售领域的产品概念等等。

  • 领域架构

    将业务领域映射到一个独立的微服务中,由单个微服务承担此领域的产品职责。

关键问题

如何识别界限上下文?王威老师现场针对宠物商店的业务,组织一个DDD的工作坊(event storming),大致过程如下:

  • 识别领域事件:

    针对一个宠物商店有哪些领域事件:添加宠物、提交订单、收货确认等等
  • 按时间轴排序:

    针对上述领域事件根据时间轴进行排序
  • 识别命令并关联到事件:

    命令包括:用户触发命令、外部其他系统触发命令、定时任务三类。

    用完成式描述命令,例如用户已添加宠物到购物车、用户已提交订单等,最后将识别的命令贴在第一个触发事件上,可能有多个事件对应同一个命令。
  • 根据命令找到聚合边界得到一个微服务:

    在时间轴上两个命令之间的时间和第一个相关命令聚合为一个微服务。

界限上下文的识别必须由领域专家确认,团队所有成员参加。这样利于大家达成共识。

关于event storming和DDD的扩展资料:

https://groups.google.com/forum/#!forum/dddcqrs

http://techbeacon.com/introduction-event-storming-easy-way-achieve-domain-driven-design

TID大会学习心得之敏捷软件架构-微服务的更多相关文章

  1. TiD大会学习心得之沟通交流

    沟通交流是敏捷成功的关键要素,据相关调查阻碍敏捷的主要原因都与人有关:例如缺乏领导支持.团队缺乏协作精神.公司文化与敏捷相冲突等等:同时沟通交流也是团队建设.教练自身成长的重要支柱.下面结合在< ...

  2. TID大会学习心得之软技能

    软技能(Personal development as a software developer) John Sonmez : Simple programmer的创始人 2.1 学习方法 学习不是一 ...

  3. 微服务架构学习与思考(10):微服务网关和开源 API 网关01-以 Nginx 为基础的 API 网关详细介绍

    微服务架构学习与思考(10):微服务网关和开源 API 网关01-以 Nginx 为基础的 API 网关详细介绍 一.为什么会有 API Gateway 网关 随着微服务架构的流行,很多公司把原有的单 ...

  4. 朱晔的互联网架构实践心得S2E4:小议微服务的各种玩法(古典、SOA、传统、K8S、ServiceMesh)

    十几年前就有一些公司开始践行服务拆分以及SOA,六年前有了微服务的概念,于是大家开始思考SOA和微服务的关系和区别.最近三年Spring Cloud的大火把微服务的实践推到了高潮,而近两年K8S在容器 ...

  5. ELK-6.5.3学习笔记–使用filebeat管理微服务日志

    微服务日志打印. 转载于http://www.eryajf.net/2369.html 上边是输出了nginx日志,从而进行展示,以及各种绘图分析,而现在的需求是,要将微服务当中的日志汇总到elk当中 ...

  6. springcolud 的学习(二).SpringCloud微服务框架

    为什么选择SpringCloud因为SpringCloud出现,对微服务技术提供了非常大的帮助,因为SpringCloud 提供了一套完整的微服务解决方案,不像其他框架只是解决了微服务中某个问题. 服 ...

  7. Dubbo学习系列之十七(微服务Soul网关)

    论起微服务,哪能不谈网关,老将有Zuul,后继有Gateway,但这些都和SpringCloud关系密切,其他网关如Kong,因Lua原因,玩起来略不顺手.这不,就来了个Soul,我顺便拿来整进了我在 ...

  8. WCF学习心得------(三)配置服务

    配置服务 配置服务概述 在设计和实现服务协定后,便可以进行服务的配置.在其中可以定义和自定义如何向客户段公开服务,包括指定可以找到服务的地址,服务用于发送和接受消息的传输和消息编码,以及服务需要的安全 ...

  9. 推荐一本书学习springcloud书籍的SpringCloud微服务全栈技术与案例解析

    整本书还算是挺详细的,基本大部分轮子都讲到了,唯一不足就是版本比较旧,而且springcloud 版本现在迭代这么快 很多内容其实高版本中完全没有了,得自己敲代码多采坑 前面基本章节其实可以大致略过一 ...

随机推荐

  1. ubuntu 创建用户

    http://www.jb51.net/article/45848.htm  创建用户

  2. LeetCode之136. Single Number

    -------------------------------------- 一个数异或它自己会得到0,0异或n会得到n,所以可以用异或来消除重复项. AC代码如下: public class Sol ...

  3. 低功耗蓝牙BLE之连接事件、连接参数和更新方法

    转自:http://blog.csdn.net/zzfenglin/article/details/51304084 连接事件 在一个连接当中,主设备会在每个连接事件里向从设备发送数据包.一个连接事件 ...

  4. C++ 的二进制语法与语义

    /* 转载请注明出处:http://www.cnblogs.com/Martinium/p/binary_literal.html */ 二进制的语法 C/C++ 默认数字使用十进制,八进制使用前缀 ...

  5. Unix系统引导过程(简单步骤)

    1.从MBR中读取引导加载程序(boot loader) 2.初始化内核 3.硬件检测 4.创建内核进程 5.系统管理员干预(仅仅在进入单用户模式或者恢复模式的时候) 6.执行系统启动脚本

  6. LeetCode: Largest Rectangle in Histogram(直方图最大面积)

    http://blog.csdn.net/abcbc/article/details/8943485 具体的题目描述为: Given n non-negative integers represent ...

  7. 常见开发需求之前端利器webstorm中的git和快捷键

    需求   前端开发中我们最常用的一般是webstorm.hbuilder和sublime,因为以前使用过一段时间eclipse所以我对webstorm的感觉比较良好,再加上以前使用hbuilder维护 ...

  8. Tomcat中JVM内存溢出及合理配置及maxThreads如何配置(转)

    来源:http://www.tot.name/html/20150530/20150530102930.htm Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个Java虚 ...

  9. 【javascript学习——《javascript高级程序设计》笔记】DOM操作

    DOM(文档对象模型)是针对HTML和XML文档的一个API(应用程序编程接口).DOM描绘了一个层次节点树,允许开发人员添加.移除和修改. 1.节点层次 <html> <head& ...

  10. sublime-生成html1.0

    文件--新建--输入--html:xt--CTRL+E.生成html1.0