zoukankan      html  css  js  c++  java
  • 分解模式

    本文说明如何通过业务领域分析和DDD将大型复杂的应用程序划分为一组微服务。

    场景

    使用微服务架构开发一个大型复杂的应用程序,我们需要将应用程序细致,合理地分解为一组松散耦合的微服务。微服务架构的目标是通过实现持续交付/部署来加速软件开发。

    目标

    • 架构必须稳定;
    • 服务必须高内聚 - 服务应该实现一小组强相关的功能;
    • 服务必须符合开闭原则 - 将一同变更的内容打包在一起,以确保每个更改仅影响一个服务;
    • 服务必须松耦合 - 每个服务都可以在不影响客户端的情况下更改实现;
    • 服务应该是可测试的;
    • 每项服务都小到足以由“两个披萨”团队开发,即一个6-10人的团队;
    • 负责一个或多个服务的每个团队必须是自治的 - 团队能够在与其他团队尽量少的协作下,来开发和部署他们的服务。

    方法

    通过领域驱动设计(DDD),设计与 子域 相对应的服务。DDD通过分析问题空间和业务逻辑,将应用程序定义为域。域由多个子域组成。每个子域对应于业务的不同部分。

    子域可分为以下几类:

    • 核心类 - 业务的关键差异化因素和应用程序中最有价值的部分;
    • 支持类 - 与业务有关,但与差异化无关;这些可以在内部实施或外包;
    • 通用类 - 与业务无关,理想情况下可以使用现成的软件实现。

    例子

    一个在线商店的子域包括:

    • 产品目录
    • 库存管理
    • 订单管理
    • 交货管理

    相应的微服务架构中,每一个子域将对应一个微服务。

    优点

    • 由于子域相对稳定,因此具有稳定的体系结构;
    • 开发团队能有效隔离业务逻辑和技术框架;
    • 服务具有高内聚和松耦合。

    问题

    如何识别子域?
    识别子域需要了解业务。通过分析业务及其组织结构来识别不同的专业领域,从而识别子域。这个过程通常需要不断迭代。

    识别子域的好思路是:

    • 组织结构 - 组织内的不同分组或部门可能对应于不同子域;
    • 高阶域模型 - 子域通常具有关键域对象。

    相关模式

    微服务架构风格

  • 相关阅读:
    noip2015Day2T2-子串
    js事件冒泡
    【Java】Appache Flume 中文介绍
    iOS开发之系统通讯录
    POJ 1946 Cow Cycling
    libgdx 启动者(个人翻译,还请不吝赐教)类和配置
    Python+Django+SAE系列教程6-----本地配置Django
    利用命令行删除Android系统自带应用的方法
    leetcode 题型 数据结构 解法 分类总结
    正則表達式之基础篇
  • 原文地址:https://www.cnblogs.com/yorkwu/p/9305276.html
Copyright © 2011-2022 走看看