Analysis of NASA's Earth Observing System Data Information (EOSDIS) Core System- The ECS Project

Saheed. A. Busari and Emmanuel Letier

RADAR is a lightweight modelling language and tool for analysing software requirements and architecture decisions (Busari and Letier, 2016). This report presents an application of RADAR to the analysis of the NASA's Earth Observing System Data Information (EOSDIS) Core System, also known as the ECS Project.

Our analysis is motivated by and based on previous study in the 2002 SEI report on "Making Architecture Design Decisions: An Economic Approach" (Kazman et al., 2002). Our model objectives, decisions and data were obtained from 2002 SEI report.

Problem Description

The ECS is a large scale distributed data information system used in managing and distributing huge volumes of climate related data in different forms around the world, 24 hours each day. This system collects and manages more than 1000 gigabytes of data, every day, from several satellites using various sensors (Kazman et al., 2001,Kazman et al., 2002 ).

As reported by Kazman et al., 2002, the ECS went through a maintenance phase and a planning process of boosting its capabilities. However, the ECS project manager had limited annual budget to maintain and enhance the functionality of the system. In a bid to achieve this goal, proir analysis, using the ATAM methodology, was performed to identify a set of architectural strategies, which we call decisions in our model (as shown in figure 1), to be made in enhancing the system. The manager is faced with selecting among the set of decisions that give maximum utilty in the project and also minimise the project cost.

Note: The Cost Benefit Analysis Method (CBAM) (Kazman et al., 2001,Kazman et al., 2002) was used in the 2002 SEI report, and it estimates individual impact of architectural strategies on utility, but not their combined impacts. However, our model analyses the interaction between architectural strategies ( i.e the combined impact of architectural strategies), and allows the selection of more than one architectural strategy.

Figure 1: Design Decisions (click on the image to zoom in)

Optimisation Objectives

Objective Max ExpectedUtility = EV(Utility);
Objective Min Cost;

Modelling Utility

      
Utility =   HungRequestsRatio_weight * HungRequestsRatio_Utility +
            LostRequestsRatio_weight * LostRequestsRatio_Utility +
            FailedOrderRatio_weight * FailedOrderRatio_Utility +
            HungOrdersRatio_weight * HungOrdersRatio_Utility +
            LostOrdersRatio_weight * LostOrdersRatio_Utility +
            HelpNeededByUsers_weight * HelpNeededByUsers_Utility +
            FailureInfoGivenToUsers_weight * FailureInfoGivenToUsers_Utility +
            LimitOnOrders_weight * LimitOnOrders_Utility +
            NotificationsFrequency_weight * NotificationsFrequency_Utility +
            Performance_weight * Performance_Utility
  
HungRequestsRatio_weight = deterministic(10);
LostRequestsRatio_weight = deterministic(15);
FailedOrderRatio_weight = deterministic(15);
HungOrdersRatio_weight = deterministic(10);
LostOrdersRatio_weight = deterministic(15);
HelpNeededByUsers_weight = deterministic(10);
FailureInfoGivenToUsers_weight = deterministic(5);
LimitOnOrders_weight  = deterministic(5);
NotificationsFrequency_weight = deterministic(10);
Performance_weight = deterministic(5);

Hung Request Ratio Utility


HungRequestRatio_Utility = (HungRequestRatio - HungRequestRatio_worst)/(HungRequestRatio_best - HungRequestRatio_worst)
HungRequestRatio_best =deterministic(0);
HungRequestRatio_worst = deterministic(10%);

Lost Requests Ratio Utility


LostRequestsRatio_Utility = (LostRequestsRatio - LostRequestsRatio_worst)/(LostRequestsRatio_best - LostRequestsRatio_worst)
LostRequestsRatio_best = deterministic(0);
LostRequestsRatio_worst = deterministic(5%);

Failed Order Ratio Utility


FailedOrderRatio_Utility = (FailedOrderRatio - FailedOrderRatio_worst)/(FailedOrderRatio_best - FailedOrderRatio_worst)
FailedOrderRatio_best =deterministic(0);
FailedOrderRatio_worst = deterministic(10%);

Hung Orders Ratio Utility


HungOrdersRatio_Utility = (HungOrdersRatio - HungOrdersRatio_worst)/(HungOrdersRatio_best - HungOrdersRatio_worst)
HungOrdersRatio_best = deterministic(0);
HungOrdersRatio_worst = deterministic(10%);

Lost Orders Ratio Utility


LostOrdersRatio_Utility = (LostOrdersRatio - LostOrdersRatio_worst)/(LostOrdersRatio_best - LostOrdersRatio_worst)
LostOrdersRatio_best =deterministic(0);
LostOrdersRatio_worst = deterministic(10%);

Help Needed By Users Utility


HelpNeededByUsers_Utility = (HelpNeededByUsers - HelpNeededByUsers_worst)/(HelpNeededByUsers_best - HelpNeededByUsers_worst)
HelpNeededByUsers_best = deterministic(0);
HelpNeededByUsers_worst = deterministic(50%);

Failure Info Given To Users Utility


FailureInfoGivenToUsers_Utility = (FailureInfoGivenToUsers - FailureInfoGivenToUsers_worst)/(FailureInfoGivenToUsers_best - FailureInfoGivenToUsers_worst)
FailureInfoGivenToUsers_best = deterministic(100%);
FailureInfoGivenToUsers_worst = deterministic(10%);

Limit On Orders Utility


LimitOnOrders_Utility = (LimitOnOrders - LimitOnOrders_worst)/(LimitOnOrders_best - LimitOnOrders_worst)
LimitOnOrders_best = deterministic(0%);
LimitOnOrders_worst = deterministic(50%);

Notifications Frequency Utility


NotificationsFrequency_Utility = (NotificationsFrequency - NotificationsFrequency_worst)/(NotificationsFrequency_best - NotificationsFrequency_worst)
NotificationsFrequency_best = deterministic(1);
NotificationsFrequency_worst = deterministic(1/1000);

Performance Utility


Performance_Utility = (Performance - Performance_worst)/(Performance_best - Performance_worst)
Performance_best = deterministic(90%);
Performance_worst =  deterministic(50%);

Figure 2: Utility AND/OR graph: click on the image to zoom in

Modelling Quality Attributes

Hung Request Ratio

HungRequestRatio = HungRequestRatio_current 
                    * (1 - ReassignedHungRequestRatio) 
                    * (1 - ForcedHungRequestRatio)
                    
HungRequestRatio_current = deterministic(5%);
                    
ReassignedHungRequestRatio = decision("Order Reassignment"){
        "Current: not possible to reassign order" : deterministic(0);
        "Allow Order Reassignment": deterministic(60%);
}   

ForcedHungRequestRatio = decision("Forced Order Completion"){
        "Current: not possible to force order completion" : deterministic(0);
        "Allow Forced Order Completion": deterministic(40%);
}                   

Lost Request Ratio

LostRequestRatio = triangular(0, 0.5, 1);

Failed Order Ratio

FailedOrderRatio = decision("Order Persistence Strategy"){
        "Current: store when processed" :  deterministic(5%);
        "Store as soon as received"      : deterministic(2%);
}

Hung Orders Ratio


HungOrdersRatio = HungOrdersRatio_current *
                    (1 - SkippedHungOrderRatio) *
                    (1 - RetriedHungOrderRatio)

HungOrdersRatio_current = deterministic(10%);
                    
SkippedHungOrderRatio = decision("Order Segmentation"){
        "Current: no order segmentation" : deterministic(0);
        "Orders are segmented"            : deterministic(60%);
}

RetriedHungOrderRatio = decision("Hung Order Recovery"){
        "Current: no order retry"   : deterministic(0);
        "Allow Order Retry"         : deterministic(40%);
}


Lost Orders Ratio

LostOrdersRatio = decision("Order Persistence Strategy"){
        "Current: store when processed" : deterministic(1%);
        "Store as soon as received"      : deterministic(0%);
}

Help Needed by Users

HelpNeededByUsers = LostOrdersRatio * HelpNeededPerLostOrder * HelpNeededForTrackingGranularity

HelpNeededPerLostOrder = decision("Failed Order Notification"){
        "Current: no notification":deterministic(25%);
        "User notified of failed order":deterministic(20%);
}

HelpNeededForTrackingGranularity = decision(Order Tracking){
        "Current: order level"          : deterministic(1);
        "Granule-level order tracking"  : deterministic(40%)
 }

Failure Information

FailureInfoGivenToUsers = 1- RatioUsersNotGettingInfo
RatioUsersNotGettingInfo = RatioUsersNotGettingInfo_current * 
                            (1 - NotificationOrderEffect) * 
                            (1 - OrderTrackingGranularityEffect) *
                            (1 - UserInformationEffect)
                            
RatioUsersNotGettingInfo_current = deterministic(50%);

NotificationOrderEffect = decision("Failed Order Notification"){
        "Current: no notification": deterministic(0);
        "User notified of failed order":  deterministic(80%);
}

OrderTrackingGranularityEffect = decision(Order Tracking){
        "Current: order level"          : deterministic(0);
        "Granule-level order tracking"  : deterministic(90%);
 }
 
UserInformationEffect = decision("Available User Information"){
        "Current: no link to user info"     : deterministic(0);
        "Link to user information"          : deterministic(20%);
}

Limit on Order

LimitOnOrders = decision("Order Chunking"){
        "Current: no oder chunking": deterministic(30%);
        "Order Chunking"            : deterministic(15%);
}

Notification Frequency

NotificationFrequency = decision("Order Bundling"){
        "No Order Bundling" : deterministic(1);
        "Order Bundling"    : deterministic(0.01);
}

Performance

Performance = decision("Order Bundling"){
        "No Order Bundling" : deterministic(60%);
        "Order Bundling"    : deterministic(55%);
}

Modelling Cost


Cost = Cost_OrderReassignment +
        Cost_ForcedOrderCompletion +
        Cost_OrderPersistenceStrategy +
        Cost_OrderSegmentation +
        Cost_HungOrderRecovery +
        Cost_FailedOrderNotification +
        Cost_OrderTracking +
        Cost_AvailableUserInformation +         

Cost_OrderReassignment = decision("Order Reassignment"){
        "Current: not possible to reassign order" : deterministic(0);
        "Allow Order Reassignment":  triangular(360, 400, 440);
}   

Cost_ForcedOrderCompletion = decision("Forced Order Completion"){
        "Current: not possible to force order completion" : deterministic(0);
        "Allow Forced Order Completion":  triangular(180, 200, 220);
}

Cost_OrderPersistenceStrategy = decision("Order Persistence Strategy"){
        "Current: store when processed" : deterministic(0);
        "Store as soon as received"      : triangular(1200, 1200, 7150);
}

Cost_OrderSegmentation = decision("Order Segmentation"){
        "Current: no order segmentation" :  deterministic(0);
        "Orders are segmented"       : triangular(180, 200, 220);
}

Cost_HungOrderRecovery = decision("Hung Order Recovery"){
        "Current: no order retry"   : deterministic(0);
        "Allow Order Retry"     :triangular(180, 200, 220);
}

Cost_FailedOrderNotification = decision("Failed Order Notification"){
        "Current: no notification": deterministic(0);
        "User notified of failed order": triangular(270, 300, 330);
}

Cost_OrderTracking = decision(Order Tracking){
        "Current: order level"      :  deterministic(0);
        "Granule-level order tracking"  : triangular(900, 1000, 1650);
}

Cost_AvailableUserInformation = decision("Available User Information"){
        "Current: no link to user info"     : deterministic(0);
        "Link to user information"      :  triangular(90, 100, 440);
}

Cost_OrderChunking = decision("Order Chunking"){
        "Current: no oder chunking" : 0
        "Order Chunking"        : triangular(360, 400, 440);
}

Cost_OrderBundling = decision("Order Bundling"){
        "No Order Bundling"     :  deterministic(0);
        "Order Bundling"    :triangular(360, 400, 440);
}       
            

Figure 3: Cost AND/OR graph: click on the image to zoom in

Analysis Results

Optimisation Analysis

Here is a summary of the modelling and analysis information:

H
Objective MaxExpectedUtility
Objective MinCost
SolutionSpace 1024
Minimal SolutionSet 1024
Shortlisted 33
Nbr. Variables 75
Nbr. Parameters 11
Nbr. Decisions 10
Runtime(s) 2

The model analysis generates the following shortlist of Pareto-optimal solutions:

ID Order Reassignment Forced Order Completion Order Persistence Strategy Order Segmentation Hung Order Recovery Failed Order Notification Order Tracking Available User Information Order Chunking Order Bundling ExpectedUtility Cost
1 Current: not possible to reassign order Current: not possible to force order completion Store as soon as received Orders are segmented Current: no order retry User notified of failed order Current: order level Current: no link to user info Order Chunking No Order Bundling -67.35429264 3687.114892
2 Allow Order Reassignment Allow Forced Order Completion Current: store when processed Orders are segmented Allow Order Retry Current: no notification Granule-level order tracking Current: no link to user info Order Chunking No Order Bundling -67.69651487 2186.319942
3 Allow Order Reassignment Allow Forced Order Completion Current: store when processed Orders are segmented Allow Order Retry User notified of failed order Current: order level Link to user information Order Chunking No Order Bundling -67.88318153 1510.418841
4 Allow Order Reassignment Allow Forced Order Completion Store as soon as received Orders are segmented Allow Order Retry User notified of failed order Current: order level Current: no link to user info Order Chunking No Order Bundling -61.95429264 4487.265338
5 Current: not possible to reassign order Allow Forced Order Completion Store as soon as received Orders are segmented Allow Order Retry Current: no notification Current: order level Current: no link to user info Order Chunking No Order Bundling -65.97651487 3787.318577
6 Allow Order Reassignment Allow Forced Order Completion Current: store when processed Orders are segmented Allow Order Retry User notified of failed order Granule-level order tracking Current: no link to user info Order Chunking No Order Bundling -67.47029264 2486.276777
7 Current: not possible to reassign order Allow Forced Order Completion Current: store when processed Orders are segmented Allow Order Retry Current: no notification Current: order level Current: no link to user info Order Chunking No Order Bundling -72.02651487 600.1639298
8 Allow Order Reassignment Allow Forced Order Completion Store as soon as received Orders are segmented Current: no order retry User notified of failed order Current: order level Current: no link to user info Order Chunking No Order Bundling -63.55429264 4287.128492
9 Current: not possible to reassign order Current: not possible to force order completion Current: store when processed Orders are segmented Current: no order retry User notified of failed order Current: order level Current: no link to user info Order Chunking No Order Bundling -73.39429264 499.9602443
10 Allow Order Reassignment Allow Forced Order Completion Current: store when processed Orders are segmented Allow Order Retry User notified of failed order Current: order level Current: no link to user info Order Chunking No Order Bundling -67.99429264 1300.110691
11 Current: not possible to reassign order Allow Forced Order Completion Store as soon as received Orders are segmented Allow Order Retry User notified of failed order Current: order level Current: no link to user info Order Chunking No Order Bundling -63.75429264 4087.275413
12 Allow Order Reassignment Allow Forced Order Completion Current: store when processed Orders are segmented Allow Order Retry Current: no notification Granule-level order tracking Link to user information Order Chunking No Order Bundling -67.64095931 2396.628092
13 Allow Order Reassignment Allow Forced Order Completion Store as soon as received Orders are segmented Allow Order Retry User notified of failed order Granule-level order tracking Current: no link to user info Order Chunking No Order Bundling -61.45429264 5673.431425
14 Current: not possible to reassign order Allow Forced Order Completion Current: store when processed Orders are segmented Current: no order retry User notified of failed order Current: order level Current: no link to user info Order Chunking No Order Bundling -71.39429264 699.9839196
15 Allow Order Reassignment Allow Forced Order Completion Store as soon as received Orders are segmented Allow Order Retry User notified of failed order Current: order level Link to user information Order Chunking No Order Bundling -61.84318153 4697.573489
16 Allow Order Reassignment Current: not possible to force order completion Current: store when processed Orders are segmented Current: no order retry User notified of failed order Current: order level Current: no link to user info Order Chunking No Order Bundling -70.39429264 899.9501696
17 Current: not possible to reassign order Current: not possible to force order completion Current: store when processed Orders are segmented Current: no order retry Current: no notification Current: order level Current: no link to user info Order Chunking No Order Bundling -75.62651487 200.0034088
18 Current: not possible to reassign order Current: not possible to force order completion Current: store when processed Current: no order segmentation Current: no order retry Current: no notification Current: order level Current: no link to user info Order Chunking No Order Bundling -81.62651487 0
19 Allow Order Reassignment Current: not possible to force order completion Current: store when processed Orders are segmented Current: no order retry Current: no notification Current: order level Current: no link to user info Order Chunking No Order Bundling -72.62651487 599.9933341
20 Allow Order Reassignment Current: not possible to force order completion Store as soon as received Orders are segmented Allow Order Retry Current: no notification Current: order level Current: no link to user info Order Chunking No Order Bundling -64.97651487 3987.284827
21 Allow Order Reassignment Current: not possible to force order completion Current: store when processed Orders are segmented Allow Order Retry Current: no notification Current: order level Current: no link to user info Order Chunking No Order Bundling -71.02651487 800.1301799
22 Allow Order Reassignment Allow Forced Order Completion Store as soon as received Orders are segmented Allow Order Retry User notified of failed order Granule-level order tracking Link to user information Order Chunking No Order Bundling -61.44318153 5883.739575
23 Allow Order Reassignment Current: not possible to force order completion Store as soon as received Orders are segmented Current: no order retry Current: no notification Current: order level Current: no link to user info Order Chunking No Order Bundling -66.57651487 3787.147982
24 Allow Order Reassignment Allow Forced Order Completion Current: store when processed Orders are segmented Allow Order Retry User notified of failed order Granule-level order tracking Link to user information Order Chunking No Order Bundling -67.45918153 2696.584928
25 Allow Order Reassignment Current: not possible to force order completion Current: store when processed Orders are segmented Allow Order Retry User notified of failed order Current: order level Current: no link to user info Order Chunking No Order Bundling -68.79429264 1100.087015
26 Current: not possible to reassign order Allow Forced Order Completion Store as soon as received Orders are segmented Current: no order retry User notified of failed order Current: order level Current: no link to user info Order Chunking No Order Bundling -65.35429264 3887.138567
27 Allow Order Reassignment Current: not possible to force order completion Store as soon as received Orders are segmented Current: no order retry User notified of failed order Current: order level Current: no link to user info Order Chunking No Order Bundling -64.35429264 4087.104817
28 Allow Order Reassignment Allow Forced Order Completion Store as soon as received Orders are segmented Allow Order Retry Current: no notification Granule-level order tracking Link to user information Order Chunking No Order Bundling -61.62095931 5583.78274
29 Allow Order Reassignment Current: not possible to force order completion Store as soon as received Orders are segmented Allow Order Retry User notified of failed order Current: order level Current: no link to user info Order Chunking No Order Bundling -62.75429264 4287.241663
30 Allow Order Reassignment Allow Forced Order Completion Current: store when processed Orders are segmented Current: no order retry User notified of failed order Current: order level Current: no link to user info Order Chunking No Order Bundling -69.59429264 1099.973845
31 Allow Order Reassignment Allow Forced Order Completion Store as soon as received Orders are segmented Allow Order Retry Current: no notification Granule-level order tracking Current: no link to user info Order Chunking No Order Bundling -61.67651487 5373.474589
32 Current: not possible to reassign order Allow Forced Order Completion Current: store when processed Orders are segmented Allow Order Retry User notified of failed order Current: order level Current: no link to user info Order Chunking No Order Bundling -69.79429264 900.1207654
33 Current: not possible to reassign order Allow Forced Order Completion Current: store when processed Orders are segmented Current: no order retry Current: no notification Current: order level Current: no link to user info Order Chunking No Order Bundling -73.62651487 400.0270841

Figure 4: ECS pareto front

These results show that all shortlisted solutions include the options Order Chunking , Orders are segmented and No order Bundling. This means that, in our model, these three options, respectively, outperform the options Current: No Order Chunking, Current: No Order Segmentation and No Order Bundling on both objectives.

But once these three options are selected, the shortlist includes different combinations of Order Reassignment, Forced Order Completion, Order Persisitence Strategy, Hung Order recovery, Failed Order Notification, Order Tracking, Available User Information; each combination representing a different tradeoffs between maximising ExpectedUtility and minimising Cost.

To visualise such tradeoffs, RADAR generates the graph in Fig. 4 plotting the objective values for the shortlised solutions (shown squares at the top of the graph) and all other non shortlisted ones (shown as circles).

Information Value Analysis

Analysing information value gives the following results that show that the information value for all model parameters is very low:

EVTPI = 0

Parameter EVPPI
LostRequestsRatio 0
Cost_OrderReassignment[Allow Order Reassignment] 0
Cost_ForcedOrderCompletion[Allow Forced Order Completion] 0
Cost_OrderPersistenceStrategy[Store as soon as received] 0
Cost_OrderSegmentation[Orders are segmented] 0
Cost_HungOrderRecovery[Allow Order Retry] 0
Cost_FailedOrderNotification[User notified of failed order] 0
Cost_OrderTracking[Granule-level order tracking] 0
Cost_AvailableUserInformation[Link to user information] 0
Cost_OrderChunking[Order Chunking] 0
Cost_OrderBundling[Order Bundling] 0

References

  1. Saheed A. Busari and Emmanuel Letier, "RADAR: A lightweight tool for requirements and architecture decision analysis," in submission, August 2016

  2. Kazman, Rick, Jai Asundi, and Mark Klein. "Quantifying the costs and benefits of architectural decisions." Proceedings of the 23rd international conference on Software engineering. IEEE Computer Society, 2001.

  3. Moore, Mike, et al. "Quantifying the value of architecture design decisions: lessons from the field." Proceedings of the 25th International Conference on Software Engineering. IEEE Computer Society, 2003.

  4. Kazman, Rick, Jai Asundi, and Mark Klien. Making architecture design decisions: An economic approach. No. CMU/SEI-2002-TR-035. CARNEGIE-MELLON UNIV PITTSBURGH PA SOFTWARE ENGINEERING INST, 2002.