电商平台商品详情API接口|商品详情页(一)

电商网站上:

小电商:页面静态化的方案;

比如 电商平台商品详情API接口商品的信息放到表中 + 页面模板,渲染成html页面,每次用户请求的时候,直接返回html页面,不涉及到业务逻辑。

缺点一旦模板发生了变更,所有的Html页面需要重新渲染,小网站还ok,大网站不可。

大型电商网站:商品详情页

        多级缓存+双层nginx提高命中率+热点数据自动降级+缓存维度化

图片

==>多级(三级)缓存每一级的意义

① nginx分发层,根据productId的hash取模,将流量分发到应用层nginx,nginx本地缓存扛热点数据,如果缓存仅仅放在redis,则多N次的网络开销。

② redis扛大量的离散数据。(单机的redis的QPS大概到几W)

③ ehcache扛redis集群大规模灾难,避免Mysql裸奔。

==>缓存多维度

将实时性要求比较高的信息(库存|销量等) 和 实时性要求不高的信息 分开存储。

其中实时性不高的信息 (商品信息,分类信息,店铺信息)也 分key-value缓存。

实时性要求比较高的信息,采用数据库+mysql同步双写。实时性要求不高的信息,采用异步写缓存。

这样做的好处:

① redis的性能和吞吐量:数据越大,吞吐量急剧下降

② 降低更新缓存的频率

==>双层nginx提高缓存命中率

假设仅仅有第二层缓存,一个请求过来随机打到不同的nginx上,同一个productId而言,第一次打到一台nginx机器上,本地加载了缓存,第二次过来请求打到了不同的nginx机器上,查看nginx本地缓存无。

双层nginx缓存,请求统统到分发层nginx,根据分发策略(比如productId的hash取模),这样,对于同一个productId请求会打到同一个应用层nginx。

应用层nginx相当于网管层gateway。

==>热点数据自动降级

① nginx+lua将访问流量上报到kafaka

② storm从kafka中消费数据,实时统计出每个商品的访问次数,访问次数基于LRU内存数据结构的存储方案

热点:某个商品的访问量,瞬间超出了普通商品访问量的10倍,或者100倍,1000倍。

③ 热点一旦统计出来,storm会直接发送http请求到nginx上,nginx如果发现某个商品是热点数据,就立即做流量分发策略的降级。

在所有的应用层nginx本次缓存上加载热点数据,同时对该商品的分发策略,从hash取模修改成随机,分发到不同的nginx应用层,来分发流量。



java和大数据的关系:

storm和spark的区别

对于strom来说

1.纯实时(毫秒级),不能忍受1秒以上延迟

2.支持事务

3.高峰低峰时间段,动态调整实时计算程序

4.纯实时,不需要在中间执行SQL交互式查询

对于spark streaming来说

1.准实时(秒级),不要求强大可靠的事务机制,不要求动态调整并行度

2.如果一个项目除了实时计算之外,还包含了离线批处理,交互式查询等业务功能,而且实时计算中,可能还牵扯到 高延迟批处理,交互式查询等功能,那么首选Spark生态,用Spark Core开发离线批处理,用Spark Sql开发交互式查询,用Spark Streaming开发实时计算,三者无缝整合。

总之,Spark Streaming有一点是Storm绝对比不上的,他位于Sparking生态技术栈中,因此Spark Streaming和Spark Core,Spark SQL无缝整合,也就是意味着,可以对实时处理出来的中间数据,立即在程序中无缝进行延迟批处理,交互式查询等操作。

Storm在实时延迟上,比Spark Streaming厉害。

hive和hbase的区别

hive中的表是纯逻辑表,只是定义了表定义,本身不存储数据,完全依赖HDFS和MapReduce。将结构化的数据文件映射为一张数据表,并提供了HQL查询功能,并将HQL最终转换为MapReduce任务进行运行。不适用于实时查询,因为耗时比较严重。

HBase是物理表。海量数据的在线储存和简单查询,替代MySQL分库分表,提供更好的伸缩性。非常适合用来进行大数据的实时查询。


Storm的集群架构和核心概念

Storm的集群架构

nimbus -> supervior -> worker -> executor -> task

物理架构如下

图片

Storm的核心概念

Topology; spout; Bolt; Tuple; Stream

Spout:数据源的一个代码组件,实现了一个Spout接口,写一个java类,在这个spout代码中,我们可以自己尝试去数据源获取数据,比如从kafka中消费数据。

bolt: 一个业务处理的代码组件,spout会将数据传送给bolt,实现了一个bolt接口。

topology: 流程图  一堆spout+bolt,就会组成一个topology,就是一个拓扑,实时计算作业,spout+bolt,一个拓扑涵盖了数据获取/生成+数据处理的所有代码逻辑,topology。

tuple:就是一条数据,每条数据都会被封装成tuple中,在多个spout和bolt之间传递;

stream: 就是一个流,源源不断过来的tuple,组成了一个流。

构建集群如下:

构建一主两从的结构,分配三台机器

114:nimbus节点    115:supervisor节点  116:supervisor节点

配置文件中可以指定supervisor的端口(即工作进程worker的端口号)

nimbus的114机器下面可以看到 nimbus.log access.log metric.log的日志

supervisor的115机器下面可以看到 supervisor.log access.log metric.log的日志

在主节点开启管控台 storm ui &;  jps查看进程

如何执行word count的代码示例:

将topology代码打成jar包,提交到nimubs节点,

执行 storm jar [jar名称] [main方法的类]

一旦开始执行以后,在supervisor节点jps命令可以看到多了个worker进程。

并行策略设定

worker=2

spout=2

bout1=2, numberTask=4

bout2=4

在物理节点supervisor上的分配如下:

图片


redis持久化: RDB,  AOF

RDB: 定时生成全量快照,作为冷备。redis主进程,去fork一个子进程,去执行RDB操作。

生成多个文件,每个文件都代表了某一个时刻的完整的数据快照。

AOF: 存放的是指令日志,做数据恢复的时候,其实是回放和执行所有的指令日志。而RDB是将数据直接加载到内存中。AOF速度比RDB略慢。但是可以更好的保证数据不丢失。

redis读写分离

写请求:1秒几千

大量的都是读请求

假如单个的redis能够承受的读是 5W QPS,如果流量上升,多搞几个slave的redis,分散读请求。水平扩容。

redis replication 基本原理

当slave刚启动的时候,会发一条ping数据给master,master会发 full resynchronization(全量复制)。

master在后台搞一个线程,把全量的快照文件发给slave。

正常情况来一条数据复制到一条数据到slave,如果异常什么的,就生成rdb快照。

哨兵

集群监控: 负责监控redis master和slave进程是否正常工作

消息中心: 如果某个redis实例有故障,那么哨兵负责发送消息作为报警通知管理员。

故障转移: 如果Master node 挂掉,会自动转移到slave node上

哨兵本身也是分布式的,至少三个实例保证自己的健壮性

判断一个master node是否宕机了,需要大部分的哨兵都同意才行,涉及到选举问题。

脑裂问题

master主节点,出现了异常性,哨兵检测不到,故障转移,让原来的slave节点成为了master节点。于是就出现了两个主节点,大脑一分为二。

当redis会在数据达到一定的程度之后,清理掉一些数据LRU。

redis默认情况下就是使用LRU策略,最近最少使用的数据干掉。

可以在redis.conf中 设置 maxmemory

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/234092.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java基础回顾——反射

文章目录 介绍Class类与instanceof的区别 访问字段调用方法调用构造方法获取继承关系动态代理 介绍 反射reflection,是指在程序运行期间可以拿到一个对象的所有信息。 正常情况下获取一个对象信息,需要import该类,反射可以在对某个实例一无所…

hive命令启动出现classnotfound

环境:ambari集群三个节点node104、node105和node106,其中node105上有hiveserver2,并且三个节点均有HIVE CLIENT 注意:“./”指hive安装目录 其中装有hiveserver2的node105节点,由于某种需要向lib目录下上传了某些jar包…

css实用入门

css也精炼了解以下内容即可: 一个网页所呈现出来的画面,你可以理解他们就是由一个又一个的盒子拼凑组成而来。 一个盒子,它有外边距,还有内边距。 黑色的部分是盒子本身的样子,外侧蓝色的部分是外边距,内…

2024年PMP报考条件是什么?

报考PMP(项目管理专业)的条件并不是很困难,只需要满足以下两个条件之一: 1、年龄达到23周岁或本科毕业已满3年或高中毕业已满5年,满足其中任一条件即可; 2、获得由PMI(项目管理学会)…

ADS学习笔记(一)——更新中

在ADS中,信号上升时间为信号从0~100%所用的时间,而实际上定义的上升边均为10%~90%,所以可以认为上升边=0.8*ADS设置上升时间。 一、终端开路及短路的反射信号 1.仿真条…

测试工具Jmeter:设置中文界面

首先我们打开Jmeter所在的文件,进入bin目录,打开Jmeter.properties: 打开后找到languageen: 改为zh_CN: 保存关闭,然后再打开Jmeter: 英文并不会显得高级,能做到高效的性能测试才是高级的。

Wordpress插件WP-Statistics无法识别来访IP国家和城市处理方法

Wordpress插件WP-Statistics,可以识别网站访问者的IP物理地址,统计出城市、国家,但最近发现都显示unknown/未知: 更新GeoIP数据库到最新还是不行: 偶然找到了之前能用的数据库,恢复回去,竟然大…

dell服务器 R740xd安装windows server 2019过程记录

公司有两台dell服务器型号是R740xd,增加了存储,更新系统到windows server 2019标准版。 查找了网上的系统安装方式,都没有实践成功,做一下工作记录,给大家做参考。 网络搜索到的两种方式,进行安装 &#x…

如何通过ssh管道传输文件到ubuntu

如何在window系统中,通过ssh将指定的文件传输到ubuntu中呢? 比较常用的有以下种方式: 共享文件夹借助工具, FileZillaMobaxtermWinSCPXshell XFTP samba互传PuTTY pscp 今天主要分享一个使用python脚本搭建的一个,…

Oracle定时任务的创建与禁用/删除

在开始操作之前,先从三W开始,即我常说的what 是什么;why 为什么使用;how 如何使用。 一、Oracle定时器是什么 Oracle定时器是一种用于在特定时间执行任务或存储过程的工具,可以根据需求设置不同的时间段和频率来执行…

HarmonyOS后台代理提醒

后台代理提醒 简介 随着生活节奏的加快,我们有时会忘记一些重要的事情或日子,所以提醒功能必不可少。应用可能需要在指定的时刻,向用户发送一些业务提醒通知。例如购物类应用,希望在指定时间点提醒用户有优惠活动。为满足此类业…

本地运行vue脚手架 从下载node开始到创建vue

vue2node 1.安装node vue2版本我node一般使用的是14版本左右 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/f886442c20114e62aef8113425e34ad2.pngnode官网 假如我node版本过低 你就找到控制面板 找到node卸载掉 我一般下载两个版本 安装vue cli vuecl…

BurpSuite抓不到本地包

目录 前言 一、方法一 二、方法二 三、方法三 四、方法四 总结 🌈嗨!我是Filotimo__🌈。很高兴与大家相识,希望我的博客能对你有所帮助。 💡本文由Filotimo__✍️原创,首发于CSDN📚。 &#x1f…

基础数据结构(1):链表

在学习算法时,发现用什么数据结构来存储数据是很重要的,所以学习数据结构也是必须的,先从基础数据结构:数组,字符串,链表,栈,队列,树,矩阵,邻接表…

利用虚继承解决菱形继承(钻石继承)的问题 学习笔记

菱形继承概念: 两个派生类继承同一个基类 又有某个类同时继承两个派生类 这种继承又被称为菱形继承,或者钻石继承 定义一个基类Animal,两个派生类Sheep、Camal,SheepCame继承于两个派生类 class Animal { public:int m_Age; }…

Bert-vits2-v2.2新版本本地训练推理整合包(原神八重神子英文模型miko)

近日,Bert-vits2-v2.2如约更新,该新版本v2.2主要把Emotion 模型换用CLAP多模态模型,推理支持输入text prompt提示词和audio prompt提示语音来进行引导风格化合成,让推理音色更具情感特色,并且推出了新的预处理webuI&am…

SpringMVC---详细介绍+使用

文章目录 什么是SpringMVC?使用SpringMVCSpringMVC创建和连接创建连接RequestMapping的基础使用 获取参数返回数据返回静态页面返回非页面的普通数据(text/html)返回JSON对象请求转发或者请求重定向 什么是SpringMVC? SpringMVC它…

【Spring】14 ApplicationEventPublisherAware 接口

文章目录 1. 简介2. 作用3. 使用3.1 创建并实现接口3.2 配置 Bean 信息3.3 创建启动类3.4 启动3.5 工作流程图 4. 应用场景总结 Spring 框架为开发者提供了丰富的扩展点,其中之一是 Bean 生命周期中的回调接口。本文将专注介绍一个与事件发布相关的接口 Applicatio…

【SQLite】SQLite数据库简单使用与Navicat安装-加密

Sqlite为免安装数据库,安装步骤总结: 官网下载Sqlit数据库,官网下载地址:https://www.sqlite.org/download.html 下载: sqlite-dll-win64-x64-3390400.zip或者32位sqlite-dll-win32 sqlite-tools-win-x64-3440200.zip或者32位sqlite-tools-wi…

Opencv入门五 (显示图片灰度值)

源码如下&#xff1a; #include <opencv2/opencv.hpp> int main(int argc, char** argv) { cv::Mat img_rgb, img_gry, img_cny; cv::namedWindow("Example Gray",cv::WINDOW_AUTOSIZE); cv::namedWindow("Example Canny", cv::WINDOW_…