编程语言
首页 > 编程语言> > 仿百度文库网站源码(织梦内核5.7)

仿百度文库网站源码(织梦内核5.7)

作者:互联网

分享仿百度文库网站程序源码,是一个用来搭建供网友在线分享文档的开放**台网站。在用仿百度分享文库程序源码搭建的网站上,用户可以在线阅读和下载涉及课件,题,考试题库,论文报告,专业资料,各类公文模板。法律文件、文学小说等多个领域的资料,不过需要扣除相应的百度积分,台所累积的文档,均来自热心用户上传。分享文库的网站自身不编辑或修改用户上传的文档内容。用户通过上传文档,可以获得台虚拟的积分奖励,用于下载自己需要的文档。下载文档需要登录,免费文档可以登录后下载,对于上传用户已标价了的文档,则下载时需要付出虚拟积分。当前台支持主流的。doc(.docx)、.ppt(.pptx)、.xls(.xlsx)、pdf、txt文件格式。

文件:590m.com/f/25127180-497690241-68ba2e(访问密码:551685)

以下内容无关:

-------------------------------------------分割线---------------------------------------------

前面提到的Redis学习笔记七:主从复制和哨兵只能解决Redis的单点压力大和单点故障问题,接下来要讲的Redis Cluster模式,主要是用来解决Redis的单点容量问题。

如何来解决Redis单点容量问题呢?

如果数据可以拆分,我们可以让不同业务的客户端打到不同的Redis实例中。

如果数据不能拆分,我们有如下方式:

方案2-1 modula方式

可以通过Hash加上取模的方式来定位打到哪个Redis实例中。

这种方式的弊端在于:模数值固定,会影响分布式下的扩展性。

方案2-2 random方式

即每次请求redis的实例是随机的,一部分客户端负责push数据,一部分客户端负责消费数据,这样的场景可以适用于消息队列。

方案2-3 ketama方式

这种方式是通过一致性Hash算法(没有取模),规划成一个环形,环形上有很多虚拟节点,每次选择的实例通过hash算法对应到具体的一个节点。模型如下:

Client1~Client4通过Hash分别找到了环上A~B四个点

image

这种方式的优点在于:增加节点的时候可以分担其他节点的压力,不会造成全局洗牌。

缺点在于:新增节点造成一小部分数据不能命中,会使得缓存击穿,压到mysql

解决方案:取离我最近的2个物理节点

modula,random和ketama方式都是从客户端入手,因为每个客户端都需要与redis实例建立连接,所以,这种情况会导致连接的成本很高。如何解决这个问题呢?

我们可以在客户端和Redis之间增加一个代理层,通过代理层去实现原先在客户端要实现的三个方案。

image

此时,代理层就容易成为一个单点故障。所以代理可以做集群,然后最前端通过LVS来做负载均衡,防止LVS挂掉,可以通过KeepAlived来调配LVS,同时,KeepAlived也可以作为代理层健康检查的工具。整个架构图如下:

image

这三种模式的弊端都在于:只能让Redis做缓存,无法做数据库。(因为数据会丢失)

要解决这个问题,可以通过预分区的方式,增加槽位的概念:http://www.redis.cn/topics/cluster-tutorial.html

可以通过redis-cluster 模式(无主模型)来解决。

image

客户端随机地请求任意一个redis实例,然后由Redis将请求转发给正确的Redis节点。Redis Cluster实现了一种混合形式的查询路由,但并不是直接将请求从一个redis节点转发到另一个redis节点,而是在客户端的帮助下直接redirected到正确的redis节点。

但是数据分治的时候,会带来一个问题,无法做聚合操作,怎么解决呢?

我们可以使用hash tag,让同一组key打到同一个redis实例上面,并且对同一hash tag下的key可以进行聚合操作。

Twemproxy实战

Twemproxy 也叫 nutcraker。是 Twitter 开源的一个 Redis 和 Memcache 代理服务器,主要用于管理 Redis 和 Memcached 集群,减少与Cache 服务器直接连接的数量。

启动3个redis服务实例:假设为:

6379
6381
6380
image

在/usr/local/src目录下,下载最新的twemproxy的源码包

cd /usr/local/src

下载源码

wget https://github.com/twitter/twemproxy/archive/refs/tags/v0.4.1.tar.gz

解压

tar xf v0.4.1.tar.gz

重命名

mv twemproxy-0.4.1/ twemproxy/
接下来按照官方步骤编译安装

yum install automake libtool -y
cd /usr/local/src/twemproxy/

autoreconf -fvi

./configure --enable-debug=full

make

src/nutcracker -h

安装成服务

cp nutcracker.init /etc/init.d/nutcracker

chmod +x /etc/init.d/nutcracker
mkdir /etc/nutcracker
cp /usr/local/src/twemproxy/conf/* /etc/nutcracker/
cp /usr/local/src/twemproxy/src/nutcracker /usr/bin
接下来修改twemproxy的配置文件

vi /etc/nutcracker/nutcracker.yml
修改为:

alpha:
listen: 127.0.0.1:22121
hash: fnv1a_64
distribution: ketama
auto_eject_hosts: true
redis: true
server_retry_timeout: 2000
server_failure_limit: 1
servers:

标签:twemproxy,5.7,Redis,nutcracker,redis,织梦,源码,节点,客户端
来源: https://blog.csdn.net/gumenghua_com/article/details/117453120