有一个客户端服务器应用程序。我制作了这张图。她看上去怎么样?
通过产品的文本属性进行全文搜索。
Redik - 用于计算商品、卖家平均评分值的缓存层
S3——用于存储大文件
我有一个实现消息传递系统的微服务架构。一切安排如下:
每条消息都包含一个senderId和recipientId,以及这些用户的名称(senderName,recipientName)。问题在于名称仅存在于 IdentityService 中,而消息是在 MailboxService 中创建和存储的。
我不明白在哪里插入全名更正确,以及存在哪些架构上的妥协。我了解这是微服务的典型痛点,所以我对社区的意见很感兴趣。以下是我正在考虑的选项:
⸻
选项 1:在 GatewayService 中创建消息时获取名称
GatewayService 不创建电子邮件,而是调用 MailboxService。此时,它从 IdentityService 请求名称并将它们与其余数据一起传递给 MailboxService。 MailboxService将senderName、recipientName直接存储在Message中。
优点:
缺点:
⸻
选项 2:将所有者姓名存储在邮箱中
创建邮箱时,用户的全名将与用户 ID 一起保存在其中。创建消息时,发件人姓名从邮箱中获取,收件人姓名通过外部调用或从缓存中获取。
优点:
缺点:
⸻
选项 3:根本不存储姓名,在检索消息时替换
MailboxService 仅存储发件人和收件人 ID。当通过 GatewayService 检索消息时,它会收集一堆 ID,并向 IdentityService 发出请求以填写全名。
优点:
缺点:
⸻
问题:
当使用来自另一个服务(如全名)的不涉及业务逻辑但仅需要显示的“次要”数据时,哪种方法在微服务架构中更正确和更容易被接受?
尝试在 CadQuery Python 中对螺栓进行建模:
import cadquery as cq
from math import sqrt, tan, radians
# Параметры модели
head_diameter = 10.0 # Диаметр по вершинам (описанная окружность)
head_height = 5.0 # Высота головки
shaft_diameter = 5.0 # Диаметр стержня
shaft_length = 20.0 # Длина стержня
# Расчетные параметры
R = head_diameter / 2 # Радиус описанной окружности
r = R * sqrt(3)/2 # Радиус вписанной окружности
chamfer_size = (R - r) / tan(45) # Размер фаски для угла 45°
#1. Создаем шестигранную головку
bolt_head = (
cq.Workplane("XY")
.polygon(6, 2*R) # Создаем шестигранник
.extrude(head_height) # Выдавливаем на высоту головки
.translate((0, 0, -1 * (head_height/2)))
)
bolt_head = bolt_head.edges("Z").chamfer(1)
# 2. Создаем стержень
bolt_shaft = (
cq.Workplane("XY")
.circle(shaft_diameter/2)
.extrude(-shaft_length)
)
# 3. Объединяем компоненты
bolt = bolt_head.union(bolt_shaft)
电子表格文件每行包含七个自然数。确定表格行中满足以下条件的最小数字的总和:
在你的回答中,只写下数字。
f = open("9")
cnt = 0
for s in f:
a = list(map(int, s.split()))
povt = [x for x in a if a.count(x) > 1]
ne_povt = [x for x in a if a.count(x) == 1]
if (len(ne_povt) == 3 and len(set(povt)) == 2) and max(ne_povt) == 1:
cnt += 1
print(cnt)
有一个界面:
public interface IUpdatable
{
public void Awake();
public void Start();
public void Update();
public void FixedUpdate();
public void LateUpdate();
}
该接口旨在从不继承自的类中提取 Unity 方法MonoBehaviour
。我有一个PlayerController
实现该接口的类。
这是装饰器本身。我试图使用接口将所有调用集中在一个地方,但是当我运行它时,它至少List<IUpdatable> updatable
有一个后继者。Count = 0;
IUpdatable
public class UpdatableDecorator : MonoBehaviour
{
private List<IUpdatable> _updatables = new();
[Inject]
public void Construct(List<IUpdatable> updatable)
{
_updatables.AddRange(updatable);
Debug.Log(_updatables.Count);
}
private void Awake()
{
foreach (var awake in _updatables)
{
awake.Awake();
}
}
void Start()
{
foreach (var start in _updatables)
{
start.Start();
}
}
void Update()
{
foreach (var update in _updatables)
{
update.Update();
}
}
private void FixedUpdate()
{
foreach (var fixedUpdate in _updatables)
{
fixedUpdate.FixedUpdate();
}
}
private void LateUpdate()
{
foreach (var lateUpdate in _updatables)
{
lateUpdate.LateUpdate();
}
}
}
绑定如下所示SceneInstaller
:
private void BindDicorator()
{
Container.Bind<List<IUpdatable>>().AsSingle();
Container.BindInterfacesAndSelfTo<UpdatableDecorator>().FromComponentInHierarchy().AsSingle();
}
我不知道我做错了什么。我将非常感激您的指导。