电商平台商品详情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,一经查实,立即删除!

相关文章

redis——分布式锁

一:实现一个分布式锁需要考虑哪些问题? 独占性:任何时刻有且只有一个线程持有这个锁重入性:同一节点的同一线程如果获得锁之后,他可以再次获取这个锁高可用:若redis集群环境下,不能因为某一个节…

Java基础回顾——反射

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

【力扣100】146.LRU缓存

添加链接描述 class DLinkedNode:def __init__(self, key0, value0):self.key keyself.value valueself.prev Noneself.next Noneclass LRUCache:def __init__(self, capacity: int):self.cache dict()# 使用伪头部和伪尾部节点 self.head DLinkedNode()self.tail D…

hive命令启动出现classnotfound

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

css实用入门

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

【Python】基于数据库连接实现简单注册功能

说明 针对数据库的操作,一共分三步: 1.建立数据库连接 2.执行SQL语句 3.关闭数据库连接 Python操作数据库(如MySQL),Python发送能够与数据库直接通信的数据包,并获取数据库服务器的相应结果。是一种典型的基于TCP/IP…

导入别的目录下的py文件

要导入别的目录下的py文件,可以使用相对路径或绝对路径来导入。 使用相对路径导入: from ..other_directory import other_module使用绝对路径导入: import sys sys.path.append(/path/to/other_directory) import other_module在以上示例…

2024年PMP报考条件是什么?

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

Android 清除临时文件,清空缓存

python 代码: import os import shutil import tracebackdef delete_folder(path):if os.path.exists(path):print(f"删除文件夹: {path}")shutil.rmtree(path)print("删除完成")def delete_file(path):if os.path.exists(path):print(f"删…

华为数通试题

选择题 华为数通推出的面向企业的云计算平台是? A) FusionSphere B) CloudEngine C) Agile Controller D) eSight 下面哪个不是华为数通的核心交换机系列? A) S12700 B) S5700 C) S9300 D) CloudEngine 华为数通的企业级路由器系列包括哪个&#xff1f…

Python画一个圣诞树

用python画一个圣诞树 可以使用Python中的turtle模块来画一个圣诞树。 下面是一段示例代码: from turtle import * from random import * import math# 绘图方法 def Rightdraw(Range, Fd, Right):for i in range(Range): # Range循环次数fd(Fd) # 向前Fd个距离…

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

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

【Docker】except yum.Errors.RepoError, e:-yum-config-manager --add-repo报错

问题 [rootitfuture ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repoFile "/usr/bin/yum-config-manager", line 135except yum.Errors.RepoError, e:^ SyntaxError: invalid syntax原因: linux 系统中…

Transport endpoint is not connected

问题背景 今早打开服务器一看发现昨天挂上去的数据预处理脚本中断了,报错如下: python3: cant open file preprocess_data.py: [Errno 107] Transport endpoint is not connected之前从来没有遇到过这种问题,于是顺手执行了 cd ..&#xff…

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

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

C语言中关于函数和数组的理解

函数 函数由函数头和函数体组成&#xff0c;函数头包括函数名、返回值类型和参数列表&#xff0c;函数体包括函数执行的语句块。 #include <stdio.h> int sum(int x,int y) //定义函数的作用以及格式 {int z;zxy; //作用是把两个整数相加…

【taro react】---- 解决 taro 编译 H5 姓名脱敏导致的 iOS 部分低版本白屏问题

1. 姓名脱敏方法 判断传入字段是否是字符串;将字符串除第一个字符后的其他字符全部替换为 *。const replaceUserName = (name) => {if(isTypingMathods.isString(name)){return name.replace(/(?<=.)./g,*)}return name }2. 问题 编译后在浏览器和安卓机没有发现任何问…

[THUPC 2023 决赛] 烂柯杯

题目背景 却说庞统迤逦前进&#xff0c;抬头见两山逼窄&#xff0c;树木丛杂&#xff1b;又值夏末秋初&#xff0c;枝叶茂盛。庞统心下甚疑&#xff0c;勒住马问&#xff1a;“此处是何地&#xff1f;”数内有新降军士&#xff0c;指道&#xff1a;“此处地名落凤坡。”庞统惊…

视觉增强RTK论文(1)—— GNSS-Stereo-Inertial SLAM for Arable Farming

文章目录 摘要方法标记ORB-SLAM3GNSS-Stereo-Inertial融合实验结果代码摘要 农业任务自动化速度的加快要求现场机器人采用高精度和鲁棒的定位系统。同时定位和映射(SLAM)方法不可避免地会在探索性轨迹上积累漂移,并且主要依赖于位置重新访问和循环闭合来保持一个有界的全局…

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

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