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

求助后台技术选型推荐

  •  
  •   yhvictor · 2018-12-24 11:05:49 +08:00 via iPhone · 4387 次点击
    这是一个创建于 2155 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近无聊为个小论坛写个小项目,纯粹用爱发电,算是练手。
    论坛是 Discuz,但我不准备碰 php,打打算另写个前后端分离的项目。
    项目比较简单,纯粹增删改查,但服务器只有 1g 内存,代码效率还是要尽量高。
    但脱离了公司只好用开源的技术,语言选择了 java,一来我熟,二来开源产品多。
    依赖注入选的 dagger2,毕竟编译时构建,效率高,我对 dagger2 还比较满意。
    http server 用的是 undertow,用得还行,但 nio 是在麻烦,转成 stream 又失去了 nio 的优势。我打算研究下 kotlin 的协程,然后把 nio 的部分尽量用协程。但是一想到数据库还是 block 的操作,感觉意义不大。求更好的选择,或者现在通用做法就是转 stream 再操作?
    鉴于论坛用的是 MySQL,以及只有 1g 内存,我打算新的数据用同样的数据库。但一想到非 nosql 的效率和多表 join 还是有点头疼。不过 nosql 研究不多,我还想少写点代码,最好能把 Java object 直接翻译成数据库内容。最后选的 hibernate。有没有写更少代码的方案?
    同样是因为用了 MySQL,我打算用 liquibase 做数据库修改,毕竟论坛维护就一个人,降低其负担。不过我也是刚听说这个工具,有没有更好的选择?
    最后,与前端通信选的是 protobuf,但我没有引入 grpc,grpc 对端口要求太死,我希望少用点端口,降低性能需求。以及我非常不想用 JSON,太灵活,不宜维护。
    项目快写完了,在这发帖的目的一来是看看有没有更好的解决方案,二是看看什么技术比较流行(所在公司用的都是自己的技术)
    欢迎斧正,不过不要只提个技术名词,还是要讲讲为什么这样更好~
    16 条回复    2018-12-24 19:47:30 +08:00
    imnpc
        1
    imnpc  
       2018-12-24 11:36:33 +08:00   ❤️ 1
    我只想知道 1G 内存能搞 JAVA ?帮人迁移了一个 java 站 多个端口 多个域名 每个内存设定 512M 访问下后台操作直接内存爆表 2 核 4G 的阿里云 ECS
    byteli
        2
    byteli  
       2018-12-24 11:41:12 +08:00   ❤️ 1
    1g 内存用 java。。。
    懂 java 的来说说着是不是有点无米之炊
    cloudzhou
        3
    cloudzhou  
       2018-12-24 11:46:24 +08:00   ❤️ 1
    典型的想多了系列
    使用最通用的一种架构,spring boot 最标准写法,api 化,json 输入和输出,足够了
    yhvictor
        4
    yhvictor  
    OP
       2018-12-24 11:46:29 +08:00 via iPhone
    @imnpc
    @byteli
    我跑起来了啊 ,只有 170M
    没有用 spring 之类的运行时注入,估计省了不少内存。再限制下 http server 的线程 还能少些。
    数据库的优化我还没做
    rayingecho
        5
    rayingecho  
       2018-12-24 11:50:40 +08:00
    DB migration 可以试一下 flyway, 直接写 sql 比 liquibase 写 xml 更友好一点
    另外想请教一下为什么"转成 stream 会失去 nio 的优势", 这里没有很 get 到点
    helone
        6
    helone  
       2018-12-24 11:50:42 +08:00
    这点内存还是随便找个语言,三大轮子 laravel django ror 得了,非要来 java 那套试试 nestjs 也行,无论是机器配置还是开发时间都不是一个段位的,没事给自己找事
    yidinghe
        7
    yidinghe  
       2018-12-24 11:52:14 +08:00
    1G 内存完全没问题的。

    首先系统本身 200 多 M,加上数据库 一共规划 300 ~ 400M 左右。这是考虑论坛没有大规模并发写,并发读用缓存,后面会提到。

    然后 Java 本身,考虑内存有限肯定是只有一个 Java 进程,不要搞什么微服务架构,不要搞 zk 那些,就一个 SpringBoot。前端可以用模板也可以静态化,前后端通信协议根据前端要求来定,性能影响不大。

    缓存用嵌入式的就行,无需 redis/memcached。

    并发方面,论坛操作不会有大范围的锁,也没有大规模的同步,所以没有什么特别需要优化的,遵守一般设计规范即可。
    ghos
        8
    ghos  
       2018-12-24 12:26:00 +08:00
    guice vertx protobuf 可能性能更好吧
    yhvictor
        9
    yhvictor  
    OP
       2018-12-24 13:14:35 +08:00
    @cloudzhou
    @helone

    我是实在不想写 php。
    我有个小目标是整个论坛全部重写,不过估计大概率写不完,但至少用这些东西未来容易添加功能和维护。
    我不想上 spring,我个人比较讨厌反射,运行时依赖注入感觉太重了。
    yhvictor
        10
    yhvictor  
    OP
       2018-12-24 13:16:48 +08:00
    @rayingecho
    好的,回头研究下 flyway
    -- "转成 stream 会失去 nio 的优势"
    stream 应该是 blocking 的 IO,相比于 non-blocking,在线程开销上应该会大一些,我是这么认为的。
    yhvictor
        11
    yhvictor  
    OP
       2018-12-24 13:18:05 +08:00
    @ghos
    没听过 vertx,搜了下似乎比 undertow 性能要好些。
    guice 应该比 dagger2 要慢,我听过因为性能从 guice 转成 dagger2 的。
    Comdex
        12
    Comdex  
       2018-12-24 13:47:08 +08:00 via iPhone   ❤️ 1
    用 golang
    mineqiqi
        13
    mineqiqi  
       2018-12-24 14:24:46 +08:00
    1g 的内存用不了 java 真的
    newghost
        14
    newghost  
       2018-12-24 14:36:17 +08:00
    用 node.js + redis 256Mb 内存,连续运行两年
    Yuicon
        15
    Yuicon  
       2018-12-24 14:36:21 +08:00   ❤️ 1
    非主流的感觉
    Linxing
        16
    Linxing  
       2018-12-24 19:47:30 +08:00
    参考本站的架构
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   916 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 43ms · UTC 22:30 · PVG 06:30 · LAX 14:30 · JFK 17:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.