基于微服务或单体
Microservice based or Monolithic
我阅读了很多关于微服务及其结构的文章,似乎在可维护性方面有很多优势。
我想用 Spring Boot 和 Phonegap 构建一个移动应用程序,它从 RESTful Web 服务中提取新闻。
所以我正在考虑将其构建为微服务,这样我就可以添加其他服务而无需重建整个应用程序。因为以后我可能要添加其他服务。
但为这么小的移动应用程序构建基于微服务的应用程序真的值得吗?
对于您的项目,微服务架构似乎有些矫枉过正。微服务确实有很多好处,但是它们确实有很多操作开销,并且在分布式服务方面增加了很多复杂性。
听起来您也只有一个主要需求,即拉取新闻,在这种情况下,所有与新闻相关的服务无论如何都将构成一个微服务的一部分。
一旦您开始添加更多不同的需求域,您就可以考虑将它们构建为单独的微服务。即便如此,将功能模块化为同一服务中的组件可能是明智的,并且随着您的应用程序和系统开始增长,将功能拆分为单独的微服务。
有一个很好的 article by Fowler,其中他很快将许多以基于微服务的设计 运行 开始的项目变成了问题。相反,许多成功的基于微服务的应用程序都是以整体形式开始的。
总结一下这个原则:
...you shouldn't start a new project with microservices, even if
you're sure your application will be big enough to make it worthwhile.
虽然 Fowler 没有就此发表个人意见,但他确实推测了他所谓的 Monlith-First.
的好处
...a monolith-first strategy, where you should build a new application
as a monolith initially, even if you think it's likely that it will
benefit from a microservices architecture later on...It may be hard to scale a
poorly designed but successful software system, but that's still a
better place to be than its inverse...you need to prioritize speed...
因此,Monlith-First 方法的好处是您可以快速构建单体,因为通常需求是众所周知的并且相对较少。此外,您可以快速将产品推向市场,从而了解您的应用程序及其在现实世界中的行为方式。
令我印象深刻的主要好处是,与您尝试预先定义这些边界(必要且基于微服务的设计中非常重要的设计步骤)。
他进一步阐述了如何有效地规划单体优先设计,这基本上涉及保持代码的美观和模块化,并着眼于未来根据需要对模块进行拆分。
...design a monolith carefully, paying attention to modularity within
the software, both at the API boundaries and how the data is stored.
根据我的经验,基于服务的方法适用于与业务领域专家一起花费大量的前期分析时间,以及一个成熟的交付团队,他们通常习惯于 soa 和基于服务的工作。
由于以下原因,创建微服务将来肯定会对您有所帮助:
可扩展性:
微服务可以独立扩展,而不会干扰应用程序中使用的其他微服务。
敏捷:
微服务的变化可以非常快,从而适应快速变化的业务场景。
容错:
即使一个微服务发生故障,其他微服务也可以继续服务,从而最大限度地减少对整个应用程序的影响
多语言坚持:
每个微服务可以决定自己的数据库机制类型。
微服务的优点我已经介绍了一部分,还有更多。
因此,如果您查看以上所有要点,绝对值得创建微服务应用程序
我阅读了很多关于微服务及其结构的文章,似乎在可维护性方面有很多优势。
我想用 Spring Boot 和 Phonegap 构建一个移动应用程序,它从 RESTful Web 服务中提取新闻。
所以我正在考虑将其构建为微服务,这样我就可以添加其他服务而无需重建整个应用程序。因为以后我可能要添加其他服务。
但为这么小的移动应用程序构建基于微服务的应用程序真的值得吗?
对于您的项目,微服务架构似乎有些矫枉过正。微服务确实有很多好处,但是它们确实有很多操作开销,并且在分布式服务方面增加了很多复杂性。
听起来您也只有一个主要需求,即拉取新闻,在这种情况下,所有与新闻相关的服务无论如何都将构成一个微服务的一部分。
一旦您开始添加更多不同的需求域,您就可以考虑将它们构建为单独的微服务。即便如此,将功能模块化为同一服务中的组件可能是明智的,并且随着您的应用程序和系统开始增长,将功能拆分为单独的微服务。
有一个很好的 article by Fowler,其中他很快将许多以基于微服务的设计 运行 开始的项目变成了问题。相反,许多成功的基于微服务的应用程序都是以整体形式开始的。
总结一下这个原则:
...you shouldn't start a new project with microservices, even if you're sure your application will be big enough to make it worthwhile.
虽然 Fowler 没有就此发表个人意见,但他确实推测了他所谓的 Monlith-First.
的好处...a monolith-first strategy, where you should build a new application as a monolith initially, even if you think it's likely that it will benefit from a microservices architecture later on...It may be hard to scale a poorly designed but successful software system, but that's still a better place to be than its inverse...you need to prioritize speed...
因此,Monlith-First 方法的好处是您可以快速构建单体,因为通常需求是众所周知的并且相对较少。此外,您可以快速将产品推向市场,从而了解您的应用程序及其在现实世界中的行为方式。
令我印象深刻的主要好处是,与您尝试预先定义这些边界(必要且基于微服务的设计中非常重要的设计步骤)。
他进一步阐述了如何有效地规划单体优先设计,这基本上涉及保持代码的美观和模块化,并着眼于未来根据需要对模块进行拆分。
...design a monolith carefully, paying attention to modularity within the software, both at the API boundaries and how the data is stored.
根据我的经验,基于服务的方法适用于与业务领域专家一起花费大量的前期分析时间,以及一个成熟的交付团队,他们通常习惯于 soa 和基于服务的工作。
由于以下原因,创建微服务将来肯定会对您有所帮助:
可扩展性: 微服务可以独立扩展,而不会干扰应用程序中使用的其他微服务。
敏捷: 微服务的变化可以非常快,从而适应快速变化的业务场景。
容错: 即使一个微服务发生故障,其他微服务也可以继续服务,从而最大限度地减少对整个应用程序的影响
多语言坚持: 每个微服务可以决定自己的数据库机制类型。
微服务的优点我已经介绍了一部分,还有更多。
因此,如果您查看以上所有要点,绝对值得创建微服务应用程序