在本指南中,我们将考虑将简单的GO服务器与Redis梳理,并使用pebl免费部署。
设置
- 确保已安装了docker和Go。
- 按照此处的步骤安装PEBL CLI:https://docs.pebl.io/setup
- 前往pebl.io并创建一个免费帐户
创建您的帐户后,请确保要求您的免费*.pebl.rocks
子域(https://www.pebl.io/signup/claim),因为我们将在系列的其余部分中使用它!
我们将使用hey.pebl.rocks
使事情变得具体,因此请确保用自己的子域替换任何实例。
项目创建
现在是时候创建我们的项目了!
-
创建一个刮擦文件夹以充当项目的根。对于本教程,我们将创建
pebl-tutorial
:
$ mkdir ~/work/pebl-tutorial
-
然后通过创建一个GO模块来初始化项目:
$ cd ~/work/pebl-tutorial $ go mod init pebl-tutorial
-
通过在项目文件夹中运行
go get
下载PEBL GO SDK:
$ cd ~/work/pebl-tutorial $ go get github.com/peblcloud/go
添加redis
让我们首先安装我们将使用的redis client:
$ go get github.com/redis/go-redis/v9
然后在项目的根部创建一个main.go
,然后粘贴以下:
package main
import (
"net/http"
"github.com/peblcloud/go"
"github.com/redis/go-redis/v9"
)
func main() {
redisConn, _ := pebl.Redis("redis-1")
rdb := redis.NewClient(&redis.Options{
Addr: redisConn.Addr,
})
svc := http.NewServeMux()
svc.HandleFunc("/", func(w http.ResponseWriter, _ *http.Request) {
count, _ := rdb.Get(context.Background(), "count").Result()
res := fmt.Sprintf("current count: %s", count)
w.Write([]byte(res))
})
svc.HandleFunc("/incr", func(w http.ResponseWriter, _ *http.Request) {
rdb.Incr(context.Background(), "count")
})
pebl.Service(svc, "hey.pebl.rocks")
}
pebl是一个唯一的云平台,其中一切都用代码驱动。无需配置!在这里,我们利用pebl.Service
从标准的net/http
GO服务器中创建服务,该服务将在hey.pebl.rocks
上使用。 (确保将其更改为您所声称的自己的子域)。
以类似的方式,我们可以使用pebl.Redis
访问Redis。此方法返回一个结构,该结构包含REDIS实例的连接信息。这将传递到Redis客户端。
最后,我们在服务器上配置了两个端点:/incr
,该端点会增加键count
,而根端点/
返回当前计数。
本地运行
让我们尝试本地运行!
本地群集
首先,我们需要初始化本地群集:
$ pebl up
:: initializing new pebl cluster...
:: done!
:: run `pebl info` to see logs, endpoints, and other info about the running cluster!
$
然后执行pebl info
以将其连接到运行群集。这让您看到有关运行群集的信息,包括任何运行的工作负载,日志等。信息屏幕应像这样:
pebl cluster version: 0.0.9
ctrl-C or q to exit the info pane
(exiting will not stop the cluster)
══ logs ═══════════════════════════════
您可以通过按q
或Ctrl-C
退出信息窗格。
运行项目
现在确保您处于项目的根源,并执行pebl run
:
$ cd ~/work/pebl-tutorial
$ pebl run
:: building golang project...
:: staging build at: /tmp/dir
:: containerizing the build...
:: starting container...
$
现在,如果您检查了信息窗格,则应该看到两个工作负载,端点和redis实例。
pebl cluster version: 0.0.9
ctrl-C or q to exit the info pane
(exiting will not stop the cluster)
redis: redis-1 → localhost:55000
endpoint: hey.pebl.rocks → localhost:55001
══ logs ════════════════════════════════
发送请求
信息窗格显示了该服务的本地绑定端口。在我们的示例中,它注定要与:55001
,但您自己的情况会有所不同。将测试卷发发送到绑定端口:
$ curl localhost:55001/incr
$ curl localhost:55001/
current count: 1
$ curl localhost:55001/incr
$ curl localhost:55001/incr
$ curl localhost:55001/
current count: 3
$
进行更改
现在使它变得更加有趣!让我们为/reset
添加一个端点,该端点将将count
键设置为零。
package main
import (
"net/http"
"github.com/peblcloud/go"
"github.com/redis/go-redis/v9"
)
func main() {
redisConn, _ := pebl.Redis("redis-1")
rdb := redis.NewClient(&redis.Options{
Addr: redisConn.Addr,
})
svc := http.NewServeMux()
svc.HandleFunc("/", func(w http.ResponseWriter, _ *http.Request) {
count, _ := rdb.Get(context.Background(), "count").Result()
res := fmt.Sprintf("current count: %s", count)
w.Write([]byte(res))
})
svc.HandleFunc("/incr", func(w http.ResponseWriter, _ *http.Request) {
rdb.Incr(context.Background(), "count")
})
svc.HandleFunc("/reset", func(w http.ResponseWriter, _ *http.Request) {
rdb.Set(context.Background(), "count", "0", 0)
})
pebl.Service(svc, "hey.pebl.rocks")
}
请注意已附加到svc
的新的/reset
处理程序。
在其他平台中进行更改可能是一个涉及的过程。但是使用PEBL,我们只需要重新运行该项目! PEBL了解更新端点的含义,并将自动处理将基础服务器切换到最新版本而不会任何中断。
再次使用pebl run
运行项目,然后将请求发送到/reset
端点:
$ curl localhost:55001/
current count: 3
$ curl localhost:55001/reset
$ curl localhost:55001/
current count: 0
$
云运行时
真正让您了解PEBL方法如此强大的原因,我们将把这个项目部署到云中。我们将无需任何更改,无需额外的配置!
只需在项目的根部使用pebl deploy
:
$ cd ~/work/pebl-tutorial
$ pebl deploy
部署后,您可以访问pebl console以查看运行的Redis实例。您还可以为远程redis实例创建本地隧道以进行检查或调试:
$ pebl tunnel redis
:: tunnel established at: 127.0.0.1:50000
:: use redis-cli to connect:
:: redis-cli -p 50000
,正如输出所建议的那样,我们可以使用redis-cli
到本地绑定的端口,以隧道到您的远程redis实例:
$ redis-cli -p 50000
127.0.0.1:50000> get counter
"1"
请注意,无需为您的本地群集创建“隧道”。信息窗格已经显示了您可以使用的本地绑定端口,您可以使用该端口来检查本地Redis!
下一个
您可以继续更改GO服务器,也许会添加身份验证或缓存。
有关更多教程,请查看我们的many guides。 PEBL目前也在Python和Node中提供。
有关GO SDK的引用,请查看https://pkg.go.dev/github.com/peblcloud/go
有关PEBL可用的所有云功能的概述,请查看reference。