2 年了,一个开源项目 从最初的想法一点点迭代,到现在有了一点点用户, 从一开始的一个项目,变成了现在拥有微服务组件和网关组件的 微型生态,一路上,真是历经苦难。有质疑,有鼓励,有嘲讽。
有时候我真的在想,要不要就此打住,放弃维护算了,项目就挂在那,喜欢的就看一看,学一学姜太公,愿者上钩,我也落个轻松,但是总感觉有点可惜吧,毕竟是花了大量心血做的。
说起为什么要做这个项目,我或许已经记不清了,我只记得一开始并没有打算做这个东西,我只是想验证一下我对 springboot 的原理理解的对不对,于是我就尝试着自己去实现一个类似的框架。当我实现了基础功能后,我居然舍不得删除这份代码,所以就放到了 github 上托管, 那个时候也完全没有开源的想法,就是把 github 当成一个存放代码的网盘了。 没有开源协议,没有 readme,连代码结构也是一团糟。
这份代码就这样保存了下来,但是我每次闲下来都会不由自主的在脑海里盘算着,哪里写的不够好,哪里可以再优化一下,目录结构是否可以更优雅一点,细节是否可以再打磨一下等, 每次想到一些东西,就会去维护一下,然后乐在其中, 正是因为这样的维护,让这份代码变得越来越健壮,于是就有了分享给大家看看的想法。所以我做起了官网,开始在一些技术群里分享,但是得到的反馈却不太友好,几乎是清一色的嘲讽,质疑。大部分的嘲讽都集中在 [没新意,个人项目太垃圾等] ,每次面对这些嘲讽,我都在想,怎样才能让大家接受且愿意尝试下,而不是看了个文章介绍,就立刻否定了,所以我拼命的去优化我的代码,去加入一些新特性(或许不是新特性,因为每一个特性,都能在世界上找到包含此特性的项目)
就这样,
- 我将 controller 改成了 声明式 API,
- 自己开发了 [半 ORM ] 省去了集成 mybatis 的麻烦,
- 提供注解式参数校验,注解式 redis 锁,
- 对服务端的异常也做了出了封装,使其不必返回 500,而是一个 json,避免每个接口都加 try-catch 。
- 同时依然保留着 最初的 AOP,IOC,声明式事务
可以说完成了一次 集小成,一个项目就可以提供 中小型项目开发中常用的一些功能点。但是反应还是一般般,无人问津,没有人在意这是一个什么东西,每次的分享,都是一次被喷大会。不过其中也不乏一些理智的人,他们会理智的说出一些自己的看法,这给了我很大的帮助,我也非常感谢他们。
事情到了这一步,我也可以说是骑虎难下了,投入了这么多,总不能放弃吧,我只有硬着头皮往前走,我不断的去思考,到底是什么原因让大家不愿意尝试呢? 可能 [个人项目] 这个标签,本身就是原罪吧,也可能是我提供的生态不够,所以我做出了如下计划:
- 再一次的给项目减肥,丢掉一些在我能力范围内,可以替代的三方依赖
- 开发微服务组件,网关组件 来丰富生态
- 再一次的去优化文档,官网等,尽量体现出 这是一个用了心的项目 和 专业感
所以,tomcat 没了,直接采用了 HttpServer (在 JDK8-JDK14 上都测试过,都没问题), 不需要注册中心的微服务组件也开始投入了开发,网关也提上了日程,同时官网和文档日渐完善,我甚至找专业的人设计了 logo (我自己觉得挺好看的)
经历了 2 年的时间,这些都已经成为了现实,有了微服务组件,有了网关组件,有了自己的 logo,官网也比以前好看了很多,文档也比以前清爽简洁。
与此同时,也出现了另一个问题,项目的高度集成化,使得扩展性不够,比如 HttpServer 不好的时候,可否切换到 tomcat ? 微服务的熔断器,负载均衡 是否可以 插拔,甚至让用户自己开发? 用户是否可以自己开发组件?所以,接下来的一段时间,我开始了这个方向的优化, 到现在为止,都已经实现了,但是还存在一些问题:
- tomcat 启动器还没来得及优化,只能用默认的 tomcat 配置启动
- 如果不想用 HttpServer,那么目前只能切到 tomcat 启动器,但是用户可以自己开发启动器,我提供了 API
- 熔断器虽然可插拔,但是还没开发自己的熔断器
- 负载均衡可插拔,目前官方只提供了两种算法 [普通随机,普通轮询]
- 用户虽然可以自己开发组件,但是官方组件还是太少
接下来的工作重点,我会放在优化这几个点上。 至于更加长远的计划,那肯定是无限的向企业级开发靠拢,争取让他可以胜任大型项目。
2 年来,不断地优化,试错,面的各种嘲讽,早已成为习惯,总之我知道自己在干嘛就好了,即使无人问津也没关系,起码我可以从这件事中 学到一些东西,体会到一些东西,这也是一种价值吧,就像回归初心一般,我一开始仅仅只是为了验证我对 springboot 的原理理解的对不对,我只是乐在其中,其他的一切杂念,就让它烟消云散吧。
哦对了,这个项目叫 Martian http://mars-framework.com
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。