求助后台技术选型推荐

2018-12-24 11:05:49 +08:00
 yhvictor
最近无聊为个小论坛写个小项目,纯粹用爱发电,算是练手。
论坛是 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,太灵活,不宜维护。
项目快写完了,在这发帖的目的一来是看看有没有更好的解决方案,二是看看什么技术比较流行(所在公司用的都是自己的技术)
欢迎斧正,不过不要只提个技术名词,还是要讲讲为什么这样更好~
4276 次点击
所在节点    Java
16 条回复
imnpc
2018-12-24 11:36:33 +08:00
我只想知道 1G 内存能搞 JAVA ?帮人迁移了一个 java 站 多个端口 多个域名 每个内存设定 512M 访问下后台操作直接内存爆表 2 核 4G 的阿里云 ECS
byteli
2018-12-24 11:41:12 +08:00
1g 内存用 java。。。
懂 java 的来说说着是不是有点无米之炊
cloudzhou
2018-12-24 11:46:24 +08:00
典型的想多了系列
使用最通用的一种架构,spring boot 最标准写法,api 化,json 输入和输出,足够了
yhvictor
2018-12-24 11:46:29 +08:00
@imnpc
@byteli
我跑起来了啊 ,只有 170M
没有用 spring 之类的运行时注入,估计省了不少内存。再限制下 http server 的线程 还能少些。
数据库的优化我还没做
rayingecho
2018-12-24 11:50:40 +08:00
DB migration 可以试一下 flyway, 直接写 sql 比 liquibase 写 xml 更友好一点
另外想请教一下为什么"转成 stream 会失去 nio 的优势", 这里没有很 get 到点
helone
2018-12-24 11:50:42 +08:00
这点内存还是随便找个语言,三大轮子 laravel django ror 得了,非要来 java 那套试试 nestjs 也行,无论是机器配置还是开发时间都不是一个段位的,没事给自己找事
yidinghe
2018-12-24 11:52:14 +08:00
1G 内存完全没问题的。

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

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

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

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

我是实在不想写 php。
我有个小目标是整个论坛全部重写,不过估计大概率写不完,但至少用这些东西未来容易添加功能和维护。
我不想上 spring,我个人比较讨厌反射,运行时依赖注入感觉太重了。
yhvictor
2018-12-24 13:16:48 +08:00
@rayingecho
好的,回头研究下 flyway
-- "转成 stream 会失去 nio 的优势"
stream 应该是 blocking 的 IO,相比于 non-blocking,在线程开销上应该会大一些,我是这么认为的。
yhvictor
2018-12-24 13:18:05 +08:00
@ghos
没听过 vertx,搜了下似乎比 undertow 性能要好些。
guice 应该比 dagger2 要慢,我听过因为性能从 guice 转成 dagger2 的。
Comdex
2018-12-24 13:47:08 +08:00
用 golang
mineqiqi
2018-12-24 14:24:46 +08:00
1g 的内存用不了 java 真的
newghost
2018-12-24 14:36:17 +08:00
用 node.js + redis 256Mb 内存,连续运行两年
Yuicon
2018-12-24 14:36:21 +08:00
非主流的感觉
Linxing
2018-12-24 19:47:30 +08:00
参考本站的架构

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/520375

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX