尝试对用户访问的服务的依赖关系进行建模。我创建了一个父/子邻接列表样式表,其中列出了“服务”依赖于组件 1,组件 1 依赖于组件 2 等,以及依赖的类型,例如完全或部分
此图像显示布局 - 依赖关系图像
Comp 1 和 9 的颜色不同,因为如果它们失败,则整体服务失败。如果 Comp 2-9 中的任何一个失败,则服务会继续,但弹性会降低。
这是我用来创建表格的内容
CREATE TABLE scratch
(
KeyID int PRIMARY KEY NOT NULL,
CompDesc varchar(30),
CompID int NOT NULL,
ReliesOn int NOT NULL,
RelianceType varchar(30),
)
INSERT scratch SELECT 0, 'Service', 0, 1, 'Full'
INSERT scratch SELECT 1, 'Component 1', 1, 2, 'Partial'
INSERT scratch SELECT 2, 'Component 1', 1, 3, 'Partial'
INSERT scratch SELECT 3, 'Component 1', 1, 4, 'Partial'
INSERT scratch SELECT 4, 'Component 4', 4, 5, 'Full'
INSERT scratch SELECT 5, 'Component 5', 5, 6, 'Full'
INSERT scratch SELECT 6, 'Component 6', 6, 7, 'Partial'
INSERT scratch SELECT 7, 'Component 6', 6, 8, 'Partial'
INSERT scratch SELECT 8, 'Component 2', 2, 9, 'Full'
INSERT scratch SELECT 9, 'Component 3', 3, 9, 'Full'
INSERT scratch SELECT 10, 'Component 7', 7, 9, 'Full'
INSERT scratch SELECT 11, 'Component 8', 8, 9, 'Full'
然后我可以运行一个非常粗略的查询来显示用户可以访问服务的 4 个不同选项 -
SELECT t1.ReliesOn AS lev1, t2.ReliesOn as lev2, t3.ReliesOn as lev3, t4.ReliesOn as lev4, t5.ReliesOn as lev5, t6.ReliesOn as lev6
FROM Scratch AS t1
LEFT JOIN Scratch AS t2 ON t2.CompID = t1.ReliesOn
LEFT JOIN Scratch AS t3 ON t3.CompID = t2.ReliesOn
LEFT JOIN Scratch AS t4 ON t4.CompID = t3.ReliesOn
LEFT JOIN Scratch AS t5 ON t5.CompID = t4.ReliesOn
LEFT JOIN Scratch AS t6 ON t6.CompID = t5.ReliesOn
WHERE t1.ReliesOn = 1;
(抱歉,可能有更好的方法将该查询串在一起)
有了这个结果 -
lev1 lev2 lev3 lev4 lev5 lev6
1 2 9 NULL NULL NULL
1 3 9 NULL NULL NULL
1 4 5 6 7 9
1 4 5 6 8 9
我要做的是创建一个查询,我可以列出失败的补偿并确定该服务是否仍然可用,例如
Failed Result
1 No Service
2,3 Reduced Resiliency
3,8 Reduced Resiliency
2,3,7,8 No Service
这只是一个非常简单的示例,我还有很多需要添加的内容,并且在大多数情况下,许多服务将依赖于相同的组件。
那么,你如何从失败的组合中去向上/跨越/向下依赖关系来确定路径是否仍然存在?
希望这是有道理的
谢谢