Dengan perkembangan Internet, seni bina perkhidmatan mikro telah menjadi pilihan lebih banyak perusahaan. Dalam seni bina perkhidmatan mikro, pintu masuk adalah bahagian yang sangat diperlukan. Sebagai bahagian penting dalam seni bina perkhidmatan mikro, gerbang bertanggungjawab untuk penghalaan permintaan dan pengimbangan beban, kawalan keselamatan dan penukaran protokol, serta boleh menjalankan pengurusan bersatu dan kawalan akses perkhidmatan bahagian belakang dengan berkesan.
Pada masa ini, terdapat banyak produk gerbang yang biasa digunakan di pasaran, seperti Kong, APISIX, dll. Walau bagaimanapun, produk gerbang ini mempunyai beberapa masalah seperti kos pembelajaran yang tinggi dan konfigurasi yang kompleks. Produk ini mungkin terlebih layak untuk beberapa senario mudah.
Sebagai bahasa pengaturcaraan yang mudah dan cekap, golang memberikan permainan penuh kepada kelebihannya dalam keselarasan dan penyepaduan yang tinggi, dan boleh digunakan untuk membina sistem gerbang yang ringan. Artikel ini akan menerangkan aspek berikut:
Secara umumnya, sistem get laluan perlu melaksanakan fungsi berikut:
Kami menggunakan bahasa golang untuk melaksanakan fungsi di atas, Pastikan kecekapan sistem pintu masuk dan penggunaan maksimum sumber.
Kami akan menggunakan tindanan teknologi utama berikut:
Sistem get laluan ini menggunakan "reverse proxy + ETCD +Redis" model seni bina.
Seni bina tiga peringkat:
Berbilang pelayan dan setiap pelayan mempunyai berbilang API Untuk akses serentak yang tinggi, Ia mesti dapat menyokong peningkatan dan penurunan nod API secara dinamik. Gunakan ETCD (kedai nilai kunci yang sangat tersedia) untuk penyelenggaraan keadaan dan penemuan nod API. Gunakan Redis sebagai cache data protobuf untuk API.
4.1 Pasang golang, Gin dan kebergantungan yang berkaitan
Selepas pemasangan selesai, tambahkan kebergantungan yang perlu anda gunakan dalam govendor Fail .yaml. Seperti yang ditunjukkan di bawah:
dependencies: - github.com/gin-gonic/gin - github.com/coreos/etcd/clientv3 - github.com/go-redis/redis - github.com/dgrijalva/jwt-go
Gunakan arahan go untuk melaksanakan arahan berikut:
go get -u github.com/kardianos/govendor govendor init govendor add +external govendor add github.com/gin-gonic/gin@v1.3.0
4.2 Penggunaan asas gin
Menggunakan gin you boleh membina rangka kerja HTTP dengan mudah, Seperti yang ditunjukkan di bawah:
package main import ( "github.com/gin-gonic/gin" ) func main() { r := gin.Default() r.GET("/ping", func(c *gin.Context) { c.JSON(200, gin.H{ "message": "pong", }) }) r.Run() // listen and serve on 0.0.0.0:8080 }
4.3 Penggunaan ETCD dan Redis
ETCD ialah kedai nilai kunci yang sangat tersedia yang boleh digunakan untuk penemuan dan konfigurasi perkhidmatan perkongsian. Di golang, kami akan menggunakan perpustakaan clientv3 yang disediakan secara rasmi untuk beroperasi dsb.
Redis ialah pangkalan data nilai kunci berprestasi tinggi Kami akan menggunakan perpustakaan go-redis untuk menggunakan Redis dalam golang.
4.4 Penggunaan JWT
Untuk memastikan keselamatan antara muka, kami akan menggunakan JWT untuk pengesahan antara muka. JWT, JSON Web Token, ialah kaedah standard web untuk menghantar maklumat pengesahan identiti dan kebenaran Senario penggunaan utamanya ialah kebenaran dan pengesahan antara muka mesin ke mesin.
4.5 Pelaksanaan Gerbang
Untuk get laluan itu sendiri, fungsi utama termasuk penghalaan permintaan dan pengimbangan beban, kawalan keselamatan dan pengelogan.
Untuk penghalaan permintaan dan pengimbangan beban, kita boleh menggunakan rangka kerja ReverseProxy of the Gin untuk mencapainya. Penemuan status dan pendaftaran API perlu dilaksanakan melalui ETCD.
Sistem get laluan kami perlu menyokong berbilang nod API bahagian belakang dan melaksanakan pengimbangan beban. Algoritma pengimbangan beban boleh menggunakan kaedah pengundian, kaedah rawak, dsb. Di sini kami menggunakan kaedah pengundian (RoundRobin) untuk pemilihan nod.
Dari segi kawalan keselamatan, kami boleh lulus JWT dalam pengepala permintaan untuk mencapai pengesahan antara muka.
Akhir sekali, masukkan log dalam respons dan kembalikan hasil respons.
Artikel ini memperkenalkan secara ringkas proses membina sistem gerbang mudah menggunakan bahasa golang. Sistem get laluan ini melaksanakan penghalaan permintaan dan pengimbangan beban dengan menggunakan rangka kerja GIN, melaksanakan penyelenggaraan status dan penemuan nod API melalui ETCD, menggunakan Redis sebagai cache data protobuf API, menggunakan JWT untuk pengesahan antara muka dan akhirnya menambah fungsi pengelogan. Sistem gerbang yang dibina menggunakan golang adalah ringan, cekap, mudah dipelajari dan digunakan, dan sangat sesuai untuk senario ringan.
Atas ialah kandungan terperinci Golang membina sistem pintu masuk yang ringan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!