Spring Cloud微服务完整源码项目简介

  这是一份有着完整源码项目的小型的完整微服务实现,项目中有两个业务微服务,麻雀虽小五脏俱全,文章后面有源码下载地址。

      微服务架构已成为几年来的热门话题,然而,对于新手来说如何正确实现这种架构却有点迷茫,我使用微服务架构实现了开源项目Abixen平台等几个项目后,我想为什么不写一份更简单的实现心得,以帮助其他人用更少的努力来揭开当前企业软件流行词语“微服务”的神秘面纱。这篇文章是关于使用Spring Cloud Technologies如何实现微服务架构的文章。

微服务:建筑风格

     我非常喜欢简洁且实用的信息,微软文档关于微服务架构风格的文档说:“ 微服务架构是由一系列小型自治服务组成。每个服务都是独立的,应该实现单一的业务能力。 下图抵得上千言万语:

来源:Microsoft Docs

解释如下:

  • 服务能被独立部署。团队可以独立更新现有服务,而无需重建和重新部署整个应用程序,无需全部打成WAR包。
  • 服务负责持久保存自己的数据或外部状态。这与传统模型不同,在传统模型中,单独专门的数据层处理所有服务的数据持久。
  • 服务使用定义良好的API进行相互通信。其他服务隐藏了每项服务的内部实施细节。
  • 服务不需要共享相同的技术堆栈,库或框架。可以使用不同语言编写。

除了服务自身之外,以下是典型微服务架构中出现的一些组件:

管理:管理组件负责在节点上放置服务,识别故障,跨节点重新平衡服务等。

服务发现:维护服务列表以及它们所在的节点。启用服务查找以查找服务的端点。

API网关: API网关是客户端的入口点。客户端不直接呼叫服务。相反,他们调用API网关,后者将调用转发到后端的相应服务。

实现微服务

     开发微服务架构就是开发松散耦合的模块,这样就能对一个服务的更改而不需要改变另一个服务。我正在使用的是Spring Cloud,它提供了生产级库包,我用来创建像类似儿童游戏这样的微服务。下面是我的应用程序的架构图,它提供了用户信息和用户自己制作的书签的集成:

这里,UserServiceBookmarkService是典型的微服务。

  • Zuul充当网关,路由转发请求到不同服务。Swagger UI用于为API客户端提供整个API的UI界面文档。从这个文档中可以选择你需要调用的服务,如下所示:
  • Eureka注册器提供服务注册发现功能。注册到此服务器上的所有服务都会发送连续的健康心跳给网关,这样网关就可以确定是否应将请求转发到相应的服务上,如果没有健康心跳,那么就不转发请求到这个服务商。Eureka仪表板如下显示哪个服务有多少个实例在线:仪表板还有其他更多信息,包括CPU数量,内存使用情况等,您可以查看运行项目的信息。
  • Hystrix仪表板以高效的方式显示每个断路器的运行状况。
  • 配置服务器可以轮询源配置的任何修改,或者将源配置的任何更改推送到各个客户端以更新他们的配置。这是我最喜欢的功能之一,我是Spring Cloud的忠实粉丝,它使我们能够外化配置,并在配置值发生变化时将它们加载到应用程序中。
  • Feign是一个声明性的Web服务客户端。
  • Zipkin服务器提供分布式跟踪。默认情况下,用内存存储跟踪信息,也可以使用任何数据库(如Cassandra)或流式处理器(如Kafka)轻松配置。特定跟踪将如下所示:可以轻松跟踪各个服务实例之间的调用,只要让Zipkin知道它要监视的服务就可以。
  • Auth Server授权服务器使用Spring Cloud Security,它提供了一组原语,用于构建安全的应用程序和服务,而且操作简便。每个请求在到达网关后面的服务之前都会被拦截。
  • Hystrix有助于在服务交互中优雅地处理故障,从而为行为或故障处理方法提供回退方法。我使用Redis作为缓存服务器来缓存对书签服务的请求,以提高性能以及处理书签服务故障情况。

我们取得了什么成就

   虽然与单个模块中的所有服务相比,它看起来很复杂,但是这种架构提供了许多优势。看看本案例的架构特点:

  • userSvc和bookmarkSvc可以轻松地独立构建,部署,重新部署和扩展。
  • 每个服务都有独立的持久模块。
  • 服务通过API相互通信,而不需要了解内部细节,甚至接口,为开发人员选择不同技术堆栈提供了灵活性。
  • 服务已经注册到eureka注册服务,这样他们就不需要知道通信的物理地址,从而简化了扩展。
  • 服务在网关后面,服务转发请求到相应的服务。

这些功能还不令人兴奋吗?

本项目完整源码见:GitHub

英文原文

SpringCloud专题

 

 

猜你喜欢