面试题分析:统计网站访问次数

这篇具有很好参考价值的文章主要介绍了面试题分析:统计网站访问次数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

难度:较低

  • 平台的访问量非常高,需要实时统计网站的访问次数,请设计一个计数器解决:
  • 初级工程师,可能回答使用synchronized锁或重入锁,进一步探讨,synchronized锁太重,有没其他方式,可能回答atomic类,进一步问,atomic类原理,什么场景下适合用,什么场景下不适合用
  • atomic和synchronized都是单机方案,当一个服务器不能满足性能要求时,线上使用集群,如何在集群场景下实现计数器
  • 可能回答在DB中计数,则问,如何避免更新丢失,即A和B两个线程同时读取当前计数,加1后更新DB,出现更新丢失
  • 可能回答使用redis原子操作incr,则问当访问量极大,不能满足性能需求,如何做sharding,考虑一致性hash
  • 面试者,不仅是回答问题,还可以探讨,所谓的实时统计,要求的精度是多高,如果有延迟10-20秒的误差,是否可接受,若可接受,还有其他哪些方案能达到高性能和高可用

方案分析

网站访问量统计功能大多是分布式集群情况下,才需要进行统计,如果当前系统只有一台机器,通过AOP做核心接口的切面拦截就可以实现,考虑的难点也很少。

在集群模式下,使用redis存储统计数据是可行的,但随之而来的成本问题和性能问题就需要考虑。

  1. 成本问题:当一个网站访问量较大时,如QPS达到1w/s时,每次请求都需要调用redis进行计数累加。这里无疑会加重redis负担,单机redis无法保证和支持需求,从而又需要引入集群版redis来保证服务可靠性、可用性,这又增加系统复杂度,增加开发成本运维成本。

面试题分析:统计网站访问次数,面试,redis,后端

面试题分析:统计网站访问次数,面试,redis,后端

  1. 性能问题:每次接口请求都调用redis的话,相当于接口整体耗时都要增加,虽然redis一次请求也就5ms左右,但对于整体接口提高一定耗时来增加一个不算是关键功能的业务,并不太划算,还是有很大的优化空间。

面试题分析:统计网站访问次数,面试,redis,后端

  1. 一致性问题:综合上面两个问题,势必需要采用集群版redis,而接口统计也不能每次都进行累积,可以通过异步或定时/定量的方式进行统计,例如优先完成接口处理,然后再通过异步线程池的方式统计,异步的时候也并不一定每次都统计,可以间隔2s,5s进行数据统计,或者达到100次,500次这样的阈值再统计,这样能提升接口性能,减轻redis集群压力,但也有了新的问题,数据不一致了,或者说这一秒的统计量并不是真正的访问量。

面试题分析:统计网站访问次数,面试,redis,后端

Redis方案:

拆分统计key,数十台服务器同时访问更新一个redis-key不如根据不同服务器地址特征来进行拆分,每台服务器修改自己对应的key,在汇总统计功能里,遍历所有的key列表来累加所有访问量,也可以得到实时的访问统计。

面试题分析:统计网站访问次数,面试,redis,后端

上面的方案还是存在对redis大量请求的问题,可以创建一个异步线程池用来请求redis进行数据上报,每台服务器的接口使用变量来记录接口访问量,当达到100次时创建一个统计任务,提交到线程池中进行处理,阈值越大对接口的性能影响越小,同样的数据不一致性越高。

面试题分析:统计网站访问次数,面试,redis,后端

nginx方案

正常网站请求都会通过nginx作为前端请求入口,nginx会记录每次访问日志,可以通过在每台服务器上挂日志脚本的形式来分析日志数据,或者直接监控日志文件变更内容,也可以实时的上报统计数据,并且不侵入现有服务,对当前服务接口没有影响。

面试题分析:统计网站访问次数,面试,redis,后端文章来源地址https://www.toymoban.com/news/detail-529846.html

到了这里,关于面试题分析:统计网站访问次数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用 Redis 统计网站 UV 的方法

    文章目录 前言 思路 HyperLogLog 使用 Redis 命令操作 使用 Java 代码操作 HyperLogLog 实现原理及特点 使用 Java 实现 HyperLogLog 小结 网站 UV 就是指网站的独立用户访问量 Unique Visitor ,即相同用户的多次访问需要去重。 提到 UV 去重,猜大家都会想到 Set 集合类。 使用 Set 集合是一个不

    2024年02月08日
    浏览(41)
  • 使用Redis统计网站的UV/DAU

    统计UV、DAU需要用到Redis的高级数据类型 配置拦截器

    2024年02月11日
    浏览(43)
  • 一键部署 Umami 统计个人网站访问数据

    谈到网站统计,大家第一时间想到的肯定是 Google Analytics。然而,我们都知道 Google Analytics 会收集所有用户的信息,对数据没有任何控制和隐私保护。 Google Analytics 收集的指标实在是太多了,有很多都是不必要的,没有博士学位可能都不太容易理解这些指标。 相比较而言,开

    2024年02月13日
    浏览(44)
  • Zabbix结合Grafana统计日志网站访问量

    Zabbix除了可以通过HTTP代理及WEB场景监控网站的响应结果、响应时间和传输速度等,也可以通过读取网站的后台日志,获取有用的统计信息。 下面我以Grafana为例,通过日志统计网站的访问量。 操作如下: 1、读取grafana日志 首先要基于Zabbix Agent针对日志进行读取,其安装请参

    2024年02月06日
    浏览(43)
  • nginx网站服务(下载,配置,命令,实现访问状态统计,访问控制,域名 IP端口访问,身份验证)

    目录 概念 Nginx的优势和特点: 下载配置nginx(两种方式编译和yum) 编译安装,安装依赖  创建运行用户、组 解压nginx压缩包 配置Nginx  编译安装 修改权限 让系统识别nginx的操作命令 配置 nginx命令 nginx的配置文件 全局配置 模块 location的配置 1. root 指令: 2. alias 指令: 实现

    2024年02月19日
    浏览(53)
  • 面试精灵:Java后端靠谱、强大的面试题网站(稳拿offer)

    ​ 面试精灵:一个给力的Java后端面试题网站。 网址: https://offer.skyofit.com 这套题真实、高频、全面、有详细答案、保你 稳过面试 ,让你 成为offer收割机 。题目包括:Java基础、多线程、JVM、数据库、Redis、Shiro、Spring、SpringBoot、MyBatis、MQ、ELK、分布式、SpringCloud、设计模式

    2024年02月04日
    浏览(40)
  • JAVA面试部分——后端-Redis

    6.1 为什么要使用Redis? Redis(Remote Dictionary Server)是一个开源的内存数据存储系统,它可以用作数据库、缓存和消息中间件。以下是一些使用Redis的主要优势: 快速读写操作: Redis是基于内存的存储系统,因此能够提供非常快速的读写操作。它将数据存储在内存中,而不是磁

    2024年01月22日
    浏览(48)
  • Java后端开发面试题篇——Redis

    Redis的数据持久化策略有哪些 RDB的执行原理? bgsave开始时会fork主进程得到子进程,子进程共享主进程的内存数据。完成fork后读取内存数据并写入 RDB 文件。 fork采用的是copy-on-write技术: 当主进程执行读操作时,访问共享内存; 当主进程执行写操作时,则会拷贝一份数据,执

    2024年02月12日
    浏览(39)
  • 《尚贤达猎头网站流量统计模块》,通过HTTP自定义模块实时获取asp.net网站访问流量,并保存到数据库

    开发了个网站流量统计模块,实时获取asp.net网站访问流量,并保存到数据库。 一、功能: 通过HTTP自定义模块实时获取网站流量 二、支持平台:windows+IIS 三、安装方法: 1、将文件www.sunsharer.cn.dll复制到网站bin目录下; 2、将配置好的sqlstr.txt复制到网站bin目录下; 3、将数据

    2024年01月16日
    浏览(44)
  • 2023-06-13:统计高并发网站每个网页每天的 UV 数据,结合Redis你会如何实现?

    2023-06-13:统计高并发网站每个网页每天的 UV 数据,结合Redis你会如何实现? 答案2023-06-13: 如果统计 PV (页面浏览量)那非常好办,可以考虑为每个网页创建一个独立的 Redis 计数器,并将日期添加为键(key)的后缀。当网页收到请求时,对应的计数器将被递增。对于每天的

    2024年02月08日
    浏览(89)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包