FreeGo ้ซๆง่ฝๆกๆถ

๐ ไธๆณจไบๆ่ดๆง่ฝไผๅไธๅผบๅฎๅ
จๅๅ็ Go ่ฏญ่จไผไธ็บงๆกๆถ๏ผๅธธ่ง้่ๅบๆฏๅฏๅ่ README_SECURITY.md๏ผ
FreeGo ้ขๅ้ซๅนถๅไธๅผบๅฎๅ
จๅบๆฏ๏ผๆ ธๅฟ่ฝๅ่็ฆๅจๆๅกๆฅๅ
ฅๅฑใๆฐๆฎ่ฎฟ้ฎๅฑๅไธๆๅทฅ็จๅ้
ๅฅ็ปไปถ๏ผ
- API ๆกๆถ๏ผๆไพ HTTP / WebSocket / RPCX ๆฅๅ
ฅไธ่ฟๆปคๅจ้พ่ฝๅ๏ผๅนถๆไพ่ฎค่ฏใๆๆใๅฎๆดๆงๆ ก้ชๅ้ฒ้ๆพ่ฝๅ๏ผๅฎๅ
จๆต็จไธๅจ่ๆจกๅ่ง
README_SECURITY.mdใ
- ORM ๆกๆถ๏ผ้ขๅ MySQL / Mongo ็ๆไฝๅๅฐ็ญ็น่ทฏๅพไธ้ขๅ้
ๅๅฅฝๆฐๆฎ่ฎฟ้ฎ่ฝๅ๏ผๅ
ผ้กพๅๅไธๅ
ๅญๆ็๏ผไปฅ
ormx ไธบๅ๏ผใ
ๅๆถๆไพ็ผๅญ๏ผๅซๆฌๅฐไธ Redis๏ผใๅๅธๅผ้ไธ้ๆตใAMQP ๆถๆฏใ็ปๆๅๆฅๅฟใYAML ้
็ฝฎ่ฃ
่ฝฝ็ญๅทฅ็จๅ้
ๅฅ่ฝๅ๏ผไพฟไบๅจ็ไบง็ฏๅขๆผ่ฃ
ๆๅกใๅฏนๅค HTTPS/TLS ไธ่ฌ็ฑๅๅไปฃ็ๆ็ฝๅ
ณ็ปๆญข๏ผๆกๆถไพง้ๅบ็จๅฑ่ทฏ็ฑใ่ฟๆปคๅจไธๅฏ็ ๅญฆ่ฝๅ๏ผ็ปๅ่งๅฎๅ
จๆๆกฃ๏ผใ
๐ ็ฎๅฝ
๐ ๆกๆถ็นๆง
๐ Server & API ๆกๆถ
| ็นๆง |
ๆ่ฟฐ |
ไผๅฟ |
| ๐ ้ซๆง่ฝ HTTP |
้ซๆง่ฝ HTTP ๅผๆ๏ผๅ
ธๅๅบๆฏๅๅๆพ่้ซไบ net/http๏ผๅๅบๆฏๅๆต๏ผ |
ๅๆบ QPS 50,000+๏ผ่ง็กฌไปถไธๅๆต๏ผ |
| ๐ ๅผบๅฎๅ
จๅๅ |
JWT + Ed25519/X25519 + AES-GCM๏ผๅบ็จๅฑ่ฝฝ่ท๏ผ |
่ฝๅไธๅธธ่ง PCI DSS ๆงๅถๆนๅไธ่ด๏ผTLS ่ง้จ็ฝฒไพง |
| ๐ ้ฒ้ๆพๆปๅป |
HMAC-SHA256 + ๆถ้ดๆณ็ญ |
ไธป้พ่ทฏๅ
็ฝฎ้ฒ้ๆพไธๆถ้ด็ช๏ผ่งๅฎๅ
จๆๆกฃ๏ผ |
| ๐ฅ RBAC ๆ้ๆงๅถ |
่ง่ฒๆ้็ฎก็็ณป็ป |
ไผไธ็บง่ฎฟ้ฎๆงๅถ |
| โก ไธ็บง้ๆต |
็ฝๅ
ณ/ๆนๆณ/็จๆท้ๆต |
้ฒๆญข็ณป็ป่ฟ่ฝฝ |
| ๐ง ่ฟๆปคๅจ้พ |
ๅฎๆด็ไธญ้ดไปถ็ณป็ป |
ๆฏๆ่ชๅฎไนๆฉๅฑ |
๐๏ธ ORM ๆฐๆฎๅบๆกๆถ
| ็นๆง |
ๆ่ฟฐ |
ๆง่ฝๆๅ |
| ๐พ ้ถๅ
ๅญๆตช่ดน |
็ฒพ็กฎๅฎน้้ขๅ้
|
ๅๅฐ 90%+ GC ๅๅ๏ผๅ
ธๅๆน้ๅบๆฏ๏ผไปฅๅฎๆตไธบๅ๏ผ |
| โก ๆไฝๅๅฐๅผ้ |
็ธๅฏนๅ
ธๅๅๅฐๅ ORM๏ผ็ญ็น่ทฏๅพๆดๅฐไพ่ตๅๅฐ๏ผๅ
ๆฐๆฎ/ๆ ๅฐ็ญไปๅฏ่ฝไฝฟ็จๅๅฐ๏ผไปฅ ormx ไธบๅ๏ผ |
็ดๆฅ่ฃ
้
+ ็ฑปๅ็บฆๆ |
| ๐ง ๆบ่ฝ้ขไผฐ |
้ๅฝ OR ๆกไปถ็ฒพ็กฎ่ฎก็ฎ |
ๅคๆๆฅ่ฏขๆง่ฝไผๅ |
| ๐ ้ซๅนถๅๆฏๆ |
ๆบ่ฝ่ฟๆฅๆฑ + ๅๅญๆไฝ |
ๆฏๆ 10,000+ ๅนถๅ |
ๆ ธๅฟ็ปไปถๆถๆ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ FreeGo Framework โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ ไธๅคงๆๅก็ซฏ๏ผHTTP ยท WebSocket ยท RPCX๏ผ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ HTTP ยท WebSocket ยท RPCX โ โ
โ โ โข ๅๆบ QPS: 50,000+๏ผHTTP ๅ
ธๅๅบๆฏ๏ผ่ง็กฌไปถ๏ผ โ โ
โ โ โข ๅๅบๅปถ่ฟ: ไบๆฏซ็ง็บง๏ผๅ
ธๅ HTTP ่ทฏ็ฑ๏ผ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Filter Chain (่ฟๆปคๅจ้พ) โ
โ โโโโโโโโโโโโโโฌโโโโโโโโโโโโโฌโโโโโโโโโโโโโฌโโโโโโโโโโโโโฌโโโโโโโ โ
โ โ ้ๆต่ฟๆปคๅจ โ ๅๆฐ่ฟๆปคๅจ โ ไผ่ฏ่ฟๆปคๅจ โ ๆ้่ฟๆปคๅจ โ ่ชๅฎไนโ โ
โ โโโโโโโโโโโโโโดโโโโโโโโโโโโโดโโโโโโโโโโโโโดโโโโโโโโโโโโโดโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Security & Crypto (ๅฎๅ
จๅฑ) โ
โ โโโโโโโโโโโโโโฌโโโโโโโโโโโโโฌโโโโโโโโโโโโโฌโโโโโโโโโโโโโฌโโโโโโโ โ
โ โ JWT/RBAC โ Ed25519 โ X25519 โ AES-GCM โ HMAC/้ๆพ โ
โ โโโโโโโโโโโโโโดโโโโโโโโโโโโโดโโโโโโโโโโโโโดโโโโโโโโโโโโโดโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Business Logic Layer (ไธๅกๅฑ) โ
โ โโโโโโโโโโโโโโฌโโโโโโโโโโโโโฌโโโโโโโโโโโโโฌโโโโโโโโโโโโโฌโโโโโโโ โ
โ โ ่ฏทๆฑไธไธๆ โ ่ทฏ็ฑ็ฎก็ โ ไธญ้ดไปถ็ฎก็ โ ้่ฏฏๅค็ โ ็ๆง โ โ
โ โโโโโโโโโโโโโโดโโโโโโโโโโโโโดโโโโโโโโโโโโโดโโโโโโโโโโโโโดโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ ORM Layer (ๆฐๆฎ่ฎฟ้ฎๅฑ) โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ FreeGo ORM โ โ
โ โ โข ้ถๅ
ๅญๆตช่ดน โข ๆไฝๅๅฐ็ญ็น โข ็ฒพ็กฎๅฎน้้ขไผฐ โ โ
โ โ โข ้ซๅนถๅไผๅ๏ผๆง่ฝๆพ่ๆๅ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Database Layer (ๆฐๆฎๅบๅฑ) โ
โ โโโโโโโโโโโโโโฌโโโโโโโโโโโโโฌโโโโโโโโโโโโโฌโโโโโโโโโโโโโฌโโโโโโโ โ
โ โ MySQL โ MongoDB โ Redis ็ผๅญ โ ้ / ้ๆต โ ๆฉๅฑ โ โ
โ โโโโโโโโโโโโโโดโโโโโโโโโโโโโดโโโโโโโโโโโโโดโโโโโโโโโโโโโดโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
ใๆง่ฝๆๆ ๆๅฝใ๏ผๆฅ่ชไปๅบๅ
HTTP/ๅฎๅ
จ็ธๅ
ณ benchmark๏ผ่ฏทไปฅๆฌๆบ `go test -bench` ไธบๅ๏ผ
โข ECC ็ปๅฝ่ฎค่ฏ: 3,324 TPS โข AES ๆฐๆฎๆฅ่ฏข: 65,928 TPS
โข ๅๆกๆฅ่ฏข: 130,901 ns/op โข ๆน้ๆฅ่ฏข: 8,931,733 ns/op
โข ORM ๆน้็บฆ 6.82MB/op๏ผไธไธ่กจไธ่ด๏ผ โข GC: 93,139 allocs/op๏ผไปๅบ benchmark ๆๅฝ๏ผ
โข ๅนถๅ่ฟๆฅ: 10,000+ โข CPU ไฝฟ็จ: < 30%๏ผ่ง่ด่ฝฝ๏ผ
๐ง ๅฟซ้ๅผๅง
๐ฆ ๅฎ่ฃ
go get github.com/godaddy-x/freego
๐ ๅบ็ก็คบไพ
package main
import (
"github.com/godaddy-x/freego/node"
"github.com/godaddy-x/freego/utils/jwt"
)
func main() {
httpNode := &node.HttpNode{}
// ้
็ฝฎ JWT ่ฎค่ฏ
httpNode.AddJwtConfig(jwt.JwtConfig{
TokenKey: "your-256-bit-secret-key",
TokenExp: jwt.ONE_HOUR,
})
// ๆทปๅ ่ทฏ็ฑ
httpNode.GET("/health", func(ctx *node.Context) error {
return ctx.Json(map[string]interface{}{"status": "ok"})
})
// ๅฏๅจๆๅก
httpNode.StartServer(":8080")
}
๐ ๅฎๅ
จ็นๆง
ๅค้่ฎค่ฏไฝ็ณป
- JWT Token: ๆ ็ถๆ่ฎค่ฏ๏ผๆฏๆ็ญ่ฟๆๆถ้ด
- HMAC-SHA256: ้ฒๆญข้ๆพๆปๅปๅๆฐๆฎ็ฏกๆน
- Ed25519 / X25519: ็ญพๅไธๅฏ้ฅๅๅ๏ผๆ Plan / ่ทฏ็ฑๅฏ็จ๏ผ่ฏฆ่ง
README_SECURITY.md๏ผ
- AES-GCM: ่ฎค่ฏๅ ๅฏ๏ผๅ
ผ้กพๆบๅฏๆงไธๅฎๆดๆง๏ผๆ Plan / ่ทฏ็ฑๅฏ็จ๏ผ
ๅฎๅ
จๆบๅถ
- ๆถ้ดๆณ้ช่ฏ: ่ฏทๆฑๅจๅ
ธๅ ยฑ5 ๅ้็ชๅฃๅ
ๆๆ๏ผไปฅ่ทฏ็ฑ/้
็ฝฎไธบๅ๏ผ
- ้ๆบๆฐ้ฒ้ๆพ: ๆฏไธช่ฏทๆฑไฝฟ็จๅฏไธ nonce
- ไธๅกๅฎๆดๆง: HMAC / ๅคๅฑ็ญพๅ็ญไธ TokenใSecret ๆ้
็ฝฎ็ปๅๆ ก้ช
๐ ๆง่ฝๅฏนๆฏ
HTTP API ๆง่ฝ
| ๆต่ฏๅบๆฏ |
TPS |
ๅๅบๆถ้ด |
ๅ
ๅญๅ้
|
| ECC ็ปๅฝ่ฎค่ฏ |
3,324 |
0.37ms |
14KB |
| AES ๆฐๆฎๆฅ่ฏข |
65,928 |
0.02ms |
9.7KB |
ไธ่กจไธๆถๆๅพๅ
ๆๅฝๅๆบ๏ผๅค็ฐ่ง http_test.goใhttp_security_test.go ็ญใ
ORM ๆน้ๆฅ่ฏขๆง่ฝ (3000 ่กๆฐๆฎ)
| ๆกๆถ |
ๅค็ๆถ้ด |
ๅ
ๅญไฝฟ็จ |
็ธๅฏนๆง่ฝ |
ๅ
ๅญๆ็ |
| sqlx |
6.84ms |
8.61MB |
ๅบๅ |
โญโญโญโญ |
| ๅ็ SQL |
7.01ms |
8.54MB |
+2.5% |
โญโญโญโญโญ |
| FreeGo ORM |
8.93ms |
6.82MB |
+30.7% |
โญโญโญโญโญ |
| GORM |
9.25ms |
9.19MB |
+35.3% |
โญโญโญ |
| Beego ORM |
13.62ms |
15.85MB |
+99.2% |
โญโญ |
| XORM |
13.74ms |
19.06MB |
+100.9% |
โญโญ |
้กบๅบๆจกๅผๆต่ฏ: 17 ไธชๅญๆฎตๅฎๅ
จๅ
ฌๅนณๅฏนๆฏ๏ผๆด็ๅฎๅๆ ๅฎ้
ไธๅกๅบๆฏใๅฎๆด็ฏๅขไธๅค็ฐๆญฅ้ชค่ง orm_performance_report.md๏ผMongo ่ง mongodb_performance_report.mdใ
๐๏ธ ORM ็นๆง
ๆ ธๅฟไผๅๆๆฏ
- ้ถๅ
ๅญๆตช่ดน: ็ฒพ็กฎๅฎน้้ขๅ้
๏ผ้ฟๅ
ๆฉๅฎน
- ๆไฝๅๅฐๅผ้: ็ญ็น่ทฏๅพไพง้็ดๆฅ่ฃ
้
ไธ้ขๅ้
๏ผๅๅฐๅๅฐไพ่ต๏ผๅ
ๆฐๆฎ่งฃๆ๏ผไปฅ
ormx ไธบๅ๏ผ
- ๆบ่ฝ้ขไผฐ: ้ๅฝ OR ๆกไปถ็ฒพ็กฎๅฎน้่ฎก็ฎ
- ้ซๅนถๅๆฏๆ: ๅๅญๆไฝๅๆบ่ฝ่ฟๆฅๆฑ
้็จๅบๆฏ
- ้ซ้ขๆฐๆฎๅบๆไฝ
- ๅคงๆฐๆฎ้ๅค็
- ๅ
ๅญๆๆๅบ็จ
- ๅผบไธ่ดใ้ซๆง่ฝๆๆฐๆฎๅฏ้ๅไธๅก็ณป็ป
๐ฏ ้ๆฉๆๅ
้ๆฉ FreeGo ็็็ฑ
| ้ๆฑๅบๆฏ |
FreeGo ไผๅฟ |
้็จ้กน็ฎ |
| ๐ ้ซๆง่ฝ |
่พ sqlx ็บฆ +30.7% ่ๆถ๏ผๆน้ๅบๆฏๅ
ๅญๆด็๏ผ่งไธ่กจ๏ผ |
้ซๅนถๅ Web ๆๅก |
| ๐ ๅผบๅฎๅ
จ / ๆฏไปๅบๆฏ |
ไธ PCI DSS ็ญๅธธ่งๅบๆฏ็่ฝๅ้้
ๅๅไธ่ด๏ผ่งๅฎๅ
จๆๆกฃ๏ผ |
้่ใๆฏไป็ณป็ป |
| ๐พ ๅ
ๅญไผๅ |
ORM ๆน้็บฆ 6.82MB๏ผ็ธๅฏนๅ็ฑป ORM ๆด็ๅ้
|
ๅ
ๅญๆๆๅบ็จ |
| ๐๏ธ ๆฐๆฎๅบๅฏ้ |
ๆไฝๅๅฐ็ญ็น ORM๏ผๆบ่ฝๅฎน้้ขไผฐ |
ๆฐๆฎๅฏ้ๅ็ณป็ป |
ๅฟซ้้จ็ฝฒ
# ็คบไพ๏ผGo ็ๆฌไธ go.mod ไธ่ด๏ผ้็จไบไฝ ็ๅบ็จไปๅบ๏ผๆฌไปๅบไธบๅบๆถ้่ชๅธฆ main ๅ
ๅๆๅปบ๏ผ
FROM golang:1.26-alpine
WORKDIR /app
COPY . .
RUN go build -o main .
CMD ["./main"]
๐ ่็ณปไธๆฏๆ
ๆฌข่ฟ้่ฟ Issues ๅ้ฆ้ฎ้ขไธๅปบ่ฎฎใ