分布式系统中的历史建模约束与位置独立性
1. 历史建模的约束
历史建模的结果并非随意的限制,它将我们的能力局限于分布式系统中易于实现的事情。若模型不允许某些功能,是因为在分布式系统中实现这些功能会面临诸多问题,如阻塞、自主性丧失或可扩展性降低。在构建系统前,需仔细考虑是否真的需要这些功能,若需要,则要用有状态模型实现,并清楚这样做所带来的妥协。下面详细探讨三个约束:索引、结果数量和结果顺序。
1.1 索引
历史模型的索引方式会影响唯一性、导航和搜索。
- 唯一性约束 :在分布式系统中,除非某个事实只有一个字段,否则无法强制该字段的值唯一。例如在应收账款系统中,若发票事实除发票号外还有其他字段,就无法在分布式系统中强制发票号唯一,需将所有发票集中到一处才能验证。
- 导航 :不能仅基于一个字段查询事实,最好的做法是根据所有字段重构事实,再查询后续事实。比如从座位派对事实中提取桌号创建桌子事实后,桌号可作为索引字段,但系统索引的是整个桌子事实。将索引字段拆分为独立事实是从字段发起历史查询的唯一方式,而 SQL 的 WHERE 子句虽可指定字段名,但它在单个数据库或数据库集群中执行,与历史规范的约束不同。
- 搜索 :搜索与其他索引查询活动不同,具有更大灵活性,可进行前缀、子字符串或 SOUNDEX 搜索,还可包含布尔运算符或条件语句等组合。搜索本质上依赖位置,所有要搜索的记录需在同一位置,这个位置可能是分布式节点集群,但节点具有同质性、共定位且数量可知或受限。有状态数据存储最适合搜索,如 Elasticsearch 或其他 Lucene
超级会员免费看
订阅专栏 解锁全文
5万+

被折叠的 条评论
为什么被折叠?



