查看: 4932| 回复: 6
跳转到指定楼层
上一主题 下一主题
收起左侧

[经验总结] 系统设计之 sharded counter

 
全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
sharded counter,又叫distributed counter, hit counter,分布式计数器等。分享下自己收集的系统设计资料和经验。
大概思考框架

- 先粗略计算
    - 有很多counter,大概数量
    - 假设一个counter,并发可以达到多少qps
- 为什么需要sharding,不用sharding行不行。counter设计跟别的设计有什么特别不一样的地方?
- write
    - 数据格式
        - counter id,时间, count
            - 能不能不存时间?

            - 为什么要存时间
    - 数据库选择
        - MySQL
            - 单机够不够

        - Redis
            - 单机性能够不够
            - 贵
            - 能persist但是弱
        - NoSQL
            - 比如 Cassandra

    - 优化
       - pre-aggregation
          - message queue + app server
- Read
    - 在每个shard内部有个read cache
- 系统cost
- CRDT
- ****API design for sharded counters****

参考的资料
Educative.io sharded counter (付费)

⭐****[如何设计一个分布式计数服务?](https://www.cnblogs.com/traditional/p/12618375.html)****

[https://www.cnblogs.com/traditional/p/12618375.html](https://www.cnblogs.com/traditional/p/12618375.html)

****第二章 如何设计一个分布式计数服务 - 系统设计面试案例 .pdf****

[https://github.com/geektime-geek ... ibuted/blob/master/第二章 如何设计一个分布式计数服务 - 系统设计面试案例 .pdf]

****37丨计数系统设计 1:面对海量数据的计数器要如何做?****

[https://zq99299.github.io/note-architect/hc/07/01.html#计数在业务上的特点](https://zq99299.github.io/note-a ... 4%E7%89%B9%E7%82%B9)

****38丨计数系统设计 2:50 万 QPS 下如何设计未读数系统?****

[https://zq99299.github.io/note-architect/hc/07/02.html#系统通知的未读数要如何设计](https://zq99299.github.io/note-a ... 5%E8%AE%BE%E8%AE%A1)

****Dropbox 面试题 - 设计点击计数器****

[https://wizardforcel.gitbooks.io ... e/content/sd21.html](https://wizardforcel.gitbooks.io ... e/content/sd21.html)

****系统设计之分布式计数器****

[https://www.51cto.com/article/705970.html](https://www.51cto.com/article/705970.html)

评分

参与人数 5大米 +14 收起 理由
chaoqin + 1 很有用的信息!
14417335 + 10 给你点个赞!
DavidLavine + 1 很有用的信息!
AppleFans + 1 赞一个
非著名农民 + 1 赞一个

查看全部评分


上一篇:System Design学习路径:Twitter Architecture 2022 vs 2012
下一篇:系统设计之 time-series database
全局:
一句话答案

前端写kafka并业务键分片, 随便用个service或者流计算框架算出结果存 弱一致性的nosql ,最后来个service暴露给用户,读也大就加redis

评分

参与人数 1大米 +1 收起 理由
14417335 + 1 给你点个赞!

查看全部评分

回复

使用道具 举报

推荐
beer 2022-11-29 05:19:30 | 只看该作者
全局:
13-carotene 发表于 2022-11-28 12:29
对。很细致的分析。
不能shard SQL吗?
在真实的counter系统中,哪些是用redis类似的cache实现的?

我们一般的想法是,需要用到SQL query的,才用MySQL;不用SQL query的,尽量不用MySQL,用各种各样的NoSQL,in-memory KV之类的。

真实的系统中,用Redis来做counter的挺多的。

Read-heavy的,比如`db-replica-count`,或者`db-status`之类的(一般是async write,或者periodic write)。还有一些periodic invalidation的keys(比如前端的page cache),都是read-heavy的。

Write-heavy的,比如秒杀系统中的product-count。

评分

参与人数 1大米 +1 收起 理由
14417335 + 1 给你点个赞!

查看全部评分

回复

使用道具 举报

推荐
beer 2022-11-29 04:23:50 | 只看该作者
全局:
感觉这些用MySQL backed的,都是不行的。MySQL根本handle不了这么大的throughput。我觉得NoSQL是optional的,看这个counting是否很重要需要persist,如果确实需要就用queue async persist到NoSQL;否则,就只用Redis好了。

对了,这里有一个follow-up,就是是counter会有hot-key的问题,要根据service是read-heavy还是write-heavy来优化。

评分

参与人数 1大米 +1 收起 理由
14417335 + 1 给你点个赞!

查看全部评分

回复

使用道具 举报

全局:
棒极了……点赞,加米
回复

使用道具 举报

🔗
 楼主| 13-carotene 2022-11-29 04:26:56 | 只看该作者
全局:
大家如果感兴趣,我还可以把其他的设计题发出来。
回复

使用道具 举报

🔗
 楼主| 13-carotene 2022-11-29 04:29:27 | 只看该作者
全局:
beer 发表于 2022-11-28 12:23
感觉这些用MySQL backed的,都是不行的。MySQL根本handle不了这么大的throughput。我觉得NoSQL是optional的 ...

对。很细致的分析。
不能shard SQL吗?
在真实的counter系统中,哪些是用redis类似的cache实现的?
”要根据service是read-heavy还是write-heavy来优化。“ 能举个read-heavy 的counter吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表