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 ็ผๅญ โ ้ / ้ๆต โ ๆฉๅฑ โ โ
โ โโโโโโโโโโโโโโดโโโโโโโโโโโโโดโโโโโโโโโโโโโดโโโโโโโโโโโโโดโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
ใๆง่ฝๆๆ ๆๅฝใ๏ผๆฅ่ชไปๅบๆฅๅ๏ผ่ฏทไปฅๆฌๆบ `go test -bench` ไธบๅ๏ผ
โข ECC ็ปๅฝ่ฎค่ฏ๏ผ1mร3๏ผ: โ13,725 TPS๏ผๅๅผ๏ผ โข Auth๏ผEd25519+HMAC+AES-GCM๏ผ1mร3๏ผ: โ32,318 TPS๏ผๅๅผ๏ผ
โข ECC: 91,738~94,001 ns/op โข Auth: 36,388~39,015 ns/op
โข MySQL FindOne: 11,169 ns/op๏ผFreeGo๏ผ vs 16,471 ns/op๏ผGORM๏ผ
โข MySQL Update: 180,680 ns/op๏ผFreeGo๏ผ vs 358,455 ns/op๏ผGORM๏ผ
โข ๅนถๅ่ฟๆฅ: 10,000+ โข ๅคฑ่ดฅ็: 0.00%๏ผๆฅๅๆ ทๆฌๆนๆฌก๏ผ
๐ง ๅฟซ้ๅผๅง
๐ฆ ๅฎ่ฃ
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 ๆง่ฝ
| ๆต่ฏๅบๆฏ |
ๅๆตๅฃๅพ |
ๆฏ็งๆง่กๆฐ๏ผๅๅผ๏ผ |
ns/op๏ผ่ๅด๏ผ |
B/op๏ผ่ๅด๏ผ |
ๅคฑ่ดฅ็ |
| ECC ็ปๅฝ่ฎค่ฏ๏ผEd25519 + X25519๏ผ |
1m ร 3 runs |
โ 13,725/s |
91,738 ~ 94,001 |
22,115 ~ 22,385 |
0.00% |
| Auth ่ฏทๆฑ๏ผEd25519 + HMAC + AES-GCM๏ผ |
1m ร 3 runs |
โ 32,318/s |
36,388 ~ 39,015 |
9,799 ~ 9,856 |
0.00% |
ๅฎๆดๆนๆณใๅๅง่พๅบไธๅคฑ่ดฅ็ป่ฎกๅฃๅพ่ง http_benchmark_report.mdใ
ORM ๆง่ฝๅฏนๆฏ๏ผMySQL๏ผ็ฌ็ซ่ฟ็จ 60s๏ผ
| ๅบๆฏ |
FreeGo๏ผsqld๏ผ |
GORM |
GORM / FreeGo |
FindOne ns/op |
11,169 |
16,471 |
โ 1.47ร |
FindList 100 ns/op |
165,937 |
253,354 |
โ 1.53ร |
FindList 500 ns/op |
596,669 |
825,536 |
โ 1.38ร |
FindList 1000 ns/op |
422,738 |
1,472,001 |
โ 3.48ร |
FindList 2000 ns/op |
751,271 |
3,189,665 |
โ 4.25ร |
Save ns/op |
301,592 |
368,179 |
โ 1.22ร |
Update ns/op |
180,680 |
358,455 |
โ 1.98ร |
ไธ่กจๆฅ่ช orm_performance_report.md ็็ฌ็ซ่ฟ็จ 60s ๆนๆฌก๏ผๅๅ้กนๅคฑ่ดฅ็ๅไธบ 0.00%ใMongo ่ง mongodb_performance_report.mdใ
๐๏ธ ORM ็นๆง
ๆ ธๅฟไผๅๆๆฏ
- ้ถๅ
ๅญๆตช่ดน: ็ฒพ็กฎๅฎน้้ขๅ้
๏ผ้ฟๅ
ๆฉๅฎน
- ๆไฝๅๅฐๅผ้: ็ญ็น่ทฏๅพไพง้็ดๆฅ่ฃ
้
ไธ้ขๅ้
๏ผๅๅฐๅๅฐไพ่ต๏ผๅ
ๆฐๆฎ่งฃๆ๏ผไปฅ
ormx ไธบๅ๏ผ
- ๆบ่ฝ้ขไผฐ: ้ๅฝ OR ๆกไปถ็ฒพ็กฎๅฎน้่ฎก็ฎ
- ้ซๅนถๅๆฏๆ: ๅๅญๆไฝๅๆบ่ฝ่ฟๆฅๆฑ
้็จๅบๆฏ
- ้ซ้ขๆฐๆฎๅบๆไฝ
- ๅคงๆฐๆฎ้ๅค็
- ๅ
ๅญๆๆๅบ็จ
- ๅผบไธ่ดใ้ซๆง่ฝๆๆฐๆฎๅฏ้ๅไธๅก็ณป็ป
๐ฏ ้ๆฉๆๅ
้ๆฉ FreeGo ็็็ฑ
| ้ๆฑๅบๆฏ |
FreeGo ไผๅฟ |
้็จ้กน็ฎ |
| ๐ ้ซๆง่ฝ |
MySQL ๅคๅบๆฏ ns/op ไฝไบ GORM๏ผ็บฆ 1.22ร~4.25ร๏ผ |
้ซๅนถๅ Web ๆๅก |
| ๐ ๅผบๅฎๅ
จ / ๆฏไปๅบๆฏ |
ไธ PCI DSS ็ญๅธธ่งๅบๆฏ็่ฝๅ้้
ๅๅไธ่ด๏ผ่งๅฎๅ
จๆๆกฃ๏ผ |
้่ใๆฏไป็ณป็ป |
| ๐พ ๅ
ๅญไผๅ |
ๅจ Save / Update ็ญๅ่ทฏๅพ B/opใallocs/op ๆดไฝ |
ๅ
ๅญๆๆๅบ็จ |
| ๐๏ธ ๆฐๆฎๅบๅฏ้ |
ๆไฝๅๅฐ็ญ็น ORM๏ผๆบ่ฝๅฎน้้ขไผฐ |
ๆฐๆฎๅฏ้ๅ็ณป็ป |
ๅฟซ้้จ็ฝฒ
# ็คบไพ๏ผGo ็ๆฌไธ go.mod ไธ่ด๏ผ้็จไบไฝ ็ๅบ็จไปๅบ๏ผๆฌไปๅบไธบๅบๆถ้่ชๅธฆ main ๅ
ๅๆๅปบ๏ผ
FROM golang:1.26-alpine
WORKDIR /app
COPY . .
RUN go build -o main .
CMD ["./main"]
๐ ่็ณปไธๆฏๆ
ๆฌข่ฟ้่ฟ Issues ๅ้ฆ้ฎ้ขไธๅปบ่ฎฎใ