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