微服务架构开发电商系统需要用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和微服务架构的区别? 微服务架构强调的第一个重点就是业务系统需要彻底的组 ...
随机推荐
- 编写自己的代码库(css3常用动画的实现)
编写自己的代码库(css3常用动画的实现) 1.前言 在月初的时候,发了CSS3热身实战--过渡与动画(实现炫酷下拉,手风琴,无缝滚动).js的代码库也发过两次,两篇文章.之前也写了css3的热身实战 ...
- IntelliJ IDEA热部署配置总结
Intellij IDEA 4种配置热部署的方法: 热部署可以使的修改代码后,无须重启服务器,就可以加载更改的代码. 第1种:修改服务器配置,使得IDEA窗口失去焦点时,更新类和资源 菜单Run -& ...
- 【Django笔记1】-视图(views)与模板(templates)
视图(views)与模板(templates) 1,视图(views) 将接收到的数据赋值给模板(渲染),再传递给浏览器.HTML代码可以直接放在views.py(文件名可任意更换),也可以放在t ...
- kubernetes删除pod一直处于terminating状态的解决方法
kubernetes删除pod一直处理 Terminating状态 # kubectl get po -n mon NAME READY STATUS RESTARTS AGE alertmanage ...
- 【2020.02.01NOIP普及模拟4】怪兽
[2020.02.01NOIP普及模拟4]怪兽 文章目录 [2020.02.01NOIP普及模拟4]怪兽 题目描述 输入 输出 输入输出样例 数据范围限制 提示 解析 code 题目描述 PYWBKT ...
- 北航OO第二单元作业总结(2.1~2.3)
在经过第一单元初步认识面向对象编程思想后,本蒟蒻开始了第二单元--多线程部分的学习.本单元的作业是构造符合条件的"目的选层电梯"模型,自行设计调度算法,进行合理调度,完成所有乘客的 ...
- UnitOneSummary
目录 一.程序结构分析 第一次作业 第二次作业 第三次作业 二.Test & Bugs 三.设计模式 四.总结与反思 一.程序结构分析 第一次作业 思路: 1.输入预处理: 去除空格和\t 替 ...
- Java后端进阶-网络编程(Netty零拷贝机制)
package com.study.hc.net.netty.demo; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled ...
- 【spring源码系列】之【xml解析】
1. 读源码的方法 java程序员都知道读源码的重要性,尤其是spring的源码,代码设计不仅优雅,而且功能越来越强大,几乎可以与很多开源框架整合,让应用更易于专注业务领域开发.但是能把spring的 ...
- 关于 Spring 中 getBean 的全流程源码解析
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 你提出问题,就要给出解决方案! 最近有粉丝小伙伴反馈,与自己的上级沟通总是遇到障碍, ...