微服务架构

概述

  • BizSpring移动全端国际化电商平台,是建立在Spring Cloud 基础上的微服务应用,服务化是系统达到一定规模以后的必然选择,主流的互联网公司基本都在迁移到服务化架构。
  • 我们的微服务化架构给客户带来更多便捷,每个开发团队及各人更加专注于自身业务的开发,每个服务独立开发、部署、更新可以选择更加适合的技术体系,每个服务只需要对外提供接口隐藏了内部复杂的实现方式对调用方更加友好。
  • Spring Cloud 微服务架构基于 Spring Boot 框架,是由一系列框架式组件组成的,这些组件包括注册中心、服务网管、服务调用、负载均衡、限流降级等等。

单体服务架构

单体服务架构是前些年使用的一种设计模式,即用户交互端+服务器端架构,将应用简单的分为前端和后端两部分,前端负责显示界面和处理用户交互,服务器负责处理业务逻辑和存储数据。




(单体服务架构图)

微服务架构

不同于传统的单体服务,微服务架构是一种将应用程序分为多个小型、独立的服务的软件架构。这些服务可以通过轻量级通信机制进行通信,每个服务都有自己的数据库和应用程序代码,每个服务运行在自己的进程中。这种模式使得每个服务可以独立部署、扩展和维护,从而提高应用程序的可靠性,这种架构可以更好地支持快速迭代和部署,提高开发效率和灵活性。




微服务架构图

微服务架构概述

微服务架构风格是一类将单一应用程序作为由众多小型服务构成之套件加以开发的方式,其中各项服务都拥有自己的进程并利用轻量化机制(通常为HTTP源API)实现通信。这些服务围绕业务功能建立而成,且凭借自动化部署机制实现独立部署。

微服务的特点

  • 应用程序逻辑分为明确定义的职责范围的粒度组件,这些组件相互协调提供解决方案
  • 每一个组件都有一个小的职责领域,可以完全部署,也就是说一个服务可以跨越多个应用程序复用(独立部署和维护)
  • 服务之间通信基于一些基本的原则,如服务采用http + Json 这样的轻量级通信协议,在不同服务之间进行数据交互。这样不同服务可以使用不同的技术,互不影响,采用轻量级的通信协议作为通信原则、松耦合。

微服务结构的通用性

  • 通过服务实现应用的组件化(按功能拆分、可独立部署和维护)
  • 围绕业务能力组织服务,根据业务不同的需求进行不同组件的使用
  • 所做产品非项目化,对于平台具有一定的通用性

微服务架构的五大优势

提高速度和工作效率

微服务架构的最大优势之一是,它将应用分解为多个可管理的服务,从而解决了速度和工作效率问题。不同的团队可以同时开发不同的应用组件。由于微服务之间在结构上互不依赖,因此一个团队永远不必等待其他团队完成其工作后再创建或更改微服务。另外,独立的微服务更易于定位和修改。每个微服务均可单独测试,因此您可以加快质量保证流程。而且能够在开发其他组件时测试已开发好的组件。

围绕业务功能组织实施

微服务允许根据业务优先级来组织团队和流程,支持构建产品而非项目,团队将专注于构建业务功能,而不是编写用于粘合各个功能的代码。因此你所创建的服务能够适应多种环境。可以在多个业务流程中重复使用同一 服务,甚至还能够按需通过不同的业务渠道使用同一服务。每位团队成员分别负责某项服务,从而组成一支分工明确的跨职能团队。

轻松构建和维护应用

微服务架构的最大优势或许支持轻松构建和维护应用,微服务旨在化繁为简。
当应用被设计成多个较小的部分时,便更易于构建和维护,管理代码也变得轻松很多,因为每个微服务都是单独的代码段。也可以使用不同的数据库、编程语言和软件环境来实现服务。因此每个服务都能够独立部署、构建、重新部署和管理。
如一个微服务分配了太多的内存,或者给处理器带来了繁重的负载。对于微服务架构,这只会影响该特定服务,一个微服务的问题不会影响到整个系统。

提高可扩展性

微服务的另一大优势是可帮助提高可扩展性。因为每个微服务都可以自主运行,因此您能够更轻松地添加、更新、删除并扩展单个微服务。开发人员可以在不破坏应用中其它微服务的情况下做到这一点。当对应用的需求增加时,您只需将更多的资源转移或升级到受需求增加影响的微服务即可,甚至可以使用容器自动扩展各个服务为服务集群。通过只扩展所需的服务,帮助公司节省大量的服务器资源成本。

提升数据安全性

微服务架构有助于提升数据安全性。当微服务之间建立连接时,借助安全的API,您可确保信息仅可供授权用户、应用和服务器访问。
当您的微服务正在管理敏感的财务、账务相关业务机密性信息,安全的API 支持您全面控制哪些数据可供应用访问。

单体服务架构的劣势

  1. 开发速度缓慢

只能采⽤同⼀种技术,很难⽤不同的语⾔或者语⾔不同版本开发不同功能;

  1. 难以升级技术栈

团队长期依赖一套相同的技术,单体架构使得采用新的框架和编程语言变的及其困难。

  1. 系统耦合性强,

⼀旦其中⼀个模块有问题,整个系统就瘫痪了;⼀旦升级其中⼀个模块,整个系统就停机了,难以扩展,不能做到按需扩展,只能是扩展整个系统。要上线必须⼀起上线,互相等待,⽆法快速响应需求,应用程序缺乏故障隔离机制,因为所有模块都运行在同一个进程当中。

  1. 服务不抗压、稳定性差

单体程序缺乏可靠性,用户量提升将导致频繁的系统故障和宕机。

  1. 功能越强、代码越混乱

电商系统本身功能过于庞大和复杂,于单体系统以至于任何一个开发者都很难以理解它的全部业务。这种极度的复杂度会形成恶性循环,功能越扩展,越难以下手。

  1. 难以维护

由于电商系统功能模块诸多过于庞大和复杂,无论是前期开发人员还是后期新聘技术人员都难以新增和维护系统功能,每一次更改都更容易出错且更改后其他人更难理解。

  1. 新版发布周期长,且容易出问题

代码库复杂,以至于一个更改可能引起的影响是未知的。开发团队分为多个小组时,当需要发布新版本的时候漫长的合并和测试时间非常长。

  1. 难以聘到技术人员

对于新手来说,看到了一坨庞大的代码,真心是无从下手,你让他接手或者干点活啥的,成本都更高的,且容易犯错。对于有代码情操的人,是会立刻走人的。

BizSpring 电商平台微服务架构

名称 组件
核心框架 Springboot2、Spring Cloud、Spring Cloud Alibaba
配置中心 Nacos
负载均衡 Open Feign、Ribbon
服务调用 Feign
服务容错 Alibaba Sentinel
API网关 Spring Cloud Gateway
分布式事务 Seata
持久层框架 MyBatis-plus
高性能缓存 Redis 、Redis Cluster
分布式锁 Redisson
文件管理 Alibaba oss /七牛云/腾讯cos/Minio
SMS短信 Alibaba SMS
安全 JWT+oauth2
数据库 Mysql8+
API管理 Swagger2
搜索引擎 Elasticsearch 7.6.2
JDK版本 Java8+
管理平台框架 Vue3+ElementPlus
商家平台框架 Uni-app(一套代码,多端发布)
商城平台框架 Uni-app(一套代码,多端发布)

BizSpring商城的架构优势

BizSpring 电商平台使用业内最优秀的服务设计理念,将电商整套流程包括商品(product)、订单(order),店铺(store)、营销(marketing)分别建设为不同的服务,降低了电商系统业务的耦合性、各服务可单独部署,用户量攀升的期,将业务压力较大的服务可建集群,进一步分担平台压力,顶级式提高架构的扩展性。于开发人员将能更简捷的自己业务范围的功能实现完善好。

Elasticsearch搜素引擎
Elasticsearch 为架构提供高效的搜索和聚合功能,支持实时数据处理,在商城数据写入时立即建立索引。支持多种查询语句,并能够快速地搜索和处理商品、订单、评论、售后的大量数据搜索。

Redis集群存储平台缓存
使用redis集群存储平台缓存,提升数据可靠性,提高读写能力,提高了系统运行中缓存的稳定性。

Nacos注册中心
BizSpring中服务启动后将自己注册到注册中心(Nacos),调用方调用时到注册中心查询可用的服务然后完成调用。注册中心的稳定性直接影响了整个微服务架构的可靠性,所以注册中心的选型至关重要。

OpenFeign Ribbon负载均衡
BizSpring 服务调用使用 OpenFeign 和 Ribbon 配合完成,OpenFeign实现服务调用Ribbon做到负载均衡。

Java商城单体和微服务架构有什么区别的更多相关文章

  1. 全)Java从单体到微服务打造房产销售平台 2018年慕课网 高清视频+源码

    第1章 课程介绍本章从整体上介绍课程有什么收获,以及课程如何安排,其中包括微服务的两个不同学习阶段--单体开发阶段(基于SpringBoot)和微服务改造阶段(基于SpringCloud),知识点梳理 ...

  2. MVC、RPC、SOA、微服务架构之间的区别

    MVC.RPC.SOA.微服务架构之间的区别 一.MVC架构 其实MVC架构就是一个单体架构. 代表技术:Struts2.springMVC.Spring.Mybatis 等等. 二.RPC架构 RP ...

  3. 12-factor应用和微服务架构应用的区别

    SAP云平台的帮助文档很多时候将12-factor应用和微服务架构的应用相提并论. 然而从Allan Beck和John Mcteague的Cloud成熟度模型概念里,12-factor应用从成熟度上 ...

  4. 单片,SOA 和微服务架构有什么区别?

    单片架构类似于大容器,其中应用程序的所有软件组件组装在一起并紧密 封装.第一个面向服务的架构是一种相互通信服务的集合.通信可以涉及简单的数 据传递,也可以涉及两个或多个协调某些活动的服务.微服务架构是 ...

  5. 几种常见的微服务架构方案简述——ZeroC IceGrid、Spring Cloud、基于消息队列

    微服务架构是当前很热门的一个概念,它不是凭空产生的,是技术发展的必然结果.虽然微服务架构没有公认的技术标准和规范草案,但业界已经有一些很有影响力的开源微服务架构平台,架构师可以根据公司的技术实力并结合 ...

  6. 几种常见的微服务架构方案——ZeroC IceGrid、Spring Cloud、基于消息队列、Docker Swarm

    微服务架构是当前很热门的一个概念,它不是凭空产生的,是技术发展的必然结果.虽然微服务架构没有公认的技术标准和规范草案,但业界已经有一些很有影响力的开源微服务架构平台,架构师可以根据公司的技术实力并结合 ...

  7. Java生鲜电商平台-生鲜系统中微服务架构设计与分析实战

    Java生鲜电商平台-生鲜系统中微服务架构设计与分析实战 说明: Java生鲜系统中微服务的拆分应该如何架构设计与分析呢?以下是我的实战中的设计与经验分析. 目录 1. 微服务简介2. 当前现状3. ...

  8. Java生鲜电商平台-SpringCloud微服务架构中分布式事务解决方案

    Java生鲜电商平台-SpringCloud微服务架构中分布式事务解决方案 说明:Java生鲜电商平台中由于采用了微服务架构进行业务的处理,买家,卖家,配送,销售,供应商等进行服务化,但是不可避免存在 ...

  9. Java生鲜电商平台-SpringCloud微服务架构中核心要点和实现原理

    Java生鲜电商平台-SpringCloud微服务架构中核心要点和实现原理 说明:Java生鲜电商平台中,我们将进一步理解微服务架构的核心要点和实现原理,为读者的实践提供微服务的设计模式,以期让微服务 ...

  10. Java生鲜电商平台-微服务架构概述

    Java生鲜电商平台-微服务架构概述 单体架构存在的问题 在传统的软件技术架构系统中,基本上将业务功能集中在单一应用内,或者是单一进程中.尽管现代化的软件架构理论以及设计原则已推广多年,但实际技术衍化 ...

随机推荐

  1. vue vantUI实现文件(图片、文档、视频、音频)上传(多文件)

    上传文档格式 1 <template> 2 <div> 3 <div class="upload"> 4 <div> 5 <d ...

  2. 在线P图工具(基于minipaint开发)

    在浏览github过程中,发现一个超级实用的仓库,viliulsle开发的minipaint,类似于photoshop的网页版.基于webpack开发的,打包非常简单,故自己搭建了一套. 在线预览 在 ...

  3. 到底什么样的 Java 项目用 Solon 好???

    什么样的 Java 项目用 Solon 好 就像华为讲的,不要因为爱国而特意买华为手机.Solon 也是,有需要就用不需要就跳过(按正常的需求选择): 信创需要国产化,应该用 Solon 或者 Sol ...

  4. .NET 5 开发WPF - 美食应用登录UI设计

    Demo演示: 你的时间宝贵,不想看啰嗦的文字,可直接拉到文末下载源码! 1. 新建项目 站长开发环境: VS 2019企业版 16.70 .NET 5 Preview 5 .NET 5 WPF 项目 ...

  5. 怎样实现WPF Prism Module的国际化和本地化?

    怎样实现WPF Prism Module的国际化和本地化? English | 简体中文 上一篇有简单介绍主工程的国际化,使用的资源字典(XAML)实现的. 这几天我添加了几个Prism模块(Modu ...

  6. 【C++】const 常类型

    常引用 格式:const 类型说明符 &引用名 注意:常引用所引用的对象不能修改 常对象 格式:类名 const 对象名 或 const 类名 对象名 注意:常对象其数据成员在生存期内不能修改 ...

  7. Oracle12c On 银河麒麟v10SP3 的安装过程

    Oracle12c On 银河麒麟的安装过程 学习官网资料 下载最新版的preinstall文件 https://yum.oracle.com/repo/OracleLinux/OL8/appstre ...

  8. [转帖]jdbc连接mysql设置session variables 参数变量

    目录 两种方式 连接串设置[^1] 执行语句中设置 两种方式 url连接串中设置 执行语句中设置 连接串设置1 sessionVariables jdbc.url=jdbc:mysql://xxxx. ...

  9. [转帖]TiDB 查询优化及调优系列(三)慢查询诊断监控及排查

    https://zhuanlan.zhihu.com/p/509984029   本章节介绍如何利用 TiDB 提供的系统监控诊断工具,对运行负载中的查询进行排查和诊断.除了 上一章节介绍的通过 EX ...

  10. [转帖]磁盘负载指标 %iowait, await, %util 的正确理解

    说明 %iowait, await, %util 是用来衡量硬盘负载的三个指标, 但是这几个指标通常容易被误解, 实际上, 这三个指标单纯的高, 并不一定能说明相应的磁盘有问题或者有瓶颈, 而是需要结 ...