一年時間,3萬行Go代碼,我寫了一個博客程序

前言

地址: github.com/go-sonic/so…

Sonic [?s?n?k] ,Sonic 是一個用 Golang 開發(fā)的博客平臺。

寫這個項目的原因是我自己也是一名博主,喜歡寫博客,用過 WordPress 、typecho 、Hexo 、Hugo 等,但是總有一些不滿意的地方

Halo 感覺非常不錯,典型的 C/S 架構,很符合我這個后端程序員的口味。雖然 Java 是一種高性能的語言,但是缺點是占用內存較多,一些配置較低的主機并不符合要求,Go 的協(xié)程天然適合 Web 這種并發(fā)場景,并且內存占用極低。而且 Halo 自身也有些小缺陷,比如 For 循環(huán)查庫,遂決定基于 Go 寫一個高性能的博客框架

需要說明的是,Sonic 的靈感來自 Halo ,也借鑒了 Halo 很多優(yōu)秀的設計,后臺管理界面更是直接 Fork 自 Halo 。Sonic 未來的主要目標是快、輕量、優(yōu)雅的代碼,希望能成為 Golang web 的 best practice 之一

預覽

一年時間,3萬行Go代碼,我寫了一個博客程序一年時間,3萬行Go代碼,我寫了一個博客程序

博客程序對比

靜態(tài) VS 動態(tài)

靜態(tài)的優(yōu)點 靜態(tài)博客目前有Hugo、Hexo、Jekyll,動態(tài)的且比較知名的則有WordPress、Typecho、Halo

  • 非常輕量,純文件訪問,高性能
  • 可以不需要自己的服務器
  • 安全
  • 方便結合 git 工作流

動態(tài)的優(yōu)點

  • 實時的內容更新
  • 實時的閱讀量排行
  • 動態(tài)的圖片壓縮優(yōu)化
  • 保存點贊評論等用戶生成的內容
  • 可以進行數(shù)據(jù)分析
  • 復雜功能只能是基于動態(tài)博客實現(xiàn),比如付費文章、加密文章

動態(tài)博客對比

博客系統(tǒng)

語言

數(shù)據(jù)庫

主題和插件生態(tài)

Markdown支持

Star數(shù)量

系統(tǒng)配置要求

WordPress

PHP

MySQL/MariaDB

非常多

否(需要安裝插件)

16.9K(僅做參考)

較低

Typecho

PHP

MySQL/SQLite

較多

9.6K

非常低

Halo

Java

MySQL/PostgreSQL

較少

25K

高(至少1GB內存)

GHost

Node.js

MySQL

較多

42K

高(至少1GB內存)

JPress

Java

MySQL

較少

2.5K

對比幾款比較主流的CMS系統(tǒng),體驗比較好的應該是Typecho,但是Typecho使用PHP開發(fā),使用PHP開發(fā)的系統(tǒng),包括WordPress,個人覺得其實槽點比較多:

  • 如果不使用Docker安裝,需要先安裝PHP環(huán)境,以及一大堆PHP擴展,對于非開發(fā)人員并不友好。
  • 個人并不喜歡PHP,腳本語言、解釋執(zhí)行,以至于想搞個定時任務都特別麻煩,CGI FPM的設計也太奇葩。時代在前進,PHP的使用率在降低。(并不是想發(fā)起語言之爭,以上僅代表我自己的看法)

Halo使用Java開發(fā),比較不錯,但是也有我不滿意的點:

  • 服務器要安裝JRE
  • 內存占用太高。個人博客一般都是運行在配置比較低的小主機上
  • 不支持SQLite(雖然支持H2這種嵌入式數(shù)據(jù)庫,但是官方并不推薦在生產環(huán)境使用),需要單獨安裝MySQL/PostgreSQL,但是個人博客其實并不需要這種比較重的數(shù)據(jù)庫系統(tǒng),單個文件的SQLite可能才是最好的選擇,數(shù)據(jù)庫的備份也特別方便
  • 代碼質量比較低,很多For循環(huán)查庫。
  • 綜上,運行Halo需要 Java Run Time Halo MySQL,成本較高

我期望的博客系統(tǒng)應該是:

  • 無需安裝任何依賴,如PHP、Java、Nginx、MySQL等
  • 數(shù)據(jù)庫使用 SQLite 這種,不需要單獨安裝數(shù)據(jù)庫服務
  • 只有一個可執(zhí)行文件
  • 系統(tǒng)資源占用非常低,即使在256MB的機器上,也可以高速運行

有了上面的幾個訴求,我發(fā)現(xiàn)目前并沒有能滿足我要求的開源博客系統(tǒng),于是決定自己寫一個!Golang非常適合作為開發(fā)語言,有著高性能、編譯產物是一個可執(zhí)行的二進制程序、編譯產物的體積也比較小、生態(tài)比較完善等優(yōu)點。最終,Sonic來了,完美實現(xiàn)了上面的幾個訴求:

  • 只有一個二進制程序,無需安裝任何依賴
  • 輕量,安裝包只有14MB
  • 高性能,文章詳情頁最高可達 2500 QPS (Intel Xeon Platinum 8260 4C 8G SQLite)
  • 內存占用極低,10MB的內存占用
  • 支持SQLite,方便備份
  • 支持Linux、Windows、Mac OS等操作系統(tǒng). 并且支持x86、x64、Arm、Arm64、MIPS等指令集

功能

  • 文章管理
  • 分類管理
  • 標簽管理
  • 附件管理,支持OSS(MINIO、Google Cloud、AWS、AliYun)
  • 支持多主題(目前有2款主題)
  • 支持自定義頁面
  • 菜單編輯
  • 評論管理
  • 日志功能
  • 圖庫功能
  • Markdown導入,支持從Hugo、Hexo、Jekyll導入,支持導出文章為Markdown
  • RSS/Atom支持
  • SEO優(yōu)化
  • 支持MySQL/SQLite

代碼量

language

Files

code

comment

blank

total

Go

304

28,345

913

4,535

33,793

Go Template File

37

2,033

0

158

2,191

YAML

16

1,662

24

193

1,879

Markdown

11

740

4

180

924

SQL

1

269

0

28

297

JSON

3

160

0

2

162

Docker

1

20

0

10

30

Shell Script

1

14

1

5

20

TODO

目前Sonic還是有些不太完善的地方,后面會將開發(fā)重心放在以下幾個方面:

  • 插件系統(tǒng)(基于Wasm)
  • i18n
  • 更多的主題
  • 代碼的重構優(yōu)化,希望能讓項目的代碼更優(yōu)雅
  • PostgreSQL支持

作者:GoSonic
鏈接:https://juejin.cn/post/7179097961811411001

相關新聞

聯(lián)系我們
聯(lián)系我們
公眾號
公眾號
在線咨詢
分享本頁
返回頂部