Go में माइक्रोसर्विसेज़ का परिचय
माइक्रोसर्विस आर्किटेक्चर आधुनिक वितरित सिस्टम बनाने के लिए डी-फैक्टो मानक बन गया है। Go (Golang) भाषा अपने हल्के गोरूटीन, उच्च प्रदर्शन और सरल तैनाती के साथ माइक्रोसर्विसेज़ को लागू करने के लिए आदर्श है। इस लेख में, हम Go में माइक्रोसर्विस आर्किटेक्चर को अवधारणा से लेकर कोड उदाहरणों के साथ व्यावहारिक कार्यान्वयन तक समझेंगे।
Go समवर्तीता के लिए अंतर्निहित समर्थन, तेज़ स्टार्टअप और छोटे बाइनरी फ़ाइल आकार प्रदान करता है - ये सभी माइक्रोसर्विसेज़ के लिए महत्वपूर्ण हैं। हम देखेंगे कि सर्विस कैसे डिज़ाइन करें, REST API को लागू करें, middleware जोड़ें और एप्लिकेशन को कंटेनरीकरण के लिए तैयार करें।
Go में माइक्रोसर्विस आर्किटेक्चर
1. प्रोजेक्ट संरचना
सही कोड संगठन एक रखरखाव योग्य माइक्रोसर्विस का आधार है। अनुशंसित संरचना:
myservice/├── cmd/│ └── server/│ └── main.go # प्रवेश बिंदु├── internal/│ ├── handler/ # HTTP हैंडलर│ ├── service/ # व्यावसायिक तर्क│ ├── repository/ # डेटा के साथ कार्य│ └── middleware/ # मध्यवर्ती हैंडलर├── pkg/│ └── models/ # सामान्य डेटा मॉडल├── config/│ └── config.go # कॉन्फ़िगरेशन├── go.mod└── Dockerfileयह संरचना Clean Architecture के सिद्धांतों का पालन करती है: handler → service → repository। यह प्रत्येक परत का स्वतंत्र रूप से परीक्षण करना आसान बनाता है।
2. कॉन्फ़िगरेशन और स्टार्टअप
आइए मानक लाइब्रेरी net/http का उपयोग करके एक सरल HTTP सर्वर से शुरू करें:
// cmd/server/main.gopackage main
import ( "fmt" "log" "net/http" "os")
func main() { port := os.Getenv("PORT") if port == "" { port = "8080" }
http.HandleFunc("/health", func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusOK) fmt.Fprintf(w, `{"status": "ok"}`) })
log.Printf("Server starting on :%s", port) log.Fatal(http.ListenAndServe(":"+port, nil))}यह एक न्यूनतम माइक्रोसर्विस है। प्रोडक्शन के लिए, middleware समर्थन वाले राउटर का उपयोग करें, जैसे gorilla/mux या chi।
माइक्रोसर्विस का व्यावहारिक कार्यान्वयन
3. gorilla/mux के साथ REST API
gorilla/mux स्थापित करें और "उपयोगकर्ता" इकाई के लिए CRUD लागू करें:
// go.modmodule github.com/youruser/userservice
go 1.21
require github.com/gorilla/mux v1.8.1// internal/handler/user.gopackage handler
import ( "encoding/json" "net/http" "github.com/gorilla/mux")
type User struct { ID string `json:"id"` Name string `json:"name"` Age int `json:"age"`}
var users = []User{ {ID: "1", Name: "Alice", Age: 30},}
func GetUsers(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(users)}
func CreateUser(w http.ResponseWriter, r *http.Request) { var newUser User if err := json.NewDecoder(r.Body).Decode(&newUser); err != nil { http.Error(w, err.Error(), http.StatusBadRequest) return } users = append(users, newUser) w.WriteHeader(http.StatusCreated) json.NewEncoder(w).Encode(newUser)}// cmd/server/main.go (जारी)package main
import ( "log" "net/http" "github.com/gorilla/mux" "yourproject/internal/handler")
func main() { r := mux.NewRouter() r.HandleFunc("/users", handler.GetUsers).Methods("GET") r.HandleFunc("/users", handler.CreateUser).Methods("POST")
log.Println("Server started on :8080") log.Fatal(http.ListenAndServe(":8080", r))}4. Middleware: लॉगिंग और प्रमाणीकरण
Middleware माइक्रोसर्विसेज़ का एक अभिन्न अंग है।