1、spartacus是什么?
spartacus是一个基于Spring Boot 2.3.x、Spring Cloud Hoxton.SR5、Spring Security 2.3.x、OAuth2.0等开源框架构建的大型分布式系统,当然你也可以认为它是一个功能完备的微服务脚手架,只需简单几步即可接入自己的业务系统。
项目地址:https://github.com/xlvchao/spartacus,如果觉得还不错,欢迎star、收藏!
为了更友好的向大家展现它的内在,我用个人博客系统来包装了它,即它的外在表现形式是一个博客系统。spartacus绝对是你微服务学习路上实战项目的不二之选,只要你们能啃下它,我相信出去面试必定能拿下至少20K!💥
当然,它的强大与全面不是一两句话就能说得清的,即使通过本文我也未必能把它清清楚楚的呈现在大家面前,感兴趣的老铁还是需要花点时间去研究一下它的源码。简单总结就是:功能特性完善、技术覆盖全面、架构设计合理、用户体验友好。
2、为什么要开发这个项目?
毕业入职那会,有一天我第一次在CSDN上写技术博客,反复修改了三五次之后终于完成,怀着激动的心情点击发表按钮,意料之外的是还需要平台审核,通过后才能正式发表。等了一天之后万万没想到审核没通过,更加出乎意料的是我的文章直接被删除了!CSDN的这波操作令我非常恼火,我的汗水啊!从那时起就萌生了一个念头,一定要搭建一个只属于我的写作平台!
平时工作之余,也零零散散学习了很多碎片化的知识,从springboot到springcloud再到各种各样的中间件、存储引擎等等各种奇技淫巧,但是一直缺乏实战经验,工作中也几乎完全用不到(我想大家都懂😏)。因此本着学习的态度,从0到1设计并开发了spartacus,把自己会的技术全部运用到了这个项目上,虽然花费 了很多很多时间和精力,但是也获得了巨大的成就感,而这些是工作上无法带给我的!
最后一点也是为了证明自己,或者说是为了不留遗憾。一方面可以证明除了大家都会的CURD外我还懂一些新技术,写在简历上也算是一个亮点,面试时也可以增加一点吹嘘的资本;另一方面,总想着在开源世界留下点什么,这样即使以后改行不再干IT了也毫无遗憾,也算对得起读了那么多年的计算机专业。😁
3、spartacus的技术架构
Redis Cluster:Redis集群;认证/资源服务器、网关/资源服务器、业务集群的必须依赖,基于官方推荐的Redis Cluster集群部署架构,详情请看部署文档。
Mysql Cluster:Mysql集群;采用简单的读写分离的Master-slave主从集群部署架构,或者采用PXC的高可用集群部署架构,详情请看部署文档。
Maxwell Cluster:数据同步组件;结合Rabbitmq共同完成Mysql到Elasticsearch的数据同步,采用官方推荐的基于Raft协议的集群部署架构,详情请看部署文档。
Rabbitmq Cluster:消息队列&Stomp消息代理;一方面与Maxwell共同完成数据同步,另一方面作为聊天微服务的Stomp消息代理,采用官方推荐的HA集群部署架构,详情请看部署文档。
Elasticsearch Cluster:搜索引擎;文章数据/资源数据/系统日志/链路追踪等数据的持久化、全文检索,采用官方推荐的集群部署架构,详情请看部署文档。
Logstash & Kibana:Logstash作为数据传输管道,所有应用的日志均通过Logstash传输到Elasticsearch中,Kibana则负责数据可视化、索引管理等功能,详情请看部署文档。
认证/授权服务器:支持微信/QQ/短信/系统账号4种登陆方式,登陆成功后会下发特定签名的token给到客户端,同时支持远程token验签,详情请看部署文档。
Eureka Cluster:注册中心高可用集群;基于REST的方式提供服务注册、发现功能,同时具备心跳检测功能,以此达到监控服务可用性的目的,详情请看部署文档。
Apollo Cluster:配置中心高可用集群;所有微服务的配置均托管在配置中心,同时支持动态配置/修改接口的访问权限,详情请看部署文档。
Xxl-job Cluster:任务调度平台高可用集群;xxl-job支持动态启停任务、分片广播任务、失败重试、故障转移等各种特性和策略,详情请看部署文档。
CSP:即Cloud Service Provider(云服务提供商)的缩写;spartacus分别调用了百度的地图服务、阿里的天气服务、腾讯的对象存储服务,详情请看部署文档。
Sleuth & Zipkin:链路追踪;Sleuth负责记录所有接口的调用链路数据,Zipkin负责收集并持久化到Elasticsearch集群中,以及可视化调用链路信息,详情请看部署文档。
网关/资源服务器:高可用的WebFlux Gateway集群;主要负责路由、权限校验、负载均衡(结合Ribbon)、限流/熔断/降级(结合Sentinel)、黑名单访问拦截、记录接口调用记录等功能,详情请看部署文档。
代理/负载均衡:基于Vip+KeepAlived+Haproxy搭建的高可用LB集群;主要用于负载均衡认证/授权服务器及网关/资源服务器等的请求,详情请看部署文档。
业务集群:由数据监控、文章管理、评论管理、资源管理、系统设置、数据同步、聊天系统、博客前端、管理前端,共9个模块组成,详情请看部署文档。
客户端:客户端实际上是部署在业务集群里的Friday(管理端)和Sunday(博客端),这里的客户端是指用户通过PC浏览器访问博客端网站或管理端网站,详情请看部署文档。
4、谈一谈苦逼的开发历程
一个人肝了一个团队的事儿😂
前前后后持续了将近两年时间吧!基本上下班后以及周末、节假日都扑在了这个项目上。 从头到尾都是一个人的战役,需求、设计、前端、后端、测试、部署、运维等等,一人兼任数职,真是一把鼻涕一把泪!
闹心啊
自始至终最闹心的应该是需求和设计这一块儿,而并不是后面开发代码、部署、运维等。 得自己挖掘需求,或者参考类似作品,整理好一堆需求后,又要反复筛选、留下哪些是你需要且对用户来说具有实用价值的。 另外就是设计了!每一个页面该怎么布局、输入框放在哪里、按钮用什么颜色、用什么字体等等这些,都得反复琢磨,只为给用户一个友好的体验。 对于一个毫无设计基础的我来说,这是一场极致考验! 我经常会因为一个页面的设计而穷途末路,可能花好几个礼拜才能把一个设计敲定。
为什么说苦逼?
期间也遇到过很多技术难题,比如微服务网关Spring cloud gateway如何集成Spring security做登录验证/权限校验、如何设计一个高可用的在线聊天系统等等。但是,这些只要肯花时间和精力都能解决,都不算事儿。 真正苦逼的是经常因为加班到深夜回家后还要折腾几个小时而给我身体上带来的极度疲劳! 本来计划着第一个版本能在2021年11月份顺利发布,然而好巧不巧,公司项目组4月份接了一个大项目,直接导致我们组全人力投入。 期间有几个月工作节奏几乎是907,那段时间晚上12点前能下班就是万幸了😁 这样的工作节奏也直接打乱了spartacus的开发计划,但是我依然没有停止折腾,即使经常回到家已经是半夜12点多了,我依旧会捣鼓一两个小时。
身心俱疲!
那段时间几乎每天都是凌晨三四点才睡觉、早上8点多又要起床去上班,中午在公司也睡不好。经常半夜时肚子里总是咕隆隆的响,有时甚至怀疑我的内脏是不是已经熬坏了,我真的很害怕。 直到2021年11月份,公司项目第一个版本正式上线了,也就意味着我有了更多的个人时间。 但是因为前期spartacus的开发进度严重滞后,于是2021年底我直接没回家,待在深圳原地过年,终于赶在2022年3月底spartacus v1.0.0发布了!😆
5、下一步动作与长远规划
系统还有很多有待优化的地方,比如分页查询性能优化、直写数据库改为异步落库、链路追踪使用skywaliking替换以及完善监控模块等等,这些后面都会抽空逐步完善,大家尽情期待吧!
只要我还活着😂,spartacus就会一直维护下去,老铁们可以放心大胆的学习,有关任何该项目的问题都可以加群向我提问,或者提issue,我必不遗余力解答所有问题。老铁们要是有什么好的建议也可以提出来,我会斟酌采纳和改进。
新技术层出不穷,我也会及时学习并将它们都整合到spartacus上,紧跟时代潮流、逐步丰富spartacus的技术栈,努力将其打造成一个集开发、测试、运维技能于一身的超级实战型微服务学习项目!
另外,希望寻找一个前端小伙伴,和我一起把这个项目做到极致,希望你对技术始终热爱,希望你坚持不懈,希望你善于沟通,希望你是个美女,哈哈。有意向的小伙伴可以在公众号后台给我留言。😊
最后,请允许我再装一下逼:我们终会逝去,但我们的代码会永存于世!😎