您现在的位置是: 首页 > 用车知识 用车知识

ats varnish

佚名 2024-05-30 人已围观

简介atsvarnish好久不见了各位,今天我想跟大家探讨一下关于“atsvarnish”的问题。如果你还不了解这方面的内容,那么这篇文章就是为你准备的,请跟我一起来探索一下。1.apachetrafficserver怎么配置webuiapachetrafficserver怎么配置webui一介绍ApacheTrafficServer(ATS或TS)是一个高性能的、模块化的H

ats varnish

       好久不见了各位,今天我想跟大家探讨一下关于“ats varnish”的问题。如果你还不了解这方面的内容,那么这篇文章就是为你准备的,请跟我一起来探索一下。

1.apache traffic server怎么配置webui

ats varnish

apache traffic server怎么配置webui

       一 介绍

       Apache Traffic Server(ATS或TS)是一个高性能的、模块化的 HTTP 代理和缓存服务器。Traffic Server 最初是 Inktomi 公司的商业产品,该公司在 2003 年被 Yahoo 收购,之后 Traffic Server 一直在 Yahoo 内部使用长达 4 年,直到 2009 年 8 月 Yahoo 向 Apache 软件基金会(ASF)贡献了源代码,并于 2010 年 4 月成为了 ASF 的顶级项目(Top-Level Project)。 Apache Traffic Server 现在是一个开源项目,开发语言为C++。

       Traffic Server 的开发团队曾经由 Chuck Neerdaels 领导,他也是 Harvest 项目的早期创始人之一,Harvest 项目后来发展为十分流行的 Squid 项目;Leif Hedstrom 直接管理着现在的 Traffic Server 开发团队。目前 Chuck Neerdaels 和 Leif Hedstrom都已加盟知名 CDN 服务提供商 Akamai。

       HTTP 代理服务器是 HTTP 服务器的一种实现,处于客户端(一般为浏览器)与另一个 HTTP 服务器之间(通常指源服务器,Origin Server)。HTTP 代理通常分为正向代理、反向代理和透明代理,我们主要关注的是反向代理(Reverse Proxy,见下图)反向代理服务器根据明确配置的映射规则来处理用户请求。反向代理服务器通常会设置一个较大的缓存区,服务器处理请求的同时将请求的内容缓存在服务器本地,当下次用户请求同一个对象时,服务器可直接从缓存区里取出对象,而不用去源服务器去取,起到了加速的效果。另外,配置反向代理的映射规则也能实现负载均衡的功能。除了 Traffic Server,常见的开源代理服务器还有 Squid,Varnish,Nginx,HAProxy。

       Apache <wbr>Traffic <wbr>Server <wbr>简介

        Traffic Server 在 Yahoo 内部使用了超过 4 年,主要用于 CDN 服务,CDN 用于分发特定的 HTTP 内容,通常是静态的内容如、JavaScript、CSS。下面是Traffic Server 在 Yahoo CDN 应用的一些情况:

       超过 4 年的使用中,缓存中没有出现已知的数据损坏(data corruption);

       作为反向代理,服务器方便部署和管理,并且大部分配置的更改可直接在线上服务器完成,而不用重启服务;

       在高并发情况下扩展良好,支持 HTTP/1.1 协议特性,如 SSL、Keep-Alive;

       在世界范围内部署了超过 100 台服务器;

       在实际CDN中,每秒处理超过 350,000 次请求,达到 30 Gbps,最大容量至少十倍于普通使用,以应对高峰时的大量请求;

       在实际 CDN 中,每台服务器有 20,000 到 30,000 的 keep-alive 并发连接,其中有 1,000 到 2,000 的连接是一直很活跃的;

       实验环境中,单台服务器每秒处理 105,000 次请求,请求的对象是被缓存住的小文件;

       实验环境中,请求大文件时,单台服务器达到 3.6 Gbps(4x GigE NIC bonded)。

       二 组件、机制

       Traffic Server(TS) 的组成

       1.Traffic Server缓存

       TS 缓存包含一个高速的对象数据库,数据库根据 URL 和相关头部来索引对象,对于同一对象可以缓存不同版本(如不同的编码、语言)。

       当缓存空间满后,TS 会移除过期的数据。

       当磁盘出错时,TS 将不再使用该块磁盘,转而使用剩下的磁盘。所有磁盘都出错时,TS 将切换至 proxy-only 模式,即只代理,不缓存。

       可分区,即可以给指定的协议和源服务器划分一定数量的磁盘空间

       2.RAM 缓存

        内存缓存区储存比较热门的对象,在流量的高峰期时能加快处理速度和降低磁盘负载。

       3.主机数据库

       储存 DNS 信息,方便主机名到 IP 地址的快速转换

       储存每个主机的 HTTP 版本,方便高级协议特性的使用

       储存主机的可靠性和可用性信息

       4.DNS 解析器

        TS 原生实现了 DNS 解析器,不依赖较慢的传统解析库。同时也降低了 DNS 的流量。

       5.Traffic Server 进程

       traffic_server 进程负责接受连接,处理协议请求,然后从缓存或源服务器获取对象并返回

       traffic_manager 进程是 TS 的命令和控制设施,负责启动、监控和配置 traffic_server 进程,它也负责代理的端口配置、统计信息的接口、集群管理和虚拟 IP 的故障转移。

       如果 traffic_manager 检测到 traffic_server 进程失效,它立即重启 traffic_server 进程并且维护一个连接队列,保存此时到来的请求,完全重启后这个队列里的连接将按顺序被处理。

       traffic_cop 进程监视 traffic_server 和 traffic_manager 进程,此进程周期性的查询 traffic_server 和 traffic_manager 进程的健康状况,如果查询在一定间隔时间内未返回或者返回信息不正确,traffic_cop 将重启 traffic_manager 和 traffic_server 进程。

       Apache <wbr>Traffic <wbr>Server <wbr>简介

       6.管理工具

       Traffic Line 是命令行程序,可以用来快速监视 Traffic Server 的性能和网络流量,也能配置 TS。

       Traffic Shell 也是命令行工具,进入该 shell 后有自己一套语法,可代替 Traffic Line 完成监控、配置任务。

       通过 Traffic Line 和 Traffic Shell 对配置作出的修改将会自动写入配置文件中。

       Traffic Server 的底层机制

       Apache Traffic Server 不同于大部分开源代理服务器,它结合了两种技术来处理高并发:

       异步事件处理(Asynchronous event processing)

       多线程(Multi-threading)

       Traffic Server 在多 CPU、多核的硬件上扩展良好,能充分利用所有可用的 CPU 和其他资源。

       HTTP 代理缓存相关机制

       1. Traffic Server 处理请求的过程

        1)用户请求一个 web 对象,TS 收到请求

        2)TS 通过对象的地址,在对象数据库(缓存)中去定位该对象

        a.如果对象在缓存中,TS 会检查对象是否新鲜(fresh)

        如果新鲜,TS 从缓存里返回该对象给用户,此时称为缓存命中(cache hit)

        如果不新鲜(stale),TS 会连接源服务器去验证对象是否仍然新鲜,即重新验证(revalidation),如果仍然新鲜,TS 立即将缓存中的副本返回给用户

        b.如果对象不在缓存中(缓存未命中,cache miss),或者缓存的副本不再有效,TS 会去源服务器获取对象,然后同时做下面两件事

        将对象返回给用户

        将对象放到本地缓存中

       2. Traffic Server 判断 HTTP 对象是否新鲜(fresh)的过程

       如果有 Expires 或者 max-age 头部直接定义缓存的过期时间,TS将对比当前时间和过期时间去判断对象是否新鲜

       如果没有上述头部,TS 将检查 Last-Modified 和 Date 头部(其中Date是源服务器返回对象的时间,如果没有 Last-Modified 头部,TS 会用对象写入缓存的时间以作代替),然后用以下公式算出新鲜的时间范围(freshness_limit,可理解为保质期):

        freshness_limit = ( Date - Last-Modified ) x 0.1

       0.1 这个参数可以作调整,并且能限制 freshness_limit 的上下限,默认最小是 1 小时,最大是 1 天

       如果没有 Expires 头部或者没有 Last-Modified、Date 头部,TS 将使用默认的 fressness limit

       另外,TS 还会检查 cache.config 配置文件中的 revalidate 规则,该规则可以对特定的 HTTP 对象设置特定的验证时间(特定的域名、IP、一定规则的 URL、特定的客户端等等)

       3. 缓存过期(stale),Traffic Server 去源服务器重新验证对象可能的情况

       仍然 fresh,TS 重置 freshness_limit,并返回对象

       对象新副本可用,TS 缓存新对象,并同时返回给用户

       源服务器上的对象不再存在,TS 也不再返回该副本给用户

       源服务器没有响应,TS 返回过期的对象并发出警告。

       更详细的说明请查看 Traffic Server 管理文档中的 HTTP Proxy Caching 部分

       三 安装、使用

        Apache Traffic Server 开源后添加了 64 位支持,也移植到了常见的 Linux 发行版、FreeBSD、OpenSolaris 和 Mac OS X,开源之前 Yahoo Traffic Server 一直运行在 32-bit Linux 上。

       (以 Apache Traffic Server 2.1.1 unstable 为例在 32-bit Linux 环境下进行安装测试)

       安装

       1. 下载、解压

       wget ing_ip_to_bind STRING 0.0.0.0 # 绑定的 IP,可省略,默认即为 0.0.0.0

       CONFIG proxy.config./js # 通过 DNS 轮询可实现负载均衡

        reverse_map /js # reverse_map 能在源服务器 有 HTTP 重定向跳转时,修改重定向请求,即重写 Location 头部内容

        map /css

        reverse_map /css

        map /img

        reverse_map /img

        storage.config 配置

        /data1 67108864 # 指定一个或多个目录,注明缓存大小,也可直接指定 raw 分区,详见storage.config 中的注释说明

       更详细的配置可参考官方管理指南 /articles/8611– 每个架构师都应该研究下康威定律/p/5042735.html

       二八定律 – 80%的结果取决于20%的原因

       系统设计遵循的原则

       1.高并发原则

       无状态

       无状态应用,便于水平扩展

       有状态配置可通过配置中心实现无状态

       实践: Disconf、Yaconf、Zookpeer、Consul、Confd、Diamond、Xdiamond等

       拆分

       系统维度:按照系统功能、业务拆分,如购物车,结算,订单等

       功能维度:对系统功能在做细粒度拆分

       读写维度:根据读写比例特征拆分;读多,可考虑多级缓存;写多,可考虑分库分表

       AOP维度: 根据访问特征,按照AOP进行拆分,比如商品详情页可分为CDN、页面渲染系统,CDN就是一个AOP系统

       模块维度:对整体代码结构划分Web、Service、DAO

       服务化

       服务化演进: 进程内服务-单机远程服务-集群手动注册服务-自动注册和发现服务-服务的分组、隔离、路由-服务治理

       考虑服务分组、隔离、限流、黑白名单、超时、重试机制、路由、故障补偿等

       实践:利用Nginx、HaProxy、LVS等实现负载均衡,ZooKeeper、Consul等实现自动注册和发现服

       消息队列

       目的: 服务解耦(一对多消费)、异步处理、流量削峰缓冲等

       大流量缓冲: 牺牲强一致性,保证最终一致性(案例:库存扣减,现在Redis中做扣减,记录扣减日志,通过后台进程将扣减日志应用到DB)

       数据校对: 解决异步消息机制下消息丢失问题

       数据异构

       数据异构: 通过消息队列机制接收数据变更,原子化存储

       数据闭环: 屏蔽多从数据来源,将数据异构存储,形成闭环

       缓存银弹

       用户层:

       DNS缓存

       浏览器DNS缓存

       操作系统DNS缓存

       本地DNS服务商缓存

       DNS服务器缓存

       客户端缓存

       浏览器缓存(Expires、Cache-Control、Last-Modified、Etag)

       App客户缓存(js/css/image…)

       代理层:

       CDN缓存(一般基于ATS、Varnish、Nginx、Squid等构建,边缘节点-二级节点-中心节点-源站)

       接入层:

       Opcache: 缓存PHP的Opcodes

       Proxy_cache: 代理缓存,可以存储到/dev/shm或者SSD

       FastCGI Cache

       Nginx+Lua+Redis: 业务数据缓存

       Nginx为例:

       PHP为例:

       应用层:

       页面静态化

       业务数据缓存(Redis/Memcached/本地文件等)

       消息队列

       数据层:

       NoSQL: Redis、Memcache、SSDB等

       MySQL: Innodb/MyISAM等Query Cache、Key Cache、Innodb Buffer Size等

       系统层:

       CPU : L1/L2/L3 Cache/NUMA

       内存

       磁盘:磁盘本身缓存、dirtyratio/dirtybackground_ratio、阵列卡本身缓存

       并发化

       2.高可用原则

       降级

       降级开关集中化管理:将开关配置信息推送到各个应用

       可降级的多级读服务:如服务调用降级为只读本地缓存

       开关前置化:如Nginx+lua(OpenResty)配置降级策略,引流流量;可基于此做灰度策略

       业务降级:高并发下,保证核心功能,次要功能可由同步改为异步策略或屏蔽功能

       限流

       目的: 防止恶意请求攻击或超出系统峰值

       实践:

       恶意请求流量只访问到Cache

       穿透后端应用的流量使用Nginx的limit处理

       恶意IP使用Nginx Deny策略或者iptables拒绝

       切流量

       目的:屏蔽故障机器

       实践:

       DNS: 更改域名解析入口,如DNSPOD可以添加备用IP,正常IP故障时,会自主切换到备用地址;生效实践较慢

       HttpDNS: 为了绕过运营商LocalDNS实现的精准流量调度

       LVS/HaProxy/Nginx: 摘除故障节点

       可回滚

       发布版本失败时可随时快速回退到上一个稳定版本

       3.业务设计原则

       防重设计

       幂等设计

       流程定义

       状态与状态机

       后台系统操作可反馈

       后台系统审批化

       文档注释

       备份

       4.总结

       先行规划和设计时有必要的,要对现有问题有方案,对未来有预案;欠下的技术债,迟早都是要还的。

       本文作者为网易高级运维工程师

       今天关于“ats varnish”的讲解就到这里了。希望大家能够更深入地了解这个主题,并从我的回答中找到需要的信息。如果您有任何问题或需要进一步的信息,请随时告诉我。