第一部分:架构以及工具大略
1.使用REST API的微服务设计风格
(1)接口使用Restful规范,使用get,post,put,delete取代单单的get,post.完成对曾删查改的覆盖.
(2)在具体的查询参数上比如查询id为1的某型号商品使用find/{id}的形式,依次类推全都使用PathVariable(路径参数)的RESTFUL风格
2.Web UI微服务设计(前端)
(1)功能:实现对REST API接口的调用以及用户页面设计
(2)工具:可能是Vue,js等前端工具,我不熟悉
(3)后端作用:提供REST API接口以及之后提供反向代理
(4)分布式文件系统:具体页面设计参考使用的是Ueditor,具体配置接口可能会变动,但是整体不会有大的改变(这个的本地列表展示其实放在服务器上就是在线列表展示)
(5)阿里云OSS:在线文件管理,依旧是为Ueditor提供存储支持,看情况使用本地还是阿里(这个按照道理也是可以实现在线列表展示的)
(6)前端异步设计:不清楚
3.移动商城业务模型
移动商城业务功能包括:商品展示,分类查询,购物车管理,结算下单,订单查看以及评价,物流查询以及追踪,个人信息管理等.具体业务模型如下:
(1)商品浏览提供商品搜索和查询功能,包括商品列表分页展示和单个商品详情查看等,并且在商品详情查看中提供购买下单的功能.
(2)分类查询,提供了分类列表查询商品的功能.
(3)订单查询可以实时显示订单状态,查询订单的物流速度,并且可以进行收获确认和对完成交易的订单进行评价等.
(4)购物车提供增删查改全面的管理功能,方便顾客执行加入商品,移除商品,更改一个商品的购买数量等操作.
(5)个人信息包括顾客的基本信息的管理,比如手机号,联系人,收获地址等信息的管理.同时顾客也可以注册成为某一商家的会员,注册会员之后,可享受商家提供的优惠,折扣和积分等会员特权
4.移动商城Rest API微服务
使用水平划分,按照电商平台的业务功能可以划分为:
(1)类目服务
(2)商品服务
(3)购物车服务
(4)订单服务
(5)支付服务
(6)物流服务
(7)评价服务
(8)顾客服务
(9)会员服务
(10)点击率服务
(11)商家服务
功能说明
(1)类目服务,使用二级分类体系,对外提供分类信息的录入,查询,修改和删除等各项操作的接口服务.在商城中只提供分类的信息查询.
(2)商品服务,提供商品介绍,商品编辑管理,商品上下架等接口服务.在商城应用中只需要提供商品查询,搜索,商品详情展示等功能接口
(3)购物车服务,主要为商城的顾客在选购商品时提供了方便,同时购物车服务也提供了对选购商品进行加减,移除等相关的接口服务
(4)订单服务,在商城中为顾客提供订单生成,订单查询和评价等功能接口.
(5)支付服务,在商城中提供结算支付的服务.
(6)物流服务,在商城中为顾客提供物流追踪以及收货确认等服务接口
(7)评价服务,在商城中为顾客交易完成后提供了订单评价的功能,同时也为顾客在选购商品时提供了商品评价以及查询功能,评价可为顾客购物提供参考
(8)顾客服务,顾客是平台的用户,顾客服务提供了用户的注册以其个人信息管理等功能,可以对外提供包括注册,登录,个人信息编辑,收货地址管理等.
(9)会员服务,会员是商家的用户,将可享受商家提供的特权服务,比如购物折扣,会员积分等,会员服务将为相关功能的实现提供接口服务.
(10)点击率服务,与商城无关
(11)商家服务,与商城无关
5.移动商城Web API微服务
根据移动商城的业务模型设计,可以推出下列Web UI微服务
(1)分类查询
(2)商品查询
(3)购物车管理
(4)订单管理
(5)物流追踪
(6)个人信息管理
(7)会员卡管理
说明:Web UI是对分散的REST API微服务接口和前端资源的整合
6.后端工具选型
(1)开发工具选择:IDEA2019
(2)开发环境配置:JDK1.8.0,maven3.6.3, git2.17
(3)持久层:MyBatis3
(4)数据源:Druid
(5)数据库:MySQL8
(6)单元测试:JUit4
(7)后端页面模板:thymeleaf
(8)仓库:gitlab, github, gitee都需要
(9)部署:docker19,Jenkins2.x, gitlab,前期还是单例部署
7.典型微服务结构
微服务的工程组建,我们将按照业务类型进行组织,即同一业务类型的微服务放在同一个项目工程中.同一个业务类型的微服务包括REST API微服务和WebUI微服务,其中Rest API微服务又包含业务领域的数据建模和接口服务等方面的设计,而Web UI微服务又包含了面向PC端的Web应用和面向移动端的Wap应用等方面设计.所以,使用这种构建方法,在根据不同的功能进行模块的划分,一个微服务项目大致分为如表所示的模块结构
其中各个模块之间的调用关系如图所示
在这个调用关系中,Object模块为业务领域设计和客户端设计提供查询对象定义(可能是Bean还不太懂),Domain模块提供业务设计领域的服务调用(持久层把),Client模块封装了对Rest API的调用,给Web和Wap应用提供高并发的接口调用方法.从各个模块的调用关系中,可以看出,使用我们组建的工程结构将是各个模块的最优化组成方式.
使用上面的工程结构就可以针对电商平台的各种业务类型来构建工程.例如,构建一个类目工程.结构如下:
8.移动商城电商微服务工程组建
图片包括商家后台和平台管理
9.数据库选型
在线商城基本使用MYSQL足够.之后我们还将进行高科用和高性能的数据库集群设计.例如使用MySQL数据库,通常使用主从设计,读写分离设计等方法,可以构建一个持续扩容的数据库集群架构.
10.微服务治理基础服务开发
微服务将运行与云端或者分布式环境中,在这个环境中,如何有效的管理微服务,并且维持微服务的正常通信,是通过微服务治理来实现的.有关微服务治理的内容包含如下几个方面:
(1)服务配置管理
(2)服务注册管理
(3)服务路由管理
(4)服务调度管理
(5)服务监控管理
(6)服务跟踪管理
这些需要一个基础服务工程”base-microserver”,并且在这个服务中设置相应的模块
11.日志分析平台(ELK),也是这两周既定的目标之一
日志分析平台ELK分别由Elasticsearch, LOgstash和Kibana三个服务组成.其中,Elasticsearch负责日志存储并提供搜索功能,Logstash负责日志手机,Kibana提供Web查询操作界面.这三个都是开源的,可以通过Docker安装.
第二部分:典型REST API微服务开发
12.领域业务开发
领域驱动设计(Domain-Driven Design,简称DDD),我们采用MySQL,直接使用反向代码生成器
这个包含的组件如下:
(1)“order-object”模块,也就是Bean
(2)Druid数据源组件
(3)MyBatis持久层组件
(4)MySQL驱动组件
(5)Redis数据库组件
其中对于实体表以及映射实体持久层的设计遵循一下几点:
(1)实体对象必须有唯一标识,推荐使用UUID(得改过来),因为不但可以保证这一字段长度的一致性,还可保证这一标识在整个数据库中的唯一性,这样非常有利于数据库的集群设计
(2)日期属性使用正确的格式,日期使用注解@DateTimeFormat进行格式化,可以保证日期的显示和参数传递中的正确性.注意还需要使用这个参数保证日期时区的修正
(3)注意属性的大小写在数据库中的表现形式,例如实体属性orderNo在数据库最好order_no,这也是MyBatis推荐的
(4)使用合理的关联设置(好友道理),关联设置是实体设计的关键,为了避免引起递归调用,最好使用单向关联设置,即在互相关联的两个对象中,只在一个主对象中进行关联设置就可以了.另外,为了避免递归调用,还可以在关联中使用注解@JsonIgnore进行
(5)使用中间表来保存关联关系.一般的,一对多和多对多的关联可以使用中间表来存储关联关系,而多对一的关联关系可以使用一个字段来存储关联对象的外健.
(6)在数据表的关联设置中,我们还可以使用级联设置,例如执行订单保存是,订单明细也会自动保存.
(7)对于分页查询的封装,使用反射invoke
(8)统一的数据库事务管理,@Transactional
(9)使用Redis实现缓存设计,使用缓存,不仅能够提高数据的读取性能,也是我们解决数据库集群设计中数据同步延迟问题的最好方法.数据库同步总是免不了会出现些许延迟的情况,这种情况在数据库管理系统本身并没有很好的解决方法,所以最好的方法时使用缓存来处理.这里涉及到Redis安装
13.RESTFul接口开发
典型例子如下:
14.使用消息处理事件
具体的流程原理就是,消息有生产者与消费者两个主体,消息生产者向消息通道发布消息,消息消费者从消息通道订阅消息,从而完成一个通信过程,这个是依靠RabbitMQ完成的.
—委婉带哦虚—