我在本地使用 minikube。以下是.tf我用来创建 kubernetes 集群的文件:
provider "kubernetes" {
config_path = "~/.kube/config"
}
resource "kubernetes_namespace" "tfs" {
metadata {
name = "tfs" # terraform-sandbox
}
}
resource "kubernetes_deployment" "golang_webapp" {
metadata {
name = "golang-webapp"
namespace = "tfs"
labels = {
app = "webapp"
}
}
spec {
replicas = 3
selector {
match_labels = {
app = "webapp"
}
}
template {
metadata {
labels = {
app = "webapp"
}
}
spec {
container {
image = "golang-docker-example" …Run Code Online (Sandbox Code Playgroud) 我一直在寻找一种方法来设计我的 API,使其具有幂等性,这意味着其中一些方法是为了使我的 POST 请求路由具有幂等性,我偶然发现了这篇文章。
(如果我理解的不对,请纠正我!)
其中对总体思路有很好的解释。但缺少的是他自己实施的一些例子。
有人问文章作者,他如何保证原子性?所以作者添加了一个代码示例。
本质上,在他的代码示例中有两种情况,
如果一切顺利的话流程:
Idempotency-key键和值,这是对客户端的响应如果代码内部出现问题,流程如下:
注意,打开的事务是针对某个DB的,我们称他为A。但是,它与他也使用的redis存储无关,这意味着事务的回滚只会影响DB A。
因此,它涵盖了代码内部发生某些事情导致无法完成交易的情况。
但是,如果运行代码的机器在已经执行完Set expire time to that key并且即将运行事务提交的状态下崩溃,会发生什么情况?
在这种情况下,密钥将在 Redis 存储中可用,但事务尚未提交。这将导致这样的情况:服务确定所需的更改已经发生,但事实并非如此,机器在完成之前就发生了故障。
我需要以这样的方式设计API:如果redis中的数据更改或键和值的设置失败,它们都会回滚。
这个问题的解决办法是什么?
如何保证在一个数据库中更改所需数据的原子性,同时在redis中设置密钥和所需响应,如果其中任何一个失败,则将它们都回滚?(包括机器在操作过程中崩溃的情况)
请在回答时添加代码示例!我使用与本文中相同的技术(nodejs、redis、mongo - 用于数据本身)
谢谢 :)
我有一个警报,我已将其配置为在已完成状态而不是“错误”或“确定”的云函数的执行总和大于 0(按函数名称分组)时发送电子邮件。
我定义警报的方式是:
二级聚合器是delta。
问题是,一旦警报打开,过滤器看起来就不再重要了,并且警报保持打开状态,因为它看到云功能被触发并以任何状态结束(即使“确定”状态也保持打开状态)只要触发足够了)。
ATM 我能想到的唯一解决方案是定义一个基于日志的指标,该指标将自己计算,然后警报将基于该自定义指标而不是内置指标。
有什么我想念的吗?
编辑:
从上图我们看到图表不会下降到 0 而是保持在 1,这不是其他正常事件的工作方式
google-cloud-platform google-cloud-logging google-cloud-functions google-cloud-monitoring
不,这不是重复问题。我有很多关于这个主题的资料,但我仍然觉得我没有完全理解它。
这是我迄今为止所掌握的关于什么是聚合和聚合根的信息(来自多个来源,无论是文章、视频等......):
考虑到所有这些,让我们进入我感到困惑的部分:
在这个网站上它说
聚合根是与外部世界的接口。与聚合的所有交互都是通过聚合根进行的。因此,聚合根必须在系统内具有全局唯一标识符。存在于聚合中但不是聚合根的其他实体仅需要本地唯一标识符,即聚合内唯一的 Id。
但是,在这个示例中,我可以看到聚合根是由充当Transfer聚合的静态类和名为TransferedRegisteredAR 的内部静态函数实现的。
所以问题是:
如果某些/全部错误,请在开始时纠正我的任何要点,如果我遗漏了任何要点,请随时添加更多!
感谢您澄清事情!
在编写 golang 网络服务器时,我不得不使用某种缓存,所以我选择了 redis。我需要某种采用任何结构并将其保存为 redis 作为值的函数。有什么方法可以做到这一点而不使用interface{}作为接收参数或重复自己太多并且仍然保持类型安全?
我正在尝试开发一个必须与 S3 和 dynamoDB 一起使用的 lambda。问题是,因为我不熟悉 aws for go 的 SDK,所以我会有很多测试和尝试。每次我更改代码时,我都必须编译项目并将其上传到 aws。有什么办法可以在本地实现吗?通过某种配置让我从我的计算机本地调用 aws 服务?谢谢!
这主要与golang有关,其他语言如python可以直接在aws lambda函数页面上运行,并且node也cloud9支持。
我对性能有疑问.如果我有一个案例,当我将一个可变对象传递给一个函数并且我对该对象进行更改时,我知道在python中它将更改该值,并且所有指针都将指向已更改的值.但是编写代码的正确方法是什么?我应该使用该return语句并重新分配指向函数输出的指针,以显示读取它正在被更改的代码的那个吗?
如果你预先指定一个指向它已经指向的同一个内存的指针,那么它对性能的影响有多大?
谢谢!
我很难理解为什么下面使用unmarshal方法的代码不起作用,但几乎一样,我使用NewDecoder编写并且它可以找到.
package conf
import (
"os"
"io/ioutil"
"encoding/json"
)
type Configuration struct {
Agents []Agent `json:"agents"`
IbmWmqFolder string `json:"ibmWmqFolder"`
}
type Agent struct {
AgentName string `json:"agentName"`
Folders []string `json:"folders"`
}
func LoadConfiguration() (configuration Configuration) {
jsonFile, err := os.Open("config.json")
if err != nil {
panic(err)
}
defer jsonFile.Close()
byteValue, _ := ioutil.ReadAll(jsonFile)
json.Unmarshal(byteValue, configuration)
return
}
Run Code Online (Sandbox Code Playgroud)
但是如果我做的都是一样的,而不是最后两行与byteValueunmarshal本身,但使用解码器,它的工作原理,
jsonParser := json.NewDecoder(jsonFile)
jsonParser.Decode(&configuration)
return
Run Code Online (Sandbox Code Playgroud)
谢谢!
go ×3
aggregate ×1
aws-lambda ×1
distributed ×1
http ×1
idempotent ×1
json ×1
kubernetes ×1
minikube ×1
post ×1
python ×1
python-3.x ×1
redis ×1
rest ×1
terraform ×1