Rumah >pembangunan bahagian belakang >Golang >Menggunakan OpenResty untuk melaksanakan gerbang API berprestasi tinggi dalam Beego
Sebagai rangka kerja aplikasi web, Beego telah pun mendapat reputasi tertentu dalam kalangan bahasa Go. Ia menyediakan penghalaan HTTP yang kaya, pengelogan, ORM dan fungsi lain, menjadikannya lebih mudah untuk membangunkan aplikasi web. Jadi, jika kita ingin melaksanakan gerbang API berprestasi tinggi, bolehkah kita menggunakan Beego untuk mencapainya? Jawapannya ya. Artikel ini akan memperkenalkan cara menggunakan OpenResty untuk melaksanakan get laluan API berprestasi tinggi dalam Beego.
Gerbang API ialah lapisan perantaraan yang terletak di antara port perkhidmatan dan klien Ia digunakan untuk menyambungkan berbilang perkhidmatan bahagian belakang dan menyediakan antara muka API yang mudah kepada dunia luar. Dalam seni bina perkhidmatan mikro, disebabkan bilangan perkhidmatan yang banyak dan protokol perkhidmatan yang tidak konsisten, kami sering memerlukan get laluan API untuk memajukan dan menukar perkhidmatan yang berbeza.
Apabila melaksanakan get laluan API, kita perlu mempertimbangkan tiga aspek berikut:
OpenResty ialah pelayan aplikasi web berdasarkan Nginx, dibangunkan oleh pengaturcara China Zhang Yichun. Ia memanjangkan Nginx untuk menyokong bahasa skrip Lua, membolehkan pengembangan dinamik berprestasi tinggi. OpenResty dicirikan oleh prestasi tingginya Ia mencapai keselarasan tinggi dan kependaman rendah dengan menyimpan sumber statik dalam memori dan menggunakan teknologi seperti coroutine.
Dalam artikel ini, kami akan menggunakan OpenResty sebagai komponen teras get laluan API, dan Beego untuk melaksanakan penghalaan dan logik kawalan untuk mengurus perkhidmatan bahagian belakang. Ini mempunyai dua faedah: Pertama, anda boleh menggunakan sepenuhnya ciri berprestasi tinggi OpenResty untuk meningkatkan kelajuan tindak balas dan keselarasan get laluan API kedua, anda boleh menggunakan Beego untuk mengurus penghalaan dan konfigurasi perkhidmatan bahagian belakang; mengurangkan kerumitan pembangunan Anda juga boleh memanfaatkan fungsi penghalaan dan pengawal Beego sendiri.
Sebelum mula menggunakan OpenResty, kami perlu memasang OpenResty dan pakej perisian yang berkaitan dengannya. OpenResty secara rasmi menyediakan banyak pakej pemasangan binari untuk platform yang berbeza, yang boleh dimuat turun dan dipasang di laman web rasminya. Jika anda menggunakan Ubuntu/Debian, anda boleh menggunakan arahan berikut untuk memasang:
$ sudo apt-get install libreadline-dev libncurses5-dev libpcre3-dev libssl-dev perl make build-essential $ wget https://openresty.org/download/openresty-1.19.3.2.tar.gz $ tar -xzvf openresty-1.19.3.2.tar.gz $ cd openresty-1.19.3.2 $ ./configure --with-http_realip_module --with-http_stub_status_module --with-luajit --prefix=/usr/local/openresty $ make && sudo make install
Selepas pemasangan selesai, kita perlu menambah laluan fail binari OpenResty kepada pembolehubah persekitaran PATH sistem supaya ia boleh dipasang pada baris arahan Menggunakan komponen OpenResty secara langsung seperti nginx.
$ export PATH=$PATH:/usr/local/openresty/nginx/sbin
Untuk menggunakan OpenResty dalam Beego, anda perlu menyepadukan penghalaan OpenResty dan penghalaan Beego. Khususnya, konfigurasi penghalaan Beego semuanya dikendalikan oleh OpenResty, dan Beego hanya perlu menyediakan pengawal yang sepadan dengan penghalaan. Dalam proses ini, kita perlu menggunakan skrip Lua OpenResty untuk melaksanakan pengedaran laluan.
Berikut ialah pelaksanaan penghalaan OpenResty yang mudah:
location /api/ { content_by_lua_block { local args = ngx.req.get_uri_args() if args['service'] == 'user' then ngx.exec('/user' .. ngx.var.request_uri) elseif args['service'] == 'order' then ngx.exec('/order' .. ngx.var.request_uri) else ngx.say('Unknown service') ngx.exit(400) end } }
Dalam kod di atas, kami menentukan laluan dengan awalan URL /api/
melalui konfigurasi lokasi Laluan ini akan memajukan permintaan ke Perkhidmatan khusus. Peraturan pemajuan khusus bergantung pada parameter service
dalam permintaan Kami boleh memilih perkhidmatan yang berbeza berdasarkan nilai parameter yang berbeza untuk mencapai pengedaran laluan.
Untuk OpenResty melaksanakan skrip Lua yang serupa dengan yang di atas, kita perlu menyimpan fail skrip ini dalam direktori yang ditentukan dan mengkonfigurasi laluan skrip Lua dalam nginx.conf:
lua_package_path "/etc/nginx/conf.d/lua/?.lua;;";
nota yang diperlukan kerana kami menggunakan ngx.exec untuk melaksanakan pemajuan perkhidmatan sebenar, kami perlu menentukan laluan yang lebih khusus dalam kod perkhidmatan yang sepadan supaya OpenResty boleh memadankan dan memajukan dengan betul. Sebagai contoh, kita boleh menentukan /user
dan /order
sebagai awalan penghalaan khusus, dan kemudian menggunakan ngx.exec
dalam konfigurasi penghalaan untuk pemajuan, seperti berikut:
location /user/ { content_by_lua_block { ngx.exec('@user_service') } } location /order/ { content_by_lua_block { ngx.exec('@order_service') } }
Di sini, @user_service
dan @order_service
Kesemuanya menunjukkan lokasi Nginx bagi perkhidmatan tertentu Takrifan mereka adalah serupa dengan yang berikut:
location @user_service { proxy_pass http://127.0.0.1:8080; # ... } location @order_service { proxy_pass http://127.0.0.1:8081; # ... }
Dengan cara ini, kami telah melaksanakan penghalaan dan pemajuan yang mudah. Walau bagaimanapun, ini hanya sebahagian kecil daripada fungsi OpenResty Ia juga mempunyai banyak fungsi dan ciri yang berkuasa, seperti caching, proksi terbalik, pengehadan semasa, dll. Dalam pembangunan gerbang API sebenar, kita boleh memilih ciri yang sesuai untuk digunakan mengikut keperluan khusus.
Selain penghalaan OpenResty, kami juga perlu melaksanakan pengawal dan logik perniagaan dalam Beego. Di sini, kita boleh mencapai pemuatan dinamik skrip Lua dengan menggunakan fungsi http.ServeFile terbina dalam Beego dalam pengawal untuk memuatkan skrip Lua yang ditentukan.
Berikut ialah contoh pengawal mudah:
import ( "strings" "github.com/astaxie/beego" ) type ApiController struct { beego.Controller } func (this *ApiController) Handle() { uri := this.Ctx.Request.RequestURI scriptPath := "/etc/nginx/conf.d/lua" + strings.TrimSuffix(uri, ".lua") + ".lua" this.Ctx.Output.ServeFile(scriptPath) }
在上述代码中,我们首先获取请求的URI,然后根据URI构造出对应的Lua脚本路径,并调用http.ServeFile函数将脚本内容返回给OpenResty,从而实现动态加载脚本的目的。需要注意的是,我们需要对请求的后缀进行进一步处理,将.lua
后缀去掉,并在路径中添加相应的前缀,才能正确地加载脚本文件。
在本文中,我们介绍了如何在Beego中使用OpenResty实现高性能API网关。通过整合Beego和OpenResty的特性,我们实现了分布式路由、负载均衡和容错等核心功能,并为了实现安全性考虑,提供了授权、认证、访问控制等安全特性。在实际应用中,API网关还需要考虑缓存、反向代理、限流等特性,我们需要根据实际需要进行选取。
总的来说,Beego和OpenResty都是非常优秀的Web应用框架,它们的优势互补,可以帮助我们快速构建高性能和高可靠的Web应用。如果你还没有尝试过使用这两个框架,不妨想一想如何将它们应用到自己的项目中,相信会为你带来不少启示。
Atas ialah kandungan terperinci Menggunakan OpenResty untuk melaksanakan gerbang API berprestasi tinggi dalam Beego. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!