如今,微服务已成为软件开发中的热门词汇,许多组织更喜欢使用微服务架构来构建其企业应用程序。 在Java社区中,SpringBoot是用于构建整体和微服务的最广泛使用的框架。 我打算编写一系列文章,介绍如何使用SpringBoot和SpringCloud构建微服务。
在本文中,我们将学习以下内容:
- 整体式
- 什么是微服务?
- 微服务的优势
- 微服务面临的挑战
- 为什么SpringBoot和SpringCloud是MicroServices的不错选择?
- 介绍应用程序
整体式
传统上,我们以模块化方式(?? !! ??)构建大型企业应用程序,但最终将它们作为单个部署单元(EAR或WAR)一起部署。 这些称为单片应用程序。
整体架构存在一些问题,例如:
- 随着时间的流逝,大型代码库变得一团糟
- 多个团队在单个代码库上工作变得乏味
- 不可能仅按比例放大应用程序的某些部分
- 技术更新/重写成为复杂而昂贵的任务
但是,恕我直言,与MicroServices相比,部署和监视Monoliths相对容易。
微服务
MicroService是围绕特定业务功能构建的服务,该功能可以独立部署。 因此,要构建大型企业应用程序,我们可以标识主业务域的子域,并使用域驱动设计(DDD)技术将每个子域构建为微服务。 但是最后,我们需要使所有这些微服务一起工作,以为最终用户提供服务,就好像它是单个应用程序一样。
您可以在这个著名的Martin Fowler博客https://martinfowler.com/articles/microservices.html上阅读有关MicroServices的更多信息。
微服务的优势
- 理解较小的代码库很容易
- 可以独立扩展高使用率的服务
- 每个团队可以专注于一个(或几个)微服务
- 技术更新/重写变得更加简单
微服务面临的挑战
- 一开始很难获得正确的子域边界
- 需要更多熟练的开发人员来处理分布式应用程序的复杂性
- 在没有适当的DevOps文化的情况下管理基于MicroServices的应用程序几乎是不可能的
- 本地开发人员环境设置对于测试跨服务通信可能会变得很复杂。 尽管使用Docker / Kubernetes可以在一定程度上缓解这种情况。
为什么SpringBoot和SpringCloud是MicroServices的不错选择?
Spring Boot是用于构建MicroServices的最受欢迎和广泛使用的Java框架。 如今,许多组织更喜欢在云环境中部署其应用程序,而不是为自己维护数据中心而烦恼。 但是我们需要注意各个方面,以使我们的应用程序成为Cloud Native。 春天云的美丽来了。
Spring Cloud本质上是构建Cloud Native应用程序时要遵循的各种设计模式的实现。 无需重新设计轮子,我们可以简单地利用各种Spring Cloud模块并专注于我们的主要业务问题,而不必担心基础架构方面的问题。
以下是一些Spring Cloud模块,可用于解决分布式应用程序问题:
Spring Cloud Config Server:可以在中央配置服务器中外部化应用程序的配置,从而能够更新配置值而无需重新启动应用程序。 我们可以使用带有git或Consul或ZooKeeper的 Spring Cloud Config Server作为配置存储库。
服务注册表和发现:由于可能有许多服务,并且我们需要能够动态扩展或缩小,因此我们需要服务注册表和发现机制,以便服务到服务的通信不应依赖于硬编码的主机名和端口号。 Spring Cloud只需最少的配置即可提供基于Netflix Eureka的Service Registry and Discovery支持。 我们还可以使用Consul或ZooKeeper进行服务注册和发现。
断路器:在基于微服务的体系结构中,一个服务可能依赖于另一服务,并且如果一个服务出现故障,则故障也可能级联到其他服务。 Spring Cloud提供了基于Netflix Hystrix的Circuit Breaker来处理此类问题。
Spring Cloud数据流:这些天,我们可能需要使用Kafka或Spark等来处理大量数据流。SpringCloud Data Streams提供了更高级别的抽象,以更轻松的方式使用这些框架。
Spring Cloud Security:某些微服务仅需要经过身份验证的用户才能访问,并且很可能我们可能希望使用单点登录功能在服务之间传播身份验证上下文。 Spring Cloud Security使用OAuth2提供身份验证服务。
分布式跟踪:微服务的痛点之一是调试问题的能力。 一个简单的最终用户操作可能会触发微服务调用链,应该有一种机制来跟踪相关的调用链。 我们可以结合使用Spring Cloud Sleuth和Zipkin来跟踪跨服务调用。
Spring Cloud合同:各个团队在不同的微服务上合作的可能性很高。 团队应该有一种机制来约定API终结点合同,以便每个团队可以独立开发其API。 Spring Cloud Contract帮助创建此类合同并由服务提供商和消费者双方进行验证。
这些只是Spring Cloud的一些功能。 要了解更多信息,请访问https://projects.spring.io/spring-cloud/ 。
我们的示例应用
我坚信以身作则。 因此,让我们学习如何通过示例应用程序使用Spring Boot和Spring Cloud构建MicroServices。 我将故意使应用程序业务逻辑非常简单,以便我们专注于理解SpringBoot和SpringCloud功能。
我们将构建一个简单的购物车应用程序,并假设我们将从以下微服务开始:
- catalog-service:目录服务:提供REST API以提供诸如产品之类的目录信息。
- 库存服务:它提供REST API来管理产品库存。
- cart-service:提供REST API来保存客户购物车详细信息。
- 订单服务:它提供REST API来管理订单。
- 客户服务:它提供REST API来管理客户信息。
- shoppingcart-ui :这是面向客户的前端Web应用程序。
在经历各种微服务概念时,我们将构建各种服务和REST端点。
请继续关注下一篇文章,我们将在该文章中创建目录服务并使用spring-cloud-config服务器对所有微服务进行集中配置。