news 2026/5/12 10:14:27

基于 HyperLogLog 的 Harness 独立访客估算

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于 HyperLogLog 的 Harness 独立访客估算

基于 HyperLogLog 的 Harness 独立访客估算

关键词:HyperLogLog, 独立访客估算, 基数统计, Harness, 概率数据结构, UV统计, Redis
摘要:本文从互联网场景下独立访客(UV)统计的痛点出发,用通俗易懂的生活类比讲解HyperLogLog的核心原理、数学模型与算法实现,结合CI/CD与灰度发布平台Harness的实际业务场景,手把手教你如何集成HyperLogLog实现低成本、高性能的灰度分组UV统计,同时提供完整的代码实现、性能对比、最佳实践与未来发展趋势,帮助读者彻底掌握HyperLogLog的落地应用。

背景介绍

目的和范围

你有没有遇到过这种场景:公司做新功能灰度发布,需要统计10个灰度分组各自的独立访客数,还要和对照组做对比,看看新功能的转化率有没有提升。如果用传统的Set存用户ID,1亿个用户每个占8字节,一个分组就要800M内存,10个分组就是8G,还要按天、按地区拆分维度,内存直接爆了,查询速度也慢得要死。
本文的核心目的就是解决这个痛点:讲解HyperLogLog这种概率数据结构如何用12K内存实现10亿级UV的统计,误差控制在1%以内,并且手把手教你如何在Harness灰度发布场景下落地这套方案,包括原理讲解、代码实现、性能测试、最佳实践全流程。本文不涉及过于晦涩的学术推导,所有概念都用生活类比讲解,哪怕是刚入行的后端开发也能看懂。

预期读者

本文适合后端开发工程师、数据开发工程师、SRE运维工程师、Harness平台使用者,以及对概率数据结构、大基数统计感兴趣的技术人员。不需要你有高深的数学基础,只要懂基础的Python语法就能跟着实战。

文档结构概述

本文先从生活故事引入核心概念,然后讲解HyperLogLog的算法原理、数学模型,接着做项目实战:从纯Python实现HyperLogLog,到Redis HLL的使用,再到集成Harness SDK实现灰度UV统计,最后讲解应用场景、最佳实践、未来趋势,还有思考题和常见问题解答。

术语表

核心术语定义
  1. 基数统计:统计一个集合中不重复元素的个数,比如网站一天的独立访客数就是访问用户集合的基数。
  2. HyperLogLog(简称HLL):一种概率数据结构,专门用于超大基数的近似统计,内存占用极低,误差可控。
  3. Harness:业界领先的软件交付平台,提供CI/CD、Feature Flag(功能开关)、灰度发布、可观测性等一站式能力,很多互联网公司用它做应用发布管理。
  4. UV(Unique Visitor):独立访客,指访问某个页面/功能的不重复用户数。
缩略词列表
  • HLL:HyperLogLog
  • UV:Unique Visitor
  • PV:Page View
  • SRE:Site Reliability Engineer
  • FF:Feature Flag(功能开关)

核心概念与联系

故事引入

我们先拿奶茶店举例子:奶茶店老板想统计每天有多少不同的客人来买奶茶,但是客人太多了,不可能每个人来了都记名字,本子根本写不下。老板想了个妙招:
让每个来的客人报自己身份证号的后10位,数一下这10位里最多有多少个连续的0,比如有个客人的后10位是0001234567,连续0的个数是3,如果当天最大的连续0个数是10,那大概就有2^10=1024个不同的客人。
你可能会问这准吗?如果只有一个客人运气好身份证后几位有很多0,那岂不是误差很大?老板又改进了方法:把客人按姓氏分成100组,姓张的一组、姓李的一组,每组都算最大的连续0个数,然后把这100个数值求平均再估算总人数,误差一下子就降到了1%以内。
这个妙招就是HyperLogLog的核心思想,奶茶店的统计需求就是基数统计,而Harness的灰度发布场景就是那个每天有几十万客人的连锁奶茶店。

核心概念解释(像给小学生讲故事一样)

核心概念一:基数统计

基数统计就像数班级里有多少个不同姓氏的同学:你不需要记住每个同学的名字,只要数有多少个不重复的姓氏就行。传统的方法是把每个姓氏写在本子上,遇到新的就加进去,最后数本子上的条目数。但是如果是整个学校的学生,有上万个不同姓氏,本子就会写得很厚,翻起来也慢。

核心概念二:HyperLogLog

HyperLogLog就像刚才奶茶店老板用的妙招:不用记每个用户的ID,只要记录每个用户ID哈希之后的连续前导零的最大值,再通过数学公式就能估算出总共有多少个不同的用户。它的内存占用低到离谱:统计10亿个不同用户只要12K内存,误差只有0.81%,相当于你用一张便签纸就能统计整个上海市的常住人口数,误差只有不到2万人。

核心概念三:Harness灰度访客统计

Harness的灰度发布就像奶茶店做新品试喝:你把新品只给10%的客人尝,要统计有多少不同的客人尝了新品,转化率比老品高多少。如果每个新品都要单独记客人名字,10个新品就要10个本子,成本太高。用HyperLogLog的话,每个新品只要一张便签纸就能搞定,成本几乎可以忽略。

核心概念之间的关系

这三个概念就像奶茶店的三个角色:基数统计是老板的需求(要知道有多少不同客人),HyperLogLog是店员用的妙招(低成本统计),Harness灰度场景是奶茶店的新品试喝活动(落地场景)。

  • 基数统计和HyperLogLog:基数统计是目标,HyperLogLog是实现这个目标的低成本方案,就像老板要数客人,店员用妙招帮他数。
  • HyperLogLog和Harness场景:Harness的灰度场景需要统计大量分组的UV,HyperLogLog刚好能解决这个场景的内存和性能痛点,就像新品试喝活动需要快速统计客人数量,店员的妙招刚好适用。
  • 基数统计和Harness场景:Harness的灰度发布、功能开关的效果评估,核心指标之一就是不同分组的UV,也就是基数统计的需求。

核心概念原理和架构的文本示意图

用户请求 -> Harness灰度路由 -> 命中对应Feature Flag -> 对用户ID做哈希计算 -> 写入对应HLL桶 -> 定时聚合所有HLL数据 -> 上报到Harness可观测平台 -> 运营/开发在Dashboard查看UV对比

Mermaid 架构图

访问

关联

上报数据

USER

string

user_id

string

attribute

FEATURE_FLAG

string

flag_id

string

group_name

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/12 10:14:25

XUnity.AutoTranslator:Unity游戏实时本地化引擎的技术架构与实践

XUnity.AutoTranslator:Unity游戏实时本地化引擎的技术架构与实践 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator XUnity.AutoTranslator是一个专为Unity游戏设计的实时翻译引擎,通…

作者头像 李华
网站建设 2026/5/12 10:14:17

SMNet复合故障诊断用于工业机器人关节

论文标题: SMNet: A Novel Compositional Generalization Model for Industrial Robot Multijoint Fault Diagnosis期刊:IEEE Internet of Things Journal (中科院一区)DOI:10.1109/JIOT.2026.3652582 作者:胡小溪&a…

作者头像 李华
网站建设 2026/5/12 10:12:45

项目介绍 MATLAB实现基于CNN-BiGRU卷积神经网络结合双向门控循环单元进行锂电池SOC估计(含模型描述及部分示例代码)专栏近期有大量优惠 还请多多点一下关注 加油 谢谢 你的鼓励是我前行的动

MATLAB实现基于CNN-BiGRU卷积神经网络结合双向门控循环单元进行锂电池SOC估计的详细项目实例 请注意此篇内容只是一个项目介绍 更多详细内容可直接联系博主本人 或者访问对应标题的完整博客或者文档下载页面(含完整的程序,GUI设计和代码详解&#xff…

作者头像 李华
网站建设 2026/5/12 10:10:10

GaN功率器件EMI挑战与实战解决方案:从原理到测量

1. 氮化镓技术:一场静悄悄的效率革命如果你是一位电源工程师、射频工程师,或者任何需要和高速开关电路打交道的硬件开发者,那么最近几年,一个词一定频繁地出现在你的视野里:氮化镓,也就是GaN。它不再仅仅是…

作者头像 李华