Hub-like Modularization

Written by

in

Description

This smell arises when an abstraction has dependencies (both incoming and outgoing) with a large number of other abstractions, being a single point of failure.

Context

Derived from: “Hub-like Modularization”

Cause

Functionality may gradually become more and more important and is therefore used by more and more consumers, maybe even external ones via a public service interface. To maximize reuse, service interfaces are sometimes also generalized which leads to more service consumers as well.

Consequences

The service may have increased response times and low availability. It also becomes a single point of failure in the architecture.

Detection

Check the number of incoming and outgoing relations of the corresponding cluster. If the amount is too high, report the smell.

Solution

Split according to responsibilities.

Cypher query

MATCH (a)-[r]-(b) <br /> WHERE (r.Label contains 'Aggregation' or r.Label contains 'Realization' or r.Label contains 'Composition' or r.Label contains 'Assignment') <br />  and a.ArchimateLayer = b.ArchimateLayer <br /> WITH a , collect (r) as rels , a+ collect (b) as cluster <br /> MATCH (m)-[r1]->(n) <br /> WHERE not (r1.Label contains 'Aggregation' or r1.Label contains 'Realization' or <br /> r1.Label contains 'Composition' or r1.Label contains 'Assignment') and <br /> (m in cluster and not n in cluster) <br /> WITH a , cluster,  collect (r1) as fanout <br /> MATCH (m)-[r2]->(n) <br /> WHERE not (r2.Label contains 'Aggregation' or r2.Label contains 'Realization' or <br /> r2.Label contains 'Composition' or r2.Label contains 'Assignment') and <br /> (not m in cluster and n in cluster) <br /> WITH a , cluster, fanout , collect (r2) as fanin <br /> WHERE size (fanout) > $outgoingRels and size (fanin)> $incomingRels <br /> MATCH p=(a)--(b) <br /> RETURN p <br />

Diagram

Diagram for Hub-like Modularization

Aliases

Bottleneck Service

Tags

microservices, soa, business, application, technology, between elements, The Couplers, automatic detection

Query parameters

[
    {
        "name": "incomingRels",
        "type": "number",
        "default": 7,
        "description": "Number of incomming relationships."
    },
    {
        "name": "outgoingRels",
        "type": "number",
        "default": 7,
        "description": "Number of outgoing relationships."
    }
]

Related smells

All smells