我有一个 gRPC 客户端和服务器,两者都使用 ssl 证书进行保护。如果没有代理,这些工作就很好。作为测试,当我故意创建有缺陷的证书时,它会失败。稍后在本文中证明这不是证书问题。
gRPC 服务器代码:
// Creates a new gRPC server
// Create the TLS credentials
creds, err := credentials.NewServerTLSFromFile("configs/cert/servercert.pem", "configs/cert/serverkey.pem")
if err != nil {
log.Fatalf("could not load TLS keys: %s", err)
}
// Create an array of gRPC options with the credentials
opts := []grpc.ServerOption{grpc.Creds(creds)}
// create a gRPC server object
s := grpc.NewServer(opts...)
Run Code Online (Sandbox Code Playgroud)
gRPC 客户端代码:
// Create the client TLS credentials
creds, err := credentials.NewClientTLSFromFile("configs/cert/servercert.pem", "")
if err != nil {
log.Fatalf("could not load tls …Run Code Online (Sandbox Code Playgroud) 我试图了解 Google 的Smart Linkify背后的机器学习部分。文章陈述了以下关于他们的generate candidate entities模型。
给定的输入文本首先被拆分为单词(基于空格分隔),然后生成特定最大长度(在我们的例子中为 15 个单词)的所有可能的单词子序列,并且为每个候选者评分神经网络分配一个值(介于 0 和1) 基于它是否代表有效实体:
接下来,删除重叠的生成实体,优先考虑得分较高的实体而不是得分较低的冲突实体。
如果我理解正确,模型会尝试句子中的每个单词以及最多 15 个单词的组合?
你如何训练这样的模型?我认为这是监督学习,但不明白如何标记这些数据。它是否类似于实体由字符位置指定的 NER?并且数据中只有 2 个实体,entity并且non-entity.
而对于模型的输出,也就是所谓的“候选分数”,一个神经网络怎么能返回一个单一的数值呢?(分数)。或者输出层只是一个节点?
更详细的解释:
Possible word subsequences of certain maximum length 意味着它会考虑每个单词之前的 7 个单词和单词之后的 7 个单词?entity并且non-entity?或者它们是指实体的概率分数?non-entity?是我要找的,去了解。
我的目标:设置每分钟 600 个请求的速率限制,并在下一分钟重置。http.client我的目的是通过设置 aRoundTrip和 a来做到这一点limit.wait()。这样我就可以为不同的情况设置不同的限制http.clients(),并通过处理限制roundtrip,而不是在其他地方增加代码的复杂性。
问题是没有遵守速率限制,我仍然超出了允许的请求数量并且设置超时会产生致命的恐慌net/http: request canceled (Client.Timeout exceeded while awaiting headers)
我创建了一个main.go可以复制该问题的准系统。请注意,64000 循环对我来说是一个现实场景。
更新:设置ratelimiter: rate.NewLimiter(10, 10),仍然超出 600 速率限制,并Context deadline exceeded在设置超时时产生错误。
package main
import (
"fmt"
"io/ioutil"
"net/http"
"sync"
"time"
"golang.org/x/time/rate"
)
var client http.Client
// ThrottledTransport Rate Limited HTTP Client
type ThrottledTransport struct {
roundTripperWrap http.RoundTripper
ratelimiter *rate.Limiter
}
func (c *ThrottledTransport) RoundTrip(r *http.Request) (*http.Response, error) {
err := …Run Code Online (Sandbox Code Playgroud) 以下场景
每分钟从队列接收 60,000 条消息。REST API 每分钟提供这些消息 10 次的数据。
我有一个带有事件溯源和 CQRS 的微服务架构。所以我的命令已经与查询部分分开了。问题在于同步查询和查询它,而不是命令部分。
每隔几分钟,就会使用event-sourcing模式发送约 60,000 个命令并将其存储为事件。通过 CQRS,实际数据(而不是事件)被同步到将其存储在数据库中的另一个服务。与此同时,数据每隔几分钟仅被读取十几次。
换句话说。该服务接收 60,000 个写入操作,但仅接收十几个读取操作。
我真的很想遵守微服务的设计模式,又名,one database per service但出于扩展原因,我认为这在我的场景中不可行。写入数据库需要比读取数据库显着扩展。
我看到了类似的问题,但答案建议使用 CQRS,我已经实现了。之前有人告诉我要删除事件源,但这仍然给我留下了 60,000 次写入和 10 次读取。
我应该采用什么架构来独立扩展读取和写入?我正在考虑创建两个单独的服务,但这违反了one database per service模式。
我正在尝试构建一个系统、工作池/作业队列,以http requests在每个 API 端点上尽可能多地处理。我查看了这个示例并让它工作得很好,只是我偶然发现了一个问题,我不明白如何将它扩展pool / jobqueue到不同的端点。
出于场景考虑,让我们绘制一个 Golang http 服务器,它在不同的端点和请求类型GET和POSTETC上有 100 万个请求/分钟。
我如何扩展这个概念?我是否应该为每个端点创建不同的工作池和作业。或者我可以创建不同的作业并将它们输入同一个队列并让相同的池处理这些作业吗?
我想保持简单,如果我创建一个新的 API 端点,我不必创建新的工作池,所以我可以只关注 api。但性能也非常重要。
我正在尝试构建的代码取自前面链接的示例,这里是其他人的 github 'gist' 使用此代码。
我想知道如何计算div中的所有列表项.
<ul class="menu">
<li><a href="#">Home</a>
</li>
<li><a href="#">Contact</a>
</li>
<li><a>Information</a>
<ul>
<li><a href="#">History</a>
</li>
<li><a href="#">Present</a>
</li>
<li><a href="#">Future</a>
</li>
</ul>
</li>
<li><a>Tutorials</a>
<ul>
<li><a href="#">HTML/CSS</a>
</li>
<li><a href="#">Javascript</a>
</li>
<li><a href="#">Jquery</a>
</li>
<li><a href="#">PHP</a>
</li>
</ul>
</li>
<li><a href="#">Structure</a>
</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
我如何计算里面的所有列表元素ul class=menu?而不是更深入的UL列表项.
我的意思是如何计算主页,联系人,信息,教程,结构,而不是我刚刚提到的这些内容列表元素.
当然我做了一些研究,但找不到正确的答案.这里有点重复:jQuery:列出元素的数量?
我的应用程序具有这样的结构片段
type ItemOrder struct {
ItemId
...
}
var items = []*ItemOrder
Run Code Online (Sandbox Code Playgroud)
可变函数接受 ...int
func ItemIds(lang string, ids ...int){
...
Run Code Online (Sandbox Code Playgroud)
如何从items []*ItemOrder切片中获取所有itemIds 并将其提供给可变参数函数?就像是
itemsPB, err := ItemIds("", items[:].itemId)
Run Code Online (Sandbox Code Playgroud)
Abov无法正常工作,因为我没有给切片提供从中提取itemId的位置。