简介- 谷粒商城项目微服务架构图

news2024/12/26 23:48:17

目录

  • 项目前置知识
  • 一、前后端分离开发,分为 内网部署 和 外网部署。
  • 二、用户是通过使用 客户端 来完成各种的功能
  • 三、网关的作用
  • 四、Sentiel组件
  • 五、Feign组件
  • 六、OAuth2.0认证中心
  • 七、SpringSecurity组件
  • 八、关于数据存储的解决方案
  • 九、定位bug
  • 十、注册中心
  • 十一、配置中心
  • 十二、服务追踪
  • 十三、运维
  • 十四、参考资料

请添加图片描述

项目前置知识

  1. springboot
  2. Redis
  3. MySQL

一、前后端分离开发,分为 内网部署 和 外网部署。

  • 外网也就是面向公众访问的,即前端项目,可以是手机APP or 电脑的web网站
  • 内网部署的,是整个后台的服务集群。

二、用户是通过使用 客户端 来完成各种的功能

  • 比如:登录、注册等,都要通过 客户端 来给后台的服务发送 请求,当然,请求 不是直接过来的。
  • 首先,请求客户端 发起,来到 nginx集群nginx请求 通过 API网关 转交给后台服务(即业务集群),API网关 会使用到 SpringCloud Gateway。那么网关会完成一个什么样的功能呢?

三、网关的作用

  1. 动态路由网关 可以根据当前 请求,动态地路由到指定的服务,看当前 请求 是要调用商品服务呢?还是购物车服务?还是检索等等
    等路由过来的时候,如果某一个服务众多,比如当前 请求 是来查询商品的,在这三个服务里面都有商品服务,这个时候 网关 还可以负载均衡地调用商品服务。当某个服务出现问题,也可以在 网关 这个阶段对服务进行统一的熔断、降级,那么熔断降级就使用阿里巴巴的sentinel组件。
  2. 认证授权:也就是 请求 过来,要先看一下是否合法,合法了再放行过去。
  3. 令牌限流:限制当前的瞬时流量,比如:一百万个 请求 都过来了,由于担心全部放过去,整个后台服务会被压垮,所以在 网关 处进行流量控制。可以先放行一万个过去,让后台服务能够很容易处理这些请求。

四、Sentiel组件

通过阿里巴巴提供的Sentiel来完成限流、熔断、降级。当请求通过网关,到达后台服务以后,后台服务就进行处理,这些后台服务是通过springboot来写的一个个微服务。

五、Feign组件

服务与服务之间也会互相调用,比如下订单的时候,就需要通过Feign去调用商品服务,来查询一个个商品信息。

六、OAuth2.0认证中心

有些请求可能要登录以后才能处理,有一个专门基于OAuth2.0的认证中心,除了有一般的登录,还有基于OAuth2.0的社交登录。

七、SpringSecurity组件

整个应用里面的安全和权限控制,都是用SpirngSecurity来进行控制的。

八、关于数据存储的解决方案

  • 服务要使用一些数据,就要用到Redis缓存,可以是分片集群,也可以是哨兵集群
  • 持久化存储数据是用MySQL集群,可以做成读写分离,也可以做分库分表
  • 服务与服务之间,会使用消息队列来进行异步解耦,包括完成分布式事务的最终一致性。
  • 使用RabbitMQ集群来做消息队列
  • 有些服务需要进行全文检索去检索一些商品信息,就需要使用到ElasticSearch
  • 有些服务在运行期间,可能需要存储一些图片、视频等,使用的是阿里云的对象存储服务OSS

九、定位bug

  • 项目上线后,为了快速定位项目中一些问题,使用ELK来进行对日志进行相关处理,也就是使用LogStash来收集业务里面的各种日志,把它存储到ES中,然后再使用Kibana可视化界面从ES中检索出相关的日志信息帮我们快速定位线上问题的所在。

十、注册中心

  • 发现问题:在分布式系统中,由于每一个服务都可能部署在很多台机器,而且服务跟服务之间要互相调用
  • 分析问题:服务之间需要知道彼此的位置
  • 解决问题:可以将所有的服务都注册到注册中心,然后别的服务再从注册中心中去来发现其它服务所在的位置,所以使用阿里巴巴的springcloud Nacos来作为配置中心,

十一、配置中心

  • 发现问题:每一个服务的配置众多,一个一个服务改配置就太麻烦了,有没有什么一键修改的方法呢
  • 分析问题:要实现一键修改的功能,可以采取集中管理配置,那么就需要一个配置中心,
  • 解决问题:使用阿里巴巴的springcloud Nacos来作为配置中心,所有的服务都可以从配置中心中获取它的配置

十二、服务追踪

  • 发现问题:服务在调用期间可能出现一个问题,比如:下订单服务,调用商品服务,商品服务再调用库存服务,可能某一个链路出现了问题,那该怎么办呢?
  • 分析问题:那我们就得追踪整个服务调用链,看哪里出了问题,哪一块问题该怎么解决等
  • 解决问题:我们可以使用服务追踪,服务追踪使用Springcloud提供的Sleuth + Zipkin,把每一个服务的信息,交给开源的Prometheus进行聚合分析,再由Grafana进行可视化展示,通过Prometheus提供的AlterManager来实时得到服务的告警信息,把这些告警信息以邮件或者手机短信的方式通知开发或者运维人员。

十三、运维

  • 提供了持续集成,持续部署,也就是项目发布起来,由于微服务众多,每一个都打包,部署到服务器上太麻烦了,那有了持续集成
  • 开发人员可以将修改后的代码提交给GItHub,然后运维人员,可以通过自动化工具Jenkins从GItHub中获取代码,打包成Docker镜像,最终使用k8s来集成整个Docker服务,将服务以Docker容器的形式来运行

十四、参考资料

  • Java项目《谷粒商城》Java架构师 | 微服务 | 大型电商项目

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/615004.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java 进阶 -- Lambda 表达式

Lambda Expressions 匿名类(anonymous classes)的一个问题是,如果匿名类的实现非常简单,比如一个只包含一个方法的接口,那么匿名类的语法可能会显得笨拙和不清晰。在这些情况下,您通常试图将功能作为参数传…

Spark RDD计算总分与平均分

文章目录 一,提出任务二,实现思路三,准备工作1、启动HDFS服务2、启动Spark服务3、在本地创建成绩文件4、将成绩文件上传到HDFS 四,完成任务1、在Spark Shell里完成任务(1)读取成绩文件,生成RDD&…

从Java BIO到NIO再到多路复用,看这篇就够了

从一次优化说起 近期优化了一个老的网关系统,在dubbo调用接口rt1000ms时吞吐量提升了25倍,而线程数却由64改到8。其他的优化手段不做展开,比较有意思的是为什么线程数减少,吞吐量却可以大幅提升?这就得从IO模型说起&a…

消息队列kafka使用技巧和常见问题

目录 【消息队列概述】 【kafka】 消息丢失问题 消息重复问题 消费顺序问题 消息积压问题 kafka集群部署 【消息队列概述】 消息队列主要解决应用耦合、异步消息、流量削锋等问题,是大型分布式系统不可缺少的中间件。消息生产者 只管把消息发布到 MQ 中而不…

【CMake 入门与进阶(4)】 CMakeLists.txt 语法规则基础及部分常用指令-续(附使用代码)

由于篇幅问题本篇接着上文继续介绍 CMakeLists.txt 语法规则基础及常用指令。 aux_source_directory aux_source_directory 命令会查找目录中的所有源文件&#xff0c;其命令定义如下&#xff1a; aux_source_directory(<dir> <variable>)从指定的目录中查找所有…

开发者工具调试

Console控制台 F12打开控制台 选择其他tab面板时&#xff0c;ESC打开Console面板enter直接执行Console的代码&#xff0c;shiftEnter输入多行代码 Source面板 左键单机行号设置断点&#xff0c;或在代码中添加debugger;右键单机行号设置条件断点&#xff08;条件表达式为tr…

PowerShell install 一键部署mariadb10.11

mariadb MariaDB数据库管理系统是MySQL的一个分支&#xff0c;主要由开源社区在维护&#xff0c;采用GPL授权许可 MariaDB的目的是完全兼容MySQL&#xff0c;包括API和命令行&#xff0c;使之能轻松成为MySQL的代替品。在存储引擎方面&#xff0c;使用XtraDB来代替MySQL的Inno…

ChatGPT 国内镜像网站大全(含GPT-4.0版本)之什么年代还在写传统文章。

前言&#xff1a; 临近期末&#xff0c;大量水课的节课作业都是论文&#xff0c;一篇就是几千字&#xff0c;这对于还要复习专业课的我们可以说是压力巨大&#xff1a;心理健康论文&#xff0c;安全教育论文&#xff0c;大学语文论文&#xff0c;书法赏析论文&#xff0c;劳动…

小议C++函数签名与模板返回类型

题记&#xff1a;什么事情都要追问一个为什么&#xff0c;真正理解了为什么&#xff0c;才能活学活用。 代码1 下面的代码能编译通过吗&#xff1f; #include <stdio.h> #include <stdlib.h>class X { public:int *get() { return new int(); }double *get() { r…

MATLAB矩阵的分解函数与案例举例

系列文章目录 MATLAB当中线性方程组、不定方程组、奇异方程组、超定方程组的介绍 MATLAB语句实现方阵性质的验证 MATLAB绘图函数的相关介绍——海底测量、二维与三维图形绘制​​​​​​ MATLAB求函数极限的简单介绍 文章目录 前言 1. 奇异值分解&#xff08;SVD&#x…

C++类和对象-4

在上篇C类和对象的博客中&#xff0c;我们讲述了析构函数、拷贝构造函数、浅拷贝和深拷贝的内容&#xff0c;我们紧接上文&#xff0c;开始讲述接下来的文章。 目录 1.this指针 1.1引入 1.2内容 1.3特征 1.4用法 2.静态成员 2.1内容 2.2静态数据成员 2.3静态成员函数…

Vue.js 中的国际化支持是什么?如何进行国际化支持?

Vue.js 中的国际化支持是什么&#xff1f;如何进行国际化支持&#xff1f; Vue.js 是一款流行的前端框架&#xff0c;它提供了许多方便的工具和 API&#xff0c;用于构建交互式的用户界面。其中&#xff0c;国际化支持是 Vue.js 中重要的一部分&#xff0c;它可以让我们轻松地…

如何强制删除文件夹?这样操作就能搞定!

案例&#xff1a;我想删掉一些没有用的文件夹&#xff0c;释放一些电脑内存&#xff0c;但是我发现&#xff0c;有些文件夹并不能直接被删除。怎样才能删除这些文件夹&#xff1f;有没有小伙伴有解决的办法。 在使用电脑过程中&#xff0c;我们可能会遇到一些无法正常删除文件夹…

空间计算时代来临:苹果Vision Pro震撼上市,探索真实与虚拟的新边界

目录 前言Vision Pro的外观设计Vision Pro的交互方式Vision Pro 硬件配置Vision Pro 上市时间及销售价格Vision Pro与传统XR设备不同点总结其它资料下载 前言 苹果公司在2023年6月6日的WWDC23主题演讲中正式发布了传闻已久的头显产品——Vision Pro。WWDC&#xff0c;全称为“…

LLM Accelerator:使用参考文本无损加速大语言模型推理

编者按&#xff1a;如今&#xff0c;基础大模型正在诸多应用中发挥着日益重要的作用。大多数大语言模型的训练都是采取自回归的方式进行生成&#xff0c;虽然自回归模型生成的文本质量有所保证&#xff0c;但却导致了高昂的推理成本和长时间的延迟。由于大模型的参数量巨大、推…

被App包围 苹果Vision Pro将你推入空间“大屏”

2小时&#xff0c;这是2023年苹果开发者大会&#xff08;WWDC&#xff09;首日发布会的直播总时长&#xff0c;仅YouTube上&#xff0c;就有483.9万次观看。发布会开启时&#xff0c;北京时间是6月6日凌晨1点&#xff0c;众多科技博主串流直播了这场发布会。 苹果CEO蒂姆库克引…

3.2 继续完善的Vue.js响应式系统

前文提要&#xff1a; 3.0 响应式系统的设计与实现 3.1 一个稍微完善的Vue.js响应式系统 1、解决副作用函数的死循环问题 在解决了分支的切换的问题&#xff0c;此时还有一个代码死循环的问题&#xff0c;其这个死循环很容易触发&#xff0c;如下代码&#xff1a; const dat…

Netty Incubator Codec QUIC 0.0.41.Final 发布

导读Netty Incubator Codec QUIC 是一款基于 QUIC 协议的编解码器&#xff0c;为 Netty 提供了 QUIC 协议的支持。 近日&#xff0c;该团队发布了 0.0.41.Final 版本&#xff0c;这是一个错误修复版本&#xff0c;主要包括以下变化: 允许在派发前通过添加到读完队列来合并刷新…

嵌入式软件测试笔记3 | 嵌入式软件测试开发的多V模型

3 | 嵌入式软件测试开发的多V模型 1 简单的多V模型2 迭代与并行开发2.1 开发模型2.2 嵌入式开发过程的复杂性 3 多V模型中的测试活动3.1 测试活动和因素3.2 模型开发周期中与测试相关的元素分配3.3 原型开发周期中与测试相关的元素分配3.4 最终产品开发周期中与测试相关的元素分…

NineData x 华为云正式上线

6月5日&#xff0c;NineData 企业级 SQL 开发平台正式成为华为云“联营联运”商品。通过联营联运模式&#xff0c;双方将在产品、解决方案和生态等多个方面开展深度合作&#xff0c;共同提供高效、智能、安全的数据管理服务&#xff0c;帮助客户轻松构建一站式云端数据库管理平…