关于基于Spring Cloud的微服务应用架构,网上已经有很多文章了,但我还是觉得把自己的架构过程和经验写下来,对自己来说算是知识和技术的梳理,对于误打误撞进来看到这篇文章的读者来说,或许也能起到一些借鉴作用。

Spring Cloud OSS相关概念可以去官网看看,是Netflix公司贡献给社区的一系列组件,通过组合这些组件可以迅速设计出一个微服务应用架构,而这一套框架组件及其组合方式也已经成为微服务事实上的标准。相对与阿里的开源框架dubbo,Spring Cloud的组件形态更为丰富,社区更为活跃,因此也是被很多公司采用的原因之一。在我们的项目中,使用到的组件包括Eureka、Config、Zipkin、Zuul和Ribbon,整体的应用架构图大致如下,当然还有一些逻辑关系没有在图中体现,我将在架构解析部分进行更多说明。

基于Spring Cloud的微服务架构图

上面的架构图中,我们先看左边部分。Eureka-Server是注册服务,所有其它服务都注册到Eureka-Server,包括配置服务Config-Service,链路追踪服务Zipkin-Service、监控服务Monitor-Service和右边的业务逻辑所包含的各种服务(图中省略了很多业务服务)。其中监控服务使用到的组件包括Hystrix和Turbine,配置服务的配置信息可以来自类似于GitLab这种源码/文件管理系统。配置服务作为一个中心管理服务,除了注册服务,其它服务启动时都需要从配置服务获取到自己的配置文件来完成自身的正常启动。

左边这些服务可以认为是辅助业务系统或者运维相关的服务,右边的服务包含了主要的业务逻辑。比如一个Pay-Service API调用的流程大致如下:

Client客户端发起请求,请求先进入到Gateway-Service,也就是网关服务,网关服务有使用到Spring Cloud的Zuul和Ribbon组件,这两组件分别提供路由和负载均衡服务。Gateway-Service在启动后会从Eureka-Server中获取到服务列表,列表里包含所有注册了并且状态良好的服务所使用的IP地址和端口,这样Zuul组件根据路由配置规则就知道将该请求路由到哪个服务,比如这里是Pay-Service。如果Pay-Service部署了多个服务实例,就会用到了Ribbon的负载均衡功能,根据一定规则将请求发送到后端其中一个Pay-Service服务实例。Pay-Service需要记录日志时,调用Log-Service服务接口,是通过Feign组件调用的,然后Log-Service将日志信息写入到MySQL数据库。通过同步工具,我们将MySQL数据实时或者定期同步到ElasticSearch,再使用其它的开源组件(比如Kibana)对ElasticSearch的数据进行处理展示。

我们还可以看到,微服务之间可能需要互相调用,我们使用Feign组件来完成,Feign组件自动包含了Ribbon功能,也就是如果要调用的服务部署了多个实例,Feign调用时就使用了Ribbon的负载均衡功能。因此,为方便调用其它服务,右边所有的微服务基本都集成了Feign组件,这一点也是图中没有体现出来的。

图中还有一个UAA-Service服务比较特殊,也是很关键的一个服务。UAA全称为User Authentication Authorization,即用户认证和授权。项目中使用了JWT + Oauth2 + Spring Security来实现认证授权逻辑。UAA-Service负责JWT Token的生成,是一个授权服务器,而其它所有的业务服务都属于资源服务,当客户端要调用资源服务的接口时,需要携带一个Token,资源服务从Token解析出相应的用户信息,存储到Spring Security上下文,然后业务代码里面就可以取出相应的用户信息,判断该用户是否有权限访问指定接口等等。认证授权的逻辑图如下:

JWT+Oauth2+Spring Security 认证授权逻辑

从上面的逻辑图中可以看到,如果用户访问的不是登录/注册接口,则先看请求是否携带了Token,如果没有携带,直接返回给客户端相应的提示信息,比如“请求缺少Token字段”,否则从Redis中查找是否存在客户端传过来的Token,如果没有,则返回“无效Token”信息,否则解析Token,存储到Spring Security上下文(这个逻辑是和业务代码分开的,在进入到业务代码之前就完成),然后在业务代码中可以使用诸如@PreAuthorize(“hasRole(‘ADMIN’)”)来判断当前用户是否具有ADMIN权限,如果有则可以访问当前接口,否则给客户端返回无访问权限等信息。

综上,我们看到整个微服务架构包含了以下几个主要部分:

注册服务,用于管理其它服务; 配置服务,给各服务提供配置管理; 网关服务,给后端微服务提供路由和负载均衡; 用户服务、认证授权服务,给微服务访问提供保护机制; 监控、链路追踪服务,辅助系统运维; 其它业务服务,提供真正的业务功能逻辑; 这六部分是一个微服务应用系统必不可少的,当然这里展示的仅仅是一个最小的微服务系统所包含的模块或服务,还有其它很多服务没有画出来,大家根据实际情况,可以在自己的项目中基于此进行各种扩展来真正满足您业务系统的功能、安全、性能等需求。

微信扫码,进入【技术人成长】社群逛逛。

转载于:https://juejin.im/post/5c6e47faf265da2de1659d5a

基于Spring Cloud的微服务架构相关推荐

  1. 即插即用!开源项目【云框架】发布“基于Spring cloud的微服务架构”

    开发者面对新技术无非两个场景,一是不懂技术想要学习,二是懂技术想要使用. 前者需要考虑如何快速掌握技术原理并能把技术用起来,而后者需要琢磨如何花费最小代价将技术应用于生产环境. 换句话说,想要获得新技 ...

  2. springcloud实战演练pdf_基于 Spring Cloud 的微服务架构实践指南(上)

    一. 引入 上回 Spring Cloud 理论篇 介绍了 Spring Cloud 的常见组件,让读者对 Spring Cloud 有了一个宏观认识,这是从理论层面出发的.接下来我们就进入 Spri ...

  3. 基于 Spring Cloud 的微服务架构分析

    -     前言    - Spring Cloud是一个相对比较新的微服务框架,2016年才推出1.0的release版本. 虽然Spring Cloud时间最短, 但是相比Dubbo等RPC框架, ...

  4. 基于Spring Cloud的微服务架构分析

    点击关注公众号,实用技术文章及时了解 来源:blog.caogo.cn/2021/06/20/ 基于Spring-Cloud的微服务架构分析 Spring Cloud是一个相对比较新的微服务框架,20 ...

  5. 2022最新基于 Spring Cloud 的微服务架构分析,java 技术经理岗位职责

    构建在开发团队之外的 API 网关必须具备负载均衡能力,可以配置多个 IP 地址.通过该 API 网关也最好具备和 Docker 容器扩展后的服务自动注册和地址加入扩展能力. Eureka 的竞品分析 ...

  6. 基于Spring Cloud的微服务架构脚手架实践

    文章目录 1 前言 2 脚手架主要提供哪些功能 3 如何使用该脚手架 3.1 项目统一依赖管理 3.2 集成基础模块功能到自己的项目中 4 基础核心功能模块的使用 4.1 集成缓存管理模块 4.1.1 ...

  7. 干货|基于 Spring Cloud 的微服务落地

    转载自 干货|基于 Spring Cloud 的微服务落地 微服务架构模式的核心在于如何识别服务的边界,设计出合理的微服务.但如果要将微服务架构运用到生产项目上,并且能够发挥该架构模式的重要作用,则需 ...

  8. Spring Cloud构建微服务架构:分布式服务跟踪(整合zipkin)【Dalston版】

    通过上一篇<分布式服务跟踪(整合logstash)>,我们虽然已经能够利用ELK平台提供的收集.存储.搜索等强大功能,对跟踪信息的管理和使用已经变得非常便利.但是,在ELK平台中的数据分析 ...

  9. Spring Cloud构建微服务架构:分布式服务跟踪(整合logstash)【Dalston版】

    通过之前的<入门示例>,我们已经为两个由SpringCloud构建的微服务项目 trace-1和 trace-2引入了Spring Cloud Sleuth的基础模块 spring-clo ...

最新文章

  1. IE 8 中自定义自己的 Search Provider (搜索提供程序)
  2. 21天精通python-21天学通Python 完整pdf扫描版[58MB]
  3. autojs怎么post协议_autojs QQ群post签到(五)
  4. JavaScript中innerHTML与innerText,createTextNode的区别
  5. python足球射门小游戏_足球射门游戏教案
  6. 利用jdk自带的运行监控工具JConsole观察分析Java程序的运行 Jtop
  7. 内核编程之Hello_kernel
  8. 中嵌套的页面如何操作父页面_UI设计中签到页面如何设计
  9. 在 Centos6/RHEL6 上恢复 ext4 文件系统下误删除的文件
  10. 深圳大学计算机与软件学院自考,如何坐公交 或 地铁去深圳的深圳大学南校区计算机与软件学院自考办| Moovit...
  11. Spring 事务源码(7)—事务的completeTransactionAfterThrowing回滚、commitTransactionAfterReturning提交以及事务源码总结【一万字】
  12. logstash~filter.mutate插件使用教程(附带示例)
  13. win7\win10加域的电脑不输入密码直接登录登录电脑桌面
  14. x265-1.8版本-common/pixel.cpp注释
  15. 横空出世!IDEA画图神器来了,比Visio快10倍
  16. 穷人应该先买房还是先创业?
  17. PowerShell_8_零基础自学课程_8_高级主题:WMI对象和COM组件
  18. 微信打疼的不只是马云
  19. python用logging模块写循环日志
  20. win11触控板使用不了的解决方法

热门文章

  1. 5 加盐_软化水设备怎么加盐
  2. 黑马博客——详细步骤(十二)项目功能的实现之文章评论和退出功能
  3. 微服务模式下API测试
  4. 泡沫股价、外卖小哥要失业了?测试员还要不要进美团?一文带你了解背后真相
  5. matlab字体设置
  6. 注册php tp5,TP5登录注册
  7. Template-Based 3D Model Fitting Using Dual-Domain Relaxation
  8. 第一章 了解BaseApplication框架以及使用Ogre Application Wizzard
  9. 无人机图像深度学习的大豆害虫检测与分类
  10. 徐州工程学院计算机报名,2019年3月江苏徐州工程学院计算机等级考试报名时间...