我做了一个有趣网站盲盒

每一个有趣的网站都值得被发现。

最近利用业余时间搭建了一个网站,有趣盲盒网站 GoSomewhere.Run, 正如域名一样,奔向某处,而某处,正是那一个个有趣的网站。

有趣的网站怎么定义呢?那些好玩的、新奇的、有创意的、有特定功能的等,都可以称为有趣的网站。而这些网站一般都是很小众的,很难被大家发现。

本文将从背景,方案和实现进行简单介绍。

背景

在网上偶然遇到一个网站,有趣网址之家 – 收藏全球最有趣的网站,网站运营有十余年了,收录了很多有意思好玩的网站,但是我发现有两个问题,一是网站有205页(截至2022年5月),每页10个文章,有多达2000个有趣的网站,用户根本不可能去挨页去翻,去寻找自己感觉好玩的网站;二是一些收录的网站,因为域名过期、无人维护、广告太多、在国外加载很慢等原因,导致有很多无效的网站,影响用户体验。

综合以上以上原因,我设计搭建了一个有趣网站盲盒。

就像是哆啦A梦的口袋,收集了有趣好玩的网站,用户每次点击都会随机产生一个网站,犹如时光机一般,将用户带到某处。

那么,现在有类似的网站吗?查了查,还真找到了两个。一个是国外的 https://sharkle.com/,一个是国内的网站任意门https://gate.ofo.moe/。体验了下,是我想要的网站类型。那还有必要再造一个轮子?查看网站源码,我发现了一个秘密,他们都是用固定的数组存储的一些网站!这不就没意思了吗。用户体验几次,重复概率很大;固定长度的数组,不能做维护,网站失效也继续访问,用户体验不太友好。

于是,有趣网站盲盒项目应运而生。

方案和实现

网站需要拥有的功能:

  • 用户点击,随机产生一个网站并跳转;
  • 拥有动态的网站数据集合,能够增加和删除;
  • 拥有定期清理网站数据集功能,删除过期无效的网站,访问打开时间长的网站;
  • 用户点击次数限制,不可以无限次点击,设置4小时10次点击;
  • 全自动化托管;闭环系统,运行起来后不需要人为操作,维护成本低;

基于以上功能,我设计了网站架构,并根据目前的技术栈设计了如下的架构,并简要做下介绍。

前端

前端我期望的是,页面显示哆啦A梦的口袋,用户点击口袋,动画显示哆啦A梦从口袋掏出随机获取的网站。但是无奈自己前端不太熟,于是暂时先复用了国外的 https://sharkle.com的页面,增加了一些优化;用sweatalert2实现个性化弹窗,用ajax实现异步调用后端API获取随机网站;

后端

后端采用tornado搭建,并设计了一些模块,包括

  • 日志模块log;记录操作记录;
  • 数据收集模块collector;利用爬虫获取web要新增的网站,并对新增网站设计规则入盲盒库;
  • 数据清理模块cleaner;全量扫描数据库,设计策略,清理无效的网站;
  • 随机获取模块generator;随机从数据库中获取一个网站,并标记用户获取次数记录;
  • 定时任务模块timer;定期调用数据收集模块和数据清理模块;目前数据收集模块是每天/次,数据清理模块是周/次;
  • 手动添加模块manualor;手动增加、删除网站;

数据库

采用了mongodb和redis;mongodb存储网站,建立索引增加获取效率;redis记录用户点击次数,利用key的过期时间做点击次数限制;

盲盒网站主要架构如下:

部署

考虑到服务的稳定性,决定采用负载均衡的方式(虽然不知道后期会又多少流量,负载均衡也是伪均衡吧,因为全部部署在一台服务器上,没钱再多部署几台服务器,暂时先这样用吧)。

我们把每个BE作为一个server,在docker里部署服务,端口映射出来,同时部署四个(当然可以更多,这就是微服务,弹性可扩展的好处),通过配置nginx进行负载均衡设置,使流量均匀打到每个容器服务里;

全部完成之后,就是申请域名,域名备案等事宜了。

后续

目前收集了1500+网站,包括上文中提到的国内的任意门和国外的一个网站收集的有趣网站,在github上也搜集了一些有趣的网站,全部纳入盲盒库中。

以上就是整个项目的完整设计和架构了,从前端、后端、数据库、部署、域名、服务器、备案都是自己利用业余时间操作的,肯定有设计不合理或者不足之处,有趣盲盒网站上线之后,还请大家多多提出宝贵的意见和建议,也欢迎大家将网站分享给朋友,同时也欢迎大家投稿(投稿入口在有趣盲盒网站的左下角关于)。将你发现的有趣的好玩的网站提交给我们,让更多的人分享你的快乐。

提示:电脑浏览器体验更佳。

goSomewhere.Run

留下评论