第二十三章 论道(3 / 4)

本的视线最后落在他身上。

“陈,你呢?”

所有人的目光都转过来。

陈哲沉默了两秒。

“我想到的跟大家不太一样。”他说。

本的眉毛挑了一下。

“你可以说来听听。”

陈哲往前走了一步,站在白板旁边。

“大家说的都是存储和查询的逻辑,我换个角度——成本。”

他顿了顿。

“短链接服务最烧钱的是什么?不是服务器,不是数据库,是流量。每次访问都要302重定向,每次重定向都是一次http请求。如果服务做大了,每天几亿次访问,光是流量钱就能烧破产。”

人群安静下来。

“所以我会在重定向之前加一层cdn。”陈哲继续说,“短码的访问路径先走cdn,如果cdn有缓存,直接返回重定向响应,不回源。缓存时间可以设长一点,比如24小时。的流量都被cdn扛住了,源站只需要处理缓存未命中的请求。”

本的眉头微皱。

陈哲继续。

“然后是短码生成。大家说的哈希和自增id都有问题——哈希有冲突,自增id太规律。我会用预生成的方式:激活一个服务,提前生成一批短码放在队列里。用户来的时候,直接从队列里取一个分配出去。”

“这样生成短码和分配短码解耦了。生成服务可以用雪花算法保证全局唯一,分配服务只需要从队列里pop。就算分配服务挂了,队列里的短码还能顶一阵……”

“然后是数据库。短码和长url的映射关系可以存ysql,但高频访问的短码要放redis。如果要做大,可以按短码前缀分片,比如0开头的放一组,1开头的放另一组。”

“最后是监控。每个短码的访问量要统计,但不能影响主流程。可以用消息队列,异步写日志,然后脱机分析。”

他说完了。

人群安静了几秒。

本盯着他,表情有点奇怪。

麦克站在人群后面,手里的咖啡杯停在半空中,眼睛瞪得比刚才大了一圈。

“你……”麦克张了张嘴,象是想说什么,但又咽了回去。

汤姆第一个开口。

“cdn那层,”他皱着眉,“重定向响应能缓存吗?”

“能。”陈哲说,“302重定向也是http响应,只要设置cache-ntrol头,cdn就会缓存。用户访问短码的时候,cdn直接返回302,连源站都不碰。”

汤姆沉默了两秒,然后点了点头。

莱拉在旁边喃喃自语:“预生成队列……这个思路倒是第一次听说。”

本的眉头舒展开来。

他盯着陈哲看了几秒,然后笑了。

“有意思。”

他把白板放下,拿起保温杯喝了一口。

“你在哪家公司实习过?”

“没实习过。”陈哲说。

本愣了一下。

“那你在哪干过?”

“无可奉告。”

本的表情有点微妙。他把保温杯放下,目光在陈哲身上转了一圈,最后落在那台老旧的thkpad上。

沉默了两秒。

“行。”本说,“我记住了。”

他没再多说什么,转身朝人群挥了挥手:“走吧,喝咖啡去。楼下那家店不错,我请。”

人群开始往出口移动。有人还在小声讨论刚才那个设计,有人已经开始聊别的话题。

陈哲站在原地,没动。

麦克走过来,在他旁边站定。

“小子,你……”麦克的声音压得很低,“你从哪学的这些?”

陈哲看了他一眼。

“网上。”

麦克盯着他看了几秒,然后摇了摇头。

“我拉你进群的时候还以为你是个萌新,”他低声说,“结果你他妈是个扮猪吃老虎的。”

陈哲没说话。

麦克拍了拍他的肩膀。

“走吧,喝咖啡去。”

……

pier 57楼下有一家叫“be bottle”的咖啡店,蓝白相间的招牌,门口排着七八个人。本带着一群人走过去,直接推门进了店里——他显然是熟客,店员看见他,点了点头,指了指角落里的几张空桌子。

十几个人分散坐下。本去柜台点单,回来的时候手里拿着一沓小票,一张一张分给在座的人。

“自己点的自己拿。”他说。

陈哲拿到的是美式,黑咖啡,不加糖不加奶。他端起