微服务架构开发电商系统需要用Redis、ES和MQ吗?
如果不用什么很高大上的东西,就是有多个微服务就行这种技术架构会很难吗?
我看了一些视频,他们都用到了es、mq、redis的东西,我想不用这些东西,就简单的有多个服务,这样可行吗?
01 使用微服务你考虑好了吗?
首先商场的开发要根据你的实际需要来定夺架构,例如,只是在微信小程序中商品滚动图片展示、产品分类、微信支付、订单、地址、简要配送信息,并且有一套后台管理系统,包括:用户、角色、商品、定价、订单等,基本上一个完整的商场系统就可以运行了。那么是不是要一定上微服务呢,还是单体服务就够用了呢?
需要上微服务架构最主要的目的就是为了解决服务功能频繁更新发布,导致总是影响业务大面积抖动,从而降低了新功能的敏捷迭代。因为对于单体服务,这个问题是无法避免的,一定会影响可靠性。
1. 分布式CAP:但是我接触过的微服务项目,往往微服务发布机制都不成熟,实际上每次发布微服务和发布单体是一个效果,所有服务都得停下来重新部署。为什么呢?因为在线事务系统一定是优先考虑强一致性,无论什么开发团队遇到微服务,嘴上说得再漂亮,到了部署的时候,身体都会很诚实。微服务在分布式环境下对CAP理论的付诸实施,你是否已经了然于心了呢?
只要是联机事务,在微服务环境下依然要保证分布式强一致性。如下图所示:

2. 分布式事务:微服务另外遇到的一个问题就是将单体应用对数据库的SQL操作拆分成了PRC远程协作,那么这个时候就可能涉及分布式事务。
如下图所示:发起端向支付微服务发起一次支付提交,完成支付后,支付微服务需要用RPC调用来通知订单服务更新订单状态,那么这时候系统就已经掉入到了分布式事务的漩涡。你是否为分布式事务做好准备了?

02 技术是随着业务规模的发展而逐步引入
其次,这些都对你来说都没有问题了,为什么还会有Redis,elasticsearch(es),MQ呢? 那我们就一一分析一遍这些技术在商场中的作用,你自己去评估是否引入。
1. Redis:主要作用是查询缓存,防止数据库被击穿,主要情境是商场出现了高并发的访问状态,不过也恭喜你,能用Redis证明你的业务很成功。
如下图所示:一个比较标准的MySQL读写分离,Redis作为查询缓冲区的联机事务处理的分布式架构耦。这种情况也是出现在MySQL读写分离都无法解决高并发带来的某个峰值时刻,对数据库的击穿,就需要通过增加一个二级缓存来解决。

请一定要注意,贯彻K.I.S.S原则,技术上能不加就不加的原则。因为总是要面对分布式的一致性问题,在加入Redis缓存这个问题,实际上这是目前工程师们非常流行的一种做法,但是在保证MySQL主从复制的一致性方面本身就存在不可控的复杂度,更何况,又引入缓存系统(Redis)和数据库(MySQL)之间的数据同步的一致性问题,会使得整体架构的复杂性更高,会导致上线后遇到很多不可预知的麻烦,所以在没有做好充分准备工作之前,增加架构复杂度的事情要慎之又慎。
2. Elasticsearch:对于大量的商品内容检索,高级一点就不仅仅是分类关键字查询了,更需要是专业搜索提供的商品内容的全文内容检索,方便用户通过组合关键字,更快查找到自己想要的商品,除非你对自己的编程功底认为不错,可以直接用luence,否则es是个很不错的选择。
如下图所示:为架构纳入Elasticsearch专业搜索引擎,需要引入的技术操作流程,MySQL binlog->Canal->Kafka->Elasticsearch,这是一个binlog实时推送架构,效果最好,也最复杂。这就是表面说起来简单,但真要做好,内部都要沁透工程师的辛勤与汗水。

3. MQ:当商场的微服务之间,以及商场与第三方服务之间形成犬牙交错的状况,一般微服务架构会形成事件驱动机制也就是EDA,例如订单发起后通过消息推送给下游,下游可能就是订单的配送系统接受处理。那么用到mq了,系统已经不再是一个小范围的商业服务了,应该算是平台级的!如下图所示:

当然mq的引入也不一定是发展到了规模化,也有可能一开始就面临O2O的业务需要,早期就需要将线上业务事件推送给线下业务系统,这就需要mq了,建议考虑支持分布式事务的mq,例如:rocketmq。如下图所示:传统企业搞互联网+,一开始就要考虑通过消息中心来解决线上线下的数据对接、信息安全、异步协作等问题。

03 总结
最后做个总结,对于上面聊的这些内容,我相信你心里至少应该有个底,可以明确一点——系统架构的技术体系都是不断迭代加厚,都是根据业务的需要不断地加持,逐步产生良好的业务支撑作用。
初期往往过度设计得越多,系统死掉的几率越大,因此微服务是不是一开始就要纳入设计? 系统性能优化,高级查询,复杂系统优化等等这些操作,是否需要在前期设计中完成?,是否已经有了与之匹配的团队组织形式? 这些都需要逐一斟酌,虽需长远规划但仍要从简入深。
可以阅读另一篇关于微服务和分布式关系的详细文章:
前往读字节创作中心——了解”读字节“更多创作内容

微服务架构开发电商系统需要用Redis、ES和MQ吗?的更多相关文章
- .Net微服务架构之运行日志分析系统
一.引言 .Net技术栈目前还没有像spring cloud相对完整一整微服务架构栈,随着业务发展系统架构演进,自行构建.Net技术体系的微服务架构,配套相关核心组件.因平台基于微服务架构方式研发,每 ...
- 庐山真面目之十三微服务架构中如何在Docker上使用Redis缓存
一.介绍 1.开始说明 在微服务器架构中,有一个组件是不能少的,那就是缓存组件.其实来说,缓存组件,这个叫法不是完全正确,因为除了缓存功能,它还能完成其他很多功能.我就不隐瞒了,今天我们要探讨 ...
- Java生鲜电商平台-SpringCloud微服务架构中核心要点和实现原理
Java生鲜电商平台-SpringCloud微服务架构中核心要点和实现原理 说明:Java生鲜电商平台中,我们将进一步理解微服务架构的核心要点和实现原理,为读者的实践提供微服务的设计模式,以期让微服务 ...
- Net分布式系统之五:微服务架构
因工作较忙,抽时间将框架遇到的问题和框架升级设计进行记录. 一.背景&问题 之前框架是一个基于SOA思想设计的分布式框架.各应用通过服务方式提供使用,服务之间通信是RPC方式调用,具体实现基于 ...
- SOA和微服务架构
微服务架构强调的第一个重点就是业务系统需要彻底的组件化和服务化,原有的单个业务系统会拆分为多个可以独立开发,设计,运行和运维的小应用.这些小应用之间通过服务完成交互和集成.每个小应用从前端web ui ...
- MicroService 微服务架构模式简述
开源地址: https://github.com/TheCodeCleaner/MicroService4Net 本文内容 微服务 微服务风格的特性 组件化(Componentization )与服务 ...
- 基于 Docker 的微服务架构实践
本文来自作者 未闻 在 GitChat 分享的{基于 Docker 的微服务架构实践} 前言 基于 Docker 的容器技术是在2015年的时候开始接触的,两年多的时间,作为一名 Docker 的 D ...
- SOA和微服务架构的区别
微服务架构强调的第一个重点就是业务系统需要彻底的组件化和服务化,原有的单个业务系统会拆分为多个可以独立开发,设计,运行和运维的小应用.这些小应用之间通过服务完成交互和集成.每个小应用从前端web ui ...
- SOA和微服务架构的区别?
转自知乎:https://www.zhihu.com/question/37808426/answer/93335393 SOA和微服务架构的区别? 微服务架构强调的第一个重点就是业务系统需要彻底的组 ...
随机推荐
- pip软件包管理工具介绍及基本使用
pip软件包管理工具介绍及基本使用 一分耕耘,一分收获,要收获得好,必须耕耘得好.-- 徐特立 一.pip软件包管理工具介绍: 定义:pip是Python包管理工具 作用:对Python包的查找.下载 ...
- Android Studio 之 BaseAdapter 学习笔记
•前行必备--ListView的显示与缓存机制 我们知道 ListView.GridView 等控件可以展示大量的数据信息. 假如下图中的 ListView 可以展示 100 条信息,但是屏幕的尺寸是 ...
- odoo 安装配置
Linux ubuntu 环境 1.建个python虚环境 也可用其他替代 virtualenv env 2.找个稳定版本下载 wget https://nightly.odoo.com/8.0/ni ...
- ls(list)命令详解及生产使用示例
文件有文件名与数据,在linux上被分为两个部分:用户数据(user data)与元数据(metadata) 用户数据,即文件数据块(data block),数据块是记录文件真实内容的地方,我们将其称 ...
- C++并发与多线程学习笔记--参数传递详解
传递临时对象 陷阱 总结 临时对象作为线程参数 线程id的概念 临时对象构造时的抓捕 成员函数指针做线程函数 传递临时对象作为线程参数 创建的工作线程不止一个,线程根据编号来确定工作内容.每个线程都需 ...
- Java利用线程工厂监控线程池
目录 ThreadFactory 监控线程池 扩展线程池 扩展线程池示例 优化线程池大小 线程池死锁 线程池异常信息捕获 ThreadFactory 线程池中的线程从哪里来呢?就是ThreadFoct ...
- IDEA 主题下载
IDEA中主题可以更换,大家可以直接到 http://www.riaway.com/ 网站或 http://color-themes.com/?view=index 网站,直接下载自己喜欢的主题. ...
- MySQL常用配置参数说明
1.sync_binlog sync_binlog=0,当事务提交之后,MySQL不做fsync之类的磁盘同步指令刷新binlog_cache中的信息到磁盘,而让Filesystem自行决定什么时候来 ...
- Ambassador-06-金丝雀部署
金丝雀部署:Canary Releases ambassador使用加权循环,在多个服务之间路由流量.收集所有服务的完整指标,以便比较canary和production的相对性能.这个weight的值 ...
- 网络编程Netty入门:Netty简介及其特性
目录 Netty的简介 Netty的特性 Netty的整体结构 Netty的核心组件 Netty的线程模型 结束语 Netty的简介 Netty是一个java开源框架,是基于NIO的高性能.高可扩展性 ...