企业级短链接服务全文档-1(含源码)
本项目讲解会以连载的方式持续更新(预计1周内更新完),大家有感兴趣的项目,也可在评论区留言,后续给大家出讲解系列
本项目源码地址 GitHub搜索 辰星短链接
什么是好的项目
很多人看到网上的招聘要求,要求有高并发,大流量项目经验,对MQ、Kafka、ES等中间件熟练使用,以上这些要求一般都是针对有工作5年以上的候选人要求,具备这样能力的人通常是团队中的核心技术骨干。对于应届生或刚工作一两年的同学来说,是不大可能有这样的项目经验,如果你项目上强行写上这样的词汇,容易给面试官一种不真实的感受,简单问两句就知道你几斤几两。所以大家不要盲目的追求这种项目,只要能自圆其说、有一定业务场景的项目那就是好项目。专业的事交给专业的人的来做,我负责应届生招聘已经三年了,什么样的简历能够耳目一新,项目面试到底问什么,学生怎么答能够脱颖而出。从面试官的角度给你一种思路。
- 小而精,不要大而全:不要写商城、外卖这种大平台项目了,这种大平台项目在企业级里面一般是几百人的研发团队做的,一个刚毕业的学生做完了整个项目,在面试官眼里就是一个demo,做了一点curd的流程而已。但可以拿里面的一个模块来做,比如里面的支付模块、优惠券模块、秒杀模块、统一认证授权管理模块等
- 要有技术难点:主要就是涉及三高问题的处理方案,访问量大了怎么提高访问性能、怎么避免服务突然崩溃不可用、怎么解决分布式情况下的数据一致性问题、如何解决数据可靠性与性能之间的平衡、如何提升大数据量情况下数据存储性能与分析能力等。
- 要有对应场景的解决方案:不能随便YY几个技术难点,搜下网上的感觉高大上的解决方案就写到简历上了,这个对于资深的面试官一眼就可以看出来你是没有思考过的。比如对于微服务之间的接口调用,可以写用的消息队列,感觉多了个MQ你这个项目技术栈更多一些,但实际一些强一致性场景是不能用MQ的。要针对你的项目场景选择成本最低又能满足要求的实现方案,而这也是企业项目开发日常非常重要的一个点。
项目背景
什么是 URL 短链
URL 短链,就是把原来较长的网址,转换成比较短的网址。我们可以在短信和微博里可以经常看到短链的身影
我们看到短信里面的URI是数字加子母组成的字符,跟我们平时写代码时的URI不太一样。
实际上这就是一个短链接,其实原始的内部长链接可能长这样:
https://dpubstatic.udache.com/static/dpubimg/d4c0e518e95afb4e669affa6eb15d1d6/index.html
那么为什么要做这样的转换呢?来看看短链带来的好处:
- 在微博,Twitter 这些限制字数的应用中,短链带来的好处不言而喻: 网址短、美观、便于发布、传播,可以写更多有意义的文字;
- 在短信中,如果含长网址的短信内容超过 70 字,就会被拆成两条发送,而用短链则可能一条短信就搞定,如果短信量大也可以省下不少钱;
- 我们平常看到的二维码,本质上也是一串 URL,如果是长链,对应的二维码会密密麻麻,扫码的时候机器很难识别,而短链则不存在这个问题;
- 出于安全考虑,不想让有意图的人看到原始网址。
短链接跳转工作原理
用户点击短链接后,会跳转到内部的长链接。基本流程图:
客户端-->发出短链接请求--> 重定向跳转--->长链接
为什么用302,不用301跳转
- 区别:
- 302重定向是暂时的重定向,每次访问URL时都会请求后端,由后端决定是否重定向
- 301重定向是永久的重定向,浏览器第一次访问后就会将原网址和目标网址建立缓存,这样下次再访问原网址时就不会请求后端了,而是直接由浏览器跳转到目标网址
- 原因:
- 短链接通常用在产品运营、知识社群、市场营销等场景,比如发送优惠券、推送消息通知等,这些网页地址通常不是长久保存的,而是具备一定的时效性。如果是301跳转,当目标网址失效后,用户点击短链接跳转后会出现404,这个给用户的体验是比较差的。而如果是302跳转,那么可以被后台捕获,分析出该链接已经过期后给用户一个比较友好的提示。
- 短链接跳转除了成本、安全性的考虑,还有一个很重要的目的,就是统计各个产品链接的访问量、用户数、用户地区、时段分布情况,这样可以得出用户及产品画像信息,从而更好的做营销推广,这个带来的价值可能是更大的。大家可以看下比较出名的SAAS短链接服务小码短链接(https://xiaomark.com/)的数据统计功能:
整体架构
目前市面上已经有很多做的不错的企业级SAAS短链接服务了,我们不用自己YY重复去造一个轮子。这里我们参考做的比较好的小码短链接,来设计相关的功能点以及考虑相关的详细设计方案。
大家可以先登录小码短链接的官网(https://xiaomark.com/),注册一个体验用户,体验一下他的相关功能点
功能模块
技术难点
- 海量并发:可能会面对大量用户同时访问的情况,尤其在高峰期,这会对系统的性能和响应速度提出很高的要求。
- 海量存储:可能需要存储大量的用户数据,包括数据库、缓存等,需要足够的存储空间和高效的存储管理方案。
- 多租户场景:通常支持多个租户共享同一套系统,需要保证租户间的数据隔离、安全性和性能。
- 数据安全性:需要保证用户数据的安全性和隐私,防止未经授权的访问和数据泄露。
- 扩展性&可伸缩性:需要具备良好的扩展性,以应对用户数量和业务规模的增长。