敏捷微服务构建

王威: 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. LVS集群之DR模式 实现

    ps:做 dr 模式 之前,先把之前做过的操作清空掉 1.ipvsadm -ln 查看规则 2.ipvsadm -C 清空规则 3.ipvsadm -ln 确认 4.iptables -t nat - ...

  2. 1.UI初认识

    前节:app是什么? app英文全称:application 应用程序,简称应用.也就是手机应用的简写 出处:http://www.cnblogs.com/mcj-coding/p/5098254.h ...

  3. mvc+webapi 单元测试

    1.前言 现在这个项目已经有阶段性的模块完成了,所以就想着对这些模块进行单元测试,以保证项目的代码的质量.首先虽然标题是mvc+webapi实质上我只是对mvc进行的测试.用的时候vs的unit te ...

  4. Arch Linux中文乱码解决

    Arch Linux中文乱码解决 1.安装中文字体 pacman -S wqy-zenhei ttf-fireflysung (flash乱码)   ---乱码的原因就是缺少中文字体的支持,下载文泉驿 ...

  5. python学习笔记(2)

    1.for循环 用户按照顺序循环可迭代对象中的内容. li = [11,22,33,44] for i in li: print i for循环的else 此功能目前只有for循环里面有发现. 具体条 ...

  6. UVA 11481 Arrange the Numbers(组合数学 错位排序)

    题意:长度为n的序列,前m位恰好k位正确排序,求方法数 前m位选k个数正确排,为cm[m][k],剩余m - k个空位,要错排,这m - k个数可能是前m个数中剩下的,也可能来自后面的n - m个数 ...

  7. VS2012下X64平台嵌入汇编程序

    VS2012在win32平台编译的时候可以很好的支持汇编语言的嵌入.建立一个控制台应用程序,选择空项目.项目建立好之后添加一个.cpp文件.在cpp文件中写入如下代码: #include <io ...

  8. TypeScript中的枚举类型

    TypeScript拓展了Javascript原生的标准数据类型集,增加了枚举类型(enmu)和其他语言一 样 它提供我们一种数字类型的值,用来设置由于辨别的名字和方法 enum Students { ...

  9. File类基础

    File类的作用: Java的io包中定义了File类,用于对文件或文件夹的管理操作. File类只能够用于表示文件或文件夹的信息(属性)和对该文件或文件夹的删除创建操作 (不能对内容进行访问) 通过 ...

  10. Codeforces Round #367 (Div. 2)

    A题 Beru-taxi 随便搞搞.. #include <cstdio> #include <cmath> using namespace std; int a,b,n; s ...