题解 | 微服务架构下的深层依赖链路漏洞影响面分析

微服务架构下的深层依赖链路漏洞影响面分析

https://www.nowcoder.com/practice/a8416ddac26b427c97d8a8c6a7d14779

# 查询所有直接或间接依赖于服务名为'Payment_Gateway'的微服务,

with recursive dependency_paths as (
    # 初始查询(深度=1)
    # 找出所有直接依赖于Payment_Gateway的服务
    select
        s2.service_id,
        s2.service_name,
        1 as dependency_depth,
        concat('Payment_Gateway->',s2.service_name) as dependency_path
    from service_dependencies s1
    inner join services s2
    on s1.caller_service_id = s2.service_id
    where s1.callee_service_id = (
        select service_id from services
        where service_name ='Payment_Gateway'
    )
        # 仅统计依赖建立日期(first_call_date)在2025年(包含2025全年)的调用关系
        and year(s1.first_call_date) = 2025
        

    # 连接初始查询和递归查询
    union all

    # 递归查询 深度>=2
    # 基于已找到的服务,继续查询依赖与它们的服务
    # 即 找出所有间接依赖于Payment_Gateway的服务
    select
        s2.service_id,
        s2.service_name,
        # 深度+1
        dp.dependency_depth + 1 as dependency_depth,
        # 追加路径
        concat(dp.dependency_path,'->',s2.service_name) as dependency_path
    from service_dependencies s1
    # 关键:将当前依赖表与已找到的递归结果关联
    inner join dependency_paths dp
    on s1.callee_service_id = dp.service_id
    inner join services s2
    on s1.caller_service_id = s2.service_id
    where year(s1.first_call_date) = 2025
        # condition 即 防止循环的条件:确保路径中不包含当前服务名时,停止递归查询
        and dp.dependency_path not like concat('%',s2.service_name,'%')

)

select * from dependency_paths
order by dependency_depth,service_id,dependency_path;
# 排序规则:
# 结果须按依赖深度(dependency_depth)升序排列;
# 若深度相同,则按主调服务ID(service_id)升序排列;
# 若主调服务ID也相同(说明该服务通过多条不同路径依赖了目标服务),则按依赖路径(dependency_path)的字典序升序排列。


递归查询with recursive

语法如下

with recursive cte_name(column_list) as (
    select initial_query_result
    union [all]
    select recursive_query
    from cte_name
    where condition
)
select * from cte_name;
# cte_name:递归表的名称。
# column_list:递归表中包含的列名。
# initial_query_result:初始查询结果。
# recursive_query:递归查询语句。
# condition:递归查询的终止条件。

全部评论

相关推荐

评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务