微服务架构
“作为面向服务架构(SOA)的一个变体,微服务是一种将应用程序分解成松散耦合服务的新型架构风格. 通过细粒度的服务和轻量级的协议,微服务提供了更多的模块化,使应用程序更容易理解,开发,测试,并且更容易抵抗架构侵蚀. 它使小型团队能够开发,部署和扩展各自的服务,实现开发的并行化.它还允许通过连续重构形成单个服务的架构. 基于微服务架构可以实现持续交付和部署.”
— 维基百科
介绍
ABP框架的主要目标之一就是提供便捷的基础设施来创建微服务解决方案. 我们做了以下工作:
- 提供模块系统,允许将应用程序拆分为模块,其中每个模块可以拥有自己的数据库,实体,服务,API,UI组件/页面….等.
- 提供架构模型来开发模块,与微服务开发和部署兼容.
- 提供最佳实践指南制定模块开发标准.
- 提供基础设施来实现微服务中的领域驱动设计.
- 提供从应用程序服务自动生成REST风格的API的服务.
- 提供自动创建C#API客户端服务,以便从其他服务/应用程序使用你服务.
- 提供分布式事件总线用于服务通信.
- 提供更多其他服务,使日常开发更加简便.
在新应用程序中使用微服务
开始一个新解决方案建议始终从单体开始, 保持模块化,在单体成为问题时将其拆分为微服务.这使初期进度会很快,特别是如果你的团队人数不多,并且不想处理微服务架构带来的各种挑战.
然而开发一个良好的模块化应用程序不是那么简单,因为很难像微服务那样保持模块之间的隔离 (参阅 Stefan Tilkov的文章). 微服务架构会自然的让你开发隔离的服务,但是在模块化的单体应用程序中,模块很容易彼此紧密耦合并设计出弱模块边界和API约定.
ABP可以帮助你,它提供了与与微服务兼容的严格模块架构 在这个架构中你的模块被分割成多个层/项目,在自己的VS解决方案中进行开发,该解决方案完全独立于其它模块. 这种方式开发的模块是一种天然的微服务,但是它可以很容易的插入到单体应用程序中. 请参阅微服务优先的模块设计的模块开发最佳实践指南. 所有标准的ABP模块都是基于本指南开发的. 因此你可以将这些模块嵌入到单体解决方案中使用它们,也可以单独部署通过远程API调用. 它们可以共享一个数据库,也可以通过简单配置使用自己的数据库.
微服务解决方案示例
微服务解决方案示例演示了基于ABP框架的完整的微服务的解决方案.