我们打算从零开发一个亿万流量的淘宝网站
前言
有亿点点标题党,不过没关系,霸气一点儿的标题才足够表达出我们的壮志,冲!
需求
猿人们常说,面试造火箭,工作拧螺丝。我也是这么觉得,不过造火箭的人还是有的,但比重不高,这种岗位有时候不止看能力,也要看运气,会不会安排到你。所以呢,志强不息的我们,就想着自己给自己创造机会,模拟一个亿万流量的场景,并利用我们的技术来搭建一个高可用、高性能的分布式服务来满足这亿万流量,穿堂而过的快感。
我们(是我自己而已呢)打算先搞几个物理服务器(当前有8台树莓派可用),弄个小型交换机和几根六类网线,组成一个迷你机房。然后在这个内网环境中搞事。
【这里放几张树莓派组装图】
但是最近发现树莓派涨价厉害,而且对于我们后面高并发场景的模拟来说,树莓派有点儿不够给力(我猜的),所以打算卖了这几个派,几台dell R710 服务器来用,目前看上的配置是:12核24线程、32G内存 2T硬盘。这玩意儿我以前在学校实验室看过,2U不厚但挺大的,老重老重了。打算先买两个回来,再顺带买个电费计量器,放在老家(不知道电费有没有便宜点儿),然后做个内网穿透,就可以开始远程操控。
方案
一切的配置都对齐标准
- 学用k8s,搞个集群出来,然后分配十来个实例;
- 搭建gitlab作为代码仓库,外加文档wiki网站。这两个好像都可以在NAS上面实现,就是一个托管而已;
- 从零开始搭建,从零开始记录,也会招有兴趣的朋友来一起组队做,前期我负责基础的服务器、网络和电路搭建。后续在一起做系统架构设计、方案评审、代码编码;
- 由于这些整体下来需要不少时间,整体周期偏长,但是我相信一整套坐下来,可以收获不少。特别是对于在工作中拧螺丝的同学们,相信在我们这里是可以实现造火箭的理想的;
- 因为我们会先写一个用户并发访问的模拟程序,尽量去模拟现实的中高并发场景(时间流量趋势图、随机等策略),一台服务就可以构造出百万级别的请求量;
- 然后我们再开始去设计系统来满足这些虚拟用户的访问需求。这块是我们的重点,也是我们要迭代和学习的内容;
- 基建之一:r日志与监控不能少,特别是监控。我们需要去打点,衡量每一个虚拟用户(线程or协程)访问的耗时,以耗时来衡量用户体验(流不流畅)。只是用户具体的需求,无法模拟,只能参考现实(其实先把典型电商场景搭起来就够玩很久了);
- 最后,我们记录会同步在这个博客中,tag主题就叫:亿级流量架构研发(前期我们会从万级开始演化,并做好记录、监控)
初步的大体思路
- 模拟淘宝(典型且大家熟悉常见需求场景),主要完成核心链路,包括:百万用户注册请求、千万登录请求、亿级浏览(商品列表、商品详细页面、购物车、订单列表、订单详情)、千万级下单请求和支付请求。用户数量我们会最终逐渐积累到6亿条、商品数据我们会到100亿条。这一块的数据,后面可以具体参考淘宝当前的宏观数据指标。
- 不涉及图片、CDN等相关技术的应用。核心重点技术是:缓存(Redis和本地缓存)、MQ(Kafka和RMQ)、MySQL(索引、垂分、水平)、ES、数仓等等。我也是在持续学习中,后面边学边用更加高效的技术和组件框架;
- 做好监控打点,通过大盘实时观测了解到我们系统的负载能力,知己知彼;
- 因为我们模拟是为了锻炼我们的能力,更加聚焦在于核心链路、高并发场景的编码能力。所以也就没有考虑去做一个贴近现实,有实用的分布式系统。一来,有商业价值的地方多了人去做;二来一旦那么做了,那我们的精力将会大部分花在其他边边角角,无法聚焦提升我们的高并发能力。这是我个人的想法,欢迎不同想法的朋友评论交流;
- 初期(2022年)可能会先弄2台服务器R710来做基建建设(k8s之上:日志、监控);
技术选型
- 编码语言:Golang && Java为主;
- 交流工具:飞书(飞书文档相当好用);
- 其他:Github、CentOS、MySQL、Redis、Kafka、RockerMQ、RPC,总之前期就先都采用开源组件来实现,后期有能力,再考虑自研;
排期
- 首先,这是个业务的项目,所以工期不会很激进,会拉的比较长,但是也不能太长,我们设定了排期,给出了承诺,就要做完,诚实守信最重要!希望在这里,我们也是一个个高效的工程师;
招贤
欢迎有兴趣的朋友加入一起聊聊,当然,我们也希望你能够:
有责任心、有耐心,参加了就要一起耐心的,花时间去做好每一个细节,把它当成跟你工作开发的系统服务一样认真对待。越认真,越有收获,敷衍了事不止学不到东西,我们也不会欢迎的哈。前期我会自己先慢慢搭建,慢慢找人,宁缺毋滥嘛;
通过这个项目,我们(我和你们)可以学到:技术文档撰写能力、[关键]亿级流量分布式系统开发经验(虽是模拟,但至少不是纸上谈兵)、团队协作能力、项目管理能力;
我的微信:cenyol,公众号:群二少。刚开通没内容,后续会同步这个系统的技术实践文章过去;
奖励&激励
除了我们能够获得的技能之外,我们总会想要有一些物质上的,比较及时的回报,这个后面再想,总会有的。不然大家就无法长时间有精力的做下去了,或者开源分享,技能习得就真的是最大的精神奖励了吧。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验