V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Joker123456789
V2EX  ›  Java

关于这 2 年来,做开源项目的一些感慨

  •  
  •   Joker123456789 · 2020-12-04 11:46:04 +08:00 · 3006 次点击
    这是一个创建于 1450 天前的主题,其中的信息可能已经有所发展或是发生改变。

    2 年了,一个开源项目 从最初的想法一点点迭代,到现在有了一点点用户, 从一开始的一个项目,变成了现在拥有微服务组件和网关组件的 微型生态,一路上,真是历经苦难。有质疑,有鼓励,有嘲讽。

    有时候我真的在想,要不要就此打住,放弃维护算了,项目就挂在那,喜欢的就看一看,学一学姜太公,愿者上钩,我也落个轻松,但是总感觉有点可惜吧,毕竟是花了大量心血做的。

    说起为什么要做这个项目,我或许已经记不清了,我只记得一开始并没有打算做这个东西,我只是想验证一下我对 springboot 的原理理解的对不对,于是我就尝试着自己去实现一个类似的框架。当我实现了基础功能后,我居然舍不得删除这份代码,所以就放到了 github 上托管, 那个时候也完全没有开源的想法,就是把 github 当成一个存放代码的网盘了。 没有开源协议,没有 readme,连代码结构也是一团糟。

    这份代码就这样保存了下来,但是我每次闲下来都会不由自主的在脑海里盘算着,哪里写的不够好,哪里可以再优化一下,目录结构是否可以更优雅一点,细节是否可以再打磨一下等, 每次想到一些东西,就会去维护一下,然后乐在其中, 正是因为这样的维护,让这份代码变得越来越健壮,于是就有了分享给大家看看的想法。所以我做起了官网,开始在一些技术群里分享,但是得到的反馈却不太友好,几乎是清一色的嘲讽,质疑。大部分的嘲讽都集中在 [没新意,个人项目太垃圾等] ,每次面对这些嘲讽,我都在想,怎样才能让大家接受且愿意尝试下,而不是看了个文章介绍,就立刻否定了,所以我拼命的去优化我的代码,去加入一些新特性(或许不是新特性,因为每一个特性,都能在世界上找到包含此特性的项目)

    就这样,

    • 我将 controller 改成了 声明式 API,
    • 自己开发了 [半 ORM ] 省去了集成 mybatis 的麻烦,
    • 提供注解式参数校验,注解式 redis 锁,
    • 对服务端的异常也做了出了封装,使其不必返回 500,而是一个 json,避免每个接口都加 try-catch 。
    • 同时依然保留着 最初的 AOP,IOC,声明式事务

    可以说完成了一次 集小成,一个项目就可以提供 中小型项目开发中常用的一些功能点。但是反应还是一般般,无人问津,没有人在意这是一个什么东西,每次的分享,都是一次被喷大会。不过其中也不乏一些理智的人,他们会理智的说出一些自己的看法,这给了我很大的帮助,我也非常感谢他们。

    事情到了这一步,我也可以说是骑虎难下了,投入了这么多,总不能放弃吧,我只有硬着头皮往前走,我不断的去思考,到底是什么原因让大家不愿意尝试呢? 可能 [个人项目] 这个标签,本身就是原罪吧,也可能是我提供的生态不够,所以我做出了如下计划:

    1. 再一次的给项目减肥,丢掉一些在我能力范围内,可以替代的三方依赖
    2. 开发微服务组件,网关组件 来丰富生态
    3. 再一次的去优化文档,官网等,尽量体现出 这是一个用了心的项目 和 专业感

    所以,tomcat 没了,直接采用了 HttpServer (在 JDK8-JDK14 上都测试过,都没问题), 不需要注册中心的微服务组件也开始投入了开发,网关也提上了日程,同时官网和文档日渐完善,我甚至找专业的人设计了 logo (我自己觉得挺好看的)

    经历了 2 年的时间,这些都已经成为了现实,有了微服务组件,有了网关组件,有了自己的 logo,官网也比以前好看了很多,文档也比以前清爽简洁。

    与此同时,也出现了另一个问题,项目的高度集成化,使得扩展性不够,比如 HttpServer 不好的时候,可否切换到 tomcat ? 微服务的熔断器,负载均衡 是否可以 插拔,甚至让用户自己开发? 用户是否可以自己开发组件?所以,接下来的一段时间,我开始了这个方向的优化, 到现在为止,都已经实现了,但是还存在一些问题:

    • tomcat 启动器还没来得及优化,只能用默认的 tomcat 配置启动
    • 如果不想用 HttpServer,那么目前只能切到 tomcat 启动器,但是用户可以自己开发启动器,我提供了 API
    • 熔断器虽然可插拔,但是还没开发自己的熔断器
    • 负载均衡可插拔,目前官方只提供了两种算法 [普通随机,普通轮询]
    • 用户虽然可以自己开发组件,但是官方组件还是太少

    接下来的工作重点,我会放在优化这几个点上。 至于更加长远的计划,那肯定是无限的向企业级开发靠拢,争取让他可以胜任大型项目。

    2 年来,不断地优化,试错,面的各种嘲讽,早已成为习惯,总之我知道自己在干嘛就好了,即使无人问津也没关系,起码我可以从这件事中 学到一些东西,体会到一些东西,这也是一种价值吧,就像回归初心一般,我一开始仅仅只是为了验证我对 springboot 的原理理解的对不对,我只是乐在其中,其他的一切杂念,就让它烟消云散吧。

    哦对了,这个项目叫 Martian http://mars-framework.com

    10 条回复    2020-12-04 15:55:15 +08:00
    JingYM
        1
    JingYM  
       2020-12-04 12:46:24 +08:00
    加油,我也有个自己做个这样项目的梦想。
    monkeyk
        2
    monkeyk  
       2020-12-04 12:57:40 +08:00
    重点是找到 开源项目的 核心价值;
    EKkoGG
        3
    EKkoGG  
       2020-12-04 14:32:31 +08:00
    厉害的 加油!
    nickchenyx
        4
    nickchenyx  
       2020-12-04 14:51:18 +08:00
    官网做的看起来很正式了,这个传染机制注册,有个问题,如何实现统一的服务实例的治理呢——比如主动下线某个节点的(不是直接宕机那种)
    yupozhang
        5
    yupozhang  
       2020-12-04 15:01:55 +08:00
    加油呀。
    我也有一个开源项目在维护
    Spug 一个轻量自动化运维平台
    特性:开源免费,简单好用,不需要安装 Agent,功能包含主机管理、主机批量执行、主机在线终端、文件在线上传下载、应用发布部署、在线任务计划、配置中心、进程端口站点监控、微信钉钉邮件报警等一系列功能。
    开源链接: https://github.com/openspug/spug
    Joker123456789
        6
    Joker123456789  
    OP
       2020-12-04 15:03:31 +08:00
    @nickchenyx 目前是跟宕机一样处理的,调不通 达到一个阈值就下线。

    一开始是采用的心跳机制,但是考虑到每个服务都要定时给所有服务发心跳包,网络压力有点大,就改掉了。 牺牲了一点性能
    37Y37
        7
    37Y37  
       2020-12-04 15:14:55 +08:00
    加油大佬
    dream4ever
        8
    dream4ever  
       2020-12-04 15:33:04 +08:00
    官网首页不考虑放上个人 GitHub 账号链接嘛,感觉 GitHub 账号已经是 coder 通用的名片了。
    Joker123456789
        9
    Joker123456789  
    OP
       2020-12-04 15:47:44 +08:00
    @dream4ever 有连接啊,在 banner 上,有两个按钮,第一个就是。
    dream4ever
        10
    dream4ever  
       2020-12-04 15:55:15 +08:00
    @Joker123456789 我没表达清楚,我的意思是页面底部有你的各种社交媒体账号,但是没有你的 GitHub 账号的链接~
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2787 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 13:04 · PVG 21:04 · LAX 05:04 · JFK 08:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.