成功的微服务开发始于三个关键角色的视角:
- 架构师——着眼大局,将应用程序分解为个体微服务,然后了解微服务如何交互以提供解决方案。
- 软件开发人员——编写代码并理解语言和开发框架将用于交付微服务。(前端,后端)
- DevOps 工程师——确定在整个生产和非生产环境中如何部署和管理服务, 信条是保证每个环境中的一致性和可重复性
架构师在软件项目中的角色是提供解决问题的工作模型(Scalable, Resilient, and Flexible), 架构师提供了开发人员构建代码的脚手架,以便应用程序的所有部分组合在一起。
构建微服务时,项目架构师要专注于三个关键任务:
- 分解业务问题
- 建立服务粒度
- 定义服务接口
在面对复杂问题时,我们可能会将问题分解为几个重要部分,然后寻找这些部分之间存在的关系。我们在微服务架构中,过程也是大致相同。
分解业务领域是一种艺术形式,而不是非黑即白的科学问题,
1. 描述业务问题, 并注意你用来描述它的名词。相同的出现多次的描述问题的名词, 通常很大机会是一个很好的核心业务领域和微服务。 例如O-stock 应用程序的名词示例可能是合同、许可证、和资产。
2. 注意动词。动词突出动作,通常代表问题域的轮廓。如果你发现自己说“事务 X 需要从事物 A 和事物 B 中获取数据”,这通常表明多个服务在起作用。如果您将此方法应用于 O-stock 应用程序,您可能会发现像这样的陈述,“迈克设置一台新电脑的桌面时,他查找(lookup)可用于软件 X 的许可证数量,如果还有可用许可证,安装软件。然后,他会更新(Update)他的跟踪电子表格中使用的许可证数量。”这里的关键动词是looks 和updates。
3. 寻找数据凝聚。当您将业务问题分解为一件件,寻找彼此高度相关的数据。如果你在谈话过程中突然发现读写的数据与之前所讨论的完全不同,这个数据可能是属于另一个微服务。微服务必须完全拥有自己的数据。
我们来看书上的例子;
我们将把 Emma 管理的合约信息存放在哪里?
我们将在哪里存储以及如何管理许可信息(成本、许可类型、许可所有者和许可合同)?
Jenny 在 PC 上设置许可证。我们要在哪里存储资产(指PC这种固定资产)?
许可证属于拥有多项资产的组织,我们将在哪里存储组织信息?