我希望后端服务程序能在几乎所有配置的机器上运行,因此不考虑node.js、php等框架/语言。目前以C++为uis_be的主要语言。
数据库
Pros
净网行动之前有许多大站点,如谷地、天空,它们均是单主机提供服务。参考过去的经验,我认为没有必要使用MySQL、PostgreSQL等网络数据库,最合适的数据存储方式是SQLite。原因有两点:
- 从必要性来讲:几乎所有的小圈站点规模都不需要多主机提供服务。
在圈子兴盛的年代,使用孱弱的主机与PHP语言尚且足以应对访问需求,现在圈子衰退,技术不断发展,使用更加低级的C++/C 就更不会遇到性能瓶颈了。在不需要多主机同时提供服务的前提下,网络数据库的延迟和资源占用要远高于本地的SQLite。
- 从便利性来讲:网络数据库的配置、迁移与备份较为繁琐
尽管网络中有许多相关教程,但想要完善地配置一个网络数据库还是挺麻烦;对其进行迁移与备份时也需要额外操作,无法直接传输内容到站长/技术人员的本地主机。日后UIS可能开源给所有希望建立自己社区的朋友使用,因此自然配置越便利越好。
Cons
但SQLite相比于网络数据库,在多线程并发写上很弱。需要设计单独的缓存系统,每隔一段时间把数据统一落入数据库。如文章/图片/视频等的阅读量数据,可以5s写入一次;对于实时聊天的数据,可以0.5s统一写入一次。
比直接用网络数据库会多很多工作量,也未经过验证,但不妨试试。设计合理的话,应当可以避开这个缺点。
部署方式
计划的部署结构为:
|- uis_be_folder
|- uis_be
|- config.yaml
|- dbs
|- assets
|- uploads
其中:
- uis_be 为编译后的主程序
- config.yaml 为配置文件
- dbs 为站点数据库目录
- assets 为站点资源目录,如图标等
- uploads 为站点用户上传的内容目录
计划的运行方式为:将主程序及配置放置于任意目录中,执行主程序即可对外提供服务。