缓存服务器_redis缓存服务器 - CSDN
  • 服务器缓存(Cache)

    千次阅读 2018-06-21 12:09:14
    服务器缓存工作原理大纲如下:缓存模式 缓存淘汰 缓存击穿 缓存穿透 缓存雪崩缓存模式比较常见的模式有分为两大类: Cache-aside 以及 Cache-as-SoR。其中 Cache-as-SoR(System of Record, 即直接存储数据的DB) 又...

    缓存指的是将需要频繁访问的网络内容存放在离用户较近、访问速度更快的系统中,以提高内容访问速度的一种技术。

    服务器缓存工作原理

    大纲如下:

    • 缓存模式
    • 缓存淘汰
    • 缓存击穿
    • 缓存穿透
    • 缓存雪崩

    缓存模式

    比较常见的模式有分为两大类: Cache-aside 以及 Cache-as-SoR。其中 Cache-as-SoR(System of Record, 即直接存储数据的DB) 又包括 Read-throughWrite-throughWrite-behind

    Cache-aside

    Cache-aside 是比较通用的缓存模式,在这种模式,读数据的流程可以概括:

    1. 读 cache,如果 cache 存在,直接返回。如果不存在,则执行2
    2. 读 SoR,然后更新 cache,返回
      代码如下:

    # v1

    def get(key):

        value = cache.get(key)

        if value is None:

          value = db.get(key)

          cache.set(key, value)

        return value

    写数的流程为:

    1. 写 SoR
    2. 写 cache
      代码如下:

    # v1

    def set(key,value):

        db.set(key, value)

        cache.set(key, value)

    逻辑看似很简单,但是如果在高并发的分布式场景下,其实还有很多惊喜的。

    Cache-as-SoR

    Cache-aside 模式下,cache 的维护逻辑要业务端自己实现和维护,而 Cache-as-SoR 则是将 cache 的逻辑放在存储端,即 db + cache 对于业务调用方而言是透明的一个整体,业务无须关心实现细节,只需 get/set 即可。Cache-as-SoR 模式常见的有 Read ThroughWrite ThroughWrite Behind

    • Read Through: 发生读操作时,查询 cache,如果 Miss,则由 cache 查询 SoR 并更新,下次访问 cache 即可直接访问(即在存储端实现 cacha-aside)
    • Write Through:发生写操作时,查询 cache,如果 Hit,则更新 cache,然后交由 cache model 去更新 SoR
    • Write Behind:发生写操作时,不立即更新 SoR,只更新缓存,然后立即返回,同时异步的更新 SoR(最终一致)

    Read/Write Through模式比较好理解,就是同步的更新 cache SoR,读取得场景也是 cache 优先,miss 后才读 SoR这类模式主要意义在意缓解读操作的场景下 SoR 的压力以及提升整体响应速度,对写操作并没有什么优化,适用于读多写少的场景。Write Behind 的的 cache SoR 的更新是异步,可以在异步的时候通过 batchmerge 的方式优化写操作,所以能提升写操作的性能。

    下面两图是取自 wikipedia Write Through Write Behind 的流程图:

     

    Write Through Write Behind

    小结

    当前很多 DB 都自带基于内存的 cache ,能更快的响应请求,比如 Hbase Block 为单位的 cachemongo 的高性能也一定程度依托于其占用大量的系统内存做 cache 。不过在程序本地再做一层 local cache 效果会更加明显,省去了大量的网络I/O,会使系统的处理延时大幅提升,同时降低下游 cache + db 的压力。

    缓存淘汰

    缓存淘汰算是比较老的一个话题,常用的缓存策略也就那么几个,比如 FIFOLFULRU。而且 LRU 算是缓存淘汰策略的标配了,当然在根据不同的的业务场景,也可能其他策略更合适。

    FIFO 的淘汰策略通常使用 Queue + Dict毕竟 Queue 先天就是 FIFO 的,新的缓存对象放在队尾,而当队列满时将队首的对象出队过期。

    LFU Least Frequently Used)的核心思想是最近最少被使用的数据最先被淘汰,即统计每个对象的使用次数,当需要淘汰时,选择被使用次数最少的淘汰。所以通常基于最小堆 + Dict 实现 LFU。因为最小堆每次变化的复杂度为 O(logn),所以LFU算法效率为 O(logn),相比 FIFOLRU O(1) 的效率略低。

    LRULeast recently Used),基于局部性原理,即如果数据最近被使用,那么它在未来也极有可能被使用,反之,如果数据很久未使用,那么未来被使用的概率也较低。

    LRU 过期通常使用双端链表 + Dict
    实现(在生产环境使用链表一般都是双链表),将最近被访问的数据从原位置移动到链表首部,这样在链首位置的数据都是最近被使用过的,而链尾都是最久未使用的,在 O(1) 的时间复杂度内即可找到要被删除的数据。

    # LRU 缓存过期概要逻辑, 无锁版

     

    data_dict = dict()

    link = DoubleLink()# 双端队列

     

    def get(key):

        node = data_dict.get(key)

        if node is not None:

            link.MoveToFront(node)

        return node

       

    def add(key,value):

        link.PushFront(Node(key,value))

        if link.size()>max_size:

            node = link.back()

            del(data_dict[node.key])

            link.remove_back()

    Ps

    1. py3 functools lru_cache 的实现
    2. golang 实现 lru cache

    缓存击穿

    在高并发场景下(比如秒杀),如果某一时间一个 key 失效了,但同时又有大量的请求访问这个 key,此时这些请求都会直接落到下游的 DB,即缓存击穿Cache penetration),对 DB 造成极大的压力,很可能一波打死 DB 业务挂掉。

    这种情况下比较通用的保护下游的方法是通过互斥锁访问下游 DB,获得锁的线程/进程负责读取 DB 并更新 cache,而其他 acquire lock 失败的进程则重试整个 get的逻辑。

    redis set 方法实现此逻辑如下:

    # v2

    r =redis.StrictRedis()

    def get(key,retry=3):

        def _get(k):

            value = cache.get(k)

            if value is None:

                if r.set(k,1,ex=1,nx=true): # 加锁

                    value = db.get(k)

                    cache.set(k, value)

                    return true, value

                else:

                    return None, false

            else:

                return value, true

        while retry:

            value, flag = _get(key)

            if flag == True:

                return value

            time.sleep(1) # 获取锁失败,sleep 后重新访问

            retry -= 1

        raise Exception("获取失败")

    缓存穿透

    当请求访问的数据是一条并不存在的数据时,一般这种不存在的数据是不会写入 cache,所以访问这种数据的请求都会直接落地到下游 db,当这种请求量很大时,同样会给下游 db 带来风险。

    解决方法:

    1. 可以考虑适当的缓存这种数据一小段时间,将这种空数据缓存为一段特殊的值。
    2. 另一种更严谨的做法是使用 BloomFilter, BloomFilter 的特点在检测 key 是否存在时,不会漏报(BloomFilter 不存在时,一定不存在),但有可能误报(BloomFilter 存在时,有可能不存在)。Hbase 内部即使用 BloomFilter 来快速查找不存在的行。

    基于 BloomFilter 的预防穿透:

    # v3

    r =redis.StrictRedis()

    def get(key,retry=3):

        def _get(k):

            value = cache.get(k)

            if value is None:

                if not Bloomfilter.get(k):

                    # cache miss 时先查 Bloomfilter

                    # Bloomfilter 需要在 Db 写时同步事务更新

                    return None, true

                if r.set(k,1,ex=1,nx=true):

                    value = db.get(k)

                    cache.set(k, value)

                    return true, value

                else:

                    return None, false

            else:

                return value, true

        while retry:

            value, flag = _get(key)

            if flag == True:

                return value

            time.sleep(1)

            retry -= 1

        raise Exception("获取失败")

    缓存雪崩

    当因为某种原因,比如同时过期、重启等,大量缓存在同一时间失效而导致大量的请求直接打到下游的服务或DB,为之带来巨大的压力从而可能崩溃宕机,即雪崩。

    对于同时过期这种场景,往往是因为冷启动或流量突增等发生,导致在极短时间内有大量的数据写入缓存,而且它们的过期时间相同,所以它们又在相似的时间内过期。

    解决方法:

    1. 一个比较简单的方法是随机过期,即每条 data 的过期时间可以设置为 expire + random
    2. 另一个比较好的方案是可以做一个二级缓存,比如之前做缓存时设计的一套 local_cache + redis 的存储方案,或者 redis + redis 的模式。

    另外,就是合理的降级方案。在高并发场景下,当检测到过高的并发可能或已经对资源造成影响后,通过限流降级的方案保护下游资源,避免整个资源被打垮而不可用,在限流期间逐步构建缓存,当缓存逐渐恢复后取消限流,恢复降级。

    展开全文
  • 配置本地缓存服务器(一)

    千次阅读 2018-11-12 09:45:00
    绝大多数系统管理员都遇到过开发部门抱怨软件包下载慢,严重影响工作效率的问题。解决问题的根本方法是建立本地镜像或缓存,对绝大多数企业来说,建立本地缓存是最好的方法。

    配置本地缓存服务器(一)

    绝大多数系统管理员都遇到过开发部门抱怨软件包下载慢,严重影响工作效率的问题。对此问题,系统管理员也很无奈,无论接入带宽是10M、100M还是1G光纤,都不能解决这个问题。原因是很多时候下载慢并不是因为接入带宽不够,而是因为去源库的路上要翻越千山万水,克服重重困难,才能取到我们需要的真经。尽管分布在各地的各种镜像,缓解了部分问题,真正能解决问题的方式是建立本地镜像或缓存。

    解决这个问题在最好办法是在本地建立镜像,但这种做法并不现实,资源要求太大,系统维护要求太高。我们采用了本地缓存方法来解决这个问题,原因是这种方式能解决绝大部分的问题,又没有大的资源和维护要求,完全能满足企业开发部门的需求。

    本文将介绍如何使用多种缓存软件组合为完整的缓存服务器,满足企业软件开发部分的需求。

    我们使用的免费缓存软件分别为:

    Nexus Repository Manager 3 OSS:用于缓存 Bower、Docker、Git LFS、Maven、npm、NuGet、PyPI和Ruby Gems。

    Apt-cacher-ng:该软件开发的目的是用于缓存Debian系的APT包,但实际上也能用于缓存YUM、RPM、BSD等的软件库。

    SQUID:可缓存任意想缓存的内容,但配置复杂。我们将用它缓存其他软件库,如CPAN、CRAN、PECL等等。

    下面我们将分别介绍它们的安装、配置和使用。




    基于Nexus Repository Manager 3 OSS的缓存服务

    这是由Sonatype公司开发的一款软件库管理软件,我们只介绍使用其缓存功能。我们可以从其下载页面获取该软件。


    安装Nexus Repository Manager 3 OSS

    安装Oracle Java 8
    注意:NXRM 3 OSS 和 OpenJDK 有兼容性问题,所以安装Oracle的Java。

    添加Oracle Java APT库

    	add-apt-repository ppa:webupd8team/java
    

    更新APT

    	apt update
    

    安装Java

    	apt install oracle-java8-installer
    

    检查已安装的Java

    	root@appcache:~# java -version
    	java version "1.8.0_191"
    	Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
    	Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
    	root@appcache:~# 
    

    将Nexus Repository 解压、安装到 /opt下

    	tar xvzf nexus-3.14.0-04-unix.tar.gz -C /opt
    

    链接 /opt/nexus-3.14.0-04 到 /opt/nexus

    	ln -s /opt/nexus-3.14.0-04 /opt/nexus
    

    设置 Nexus Repository 启停
    在链接 /opt/nexus/bin/nexus 到 /etc/init.d/nexus

    	ln -s /opt/nexus/bin/nexus /etc/init.d/nexus
    

    设置自动启动和自动停止

    update-rc.d nexus defaults
    

    启动Nexus命令:service nexus start
    停止Nexus命令:service nexus stop
    重启Nexus命令:service nexus restart
    显示Nexus状态:service nexus status
    重新加载配置文件: /etc/init.d/nexus reload

    Nexus Repository Manager已安装完成。重启系统,Nexus Repository Manager 将随系统自动启动。


    设置Nexus Repository Manager 3 OSS

    本文只介绍和缓存相关的内容。
    在这里插入图片描述
    这是管理员登陆后的界面,管理员默认登陆为admin:admin123。

    点击上方工具条中的齿轮图标进入管理页面。
    在这里插入图片描述
    NXRM OOS是一个功能非常丰富的Repository管理系统,本文只涉及其中的一小部分:Repository缓存。
    就是Repository部分,我们也只关心Repositories部分,其他三部分采用默认设置。

    点击【Repositories】
    在这里插入图片描述
    可以看到这儿有三个Repositories已经建立,分别为maven-central、maven-imagej和maven-public。下面我们将分别介绍这三个库。


    maven-central缓存库
    在这里插入图片描述
    这个库是用于缓存Maven的Central Repositoray,下面是一些参数介绍。

    • Name:必须在NXRM OSS中是唯一的,这里用的是maven-central
    • Type:这是缓存Central库,所以是proxy
    • URL:URL能操作到这个缓存库,这个链接是系统自动产生的。
    • Remote Repository:这是我们要缓存的库,这里是Central库,URL是https://repo1.maven.org/maven2/
    • Maximum Metadata Age:我们把数字从一天延长为一个月,目的是减少检查meta数据的频率,降低因获取metadata失败造成的build失败几率。
      在建立缓存库是,真正需要输入的只用NameRemote Repository。其他的采用默认值即可,默认值能满足绝大多数的需求。

    maven-imagej缓存库
    这个库是用于缓存ImageJ的Maven Repository。其他的设置和maven-central完全一样,除了NameRemote Repository
    Name:maven-imagej
    Remote Repository:http://maven.imagej.net/content/groups/public

    maven-public缓存库

    这个库和上面二个完全不一样,不是一个缓存库,它的作用是把该系统上的其他maven库集合成一个Maven总库,其他maven库中的artifacts都可以通过它来获取,它就是您的本地Central库。当增加新的Maven库时,开发者的本地Maven配置并不需要修改,这给开发人员提供了很大方便。

    在这里插入图片描述
    maven-public包含前面介绍的二个缓存库,maven-public查找排在最上面的库,如没找到需要的artifact,再从排在它下面的库中找。以此类推,直到找到或找完所有的成员库。

    maven-public库的URL可点击它所对应的【Copy】键获取。
    在这里插入图片描述

    配置NXRM OSS就是这么方便,这是我们选用它来做 Bower、Docker、Git LFS、Maven、npm、NuGet、PyPI和Ruby Gems 的缓存服务器的一个重要原因。


    使用Nexus Repository Manager 3 OSS

    首先需要设置本地的Maven的配置,新建立的maven-public库将成为配置文件中的唯一Maven库。
    $HOMEDIR/.m2/settings.xml

    <settings>
      <mirrors>
        <mirror>
          <!--This sends everything else to /public -->
          <id>lswin</id>
          <mirrorOf>*</mirrorOf>
          <url>http://appcache.lswin.cn:8081/repository/maven-public/</url>
        </mirror>
      </mirrors>
      <profiles>
        <profile>
          <id>lswin</id>
          <!--Enable snapshots for the built in central repo to direct -->
          <!--all requests to nexus via the mirror -->
          <repositories>
            <repository>
              <id>central</id>
              <url>http://central</url>
              <releases><enabled>true</enabled></releases>
              <snapshots><enabled>true</enabled></snapshots>
            </repository>
          </repositories>
          <pluginRepositories>
            <pluginRepository>
              <id>central</id>
              <url>http://central</url>
              <releases><enabled>true</enabled></releases>
              <snapshots><enabled>true</enabled></snapshots>
            </pluginRepository>
          </pluginRepositories>
        </profile>
      </profiles>
      <activeProfiles>
        <!--make the profile active all the time -->
        <activeProfile>lswin</activeProfile>
      </activeProfiles>
    </settings>
    

    现在让我们运行一个简单的项目,看看我们的配置是否按我们的要求工作。
    首先建立pom.xml文件,然后执行mvn package给项目打包。

    <project>
      <modelVersion>4.0.0</modelVersion>
      <groupId>cn.lswin</groupId>
      <artifactId>nexus-proxy-test</artifactId>
      <version>1.0-SNAPSHOT</version>
      <dependencies>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.10</version>
        </dependency>
        <dependency>
          <groupId>org.hamcrest</groupId>
          <artifactId>hamcrest-library</artifactId>
          <version>1.2.1</version>
        </dependency>
        <dependency>
          <groupId>net.imagej</groupId>
          <artifactId>imagej-ui-swing</artifactId>
          <version>0.21.4</version>
        </dependency>
      </dependencies>
    </project>
    

    这是一个空项目,我们只定了三个dependencies,分别是junit(版本4.10)、hamcrest-library(版本:1.2.1)和imagej-ui-swing(版本:0.21.4)。junit和hamcrest-library这二个版本都已经在Maven Central Repository中,imagej-ui-swing(版本:0.21.4)还没提交到Central Library,只能在ImageJ的Maven Repository中找到,这是为测试我们的缓存服务而特意安排的。

    运行数次mvn package后,完成了打包。
    在这里插入图片描述

    Mavan项目使用外部Maven库时,遇到下图所示的问题非常普遍:
    在这里插入图片描述
    如遇到下载pom文件出错,在再执行时可加上 -U标志,否则的活有可能立刻再次出错,原因是缓存会把没有资源的文件暂时屏蔽。-U 标志会忽略暂时标志,强制在指定的外部Maven库搜索资源。

    让我们检查我们的缓存库资源,是否从不同的Maven库上缓存了资源。
    在这里插入图片描述
    在这里插入图片描述
    很显然,我们成功地从不同的Maven库缓存了不同的资源。

    到此为止我们的Maven缓存服务器已经可以投入生产了。

    Bower、Docker、npm、NuGet、PyPI和Ruby Gems在此不做介绍,它们的配置方式和配置Maven缓存非常类似,可参照实施。

    注意,Git LFS并不是缓存,是用于支持Git LFS(Large File Storage),Git服务器上只需要存放一个文件指针,指向这个文件即可,无需将大文件上传到Git服务器。

    因为Nexus Repository Manager采用了特殊机制(下载-存储-提供服务),它可以缓存采用TLS/SSL加密传输的存储仓库内容。而其他缓存采用了下载/服务/缓存同时进行的技术,无法对采用TLS/SSL加密传输进行缓存。我们的建议是能采用NXRM OSS的,就用它进行缓存。




    基于APT-CACHER-NG的缓存服务

    该软件开发的目的是用于缓存Debian系的APT包,安装配置非常简单。

    安装 APT-CACHER-NG

    在Ubuntu上直接使用apt install apt-cacher-ng即可。

    root@appcache:~# apt install apt-cacher-ng
    Reading package lists... Done
    Building dependency tree       
    Reading state information... Done
    Suggested packages:
      doc-base avahi-daemon
    The following NEW packages will be installed:
      apt-cacher-ng
    0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
    Need to get 486 kB of archives.
    After this operation, 1,435 kB of additional disk space will be used.
    Get:1 http://us.archive.ubuntu.com/ubuntu bionic/universe amd64 apt-cacher-ng amd64 3.1-1build1 [486 kB]
    Fetched 486 kB in 4s (136 kB/s)       
    Preconfiguring packages ...
    Selecting previously unselected package apt-cacher-ng.
    (Reading database ... 102870 files and directories currently installed.)
    Preparing to unpack .../apt-cacher-ng_3.1-1build1_amd64.deb ...
    Unpacking apt-cacher-ng (3.1-1build1) ...
    Processing triggers for ureadahead (0.100.0-20) ...
    Processing triggers for systemd (237-3ubuntu10.3) ...
    Processing triggers for man-db (2.8.3-2) ...
    Setting up apt-cacher-ng (3.1-1build1) ...
    Created symlink /etc/systemd/system/multi-user.target.wants/apt-cacher-ng.service → /lib/systemd/system/apt-cacher-ng.service.
    Processing triggers for systemd (237-3ubuntu10.3) ...
    Processing triggers for ureadahead (0.100.0-20) ...
    root@appcache:~# 
    

    配置APT-CACHER-NG

    APT-CACHER-NG安装完后无需修改就能提供一般的缓存服务,但为了更好地适应生产环境,我们还是要对默认配置做少量修改。
    缓存过期设置(ExThreshold):默认值是4(4天)。在实际使用中,建议将它设为365(一年),甚至更大。现在磁盘价格不高,并且我们希望这个缓存保留尽可能长的时间。
    您可能需要配置CApath和CAfile二个参数,如果您准备做APT-SSL缓存。

    配置APT使用 APT-CACHER-NG

    建立/etc/apt/apt.conf.d/00aptproxy文件,将下列内容加入给文件:
    vi /etc/apt/apt.conf.d/00aptproxy

    Acquire::http::Proxy "http://appcache.lswin.cn:3142";
    

    任何欲使用该缓存的都需要有此配置文件。

    其他配置无需任何修改,所有APT相关配置继续有效。如需修改APT配置,只需要按正常情况修改即可,这个缓存是完全透明的。这也是我们为什么选用APT-CACHER-NG做这类库的缓存服务器而不使用NXRM OSS的原因。

    配置Centos使用 APT-CACHER-NG

    APT-CACHER-NG可直接支持YUM缓存,只需要在/etc/yum.conf加上缓存代理配置即可。

    proxy=http://[192.168.220.20]:3142
    

    该配置中必须使用IP地址,不得使用FQDN。
    在这里插入图片描述
    第一次使用并安装gcc-C++,下载速度是8.1MB/s。

    在这里插入图片描述
    在另一台Centos安装gcc-C++,下载速度是67MB/s。

    这证明APT-CACHER-NG也可用于缓存YUM库。

    检查 APT-CACHER-NG的缓存

    在这里插入图片描述
    我们可以确认,APT-CACHER-NG不但能缓存APT的debian类型库,也能缓存Redhat类型的库。

    检查 APT-CACHER-NG的缓存

    有时会因为下载出错或其他原因,可能发生Hash Mismatch错误,如下:
    在这里插入图片描述
    如发生这种情况,我们可以用如下URL纠正错误:
    http://appcache.lswin.cn:3142/acng-report.html?abortOnErrors=aOe&byPath=bP&byChecksum=bS&truncNow=tN&incomAsDamaged=iad&purgeNow=pN&doExpire=Start+Scan+and%2For+Expiration&calcSize=cs&asNeeded=an#bottom

    我们也可以将下列内容加入/etc/cron.daily/apt-cacher-ng中,这条内容必须在所有可执行语句前。

    export ACNGREQ="?abortOnErrors=aOe&byPath=bP&byChecksum=bS&truncNow=tN&incomAsDamaged=iad&purgeNow=pN&doExpire=Start+Scan+and%2For+Expiration&calcSize=cs&asNeeded=an"
    
    

    这样,缓存每天会被检查清理一次。

    APT-CACHER-NG最大的不足是不能缓存使用TLS/SSL加密传输的任何文件,在使用APT仓库源的时候,尽量选用不使用TLS/SSL的仓库。是否有必要使用TLS/SSL加密传输,在Debian社区有过讨论,在可预见的将来,DEB官方库会一直使用不加密传输,数据完整性经由校验码保证。




    SQUID缓存服务器

    最后我们介绍用SQUID为其他软件包下载做缓存。

    编译SQUID3

    APT库中已编译的SQUID包没有SSL支持,而支持缓存HTTPS必须有SSL支持,所以我们必须自己编译SQUID。

    获取SQUID3源码包,并修改编译选项

    修改/etc/apt/source.list,允许从库中获取源码包。

    deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted
    deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted
    

    更新库数据,获取源码包并修改编译rules文件

    # 更新库数据
    root@appcache:~# apt update
    # 建立工作目录
    root@appcache:~# mkdir squid3
    # 进入工作目录
    root@appcache:~# cd squid3
    #获取SQUID3源码包
    root@appcache:~/squid3# apt source squid3
    # 进入源码目录
    root@appcache:~/squid3# cd squid3-3.5.27
    #修改编译rules文件 squid3-3.5.27/debian/rules,添加SSL支持
    # from diff debian/rules debian/rules.old
    53,56c53
    < 		--with-default-user=proxy \
    < 		--with-openssl \
    < 		--enable-ssl \
    < 		-enable-ssl-crtd
    ---
    > 		--with-default-user=proxy
    
    

    安装编译SQUID所需要的包

    root@appcache:~# apt install build-essential sharutils ccze libzip-dev libssl1.0-dev
    root@appcache:~# apt install libldap2-dev libpam0g-dev libdb-dev cdbs libsasl2-dev debhelper libcppunit-dev libkrb5-dev comerr-dev libcap2-dev libecap3-dev libexpat1-dev libxml2-dev libltdl-dev pkg-config libnetfilter-conntrack-dev nettle-dev libgnutls28-dev dh-apparmor dh-autoreconf
    

    安装SQUID

    # 编译并生成 .deb 包
    root@appcache:~/squid3/squid3-3.5.27# dpkg-buildpackage -rfakeroot -b
    

    编译完成后,一系列 .deb 会在 ~/squid3目录下生成。
    回到~/squid3目录,安装新生成的SQUID3.

    # 首先安装支持包
    root@appcache:~/squid3# apt install squid-langpack libdbi-perl ssl-cert
    # 然后安装新生成的 .deb包
    root@appcache:~/squid3# dpkg -i squid-common_3.5.27-1ubuntu1.1_all.deb squid_3.5.27-1ubuntu1.1_amd64.deb
    # 再安装新生成的功能包
    root@appcache:~/squid3# dpkg -i squidclient_3.5.27-1ubuntu1.1_amd64.deb squid-dbg_3.5.27-1ubuntu1.1_amd64.deb squid-purge_3.5.27-1ubuntu1.1_amd64.deb squid3_3.5.27-1ubuntu1.1_all.deb
    # 安装 APACHE2,因为SQUID-CGI需要
    root@appcache:~/squid3# apt install apache2
    # 最后安装 squid-cgi包
    root@appcache:~/squid3# dpkg -i squid-cgi_3.5.27-1ubuntu1.1_amd64.deb
    # 停止 squid
    root@appcache:~/squid3# service squid stop
    # 初始化 /var/lib/ssl_db
    root@appcache:~/squid3# /usr/lib/squid/ssl_crtd -c -s /var/lib/ssl_db
    # 修改 /var/lib/ssl_db属性
    root@appcache:~/squid3# chown -R proxy. /var/lib/ssl_db
    # 启动 SQUID
    root@appcache:~/squid3# service squid start
    # 检查 SQUID3 状态
    root@appcache:~/squid3# service squid status
    
    

    我们应该能看到SQUID已经正常运行。

    root@appcache:/var/lib/ssl_db# service squid status
    ● squid.service - LSB: Squid HTTP Proxy version 3.x
       Loaded: loaded (/etc/init.d/squid; generated)
       Active: active (running) since Mon 2018-10-22 22:41:50 CST; 53s ago
         Docs: man:systemd-sysv-generator(8)
      Process: 1982 ExecStop=/etc/init.d/squid stop (code=exited, status=0/SUCCESS)
      Process: 2044 ExecStart=/etc/init.d/squid start (code=exited, status=0/SUCCESS)
        Tasks: 10 (limit: 4633)
       CGroup: /system.slice/squid.service
               ├─2094 /usr/sbin/squid -YC -f /etc/squid/squid.conf
               ├─2096 (squid-1) -YC -f /etc/squid/squid.conf
               ├─2097 (ssl_crtd) -s /var/lib/ssl_db -M 4MB
               ├─2098 (ssl_crtd) -s /var/lib/ssl_db -M 4MB
               ├─2099 (ssl_crtd) -s /var/lib/ssl_db -M 4MB
               ├─2100 (ssl_crtd) -s /var/lib/ssl_db -M 4MB
               ├─2101 (ssl_crtd) -s /var/lib/ssl_db -M 4MB
               ├─2102 (logfile-daemon) /var/log/squid/access.log
               ├─2103 (unlinkd)
               └─2104 (pinger)
    
    Oct 22 22:41:50 appcache systemd[1]: Starting LSB: Squid HTTP Proxy version 3.x...
    Oct 22 22:41:50 appcache squid[2044]:  * Starting Squid HTTP Proxy squid
    Oct 22 22:41:50 appcache squid[2094]: Squid Parent: will start 1 kids
    Oct 22 22:41:50 appcache squid[2094]: Squid Parent: (squid-1) process 2096 started
    Oct 22 22:41:50 appcache squid[2044]:    ...done.
    Oct 22 22:41:50 appcache systemd[1]: Started LSB: Squid HTTP Proxy version 3.x.
    
    

    配置SQUID
    目标:
    一、只代理HTTP、HTTPS和FTP
    二、HTP、HTTPS和FTP使用单一端口:3128
    三、只代理白名单中的URL
    四、专用代理缓存服务,采用explicit模式

    只需要代理HTTP、HTTPS和FTP,ACL部分的配置为:

    # 
    acl SSL_ports port 443
    acl Safe_ports port 80          # http
    acl Safe_ports port 21          # ftp
    acl Safe_ports port 443         # https
    acl CONNECT method CONNECT
    
    # 拒绝非Safe_ports
    http_access deny !Safe_ports
    
    # CONNECT方法只允许在SSL_ports
    http_access deny CONNECT !SSL_ports
    
    # 只允许本地访问cachemgr
    http_access allow localhost manager
    
    #
    # 允许规则在conf.d下
    # 只加载*.conf文件,白名单列表也在该目录下,以 .list 结尾
    include /etc/squid/conf.d/*.conf
    
    # 拒绝所有请求
    http_access deny all
    

    HTP、HTTPS和FTP使用单一端口:3128,缓存部分配置

    我们将采用SSL-BUMP方式配置普通缓存代理。

    http_port 3128 ssl-bump cert=/etc/squid/ssl/squid.pem key=/etc/squid/ssl/squid.pem generate-host-certificates=on
    
    ssl_bump bump all
    
    # 为保证下载站点的可靠性,拒绝所有安全证书有问题的站点
    sslproxy_cert_error deny all
    
    # SQUID有可能使用内存缓存内容,为提高缓存能力,将cache_mem设为1G,代价是硬件资源要求高
    cache_mem 1024 MB
    
    # 为提高缓存能力有效节省带宽,将maximum_object_size设为2G,代价是硬件资源要求高
    maximum_object_size 2024 MB
    
    # 缓存文件系统配置,优化大文件缓存,代价是硬件资源要求高
    cache_dir aufs /var/spool/squid 2048 16 256
    
    #
    # refresh_pattern定义
    #
    refresh_pattern ^ftp:                        1440    20%     10080
    refresh_pattern -i (/cgi-bin/|\?)            0       0%      0
    refresh_pattern .                            0       20%     4320
    refresh_pattern -i .(deb|rpm)$               10080   90%     43200 override-expire ignore-reload ignore-no-store ignore-must-revalidate ignore-private
    refresh_pattern -i .(exe|bin|sh|php)$        10080   90%     43200 override-expire ignore-reload ignore-no-store ignore-must-revalidate ignore-private
    refresh_pattern -i .(bz2|gz|tar|tgz|xgz)$    10080   90%     43200 override-expire ignore-reload ignore-no-store ignore-must-revalidate ignore-private
    refresh_pattern -i .(zip|rar|ram)$           10080   90%     43200 override-expire ignore-reload ignore-no-store ignore-must-revalidate ignore-private
    refresh_pattern -i .(ppt|doc|pdf)$           10080   90%     43200 override-expire ignore-reload ignore-no-store ignore-must-revalidate ignore-private
    refresh_pattern -i .(png|jpg|bmp|tiff)$      10080   90%     43200 override-expire ignore-reload ignore-no-store ignore-must-revalidate ignore-private
    # 如需要缓存其他类型文件,在此加入
    
    ## 避免proxy-chaining
    always_direct allow all
    
    

    squid.conf文件已配置完成,其他一些非相关配置保持默认即可。


    配置允许代理缓存站点
    因为TLS/SSL的特性,从TLS/SSL站点获取的内容不能被SQUID缓存。对HTTPS站点,SQUID只做了代理;对HTTP站点,SQUID同时完成代理和缓存。

    我们对HTTP/FTP和HTTPS站点进行独立ACL配置,每组配置有二个文件,分别是(allowed_http_site.conf、allowed_http_sites.list)和(allowed_https_sites.conf、allowed_https_sites.list)。.conf文件是ACL配置,.list是允许站点的regex描述列表。

    # 允许HTTP/FTP站点控制文件 allowed_http_sites.conf
    #
    # 从 /etc/squid/conf.d/allowed_http_sites.list 读取站点列表
    acl allowed_http_urls url_regex -i "/etc/squid/conf.d/allowed_http_sites.list"
    # 该列表站点只允许从非 SSL_ports 通过
    http_access allow !SSL_ports allowed_http_urls
    
    # 允许HTTP/FTP站点描述文件 allowed_http_sites.list
    #
    # 允许通过的URL为:www.sina.com/* 或 sina.com/*
    # 允许通过的协议为:ftp和http
    ^((ftp|http):\/\/)?(www\.)sina\.com.*$
    # 允许通过的URL为:baidu.com/* 或 (大、小写英文字符任意组合).baidu.com/*
    # 允许通过的协议为:ftp和http
    ^((ftp|http):\/\/)?(([a-zA-Z]+)\.)?baidu\.com.*$
    

    # 允许HTTPS站点控制文件 allowed_https_sites.conf
    #
    # 从 /etc/squid/conf.d/allowed_https_sites.list 读取站点列表
    acl allowed_https_sites ssl::server_name_regex -i "/etc/squid/conf.d/allowed_https_sites.list"
    # 该列表站点只允许从 SSL_ports 通过
    http_access allow SSL_ports allowed_https_sites
    
    # 允许HTTPS站点描述文件 allowed_https_sites.list
    #
    # 允许通过的URL为:www.sina.com/* 或 sina.com/*
    # 允许通过的协议为:https
    ^(https:\/\/)?(www\.)sina\.com$
    # 允许通过的URL为:baidu.com/* 或 (大、小写英文字符任意组合).baidu.com/*
    # 允许通过的协议为:https
    ^(https:\/\/)?(([a-zA-Z]+)\.)?baidu\.com$
    

    在HTTPS下,SQUID无法正确有效地获取URL,只能在服务器名上做控制。

    本地缓存服务器已全部配置完成,下面简单介绍一下常用开发软件的配置。




    常用开发软件系统的配置

    Maven

    配置文件:$HOME/.m2/settings.xml

    <settings>
            <mirrors>
                    <mirror>
                            <!--This sends everything else to /public -->
                            <!-- 系统ID,任意 -->
                            <id>lswin</id>
                            <mirrorOf>*</mirrorOf>
                            <!-- NXRM 3 OSS 缓存服务URL -->
                            <url>http://appcache.lswin.cn:8081/repository/maven-public/</url>
                    </mirror>
            </mirrors>
            <profiles>
                    <profile>
                            <id>lswin</id>
                            <!--Enable snapshots for the built in central repo to direct -->
                            <!--all requests to nexus via the mirror -->
                            <repositories>
                                    <repository>
                                            <id>central</id>
                                            <url>http://central</url>
                                            <releases><enabled>true</enabled></releases>
                                            <snapshots><enabled>true</enabled></snapshots>
                                    </repository>
                            </repositories>
                            <pluginRepositories>
                                    <pluginRepository>
                                            <id>central</id>
                                            <url>http://central</url>
                                            <releases><enabled>true</enabled></releases>
                                            <snapshots><enabled>true</enabled></snapshots>
                                    </pluginRepository>
                            </pluginRepositories>
                    </profile>
            </profiles>
            <activeProfiles>
                    <!--make the profile active all the time -->
                    <activeProfile>lswin</activeProfile>
            </activeProfiles>
    </settings>
    

    Python PIP

    配置文件:$HOME/.pip/pip.conf

    [global]
    index-url = http://appcache.lswin.cn:8081/repository/pypi-public/simple/
    
    [install]
    trusted-host = appcache.lswin.cn
    

    APT

    配置文件:/etc/apt/apt.conf.d/00aptproxy

    Acquire::http::Proxy "http://appcache.lswin.cn:3142";
    

    git

    配置文件:$HOME/.gitconfig

    [http]
            proxy = http://appcache.lswin.cn:3128
    [https]
            proxy = http://appcache.lswin.cn:3128
    

    wget

    配置文件:$HOME/.wgetrc

    https_proxy = http://appcache.lswin.cn:3128/
    http_proxy = http://appcache.lswin.cn:3128/
    ftp_proxy = http://appcache.lswin.cn:3128
    
    

    curl

    配置文件:$HOME/.curlrc

    proxy=http://appcache.lswin.cn:3128
    

    注意:一定不要使用全局PROXY设置!




    总结:能使用 Nexus Repository Manager 3 OSS 的,就不用 APT-CACHER-NG 和 SQUID;能使用 APT-CACHER-NG 的,就不用SQUID;最后的选择是SQUID。

    展开全文
  • 缓存服务器

    2019-06-22 03:19:46
    缓存服务器就是存放频繁访问内容的服务器。 缓存提供了比将访问对象放在Internet Web服务器上更好的方法,它将需要频繁访问的Web页面和对象保存在离用户更近的系统中,当再次访问这些对象的时候加快了速度。 ...
    缓存指的是将需要频繁访问的网络内容存放在离用户较近、访问速度更快的系统中,以提高内容访问速度的一种技术。缓存服务器就是存放频繁访问内容的服务器。
    缓存提供了比将访问对象放在Internet Web服务器上更好的方法,它将需要频繁访问的Web页面和对象保存在离用户更近的系统中,当再次访问这些对象的时候加快了速度。
     

    什么是缓存服务器

    无论企业有多大,Web缓存都有助于优化性能和节省宽带。而且如果选择了正确的缓存解决方案,它可以随着企业网络的增长而扩大,而无需进行昂贵且耗时的重建。
    几年以前,理论是超高带宽的Internet连接会使Web缓存毫无用处,但是结果并非如此。即使最快的速率达到30-45Mbps的光纤Internet连接和速度在100 Mbps到1 Gbps速率的局域网相比仍然很慢,所以性能依旧是一个问题。除此之外,缓存提高了可用性,因为即使托管的Web服务器停机或者由于网络问题而不可达时,缓存的对象拷贝仍然可以访问。如果企业根据流量付费,缓存还可以降低Internet连通性的费用。即使是小公司,缓存也会有利,而且好的缓存解决方案将随着企业级别升级。
     

    缓存服务器原理

    Web缓存服务器的应用模式主要是正向代理和反向代理。正向代理(Proxy)模式是代理网络用户访问internet,客户端将本来要直接发送到internet上源服务器的连接请求发送给代理服务器处理。正向代理的目的是加速用户在使用浏览器访问Internet时的请求响应时间,并提高广域网线路的利用率。正向代理浏览器无需和该站点建立联系,只访问到Web缓存即可。通过正向代理,大大提高了后续用户的访问速度,使他们无需再穿越Internet,只要从本地Web缓存就可以获取所需要的信息,避免了带宽问题,同时可以大量减少重复请求在网络上的传输,从而降低网络流量,节省资费。
    反向代理(Reverse Proxy)模式是针对Web服务器加速功能的,在该模式中,缓存服务器放置在web应用服务器的前面,当用户访问web应用服务器的时候,首先经过缓存服务器,并将用户的请求和应用服务器应答的内容写入缓存服务器中,从而为后续用户的访问提供更快的响应。其工作原理如下图所示。
    [1] 
     

    缓存概念

    这是两种主要的Web缓存:
    直接缓存,将用户频繁访问的来自Internet服务器的Web对象的拷贝保存在企业本地网络中。
    反向缓存,企业内部Web服务器的Web对象的拷贝保存在企业网络边缘的代理服务器上以提高外界访问企业站点的性能。
    Web缓存可以根据不同等级进行配置:
    本地缓存:将Web对象缓存的拷贝保存在本地计算机中。大多数流行的Web浏览器默认情况下保留一个先前访问对象的缓存。例如,Internet Explorer称之为“临时Internet文件”。本地缓存拷贝只是在用户频繁地从同一台机器访问页面时有用。
    代理缓存:代理服务器是为公司内的多个用户/客户计算机缓存Web对象的单独机器。它们是位于客户端和托管的Web服务器之间的计算机,而且它们比本地缓存效率更高,因为在企业本地网络中的任何用户或计算机访问某个Web对象时,缓存拷贝对想访问该对象的任何其他用户/计算机是可用的,无需到Internet服务器上再次下载它。代理缓存可以在网络边缘与防火墙结合使用。
    微软的ISA Server和BlueCoat的工具一样,既包括防火墙也包括缓存代理服务器。缓存服务器也可以是单独的机器,运行免费的缓存软件或商业产品,例如:
    Linux版的Squid免费缓存代理
    MOWS基于Java分布式web和缓存服务器
    Vicomsoft RapidCache Server for Windows或Macintosh
    WinProxy for Windows
    可升级的缓存解决方案
    随着公司的扩大,单一的Web缓存服务器可能无法处理所有的通信或存储足够的Web对象。在这种情况下,可以扩展缓存解决方案以建立一个缓存阵列——一组共同工作以便在组内分配缓存负载的缓存代理服务器。万一某个缓存服务器停机,还提供缺省的容量。
    要在阵列中操作,缓存服务器必须能够彼此使用协议进行通信,例如:
    WCCP(Web缓存协调协议),Cisco缓存产品以及诸如Squid这样的开源代理使用。
    ICP(Internet缓存协议),被Squid和BlueCoat支持。
    CARP(缓存阵列路由协议),被ISA Server Enterprise Edition用来管理缓存服务器阵列的失效转移和负载平衡。
    CARP能够支持几乎无限的线性扩展以满足快速增长型企业的需求。当向某个阵列中添加或移除一台服务器时,CARP自动调整并再指定URL以有效地分布负载。
    缓存阵列能够以等级的或分布式的架构排列。在分布式缓存中,阵列中所有代理服务器处在一个“平等地位”而且负载在它们之间进行分配。在分等级的缓存中,代理以链式进行配置,它们处在不同的等级,所以服务器或阵列连接到其它离Internet更近的服务器或阵列(离Internet最近的那些服务器或阵列被看作“上游的”,那些最远的被看作“下游的”)。这样,缓存内容会尽可能地靠近需要它的用户。
    阵列是高度可升级的,因为可以向阵列添加服务器,或向分等级的架构增加阵列等级,而无需扰乱目 前的缓存解决方案。
    另一个可扩展性问题是使用缓存减少分支机构网络带宽的能力。分支机构代理可能没有直接连接到Internet,但是可以使用拨号连接或办公室到办公室的WAN连接以便从总公司的上游代理服务器上请求Web对象。
    另一个选择是为需要向消费者提供基于Web的应用,可使用诸如由Akamai提供的服务。他们的Web Application Accelerator服务通过下列方法优化性能:
    向他们的边缘服务器动态映射请求,并监视Internet路由以便在最快和最可靠的路由上传输。
    利用压缩技术和预取技术(pre-fetching)以最小化带宽使用率。
    用安全套接层(SSL)保护Web传输。
    缓存支持的有些硬件标准:
    目前缓存支持的硬件标准:
    内存不超过4G,超过的只识别4G。
    硬盘不超过2T,超过的只识别2T
    存储硬盘数量最大支持4块(如果系统盘是电子盘不包含在内)
    另外推荐使用INTEL的机器和网卡。

    转载于:https://www.cnblogs.com/xtdxs/p/6541073.html

    展开全文
  • 在上一篇文章浏览器缓存机制中,有提到缓存代码服务器,对于这方面并没有了解到,所以想要学习一下。 于是百度了一翻,发现只有百度百科里才有一点讲解,但是学术性的文字太多,并不好理解,但是知道两个比较重要的...

     在上一篇文章浏览器缓存机制中,有提到缓存代码服务器,对于这方面并没有了解到,所以想要学习一下。

    于是看到了这样一篇文章。

    缓存服务器介绍
    无论企业有多大,缓存服务器都有助于优化性能和节省宽带。而且如果选择了正确的缓存解决方案,它可以随着企业网络的增长而扩大,而无需进行昂贵且耗时的重建。
    缓存服务器介绍
    我们可以将HTML缓存存储在一台独立的缓存服务器中,利用memcached,我们可以很容易地通过TCP将缓存存储在其他服务器中,而且memcached同样也是使用内存空间来保存缓存数据,减少了不必要的磁盘I/O。另一方面,memcached在存储区中对于每一个key都维护一个过期时间,一旦达到这个过期时间,memcached便会自动删除这个key,这使得我们的过期检查非常容易,只需要在保存缓存数据时指定过期时间即可。
    缓存服务器原理
    Web缓存服务器的应用模式主要是正向代理和反向代理。正向代理(Proxy)模式是代理网络用户访问internet,客户端将本来要直接发送到internet上源服务器的连接请求发送给代理服务器处理。正向代理的目的是加速用户在使用浏览器访问Internet时的请求响应时间,并提高广域网线路的利用率。正向代理的工作原理如图所示。正向代理浏览器无需和该站点建立联系,只访问到Web缓存即可。通过正向代理,大大提高了后续用户的访问速度,使他们无需再穿越Internet,只要从本地Web缓存可以获取所需要的信息,避免了带宽问题,同时可以大量减少重复请求在网络上的传输,从而降低网络流量,节省资费。
    缓存服务器
    图为正向代理工作原理图
    反向代理(Reverse Proxy)模式是针对Web服务器加速功能的,在该模式中,缓存服务器放置在web应用服务器的前面,当用户访问web应用服务器的时候,首先经过缓存服务器,并将用户的请求和应用服务器应答的内容写入缓存服务器中,从而为后续用户的访问提供更快的响应。其工作原理如下图所示。
    缓存服务器
    图为反向代理工作原理图

    在学习的过程中,了解到了正向代理和反向代理两个重要概念。

    以下有一篇文章http://blog.csdn.net/m13666368773/article/details/8060481

    这篇文章里不只文章讲得通俗易懂,而且评论也是入木三分。解开了我的心中疑惑。

    在此,记录一下学习心得。学习代理服务器方面的知识才刚刚开始,以后有机会希望可以更深入的学习。

    展开全文
  • 缓存服务器---redis与memcached的对比

    千次阅读 2018-04-12 17:53:33
    memcached与redis实现的对比非常好的一篇文章,忍不住要转载: 腾云阁 https://www.qcloud.com/communitymemcached和redis,作为近些年最常用的缓存服务器,相信大家对它们再熟悉不过了。前两年还在学校时,我曾经...
  • 缓存服务器Cache Server 6.0发布

    千次阅读 2018-12-11 16:43:48
    无论是在个人的本地电脑,还是在团队的局域网专有服务器上,缓存服务器都能通过优化资源导入过程让使用Unity开发的速度变得更快。远程缓存服务器Cache Server 6.0版本现已发布,缓存服务器的质量和性能获得大幅提高...
  • 高性能代理缓存服务器—Squid

    千次阅读 2018-04-25 14:07:45
    Squid是一款比较知名的开源代理缓存软件,它不仅可以跑在linux上还可以跑在windows以及Unix上,它的技术已经非常成熟。目前使用Squid的用户也是十分广泛的。 Squid与Linux下其它的代理软件如Apache、Socks、TIS ...
  • 继DNS服务器做缓存服务器

    千次阅读 2018-12-27 12:44:26
    缓存服务器是提高DNS 解析的过程。我来看看缓存服务器怎么部署。 如果不会部署DNS主服务器,请查看https://blog.csdn.net/qq_38993101/article/details/85236714 我的前一篇文章。 DNS缓存服务器(Caching DNS ...
  • 阿里云缓存服务器里面的一个坑

    千次阅读 2016-05-20 16:52:57
    公司的服务器是放在了阿里云上面的,阿里云有个十分给力的路由缓存功能,就是通过各种cache头去访问服务器的时候,阿里云会把这个结果保存到缓存服务器中,后面再次访问就不会经过我们自己的服务器,直接走缓存 ...
  • squid高速缓存服务器的的介绍和配置

    千次阅读 2017-08-19 12:03:27
    Squid cache(简称为Squid)是一个流行的自由软件(GNU通用公共许可证)的代理服务器和Web缓存服务器。Squid有广泛的用途,从作为网页服务器的前置cache服务器缓存相关请求来提高Web服务器的速度,到为一组人共享...
  • Linux的本地DNS缓存服务器

    千次阅读 2014-08-12 14:09:06
    Linux的本地DNS缓存服务器 域名系统服务器的软件,在PC上,可以翻译的网站名称进入真正的IP地址上运行。在不同的话,如果你样的互联网地址到你的网页浏览器,你的互联网服务提供商的DNS服务器会考虑它的信息,并寻求...
  • Redis 作为缓存服务器的配置

    万次阅读 2016-08-10 10:59:26
    随着redis的发展,越来越多的架构用它取代了memcached作为缓存服务器的角色,它有几个很突出的特点: 1. 除了Hash,还提供了Sorted Set, List等数据结构 2. 可以持久化到磁盘 3. 支持cluster (3.0) 它的性能和...
  • 案例:Nginx作为Web缓存服务器应用

    千次阅读 2017-08-17 15:52:02
    从0.7.48版本开始,nginx支持类似Squid的缓存功能。nginx的Web缓存服务主要由proxy_cache相关...此外,也可以使用第三方模块ngx_slowfs_cache来实现缓存服务器配置。 首先是安装,安装过程基本上和安装nginx无区别,
  • 缓存服务器设计与实现(一)

    千次阅读 2013-01-30 18:25:59
    这里我们nginx的cache系统为线索,来探讨一个缓存服务器的设计和相关细节,我尽量站在设计和框架的角度来分析,限于篇幅这里不再去撸代码了,相关的细节,欢迎大家一起参与讨论。  一个cache服务器中从后端...
  • Nginx缓存服务器配置

    千次阅读 2013-06-25 17:08:29
    Web缓存位于内容源Web服务器和客户端之间,当用户访问一个URL时,Web缓存服务器会去 后端Web源服务器取回要输出的内容,然后,当下一个请求到来时,如果访问的是相同的URL ,Web缓存服务器直接输出内容给客户端,而...
  • 目前很多网站都使用Squid作为前端缓存服务器并取得了很好的效果,成都全搜索也分别在网通和电信部署了专门的前端缓存服务器用于缓存图片,视频,静态页面,js等静态资源。 网站进行内容更新是常有的事情,当被缓存的...
  • 在内容存储系统前搭建一层缓存服务器来减少对后台的冲击,应该如何构造呢? 有哪些缓存框架可以用来存放视频啊
  • redis作为缓存服务器

    千次阅读 2016-09-19 09:03:17
    Redis最常见的使用场景是作为缓存服务器进行数据缓存,而缓存数据的一大特性是数据具有时效性,在数据加载到Redis中进行缓存开始,隔一定时间后或者根据某个特定策略此数据就会过期失效,然后被删除。在Redis中有...
  • Memcached 与Redis缓存服务器介绍

    千次阅读 2017-03-15 19:06:59
    Memcached缓存简单介绍:memcached是高性能的分布式内存缓存服务器。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。 Redis缓存简单介绍:是一个key-value...
  • 代理缓存服务器知识点整理

    千次阅读 2014-09-26 22:19:58
    【代理缓存服务器知识点整理】 一、http相关 1、正常http请求跟代理http请求的区别 常规的http请求头部:GET /index.html HTTP/1.1 Host:www.xuxiong.com 代理的http请求头部:GET ...
1 2 3 4 5 ... 20
收藏数 793,283
精华内容 317,313
关键字:

缓存服务器