c# - 如何处理微服务中的表连接
问题描述
我是微服务架构的新手,我有一个场景如下
Database1 - tbl_users (userid | user_name)
Users Api - returns all users in the table tbl_users
Database2 - tbl_orders (Orderid | order_name | user_id (FK))
Orders Api - returns all orders in the table tbl_orders
在整体方法中,我会在订单 api 中加入并显示已下订单的用户,但在微服务方法中,当我必须从一个视图中显示用户和订单时,我该如何处理这种情况订单api?考虑到我是新手
解决方案
这种情况通常由位于 UI 关注点和专用服务之间的组合服务处理。此组合服务将响应来自 UI 的查询,聚合来自各种服务的数据以构建完整视图模型,然后将其发送回 UI。
该服务可以采用多种形式,可以是客户端组合,也可以是服务器端组合。客户端组合的一个示例是 SPA,其中组件将从多个 API 获取,将数据投影到有用的东西中并呈现它,而服务器端示例可以是提供视图的控制器。我在这里松散地使用了“服务”一词,但这个想法很笼统。
换个角度来看,去掉所有托管 API 的概念,甚至是数据库的知识。如果必须在代码中集成两个不同的库,组合函数会是什么样子?它会调用一件事,做一些事情,调用第二件事,再做一些事情,然后返回结果。
托管 API 等只是增加了实现细节和复杂性,但原理保持不变。
您对必须协调对不同服务的多个调用的性能影响提出了一些担忧,这当然是有效的。在处理 API 调用而不是在数据库级别加入时,不仅性能,而且瞬态错误处理和事务完整性变得更加复杂。
要问自己的一些问题:
1. 我的数据必须是最新的吗?您能否接受用户的缓存版本,并且您想在您的应用程序中维护该缓存并使该缓存无效?
2. 是否有 API 的读取优化版本已经为您进行了一些数据转换,并在其末端维护了积极的缓存?
3. 我的组件周围的边界是否正确绘制,或者我是否应该以不同的方式合并或分割服务,以便彼此相关的数据足够接近以至于延迟不会成为瓶颈?
4. 是否有不同类型的数据存储策略可以应用于那些经常被查询的组件,以便它们开始广播数据更改,然后使您能够构建自己的读取优化数据存储(想想事件源、pub-sub ,那种东西)
推荐阅读
- python - 使用 Tensorflow Dataset map 函数检索单个图像的多个句子
- flutter - 如何在颤振中直接将价值从一个提供者传递到另一个提供者
- javascript - JS将函数应用于对象的所有值
- mysql - AWS RDS 性能非常非常低
- c++ - std::map 持有任何值类型
- ios - 在缩放手势期间获取 RealityKit 实体的宽度和深度
- parsing - 谷歌表格导入范围
- java - WebConfig:使用@bean 还是方法方式?
- javascript - 从 AntDesign 更改选择标签
- r - 为什么不使用 as.integer 检查数字是否为整数?