FreeGo ้ซๆง่ฝๆกๆถ

๐ ไธๆณจไบๆ่ดๆง่ฝไผๅๅ้่็บงๅฎๅ
จๆ ๅ็ Go ่ฏญ่จไผไธ็บงๆกๆถ
FreeGo ๆฏไธไธช้ซๆง่ฝ็ Go ่ฏญ่จไผไธ็บงๆกๆถ๏ผไธๆณจไบๆ่ดๆง่ฝไผๅๅ้่็บงๅฎๅ
จๆ ๅใๆกๆถ็ฑไธคๅคงๆ ธๅฟ็ปไปถๆๆ๏ผ
- Server & API ๆกๆถ๏ผๅบไบ FastHTTP ๆๅปบ็้ซๆง่ฝ HTTP ๆๅก
- ORM ๆฐๆฎๅบๆกๆถ๏ผ้ถๅๅฐใ้ถๅ
ๅญๆตช่ดน็้ซๆง่ฝๆฐๆฎๅบๆไฝๆกๆถ
๐ ็ฎๅฝ
๐ ๆกๆถ็นๆง
๐ Server & API ๆกๆถ
| ็นๆง |
ๆ่ฟฐ |
ไผๅฟ |
| ๐ ้ซๆง่ฝ HTTP |
ๅบไบ FastHTTP๏ผๆฏๆ ๅๅบๅฟซ 3-5 ๅ |
ๅๆบ QPS 50,000+ |
| ๐ ้่็บงๅฎๅ
จ |
JWT + RSA/ECC + AES ๅ ๅฏ |
็ฌฆๅ PCI DSS ๆ ๅ |
| ๐ ้ฒ้ๆพๆปๅป |
HMAC-SHA256 + ๆถ้ดๆณ |
้่็บงๅฎๅ
จไฟ้ |
| ๐ฅ RBAC ๆ้ๆงๅถ |
่ง่ฒๆ้็ฎก็็ณป็ป |
ไผไธ็บง่ฎฟ้ฎๆงๅถ |
| โก ไธ็บง้ๆต |
็ฝๅ
ณ/ๆนๆณ/็จๆท้ๆต |
้ฒๆญข็ณป็ป่ฟ่ฝฝ |
| ๐ง ่ฟๆปคๅจ้พ |
ๅฎๆด็ไธญ้ดไปถ็ณป็ป |
ๆฏๆ่ชๅฎไนๆฉๅฑ |
๐๏ธ ORM ๆฐๆฎๅบๆกๆถ
| ็นๆง |
ๆ่ฟฐ |
ๆง่ฝๆๅ |
| ๐พ ้ถๅ
ๅญๆตช่ดน |
็ฒพ็กฎๅฎน้้ขๅ้
|
ๅๅฐ 90%+ GC ๅๅ |
| โก ้ถๅๅฐๅผ้ |
็ดๆฅๅ
ๅญๆไฝ |
็ผ่ฏๆถ็ฑปๅๅฎๅ
จ |
| ๐ง ๆบ่ฝ้ขไผฐ |
้ๅฝ OR ๆกไปถ็ฒพ็กฎ่ฎก็ฎ |
ๅคๆๆฅ่ฏขๆง่ฝไผๅ |
| ๐ ้ซๅนถๅๆฏๆ |
ๆบ่ฝ่ฟๆฅๆฑ + ๅๅญๆไฝ |
ๆฏๆ 10,000+ ๅนถๅ |
ๆ ธๅฟ็ปไปถๆถๆ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ FreeGo Framework โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Application Layer (ๅบ็จๅฑ) โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ HTTP Server (FastHTTP) โ โ
โ โ โข ๅๆบ QPS: 50,000+ โ โ
โ โ โข ๅๅบๅปถ่ฟ: < 1ms โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Filter Chain (่ฟๆปคๅจ้พ) โ
โ โโโโโโโโโโโโโโฌโโโโโโโโโโโโโฌโโโโโโโโโโโโโฌโโโโโโโโโโโโโฌโโโโโโโ โ
โ โ ้ๆต่ฟๆปคๅจ โ ๅๆฐ่ฟๆปคๅจ โ ไผ่ฏ่ฟๆปคๅจ โ ๆ้่ฟๆปคๅจ โ ่ชๅฎไนโ โ
โ โโโโโโโโโโโโโโดโโโโโโโโโโโโโดโโโโโโโโโโโโโดโโโโโโโโโโโโโดโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Security & Crypto (ๅฎๅ
จๅฑ) โ
โ โโโโโโโโโโโโโโฌโโโโโโโโโโโโโฌโโโโโโโโโโโโโฌโโโโโโโโโโโโโฌโโโโโโโ โ
โ โ JWT ่ฎค่ฏ โ RSA/ECC ๅ ๅฏโ AES ๅ ๅฏ โ HMAC็ญพๅ โ ้ฒ้ๆพโ โ
โ โโโโโโโโโโโโโโดโโโโโโโโโโโโโดโโโโโโโโโโโโโดโโโโโโโโโโโโโดโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Business Logic Layer (ไธๅกๅฑ) โ
โ โโโโโโโโโโโโโโฌโโโโโโโโโโโโโฌโโโโโโโโโโโโโฌโโโโโโโโโโโโโฌโโโโโโโ โ
โ โ ่ฏทๆฑไธไธๆ โ ่ทฏ็ฑ็ฎก็ โ ไธญ้ดไปถ็ฎก็ โ ้่ฏฏๅค็ โ ็ๆง โ โ
โ โโโโโโโโโโโโโโดโโโโโโโโโโโโโดโโโโโโโโโโโโโดโโโโโโโโโโโโโดโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ ORM Layer (ๆฐๆฎ่ฎฟ้ฎๅฑ) โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ FreeGo ORM โ โ
โ โ โข ้ถๅ
ๅญๆตช่ดน โข ้ถๅๅฐๅผ้ โข ็ฒพ็กฎๅฎน้้ขไผฐ โ โ
โ โ โข ้ซๅนถๅไผๅ๏ผๆง่ฝๆพ่ๆๅ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Database Layer (ๆฐๆฎๅบๅฑ) โ
โ โโโโโโโโโโโโโโฌโโโโโโโโโโโโโฌโโโโโโโโโโโโโฌโโโโโโโโโโโโโฌโโโโโโโ โ
โ โ MySQL โ PostgreSQL โ MongoDB โ Redis โ ๅ
ถไป โ โ
โ โโโโโโโโโโโโโโดโโโโโโโโโโโโโดโโโโโโโโโโโโโดโโโโโโโโโโโโโดโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
ใๆง่ฝๆๆ ใ
โข ECC ็ปๅฝ่ฎค่ฏ: 3,324 TPS โข AES ๆฐๆฎๆฅ่ฏข: 65,928 TPS
โข ๅๆกๆฅ่ฏข: 130,901 ns/op โข ๆน้ๆฅ่ฏข: 8,931,733 ns/op
โข ๅ
ๅญๅ ็จ: 6.8MB/op โข GCๅๅ: 93,139 allocs/op
โข ๅนถๅ่ฟๆฅ: 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: ้ฒๆญข้ๆพๆปๅปๅๆฐๆฎ็ฏกๆน
- RSA/ECC ๅ ๅฏ: ้ๅฏน็งฐๅ ๅฏ๏ผ้่็บงๅฎๅ
จ
- AES ๅ ๅฏ: ๅฏน็งฐๅ ๅฏ๏ผ้ซๆง่ฝๆฐๆฎไผ ่พ
ๅฎๅ
จๆบๅถ
- ๆถ้ดๆณ้ช่ฏ: ่ฏทๆฑๅจ 5 ๅ้็ชๅฃๅ
ๆๆ
- ้ๆบๆฐ้ฒ้ๆพ: ๆฏไธช่ฏทๆฑไฝฟ็จๅฏไธ nonce
- ๅ้็ญพๅ: Token + Secret ็ปๅ้ช่ฏ
๐ ๆง่ฝๅฏนๆฏ
HTTP API ๆง่ฝ
| ๆต่ฏๅบๆฏ |
TPS |
ๅๅบๆถ้ด |
ๅ
ๅญๅ้
|
| ECC ็ปๅฝ่ฎค่ฏ |
3,324 |
0.37ms |
14KB |
| AES ๆฐๆฎๆฅ่ฏข |
65,928 |
0.02ms |
9.7KB |
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 ็นๆง
ๆ ธๅฟไผๅๆๆฏ
- ้ถๅ
ๅญๆตช่ดน: ็ฒพ็กฎๅฎน้้ขๅ้
๏ผ้ฟๅ
ๆฉๅฎน
- ้ถๅๅฐๅผ้: ็ดๆฅๅ
ๅญๆไฝ๏ผ็ผ่ฏๆถ็ฑปๅๅฎๅ
จ
- ๆบ่ฝ้ขไผฐ: ้ๅฝ OR ๆกไปถ็ฒพ็กฎๅฎน้่ฎก็ฎ
- ้ซๅนถๅๆฏๆ: ๅๅญๆไฝๅๆบ่ฝ่ฟๆฅๆฑ
้็จๅบๆฏ
- ้ซ้ขๆฐๆฎๅบๆไฝ
- ๅคงๆฐๆฎ้ๅค็
- ๅ
ๅญๆๆๅบ็จ
- ้่็บงๆฐๆฎ็ณป็ป
๐ฏ ้ๆฉๆๅ
้ๆฉ FreeGo ็็็ฑ
| ้ๆฑๅบๆฏ |
FreeGo ไผๅฟ |
้็จ้กน็ฎ |
| ๐ ้ซๆง่ฝ |
30.7%ๆง่ฝๅผ้๏ผๅ
ๅญ่็ 20% |
้ซๅนถๅ Web ๆๅก |
| ๐ ้่็บงๅฎๅ
จ |
PCI DSS ๅ่ง |
้่ใๆฏไป็ณป็ป |
| ๐พ ๅ
ๅญไผๅ |
6.8MB ๅ
ๅญไฝฟ็จ๏ผGC ๅๅๆๅฐ |
ๅ
ๅญๆๆๅบ็จ |
| ๐๏ธ ๆฐๆฎๅบๅฏ้ |
้ถๅๅฐ ORM๏ผๆบ่ฝๅฎน้้ขไผฐ |
ๆฐๆฎๅฏ้ๅ็ณป็ป |
ๅฟซ้้จ็ฝฒ
# Docker ้จ็ฝฒ
FROM golang:1.21-alpine
WORKDIR /app
COPY . .
RUN go build -o main .
CMD ["./main"]
๐ ่็ณปไธๆฏๆ
โญ ๅฆๆ่ฟไธช้กน็ฎๅฏนไฝ ๆๅธฎๅฉ๏ผ่ฏท็ปๅฎไธไธช Star๏ผ