前言
★文本已收录至我的GitHub仓库,欢迎Star:https://github.com/bin392328206/six-finger
”
种一棵树最好的时间是十年前,其次是现在
我知道很多人不玩qq了,但是怀旧一下,欢迎加入六脉神剑Java菜鸟学习群,群聊号码:549684836 鼓励大家在技术的路上写博客
絮叨
这个方案呢?基本上一线公司都在用的一个方案,我们公司当然达不到这个级别,但是也有用到这套解决方案的一部分东西,然后我看到这个系统,就学习一下,然后我自己打算就做一个记录吧,不一定说自己一步步跟着干出来,但是思想我肯定得学会,有道无术,术尚可求,有术无道,止于术。所以我们要学一样东西,再没有真正实践他之前我觉得只要做到观其大道就行。我这边也是大致的学习一下整体的一个思路,记录一下,各种细节的话得大家分解一个个技术点去实现的。就是一个简单的学习记录吧,这个方案有几个比较重要的点
Redis 高可用 高性能缓存架构
openrestry 高性能Web服务器
商品详情页多级缓存实战
商品详情页架构的要求->高可用 ,-> 高性能,-> 高并发 ;一般来说 业界分为 种主流的方案
中小公司的详情页方案
头部大公司的方案
中小公司的详情页方案
很多中小型 电商的商品详情页 可能一分钟都没有一个访问,这种的话,就谈不上并发设计,一个tomcat 就能搞定。
还有一种中小型公司呢?虽然说公司不大,但是也是有几十万日活。然后几百万用户,这种公司,就是稍微大点的公司,他们的商品详情用,采取的方案可能是全局的一个静态页面这样子
什么意思呢?就是我们有把商品详情页直接做成一个静态页面,然后这样子每次全全量的更新,把数据全部静态放到nginx,里面,每次数据变化的时候,我们就通过一个Java服务去渲染这个数据,然后把这个静态页面推送到nginx服务器。(这个推送我也没做过,我想了下看是否能把生成的静态页面放到oss,然后配置一定的规则url,直接通过nginx访问这个静态页面)
这种方案的缺点,如果商品很多,那么渲染的时间会很长,达不到实时的效果
只能处理一些静态的东西,如果动态数据很多,比如有库存的,你不可能说每次去渲染,然后推送到nginx服务器,那不是更加慢?
大型公司的商品详情页的核心思想
其实怎么说呢?上面这张图就能解释他的核心思路了,这边小六六分几步给大家讲解一下
第一步是用户通过一个首页嘛,我进入到了首页,然后我看到了一个商品,这个时候我只能看到这个商品的部分信息对吧,那要看详细信息,那么我得点进去,此时我就是请求了一个url ,这边小六六就随便举个列子,就比如说:www.hqjy.com/goods/10086;
第二步,这个url呢?首先会经过我们的lb lvs,然后到我们的nginx集群,然后nginx 找到这个商品详情页的静态模板,然后里面有一个lua脚本,这个脚本可以去nginx本地去查看 id为 10086这个商品的动态数据,如果说这个10086商品没有nginx 缓存那么此时lua 就可以请求redis,如果说redis中也没有,就直接调用商品的缓存服务(tomcat),然后商品服务查mysql es 等db 查到数据之后再缓存到redis,然后再缓存到nginx中,这样形成一个链路闭环,
优点不要全量更新,并且做到n级缓存,可以做多高可用,高性能,高并发
Redis的架构
其实上面的商品详情页方案成功的关键在哪里呢?没错就是我们Redis的架构,你redis的qps 每秒能到几十万,然后能到做数据的实时备份,并且保证服务的百分之99.99可用。
redis这块,我们公司用的云服务,一般要自己做的话,搭建一个企业级的怎么去考虑他的持久化方案,持久化的真实意义
其实这块就是redis相关的知识,但是在高并发的场景redis是必须的,对于redis的用法 高可用 读写分离的架构,这边就不说了,反正就是redis是高并发的基石
分布式数据存储的几种算法
最简单的Hash算法
一致性hash
hash slot
什么是Openresty?
什么是openresty?
OpenResty® 是一款基于 NGINX 和 LuaJIT 的 Web 平台。
OpenResty(也称为 ngx_openresty)是一个全功能的 Web 应用服务器。它打包了标准的 Nginx 核心,很多的常用的第三方模块,以及它们的大多数依赖项。
通过揉和众多设计良好的 Nginx 模块,OpenResty 有效地把 Nginx 服务器转变为一个强大的 Web 应用服务器,基于它开发人员可以使用 Lua 编程语言对 Nginx 核心以及现有的各种 Nginx C 模块进行脚本编程,构建出可以处理一万以上并发请求的极端高性能的 Web 应用。
借助于Nginx的事件驱动模型和非阻塞IO,可以实现高性能的Web应用程序。而且OpenResty提供了大量组件如Mysql、Redis、Memcached等等,使在Nginx上开发Web应用更方便更简单。目前京东,淘宝、去哪儿网等都在使用Nginx+Lua架构。
Openresty的下载安装
小六六自己也是通过官网去安装的,所以给大家一个官网地址 -Openresty ,其实我觉得中国人写的 所以文档对中文还是有很好的支持的,哈哈。
下载源码包
我这边是基于centos 安装的
第一步,创建一个目录 比如我就是
mkdir /data/openresty
第二步 下载包 解压
-
wget https:
//openresty.org/download/openresty-1.15.8.2.tar.gz
-
tar -zxvf openresty
-1.15
.8
.2.tar.gz
第三步 就是要安装一些库 您必须将这些库 perl 5.6.1+, libpcre, libssl安装在您的电脑之中。对于 Linux来说, 您需要确认使用 ldconfig 命令,让其在您的系统环境路径中能找到它们。
yum install pcre-devel openssl-devel gcc curl
第四步
-
./configure
-
第五步 make
make
第六步
sudo make install
当你完成上述步骤的时候,你目前就可以把openrestry安装完成,
完成之后,你就去到/usr/local/openresty 里面 这就是整个项目了
来个Hello Word
创建几个目录
-
mkdir ~/work
-
cd ~/work
-
mkdir logs/ conf/
conf/nginx.conf
-
worker_processes
1;
-
error_log logs/error.log;
-
events {
-
worker_connections
1024;
-
}
-
http {
-
server {
-
listen
8080;
-
location / {
-
default_type text/html;
-
content_by_lua_block {
-
ngx.say(
"<p>hello, world</p>")
-
}
-
}
-
}
-
}
假设您已将OpenResty安装到/usr/local/openresty(这是默认设置),我们将在环境中提供OpenResty安装的nginx可执行文件:PATH
-
PATH=/usr/local/openresty/nginx/sbin:$PATH
-
export PATH
然后,我们使用以下配置文件启动nginx服务器:
nginx -p `pwd`/ -c conf/nginx.conf
结尾
今天把介绍了一下Redis的缓存架构,和一个最最最简单Openresty的入门,后面Openresty=nginx+lua 所以后面跟小六六一起来学习学习吧。
日常求赞
★好了各位,以上就是这篇文章的全部内容了,能看到这里的人呀,都是真粉。
”
★创作不易,各位的支持和认可,就是我创作的最大动力,我们下篇文章见
”
★六脉神剑 | 文 【原创】如果本篇博客有任何错误,请批评指教,不胜感激 !
”
转载:https://blog.csdn.net/qq_42820805/article/details/106953824