前言
接触编程和开源也有好几年了,不论是自己、和朋友一起写,还是在公司写项目,都积累了不少的经验了。但是我为什么把这个项目叫做我的第一个正式开源项目
呢,因为只有这个项目,才真的是我自己从0开始一步步规划,设计,要一步一步把它做完的。里面有很多概念,新的技术我以前只是听说过,但是都没有深入的学习,正好可以跟着这个项目,边学边做,一步步地提升自己!
项目介绍
aurora-mall 是一个基于 Spring Cloud Alibaba Vue Element-UI 开发的开源商城项目。
文档地址:https://mall.doc.besscroft.com/
预览地址:https://mall.aurora.besscroft.com/
其中也用到了一些现在主流的框架/架构:
比如说服务注册与发现用到了 nacos
,声明式服务调用采用的是 OpenFeign
和 okhttp
。服务多了,彼此之间调用进行交互,出现了异常我们肯定得想办法快速定位吧?于是也用到了 Spring Boot Actuator
,可以查看应用配置的详细信息(这个我也是在《Spring Boot 实战》这本书上面学的)。服务间的交互,没有人能保证不出问题,虽然 Ribbon
可以设置超时,来触发重试机制,但毕竟是和 Hystrix
有区别的,而 Hystrix 能对延迟和故障提供更强大的容错能力。配置中心,也可以用 nacos 实现。网关则采用了 Spring Cloud Gateway
,我同时也用它来结合 Oauth2
来处理认证和授权,也实现了白名单机制(以后可能会把白名单改成中间件的形式在系统中启用)。数据库中间件,则是采用了 Redis
,并且分布式锁也打算交给 redis 来处理。搜索引擎的话,肯定就是 ElasticSearch
了,消息队列就考虑 rabbitmq
或者 rocketmq
。分布式事务暂时考虑的是 Seata
,Hmily
等解决方案还不了解,所以学习难度未知。 链路追踪的话,Zipkin
老熟人了,就你了。分布式id解决方案,尤其是订单id这个玩意儿,最近了解了推特的 Snowflake
和索尼的 Sonyflake
,很受启发啊!
我的想法
目前项目的第一阶段的设计,我已经全部处理完了。因为是第一次,在一些地方可能设计的不是很好,你通过 commit 其实就能发现,结构和数据库设计,有时候都会做出调整。李智慧前辈,在他的《大型网站技术架构》这本书里面,有句话说的很好:“这个世界没用哪个网站从诞生起就是大型网站;也没有哪个网站第一次发布就拥有庞大的用户,高并发的访问,海量的数据;大型网站都是从小型网站发展而来。网站的价值在于它能为用户提供什么价值,在于网站能做什么,而不在于它是怎么做的,所以在网站还很小的时候就去追求网站的架构是舍本逐末,得不偿失的。小型网站最需要做的就是为用户提供好的服务来创造价值,得到用户的认可,活下去,野蛮生长。”
这句话,放到我这里,我其实可以理解成:我做开源本意是为了热爱与学习,做的本就是我喜欢的事情,也能为我自己带来成长与提升,同时能够帮助到他人。所以我在项目一开始设计的时候,也是不可能考虑的特别深入的,但是会随着一个个 commit 慢慢的发展迭代,变成一个好的开源项目。也正是因为如此,在项目中碰到任何问题,我都不是想着别人这样写能跑,我拿过来用就行了。而是要更多地考虑,为什么要这样写?我怎么就没想到?还有没有更好的解决方案?它的原理是什么?也就是这样,我的收获才能够更多吧