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

说明: Java生鲜系统中微服务的拆分应该如何架构设计与分析呢?以下是我的实战中的设计与经验分析。

目录

1. 微服务简介
2. 当前现状
3. 特点
4. 原则
5. 目标
6. 总体架构设计
6.1. 业务架构
6.2. 逻辑架构
6.3. 应用架构
6.4. 数据架构
6.5. 数据层次划分
6.6. 技术架构
6.6.1. 分层设计
6.6.2. 逻辑技术架构

1. 微服务简介

近年来,在生鲜行业,生鲜电商软件开发领域关于微服务的讨论呈现出火爆的局面,越来越多的公司企业倾向于在系统设计与开发中采用微服务方式实现软件系统的松耦合、跨部门开发,被认为是IT软件架构的未来方向,Martin Fowler也给微服务架构极高的评价;同时,反对之声也很强烈,持反对观点的人表示微服务增加了系统维护、部署的难度,导致一些功能模块或代码无法复用,同时微服务允许使用不同的语言和框架来开发各个系统模块,这又会增加系统集成与测试的难度,而且随着系统规模的日渐增长,微服务在一定程度上也会导致系统变得越来越复杂。尽管一些公司已经在生产系统中采用了微服务架构,并且取得了良好的效果;但更多公司还是处在观望的态度。

什么是微服务架构呢?简单说就是将一个完整的应用(单体应用)按照一定的拆分规则(后文讲述)拆分成多个不同的服务,每个服务都能独立地进行开发、部署、扩展。服务于服务之间通过注入RESTful api或其他方式调用。

 
原架构
 
微服务架构

2. 当前现状

  • 旧有平台通用性不够全面,在项目集成过程中对原有系统业务侵入性高

  • 缺乏对系统平台的用户基础权限、数据权限及数据字典等通用基础功能共性维护

  • 平台侧的用户相关权限资源配置维护繁杂,不易集中管理

  • 缺乏统一的WEB UI标准式封装,导致项目很多模块风格迥异

  • 开发效率低,缺乏自动化生成策略

  • 不支持多数据配置,导致项目很难进行读写的剥离

  • 缺乏专业接口对接机制,接口制式多种,更无接口标准API文档,不利于客户端对接

  • 缺乏统一的接口安全机制,可细化控制接口程度低,不利于数据安全

  • 系统依旧采用传统的MVC架构,较为保守,横向扩展性差

  • 各个模块之间高度集成,抗风险能力弱.

3. 特点

   系统架构总体设计上体现模块化,每个模块都可以作为独立的个体,且独立运营,倾向于分布式、去中心化,以便于版本长期迭代。

 
  • 使用灵活,可以整个使用,也可以只用其一个或几个部分

  • 学习成本低,上手容易

  • 核心功能的稳定性,且尽量少的第三方框架及包

  • 应用架构的外延性、连续性,便于集成、复用

  • 易于知识积累,真正做到越用越强

  • 易于集群与水平扩展,能做到不间断提供服务

  • 针对业务模块之间的关系进行解耦

  • 无状态服务,对每次请求的服务器处理是没有影响的。可以使用负载均衡技术(需要解决Session同步问题),实现高可用

在大多数情况下,如果需要同步更新很多个服务则说明系统的耦合还不够低,当然我们也不可能完全避免耦合,它总是会出现在某些场景下。为此需要我们总结提炼一些抽象层将服务之间的交互定在契约上来避免复杂,提升灵活性。这就要求我们在一开始设计过程中就要有一种辨别能力,能够找到那些必须放在一起来做处理而不能拆解的功能。如果这些功能是值得放在一起的,那我们就可以将它独立成一个微服务,遵循高聚合的设计原因。

4. 原则

  • 兼容开放式原则:兼容已有技术,避免对系统的颠覆式改造

  • 先进性和灵活性原则:采用目前主流的先进的技术、方法,满足系统不断增加和调整的业务需求;通过修改流程的相关配置文件实现流程的发布或更新,缩减系统改造周期

  • 实用性原则:系统应具有良好的用户界面,操作简单方便。充分考虑录入人员特点,使数据处理工作简单、方便、快捷,业务流程清晰,符合常规业务处理习惯;对于常用的信息查询操作,系统提供灵活多样的查询和统计检索方式,满足不同层次的用户需求

  • 减法原则:从技术经理、技术骨干到开发人员,工作量范围与内容越来越少

  • 高效、经济:自动组装、复用资产模块,由框架进行自动组装,避免大量的系统配置,同时避免相关参与者做重复的事情

  • 约定优于配置:通过约定减少代码及配置量

5. 目标

   构建基础框架,同时能够与已有的应用模块集成,实现在原有的业务上不断运行。

  • 统一的信息整合平台,将现有的应用系统、资源进行整合,打破系统建设孤岛、向应用的产品化发展

  • 及时、准确、客观的同互联网接规,为产品的多元化提供技术支持

  • 架构支持可灵活定制、拓展,实现模块标准化、通用化,可根据业务需要,与新建立的业务系统有效集成

  • 业务系统维护实现分布式管理,去中心化

  • 实现用户统一的用户、角色权限、统一日志、运维监控集中管理

  • 实现统一的信息展示

  • 业务系统维护直观、操作简便、无需专门技术人员

除上述目标外,该系统从设计方面,应兼顾稳定性、操作性、扩展性、先进性、可维护性、安全性等重要原则,在稳定、安全的基础上可以随着业务的发展逐步扩展。

6. 总体架构设计

6.1. 业务架构

采用当前业界流行的微服务架构,遵循统一技术路线,架构设计注重层间的松耦合与层间的高内聚,通过对业务对象的抽象内聚,组件化服务模块,统一服务调用,考虑的拓展性、稳定性、复用性以及可配置性,降低了维护成本和开发成本,使得系统变得更轻量化,能够满足业务不断的变化带来的架构挑战。

以核心功能为基础、以公共平台为纽带、服务能力高度共享的分布式架构体系

  • 系统架构新特性:微服务化、服务治理自动化,服务能力开放自动化;自动构建、自动发布,一键完成部署;灰度发布,系统升级,业务不间断;

  • Cloud 中心:服务标准化共享,满足内部、外部交互,实现运营商自营业务及第三方业务便捷集成,丰富网络应用与业务生态;

  • 能力中心:建立开放的能力体系,实现能力标准化封装及便捷的服务访问手段,支撑能力显性化管理;

  • 策略中心:端到端的策略管理,结合用户的业务需求、状态和现状,自主分析与识别,智能的决策与策略下发;

  • 编排中心:实现长短流程开通服务编排,能力编排;可将原子能力通过编排组成新的能力自动发布;

  • 采集中心、监控中心:实现系统各类数据采集分析与监控,实时图形化感知系统运行状态。

6.2. 逻辑架构

逻辑架构方面,我就以其中的一个对账系统为例:

说明:这里的实时应该是说我们有一些商家 一笔订单过来,按商家维度生成结算单,然后提交给财务审核, 高级商家是 保存结算初始订单数据信息,然后定时任务跑的时候再生成结算单。

例如:举个例子,我们有 1.普通商家(实时) 2.高级商家(月结),通俗点讲:我现在要求 1.普通商家(实时) 2.高级商家(月结),这个就是基础的架构设计.

6.3. 应用架构

系统的应用架构可以划分为三个层次,分别是组件层、服务层与应用层,其中组件层是系统业务对象的组件化抽象和最低粒度的组装,服务是对相关业务组件的集成与更高粒度的封装,服务面向具体的业务应用;提供标准的调用接口供具体的业务应用直接调用;应用层包括了本系统业务与管理层面需要实现的具体应用。

6.4. 数据架构

系统逻辑数据架构是对系统业务对象的逻辑分类,本系统涉及的逻辑数据对象包括业务数据、字典数据、管理类数据、定义类数据。

6.5. 数据层次划分

系统的数据层次可以划分为数据源层、缓冲层、基础层、应用层。

  • 数据源层是系统的原始数据,包括字典数据、管理类数据和定义类数据;

  • 缓冲层做为对数据库数据处理的有效补充,减少对数据库的直接操作请求,负责对字典数据、部分管理类数据和部分定义类数据进行内存的缓存存储,依据各个子系统的性能和业务的综合考虑来确定是否需要将数据库数据缓存到缓存层中;缓存层的数据在对应来源数据变更时实时更新。

  • 基础数据层保留所有提交的历史业务数据,包括表单数据和流程流转的实例数据。

应用层为面向各功能模块提供统一的接口视图。

6.6. 技术架构

6.6.1. 分层设计

本系统软件架构设计采用松耦合、分层设计的原则, 主要分为前端门户层、服务层,其中服务层又业务处理层、数据访问层。

  • 门户层指用户界面,是用户访问本系统的入口,主要采用JSP+CSS+JavaScript框架来实现;

  • 服务层是本系统提供对外业务服务的功能。该层将服务接口和实现分离,实现松耦合。同时,服务层主要采用Rest Full协议来实现,

业务处理层是指公共业务处理组件,主要用来处理服务层所共有的业务处理规则、流程等内容。业务处理层采用普通的Java对象来实现;

数据访问层是指提供对数据库数据访问的接口,被业务处理层或服务层直接调用。数据访问层主要通过系统技术平台的Spring JPA 和MyBatis来实现;

  • 公共组件指按照规范统一实现的公共组件,包括用户管理、组织机构管理、权限管理、日志管理等模块;

  • 事务处理指事务的处理机制,事务开始于服务层,采用数据库的事务管理器对服务层的相关服务进行事务控制处理。

6.6.2. 逻辑技术架构

系统逻辑技术架构包括四个层次:分别是用户层、访问控制层、应用服务层和数据存储层。访问控制层包括了网络的物理隔离设备与Web服务器,是系统访问和请求转发的第

一层。应用服务层是业务处理中心,负责对用户提交的操作请求进行业务处理。数据存储层包括共享存储设备、数据库和相应的数据备份设备。

  • 利用成熟的开源框架,重新构建项目,对业务进行垂直、精细拆分,通过注册中心、API Gateway,对外提供可供服务,最终到达基本功能微服务构建

  • 利用Shiro安全框架,构建授权、会话管理

  • 前端强调页面表现,如:响应速度流畅,客户端兼容性强,用户体验等

  • 后端强调高并发,高可用,高性能,安全,存储,业务等等

  • 完成消息中间件的构建

技术架构:从技术层面描述,主要是分层模型,例如持久层、数据层、逻辑层、应用层、表现层等,然后每层使用什么技术框架,例如Spring、hibernate、ioc、MVC、成熟的类库、中间件、WebService等,分别说明,要求这些技术能够将整个系统的主要实现概括。

应用架构:主要考虑部署,例如你不同的应用如何分别部署,如何支持灵活扩展、大并发量、安全性等,需要画出物理网络部署图。按照应用进行划分的话,还需要考虑是否支持分布式SOA。

技术架构关注的是:技术的分层及描述(不单纯只写mvc),关键技术的方案(如事务处理、缓存与集群等)

应用架构关注的是:应用功能的划分、应用功能集成和应用功能部署。

实际运营截图:

联系QQ:137071249

QQ群:793305035

Java生鲜电商平台-生鲜系统中微服务架构设计与分析实战的更多相关文章

  1. Java生鲜电商平台-统一格式返回的API架构设计与实战

    Java生鲜电商平台-统一格式返回的API架构设计与实战 说明:随着互联网各岗位精细化分工的普及,出现了很多的系统架构设计,比如常见的前后端分离架构,后端提供接口给前端,前端根据接口的数据进行渲染,大 ...

  2. Java生鲜电商平台-生鲜系统中商品订单系统售后系统设计

    Java生鲜电商平台-生鲜系统中商品订单系统售后系统设计(服务订单履约系统) 说明: 电商之下,我们几乎能从电商平台上买到任何我们日常需要的商品,但是对于很多商品来说,用户购买发货后,只是整个交易流程 ...

  3. Java开源生鲜电商平台-财务系统模块的设计与架构(源码可下载)

    Java开源生鲜电商平台-财务系统模块的设计与架构(源码可下载) 前言:任何一个平台也好,系统也好,挣钱养活团队这个是无可厚非的,那么对于一个生鲜B2B平台盈利模式( 查看:http://www.cn ...

  4. Java生鲜电商平台-生鲜售后系统的退款架构设计与代码分享

    Java生鲜电商平台-生鲜售后系统的退款架构设计与代码分享 说明:任何一个电商行业都涉及到退货与退款的问题,但是生鲜电商行业还设有一个显著的特点,那就是换货.在人性面前,各种各样的退货,退款,换货的售 ...

  5. Java生鲜电商平台-生鲜电商中商品类目、属性、品牌、单位架构设计与实战

    Java生鲜电商平台-生鲜电商中商品类目.属性.品牌.单位架构设计与实战 说明:Java生鲜电商平台-生鲜电商中商品类目.属性.品牌.单位架构设计与实战经验分享 凡是涉及到购物,必然是建立在商品的基础 ...

  6. Java生鲜电商平台-商城系统库存问题分析以及产品设计对逻辑/物理删除思考

    Java生鲜电商平台-商城系统库存问题分析以及产品设计对逻辑/物理删除思考 说明:在生鲜电商的库存设计,是后台的重点,也是难点,关乎商品是否存在超卖.商品的库存增加方式倒不难,直接在后台添加即可,而扣 ...

  7. Java生鲜电商平台-秒杀系统微服务架构设计与源码解析实战

    Java生鲜电商平台-秒杀系统微服务架构设计与源码解析实战 Java生鲜电商平台-  什么是秒杀 通俗一点讲就是网络商家为促销等目的组织的网上限时抢购活动 比如说京东秒杀,就是一种定时定量秒杀,在规定 ...

  8. Java生鲜电商平台-优惠券系统的架构设计与源码解析

    Java生鲜电商平台-优惠券系统的架构设计与源码解析 电商后台:实例解读促销系统 电商后台系统包括商品管理系统.采购系统.仓储系统.订单系统.促销系统.维权系统.财务系统.会员系统.权限系统等,各系统 ...

  9. Java生鲜电商平台-促销系统的架构设计与源码解析

    Java生鲜电商平台-促销系统的架构设计与源码解析 说明:本文重点讲解现在流行的促销方案以及源码解析,让大家对促销,纳新有一个深入的了解与学习过程. 促销系统是电商系统另外一个比较大,也是比较复杂的系 ...

随机推荐

  1. componentWillMount VS componentDidMount

    前言 这与React组件的生命周期有关,组件挂载时有关的生命周期有以下几个: constructor(){} componentWillMount(){} render(){} componentDi ...

  2. ARTS-S 最难的事情

    小朋友不舒服,看了医生也开了药吃了.但还是一直闹,不睡觉,弄的我和我爱人精疲力尽. 现在看来,技术上的难题真不算什么.照顾小朋友才是这个世界上最难的事情.

  3. FPGA_VIP_V101 视频开发板 深入调试小结

    FPGA_VIP_V101 推出已经有半年有余,各项功能例程已移植完毕,主要参考crazybingo例程进行移植和结合开发板设计了几个实例例程 主要包含: 硬件配置: FPGA:EP4CE6E22C8 ...

  4. Python3 函数进阶1

    目录 闭包函数 什么是闭包函数 闭包函数的作用 装饰器 什么是装饰器 无参装饰器 有参装饰器 闭包函数 什么是闭包函数 闭包函数本质上就是函数嵌套和高阶函数 闭包函数的满足条件: 必须嵌套函数 内嵌函 ...

  5. 【Webpack】373- 一看就懂之 webpack 高级配置与优化

    本文原载于 SegmentFault 社区专栏 前海拾贝 作者:JS_Even_JS 一.打包多页面应用 所谓打包多页面,就是同时打包出多个 html 页面,打包多页面也是使用 html-webpac ...

  6. 重新精读《Java 编程思想》系列之组合与继承

    Java 复用代码的两种方式组合与继承. 组合 组合只需将对象引用置于新类中即可. 比如我们有一个B类,它具有一个say方法,我们在A类中使用B类的方法,就是组合. public class B { ...

  7. 修改element-ui默认属性

    修改element ui默认的样式 如果要组件内全局修改 首先在浏览器里F12找到element默认的UI类名 找到要修改的默认类名以后 在文件中修改代码,重写属性 <style> .el ...

  8. 9月腾讯、百度、阿里高频的29道SSM框架面试题解析

    一.Spring面试题 1.Spring 在ssm中起什么作用? Spring:轻量级框架 作用:Bean工厂,用来管理Bean的生命周期和框架集成. 两大核心:1.IOC/DI(控制反转/依赖注入) ...

  9. Spring AOP应用场景你还不知道?这篇一定要看!

    回顾一下Spring AOP的知识 为什么会有面向切面编程(AOP)? 我们知道Java是一个面向对象(OOP)的语言,但它有一些弊端,比如当我们需要为多个不具有继承关系的对象引入一个公共行为,例如日 ...

  10. 11条MySQL规范,你知道的有几个?

    一.数据库命令规范 · 所有数据库对象名称必须使用小写字母并用下划线分割 · 所有数据库对象名称禁止使用mysql保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) · 数据库对象的命名 ...