<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Publishing DTD v1.1 20151215//EN" "http://jats.nlm.nih.gov/publishing/1.1/JATS-journalpublishing1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:mml="http://www.w3.org/1998/Math/MathML" xml:lang="en" article-type="research-article" dtd-version="1.1">
<front>
<journal-meta>
<journal-id journal-id-type="pmc">CMC</journal-id>
<journal-id journal-id-type="nlm-ta">CMC</journal-id>
<journal-id journal-id-type="publisher-id">CMC</journal-id>
<journal-title-group>
<journal-title>Computers, Materials &#x0026; Continua</journal-title>
</journal-title-group>
<issn pub-type="epub">1546-2226</issn>
<issn pub-type="ppub">1546-2218</issn>
<publisher>
<publisher-name>Tech Science Press</publisher-name>
<publisher-loc>USA</publisher-loc>
</publisher>
</journal-meta>
<article-meta>
<article-id pub-id-type="publisher-id">83861</article-id>
<article-id pub-id-type="doi">10.32604/cmc.2026.083861</article-id>
<article-categories>
<subj-group subj-group-type="heading">
<subject>Article</subject>
</subj-group>
</article-categories>
<title-group>
<article-title>A Hybrid Mashup Platform Based on Structured and Unstructured Peer-to-Peer Networks Empowered with Genetic Algorithms</article-title>
<alt-title alt-title-type="left-running-head">A Hybrid Mashup Platform Based on Structured and Unstructured Peer-to-Peer Networks Empowered with Genetic Algorithms</alt-title>
<alt-title alt-title-type="right-running-head">A Hybrid Mashup Platform Based on Structured and Unstructured Peer-to-Peer Networks Empowered with Genetic Algorithms</alt-title>
</title-group>
<contrib-group>
<contrib id="author-1" contrib-type="author" corresp="yes">
<name name-style="western"><surname>Hassan</surname><given-names>Osama Al-Haj</given-names></name><xref ref-type="aff" rid="aff-1">1</xref><email>o.alhajhassan@psut.edu.jo</email></contrib>
<contrib id="author-2" contrib-type="author">
<name name-style="western"><surname>Odeh</surname><given-names>Ammar</given-names></name><xref ref-type="aff" rid="aff-1">1</xref></contrib>
<contrib id="author-3" contrib-type="author">
<name name-style="western"><surname>Aref </surname><given-names>Abdullah</given-names></name><xref ref-type="aff" rid="aff-2">2</xref></contrib>
<contrib id="author-4" contrib-type="author">
<name name-style="western"><surname>Samara</surname><given-names>Ghassan</given-names></name><xref ref-type="aff" rid="aff-3">3</xref></contrib>
<aff id="aff-1"><label>1</label><institution>Department of Computer Science, Princess Sumaya University for Technology</institution>, <addr-line>Amman</addr-line>, <country>Jordan</country></aff>
<aff id="aff-2"><label>2</label><institution>Department of Data Science, Princess Sumaya University for Technology</institution>, <addr-line>Amman</addr-line>, <country>Jordan</country></aff>
<aff id="aff-3"><label>3</label><institution>Department of Computer Science, Zarqa University</institution>, <addr-line>Zarqa</addr-line>, <country>Jordan</country></aff>
</contrib-group>
<author-notes>
<corresp id="cor1"><label>&#x002A;</label>Corresponding Author: Osama Al-Haj Hassan. Email: <email>o.alhajhassan@psut.edu.jo</email></corresp>
</author-notes>
<pub-date date-type="collection" publication-format="electronic">
<year>2026</year>
</pub-date>
<pub-date date-type="pub" publication-format="electronic">
<day>23</day><month>07</month><year>2026</year>
</pub-date>
<volume>88</volume>
<issue>3</issue>
<elocation-id>56</elocation-id>
<history>
<date date-type="received">
<day>13</day>
<month>04</month>
<year>2026</year>
</date>
<date date-type="accepted">
<day>28</day>
<month>05</month>
<year>2026</year>
</date>
</history>
<permissions>
<copyright-statement>&#x00A9; 2026 The Authors. Published by Tech Science Press.</copyright-statement>
<copyright-year>2026</copyright-year>
<copyright-holder>The Authors</copyright-holder>
<license xlink:href="https://creativecommons.org/licenses/by/4.0/">
<license-p>This work is licensed under a <ext-link ext-link-type="uri" xlink:type="simple" xlink:href="https://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 International License</ext-link>, which permits unrestricted use, distribution, and reproduction in any medium, provided the original work is properly cited.</license-p>
</license>
</permissions>
<self-uri content-type="pdf" xlink:href="TSP_CMC_83861.pdf"></self-uri>
<abstract>
<p>Mashups are among the key web technologies that provide end-users with customizable and personalized tools. Most mashup platforms are based on centralized architectures or do not employ fully decentralized architectures; therefore, in this paper, we propose a decentralized architecture for mashups that combines the strengths of structured and unstructured peer-to-peer networks. For the structured part, we rely on the Chord lookup protocol, and for the unstructured part, we build groups of nodes via two flavors of network flooding, namely, sequence number flooding and reverse path flooding. Brokers in the unstructured part would be responsible for hosting and executing mashups, such that deciding which brokers should host a given mashup is determined by utilizing genetic algorithms. We compare our work against several approaches that rely on random and greedy mashup placement. We also assess our proposed approach to pure structured and pure unstructured approaches. We evaluate our system using simulations, and results show that executing mashups using the version of our scheme that relies on reverse path flooding generates at least 25% lower delays than the other approaches.</p>
</abstract>
<kwd-group kwd-group-type="author">
<kwd>Mashup</kwd>
<kwd>peer to peer</kwd>
<kwd>Chord</kwd>
<kwd>genetic algorithm</kwd>
</kwd-group></article-meta>
</front>
<body>
<sec id="s1">
<label>1</label>
<title>Introduction</title>
<p>One of the pivotal web technologies is mashups. A mashup provides end-users with the ability to create new personalized and customized tools out of existing sources. The sources are extracted by using Application Programming Interfaces (APIs), and the extracted data is usually presented using a standard format such as HTML, XML, or JSON. Further processing is applied on the extracted data, such as merging, filtering, sorting, truncation, or any special tailored operation offered by the mashup platform. <xref ref-type="fig" rid="fig-1">Fig. 1</xref> depicts the operation of mashups.</p>
<fig id="fig-1">
<label>Figure 1</label>
<caption>
<title>The basic components of mashups and the interactions between them, which show the way mashups operate.</title>
</caption>
<graphic mimetype="image" mime-subtype="tif" xlink:href="CMC_83861-fig-1.tif"/>
</fig>
<p>Mashups are employed in several modern-day technologies such as workflow automation and orchestration [<xref ref-type="bibr" rid="ref-1">1</xref>,<xref ref-type="bibr" rid="ref-2">2</xref>] and API integration [<xref ref-type="bibr" rid="ref-3">3</xref>]. Exemplary current real-world tools are Pipes Digital [<xref ref-type="bibr" rid="ref-4">4</xref>] and IFTTT [<xref ref-type="bibr" rid="ref-5">5</xref>]. These tools are utilized for workflow creation where users deal with mashup data sources, APIs, and operations using visual drag and drop capabilities. Types of data sources the end-user can utilize are feeds, microservices, cloud-hosted services, and scraped webpages.</p>
<sec id="s1_1">
<label>1.1</label>
<title>Motivation</title>
<p>In its essence, mashups are personalized web services. However, there are distinct differences between mashups and web services, which impose more careful design on mashup platforms. First, a web service is created by a given organization for the use of groups of people interested in that web service, while a mashup is created by an end-user to satisfy the end-user&#x2019;s own needs. This personalization property of mashups implies that the potential number of mashups hosted by a mashup platform would be higher than the number of web services that exist on a web service portal. Hence, mashup platforms can incur higher request rates than web service portals.</p>
<p>Most of the existing mashup platforms are based on centralized architectures or follow a partially decentralized architecture, which causes a serious bottleneck scalability issue. Also, given the demands of mashup platforms that we just explained, a centralized server architecture would work against those demands. Therefore, a decentralized architecture for mashups is needed.</p>
</sec>
<sec id="s1_2">
<label>1.2</label>
<title>Research Gap</title>
<p>The existing mashup platforms are based on centralized architectures such as &#x201C;Pipes.Digital&#x201D; [<xref ref-type="bibr" rid="ref-4">4</xref>], which is currently a working mashup platform in the industry. Another work is presented in [<xref ref-type="bibr" rid="ref-6">6</xref>], which offers a mashup platform that includes interactions between several data sources, users, and servers. Although their work utilizes several servers, they still rely on the client-server interaction model, which does not represent a fully decentralized architecture, and this, in turn, raises scalability issues. Several works pertaining to mashups can be found in the literature, for example, the works in [<xref ref-type="bibr" rid="ref-7">7</xref>,<xref ref-type="bibr" rid="ref-8">8</xref>] introduce ranking techniques that rank data sources that can be used in mashups and that allow end-users to identify the most valuable data sources. Also, the works in [<xref ref-type="bibr" rid="ref-9">9</xref>,<xref ref-type="bibr" rid="ref-10">10</xref>] discuss the problem of the end-users being overwhelmed by a vast amount of data sources which can be used in mashups, and therefore, the authors propose mechanisms to alleviate this problem and make the end-user&#x2019;s life easier in choosing appropriate data sources. Privacy aspects of mashups are discussed in [<xref ref-type="bibr" rid="ref-11">11</xref>]. The previous works are examples of the state of the art that we mention in the related work section, and the point we make here is that the previous works rely on centralized architecture, which causes them to be prone to failures.</p>
<p>Another way to search for data employs Large Language Models (LLMs). LLMs rely on artificial intelligence models that are trained on large amounts of data, and this requires an expensive infrastructure. In contrast, mashups do not require any training on data, and they are cheaper to deploy.</p>
<p>Based on that, we found that a decentralized architecture for mashup platforms is needed, and to the best of our knowledge, current mashup platforms are based either on a centralized server or a partially decentralized architecture. Accordingly, in this work, we are trying to answer the following research questions. First, <bold>RQ1:</bold> Can we build a decentralized architecture for mashups that facilitates mashup hosting and execution in a decentralized manner? <bold>RQ2:</bold> Is it possible to provide efficient message routing in such an architecture?</p>
</sec>
<sec id="s1_3">
<label>1.3</label>
<title>Research Objective</title>
<p>In this paper, we aim to overcome the shortcomings of the centralized mashup architectures employed in works such as [<xref ref-type="bibr" rid="ref-4">4</xref>,<xref ref-type="bibr" rid="ref-6">6</xref>] by proposing a decentralized architecture for mashup platforms. The proposed decentralized architecture is based on peer-to-peer architectures. Employing peer-to-peer architectures gets rid of the problems of the ordinary client-server model. However, there are two classes of peer-to-peer architectures, namely, structured and unstructured peer-to-peer architectures. Each of them has its own merits and shortcomings. Therefore, we investigate the use of a hybrid peer-to-peer architecture that combines the best of the structured and unstructured peer-to-peer architectures. To that end, our work embodies the following contributions.
<list list-type="bullet">
<list-item>
<p>Proposing a decentralized architecture for mashups based on a hybrid model of structured and unstructured peer-to-peer networks.</p></list-item>
<list-item>
<p>Utilizing genetic algorithms for the purpose of deciding which network nodes should host mashups.</p></list-item>
<list-item>
<p>Providing message routing through the proposed architecture in a way that facilitates mashup execution.</p></list-item>
</list></p>
<p>To the best of our knowledge, a fully decentralized architecture for mashup execution based on both structured and unstructured peer-to-peer networks does not exist, and providing one with the previous contributions is a step toward more scalable mashup platforms.</p>
<p>The rest of the paper is organized as follows. <xref ref-type="sec" rid="s2">Section 2</xref> discusses related works in the field of mashups. Then, <xref ref-type="sec" rid="s3">Section 3</xref> proposes our methodology which includes explaining how we represent mashups in our system in <xref ref-type="sec" rid="s3_1">Section 3.1</xref>, introducing the system architecture in <xref ref-type="sec" rid="s3_2">Section 3.2</xref>, presenting the structured part of our system in <xref ref-type="sec" rid="s3_3">Section 3.3</xref>, describing the unstructured part of our system in <xref ref-type="sec" rid="s3_4">Section 3.4</xref>, exploring how to utilize genetic algorithms to map mashups to the brokers responsible of executing them in <xref ref-type="sec" rid="s3_5">Section 3.5</xref>, and portraying how message routing is handled in the system in <xref ref-type="sec" rid="s3_6">Section 3.6</xref>. Then, we discuss security and reliability aspects of our system in <xref ref-type="sec" rid="s4">Section 4</xref>. This is followed by <xref ref-type="sec" rid="s5">Section 5</xref> that sheds light on system complexity. After that, we evaluate our system in <xref ref-type="sec" rid="s6">Section 6</xref>. Finally, we conclude this work in <xref ref-type="sec" rid="s7">Section 7</xref>.</p>
</sec>
</sec>
<sec id="s2">
<label>2</label>
<title>Related Work</title>
<p>In this section, we discuss existing works in the literature regarding the areas of mashups and peer-to-peer networks.</p>
<sec id="s2_1">
<label>2.1</label>
<title>Mashups</title>
<p>Several works related to mashups exist in the literature. Authors in [<xref ref-type="bibr" rid="ref-12">12</xref>] utilize ant colony optimization to find the shortest distance between several destinations the end-user wants to visit. Authors build a mashup that constitutes locations and paths on maps. In their work, a mashup is a result generated by a centralized server service, and they never discuss any information delivery scheme in their work. The end-user is overwhelmed by the sheer amount of sources on the Web, and therefore, an approach based on genetic algorithms is proposed in [<xref ref-type="bibr" rid="ref-9">9</xref>] to assist end-users in selecting data sources for their mashups, and the approach achieves this by minimizing the cost of executing mashups. The execution of the utilized genetic algorithm occurs on a centralized entity. The enormous amount of data sources impedes the work of end-users in picking the ones they want to use in their mashups. Accordingly, works such as [<xref ref-type="bibr" rid="ref-3">3</xref>,<xref ref-type="bibr" rid="ref-13">13</xref>,<xref ref-type="bibr" rid="ref-14">14</xref>] offer techniques to solve this problem. So, the work in [<xref ref-type="bibr" rid="ref-14">14</xref>] detects discrete attributes and semantic relationships of data sources and resembles them in a graph, and this graph is annotated with user preferences, which aids in recommending data sources to end-users. In [<xref ref-type="bibr" rid="ref-3">3</xref>], the authors tackle the issue of the lack of presence of domain knowledge for end-users, which hampers their ability to build mashups, and therefore, the authors study the semantics of the contents of data sources and recommend APIs of sources for end-users. In [<xref ref-type="bibr" rid="ref-13">13</xref>], an issue related to the popularity of data sources is discussed, where the popularity of certain data sources creates some kind of bias for end-users to keep using them in their mashups, and that impairs discovering new and possibly valuable data sources. The works in [<xref ref-type="bibr" rid="ref-3">3</xref>,<xref ref-type="bibr" rid="ref-13">13</xref>,<xref ref-type="bibr" rid="ref-14">14</xref>] rely on centralized architectures, which cause a single point of failure problem. Recommendation techniques that can be used to recommend APIs and services for end-users to use in mashups are discussed in a survey in [<xref ref-type="bibr" rid="ref-15">15</xref>]. A point of view of security is introduced in [<xref ref-type="bibr" rid="ref-16">16</xref>] where authors mention that executing mashups requires extracting data from data sources, and if those data sources happen to carry malicious code, then this code would end up being executed on the end-user&#x2019;s machine, which makes it vulnerable to security attacks. The effect of programming skills and their effect on the ability of end-users to build useful mashups are investigated in [<xref ref-type="bibr" rid="ref-17">17</xref>].</p>
<p>The previous works pertain to the domain of mashups; however, they do not adopt decentralized mashup architectures.</p>
</sec>
<sec id="s2_2">
<label>2.2</label>
<title>Peer to Peer Networks</title>
<p>A key player in network technology is peer-to-peer networks, and we mention several works in this domain in the section. The work in [<xref ref-type="bibr" rid="ref-18">18</xref>] employs Honey Bee Optimization to optimize paths between nodes in unstructured peer-to-peer networks. The work also optimizes the throughput of the network; however, it suffers from inefficient routing in unstructured peer-to-peer networks. Authors in [<xref ref-type="bibr" rid="ref-19">19</xref>] propose an approach to maintain the ability of unstructured peer-to-peer networks to expand even in the presence of high rates of churn, but their work also relies only on unstructured peer-to-peer networks. The work in [<xref ref-type="bibr" rid="ref-20">20</xref>] shows how to build unstructured peer-to-peer networks that can function as multi-hubs. Their overlay maintains the use of randomness of joining the network while keeping the shape of a star network, which results in a robust and low-diameter overlay; however, as in the previous works, their work depends solely on unstructured peer-to-peer networks, which causes routing deficiencies. Authors in [<xref ref-type="bibr" rid="ref-21">21</xref>] state that the performance of federated learning models suffers when applied on a centralized server architecture; therefore, they propose building a federated learning model on top of a Chord structured peer-to-peer architecture. Authors also utilize aggregation to mitigate cases where there are a variety of slow and fast nodes. Their work harvests the benefits of structured peer-to-peer networks, but at the same time, relying exclusively on structured peer-to-peer networks adds to system complexity. In [<xref ref-type="bibr" rid="ref-22">22</xref>], authors tackle the problem of inefficient cloud analytics for health care systems that are based on a centralized server and lack context awareness. So, they propose a hybrid architecture based on peer-to-peer networks. The structured part of their architecture is based on an RC structure, which allows their system to establish groups of nodes based on the specific interests of users. This work reaps the strength of combining both structured and unstructured peer-to-peer networks; however, it does not target mashup platforms. The work in [<xref ref-type="bibr" rid="ref-23">23</xref>] proposes a federated learning system for edge computing such that the system utilizes a publish/subscribe architecture built on top of a hybrid peer-to-peer network. The structured part of their work relies on multiple rings built using Chord. Similar to the previous work, this work utilizes both structured and unstructured peer-to-peer topologies, but it does not focus on mashup platforms.</p>
<p>We summarize the features of the existing works in literature and our work in <xref ref-type="table" rid="table-1">Table 1</xref> such that the columns in the table are interpreted as follows:<list list-type="bullet">
<list-item>
<p>Mashup Centric: Indicates if the work targets mashup platforms.</p>
</list-item>
<list-item>
<p>Architecture: States that the employed architecture is a centralized server (CS) or a distributed network (DN).</p></list-item>
<list-item>
<p>Optimizing Delay: Mentions whether the work optimizes network delay.</p></list-item>
<list-item>
<p>Meta Heuristic Optimization: Declares if any meta-heuristic optimization is utilized in the work.</p></list-item>
<list-item>
<p>P2P: Lists the type of peer-to-peer (P2P) topology used in the work if any.</p></list-item>
</list></p>
<table-wrap id="table-1">
<label>Table 1</label>
<caption>
<title>Comparison of our work and the state of the art.</title>
</caption>
<table>
<colgroup>
<col align="center"/>
<col align="center"/>
<col align="center"/>
<col align="center"/>
<col align="center"/>
<col align="center"/>
</colgroup>
<thead>
<tr>
<th>Work Citation</th>
<th>Mashup Centric</th>
<th>Architecture</th>
<th>Optimizing Delay</th>
<th>Meta-Heuristic Optimization</th>
<th>P2P</th>
</tr>
</thead>
<tbody>
<tr>
<td>[<xref ref-type="bibr" rid="ref-6">6</xref>,<xref ref-type="bibr" rid="ref-3">3</xref>,<xref ref-type="bibr" rid="ref-13">13</xref>,<xref ref-type="bibr" rid="ref-14">14</xref>,<xref ref-type="bibr" rid="ref-17">17</xref>]</td>
<td>Yes</td>
<td>CS</td>
<td>No</td>
<td>None</td>
<td>None</td>
</tr>
<tr>
<td>[<xref ref-type="bibr" rid="ref-9">9</xref>]</td>
<td>Yes</td>
<td>CS</td>
<td>Yes</td>
<td>Genetic Algorithm</td>
<td>None</td>
</tr>
<tr>
<td>[<xref ref-type="bibr" rid="ref-12">12</xref>]</td>
<td>Yes</td>
<td>CS</td>
<td>Yes</td>
<td>ant colony</td>
<td>None</td>
</tr>
<tr>
<td>[<xref ref-type="bibr" rid="ref-18">18</xref>]</td>
<td>No</td>
<td>DN</td>
<td>Yes</td>
<td>Honey Bee Optimization</td>
<td>Unstructured</td>
</tr>
<tr>
<td>[<xref ref-type="bibr" rid="ref-19">19</xref>,<xref ref-type="bibr" rid="ref-20">20</xref>]</td>
<td>No</td>
<td>DN</td>
<td>No</td>
<td>None</td>
<td>Unstructured</td>
</tr>
<tr>
<td>[<xref ref-type="bibr" rid="ref-21">21</xref>]</td>
<td>No</td>
<td>DN</td>
<td>Yes</td>
<td>None</td>
<td>Structured</td>
</tr>
<tr>
<td>[<xref ref-type="bibr" rid="ref-22">22</xref>]</td>
<td>No</td>
<td>DN</td>
<td>Yes</td>
<td>None</td>
<td>Hybrid</td>
</tr>
<tr>
<td>[<xref ref-type="bibr" rid="ref-23">23</xref>]</td>
<td>No</td>
<td>DN</td>
<td>Yes</td>
<td>Bandit-based Optimization</td>
<td>Hybrid</td>
</tr>
<tr>
<td>Our work</td>
<td>Yes</td>
<td>DN</td>
<td>Yes</td>
<td>Genetic Algorithm</td>
<td>Hybrid</td>
</tr>
</tbody>
</table>
</table-wrap>
<p>Our work is the only one among the listed works that satisfies the following features. First, being dedicated to mashups. Second, being based on decentralized architecture. Third, relying on a hybrid peer-to-peer architecture. Fourth, utilizing an evolutionary approach, such as genetic algorithms, to optimize mashup execution delays.</p>
</sec>
</sec>
<sec id="s3">
<label>3</label>
<title>Methodology</title>
<p>In this section, we introduce our mashup distributed architecture and describe its details.</p>
<sec id="s3_1">
<label>3.1</label>
<title>Mashup Representation</title>
<p>Each mashup has a corresponding string representation, which plays an important role later when we map each mashup to a broker in the system. Therefore, it is important to clarify how we build the string representation of a given mashup. For that matter, we look into the mashup depicted in <xref ref-type="fig" rid="fig-2">Fig. 2</xref>. The mashup is intended to collect information related to the sports and entrepreneurship news of the athlete &#x201C;Lebron James&#x201D;. The mashup extracts data from the New York Times ProBasketball sports feed (<ext-link ext-link-type="uri" xlink:href="https://rss.nytimes.com/services/xml/rss/nyt/ProBasketball.xml">https://rss.nytimes.com/services/xml/rss/nyt/ProBasketball.xml</ext-link>), then the extracted data is filtered based on &#x201C;Desc&#x201D; containing &#x201C;hall of fame&#x201D;. In addition, the mashup extracts data from the <ext-link ext-link-type="uri" xlink:href="http://entrepreneur.com">entrepreneur.com</ext-link> feed (<ext-link ext-link-type="uri" xlink:href="https://www.entrepreneur.com/latest.rss">https://www.entrepreneur.com/latest.rss</ext-link>). Then, the extracted data from both data sources is merged and then filtered based on &#x201C;title contains Lebron James&#x201D;. After that, the data is sorted in descending order based on publication date and truncated to keep the latest 5 items. In this example, we have used feeds as the type for data sources; however, the concepts in this work are not restricted to a given data source type.</p>
<fig id="fig-2">
<label>Figure 2</label>
<caption>
<title>Simple example of a mashup.</title>
</caption>
<graphic mimetype="image" mime-subtype="tif" xlink:href="CMC_83861-fig-2.tif"/>
</fig>
<p>Each mashup operator has an equivalent string representation, and since a mashup consists of several mashup operators, the concatenation of the representation of operators results in the final mashup representation. To further explain this, we look at the string representation of the mashup in <xref ref-type="fig" rid="fig-2">Fig. 2</xref>, the first filter operator &#x201C;New York Times ProBasketball sports feed&#x201D; is represented by 40, which is a chosen ID for the data source. Similarly, the second fetch operator &#x201C;<ext-link ext-link-type="uri" xlink:href="http://entrepreneur.com">entrepreneur.com</ext-link> feed&#x201D; is represented as 42. What comes next is the filter operator &#x201C;Filter: Desc contains hall of fame&#x201D; which is represented by the ID of the filter operator (15), followed by the filter predicate, and therefore its basic representation becomes &#x201C;15:Desc contains hall of fame&#x201D;. Now, we can represent the filtered data from data source 40 by concatenating the string representations of both operators, using the # symbol as a separator between them. Accordingly, the representation of the filtered data becomes &#x201C;40#15:Desc contains hall of fame&#x201D;. This is followed by the join operator, which has a representation that starts with &#x201C;SU&#x201D; indicating the start of a join block, and &#x201C;EU&#x201D; which refers to the end of the join block, and &#x201C;MU&#x201D; which stands in between the two merged sources. Accordingly, the representation of the merge operator becomes &#x201C;SU:40#15:Desc contains hall of fame: MU:42:EU&#x201D; which represents joining the filtered result of data source 40 with the fetched data of data source 42. The merged data is then filtered based on title containing Lebron James, and it is represented in a similar way to the first filter operator. However, the data to be filtered is the data resulting from the join operator. Therefore, we follow the same concatenation process to append the filter operator representation to the join operator representation, which leads to the result &#x201C;SU:40#15:Desc contains hall of fame:MU:42:EU#15:title contains Lebron James&#x201D;. The sort operator &#x201C;Sort: pubDate desc&#x201D; comes next, and it is represented by the ID of the sort operator followed by the attribute upon which data is sorted and the type of the sort operation, so its representation becomes &#x201C;09:desc on pubDate&#x201D;. Accordingly, the representation of the mashup until this point is &#x201C;SU:40#15:Desc contains hall of fame:MU:42:EU#15:title contains Lebron James#09:desc on pubDate&#x201D;. Finally, the result is truncated such that 5 items are kept from the result, and this is represented with the ID of the truncate operator (17) followed by the required number of items to keep; hence, its representation becomes &#x201C;17:5&#x201D;. Consequently, the final representation of the mashup becomes &#x201C;SU:40#15:Desc contains hall of fame:MU:42:EU#15:title contains Lebron James#09:desc on pubDate#17:5&#x201D;.</p>

</sec>
<sec id="s3_2">
<label>3.2</label>
<title>System Architecture</title>
<p>Structured and unstructured peer-to-peer networks are among the popular architectures used for distributed systems. This is due to the lack of central control that usually exists in ordinary client/server models. This makes peer-to-peer architectures excellent for graceful scalability. However, each of these two architectures has its own advantages and disadvantages [<xref ref-type="bibr" rid="ref-24">24</xref>]. On the one hand, structured peer-to-peer architectures impose a certain organization on the way peers are connected to each other, which makes them organized and scalable. In addition, this organized connectivity facilitates efficient search and routing through the structured topology, which is usually performed using distributed hash tables (DHTs). However, the imposed organized connectivity introduces a certain degree of complexity to structured topologies. On the other hand, unstructured peer-to-peer networks do not impose a certain way for peers to be connected to each other, and therefore, one of the main advantages of them is their simplicity and convenience. This also allows them to be more dynamic due to loose constraints on node connectivity. However, this simplicity comes at the expense of poor search efficiency, which causes high delays. To this end, we aim to combine both structured and unstructured topologies in our system architecture, which allows us to harvest the best of the two topologies.</p>
<p>The system architecture and network overlay are depicted in <xref ref-type="fig" rid="fig-3">Fig. 3</xref>. The network overlay consists of several end-users, brokers, and data sources. End-users design mashups, and this is why they have the component &#x201C;Mashup Designer&#x201D;. which normally provides drag-and-drop capabilities to build mashups. They also have a &#x201C;Mashup Storage&#x201D; component to store the mashups they design. In addition, they have a &#x201C;Broker Interface&#x201D; component, which allows them to request the execution of mashups from brokers in the structured part of the topology.</p>
<fig id="fig-3">
<label>Figure 3</label>
<caption>
<title>System architecture showing the interactions between the several components existing on the end-user machine (denoted by &#x201C;E&#x201D;), the broker in the structured part of the architecture, and the broker in the unstructured part of the architecture, where brokers are denoted by &#x201C;B&#x201D;. Data sources (denoted by &#x201C;D&#x201D;) are needed for mashup execution.</title>
</caption>
<graphic mimetype="image" mime-subtype="tif" xlink:href="CMC_83861-fig-3.tif"/>
</fig>
<p>Brokers form a network, and they exist in both the structured and unstructured parts of our architecture. However, a broker&#x2019;s role differs based on belonging to the structured or the unstructured parts. A broker in the structured part takes part in several tasks as follows. First, it receives the end-user&#x2019;s request to execute a given mashup. Second, upon receiving the end-user&#x2019;s request, the broker would check if the mashup to be executed is a new one in the system or a previously existing one. If it is a previously existing one, then the broker would forward the request to a broker in the unstructured part it governs. However, if the mashup is a new one, this would engage the &#x201C;Genetic Optimization&#x201D; component to decide which of the brokers in the unstructured part would be responsible for hosting and executing the mashup. Third, the broker utilizes the &#x201C;Forming Groups&#x201D; component to build the unstructured group of brokers that it will moderate. The &#x201C;Genetic Optimization&#x201D; component requires accessing mashups and therefore the broker holds a &#x201C;Mashup Storage&#x201D; component.</p>
<p>For the brokers in the unstructured part, when a broker receives a mashup execution request, then it executes the mashup via the &#x201C;Mashup Execution Engine&#x201D; component and sends the result to the responsible broker in the structured topology, which in turn hands the result to the end-user. The &#x201C;Mashup Execution Engine&#x201D; requires the need of the &#x201C;Mashup Storage&#x201D; component to host mashups and access them when they need to be executed.</p>
<p>Data sources resemble sources in the Web, such as feeds, and those will be contacted when a given mashup is executed. When data is extracted from these sources, it is usually returned in a standard format such as HTML, XML, or JSON.</p>
</sec>
<sec id="s3_3">
<label>3.3</label>
<title>The Structured Part</title>
<p>Here, we describe the details related to the structured part. For the structured part, we follow the topology of Chord [<xref ref-type="bibr" rid="ref-25">25</xref>], which relies on the concept of consistent hashing and distributed hash tables.</p>
<p>Accordingly, for the structured part, brokers are organized using a virtual ring topology where it is possible to place &#x201C;n&#x201D; brokers on a given ring such that &#x201C;n&#x201D; is a power of 2. Even when all the &#x201C;n&#x201D; places are taken on the ring, the ring can expand to make room for additional brokers. The way a broker is placed on the ring topology is governed by applying a hash function on the broker&#x2019;s IP address. For that purpose, the SHA-1 hash function is utilized based on <xref ref-type="disp-formula" rid="eqn-1">Eq. (1)</xref>. Let us explain that using an example. As shown in <xref ref-type="fig" rid="fig-3">Fig. 3</xref>, the ring allows for 8 brokers numbered from 0 to 7, and 3 of those 7 places are taken by brokers <inline-formula id="ieqn-1"><mml:math id="mml-ieqn-1"><mml:msub><mml:mi>B</mml:mi><mml:mn>0</mml:mn></mml:msub></mml:math></inline-formula>, <inline-formula id="ieqn-2"><mml:math id="mml-ieqn-2"><mml:msub><mml:mi>B</mml:mi><mml:mn>2</mml:mn></mml:msub></mml:math></inline-formula>, and <inline-formula id="ieqn-3"><mml:math id="mml-ieqn-3"><mml:msub><mml:mi>B</mml:mi><mml:mn>4</mml:mn></mml:msub></mml:math></inline-formula>. So, when a given broker is to be added to the ring, its IP address needs to be translated to one of the available identifiers from 0 to 7. Passing the IP address of the broker to the SHA-1 function results in a hexadecimal number output, then the hexadecimal number is converted to a decimal number. However, the resulting decimal number might not fall within the allowed 8 identifiers (0 to 7). To solve that mathematically, we divide the resulting decimal number by <inline-formula id="ieqn-4"><mml:math id="mml-ieqn-4"><mml:msup><mml:mn>2</mml:mn><mml:mi>m</mml:mi></mml:msup></mml:math></inline-formula>, where m is the number of binary digits needed to represent the &#x201C;n&#x201D; possible identifiers. In this case, m &#x003D; 3 because <inline-formula id="ieqn-5"><mml:math id="mml-ieqn-5"><mml:msup><mml:mn>2</mml:mn><mml:mn>3</mml:mn></mml:msup><mml:mo>=</mml:mo><mml:mn>8</mml:mn></mml:math></inline-formula>, then the remainder of the division becomes the broker identifier on the ring.
<disp-formula id="eqn-1"><label>(1)</label><mml:math id="mml-eqn-1" display="block"><mml:mi>I</mml:mi><mml:mi>D</mml:mi><mml:mo>=</mml:mo><mml:mi>T</mml:mi><mml:mi>o</mml:mi><mml:mi>D</mml:mi><mml:mi>e</mml:mi><mml:mi>c</mml:mi><mml:mi>i</mml:mi><mml:mi>m</mml:mi><mml:mi>a</mml:mi><mml:mi>l</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>S</mml:mi><mml:mi>H</mml:mi><mml:mi>A</mml:mi><mml:mn>1</mml:mn><mml:mo stretchy="false">(</mml:mo><mml:mi>R</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">)</mml:mo><mml:mspace width="mediummathspace" /><mml:mspace width="mediummathspace" /><mml:mi>m</mml:mi><mml:mi>o</mml:mi><mml:mi>d</mml:mi><mml:mspace width="mediummathspace" /><mml:mspace width="mediummathspace" /><mml:msup><mml:mn>2</mml:mn><mml:mi>m</mml:mi></mml:msup></mml:math></disp-formula></p>

<p>In our platform, brokers host mashups, and specifically, we assign this task to the brokers in the unstructured part of the architecture. Therefore, we need to find a way that uses the representation of a given mashup to map it to a broker in the structured part. This paves the way to the unstructured brokers network, which the broker in the structured part is responsible for, and then the mashup would be hosted by one of the brokers in the unstructured part. Hence, the first step for us is to map the mashup representation to a broker in the structured part of the network, and to achieve that, we follow the way employed in Chord. Based on that, the representation of a given mashup is also passed to <xref ref-type="disp-formula" rid="eqn-1">Eq. (1)</xref> and the result would be a decimal number (MashID) such that the broker on the structured part that is mapped to this mashup is successor(MashID) where the successor function is a simple function that returns the broker on the ring topology which has the identifier that is equal to MashID or the closest to MashID clockwise. For example, successor(0) is 0 because there is a broker <inline-formula id="ieqn-6"><mml:math id="mml-ieqn-6"><mml:msub><mml:mi>B</mml:mi><mml:mn>0</mml:mn></mml:msub></mml:math></inline-formula> at position 0 on the ring; however, successor(1) &#x003D; 2 because there is no broker occupying position 1, and therefore, we look for the next broker clockwise, and that would be broker <inline-formula id="ieqn-7"><mml:math id="mml-ieqn-7"><mml:msub><mml:mi>B</mml:mi><mml:mn>2</mml:mn></mml:msub></mml:math></inline-formula>. Let us discuss another example in the context of mashups. Suppose a given mashup results in MashID &#x003D; 5. Now, looking back at <xref ref-type="fig" rid="fig-3">Fig. 3</xref>, the broker to which the mashup is mapped is the one resulting from successor(5). We can see that the place with ID 5 is not occupied by a broker yet, so we move clockwise to find the closest broker, which is broker <inline-formula id="ieqn-8"><mml:math id="mml-ieqn-8"><mml:msub><mml:mi>B</mml:mi><mml:mn>0</mml:mn></mml:msub></mml:math></inline-formula> in this case. So, the previous mashup is mapped to broker <inline-formula id="ieqn-9"><mml:math id="mml-ieqn-9"><mml:msub><mml:mi>B</mml:mi><mml:mn>0</mml:mn></mml:msub></mml:math></inline-formula>. Now broker <inline-formula id="ieqn-10"><mml:math id="mml-ieqn-10"><mml:msub><mml:mi>B</mml:mi><mml:mn>0</mml:mn></mml:msub></mml:math></inline-formula> would be responsible for finding a broker within the unstructured brokers network it is responsible for and that broker would be the broker on which the mashup will be hosted and therefore it will be responsible for executing that mashup in the future.</p>

<p>One thing to mention here is that searching the ring in this sequential manner is costly and accordingly Chord employs the concept of finger tables which aids in a more efficient process in finding successor brokers and it is also used in routing through the ring topology, and this way a smaller number of steps would be needed to find the broker to which a given mashup is mapped. This is realized using the distributed hash table concept employed in Chord. So, each broker in the structured part keeps a finger table such that each entry of the finger table is of the format <inline-formula id="ieqn-11"><mml:math id="mml-ieqn-11"><mml:mo>&#x003C;</mml:mo></mml:math></inline-formula>BrokerID, [Interval Start, Interval End), SuccessorBrokerID<inline-formula id="ieqn-12"><mml:math id="mml-ieqn-12"><mml:mo>&#x003E;</mml:mo></mml:math></inline-formula>, which is interpreted as follows. The broker with &#x201C;BrokerID&#x201D; is responsible for keeping mashups that have IDs that fall within the interval that starts with &#x201C;Interval Start&#x201D; inclusively and ends with &#x201C;Interval End&#x201D; exclusively, and the successor for the broker with &#x201C;BrokerID&#x201D; is the broker with &#x201C;SuccessorBrokerID&#x201D;. In <xref ref-type="fig" rid="fig-4">Fig. 4</xref>, we show the structured part of our architecture where each broker in the structured part has its own finger table. Looking at the previous figure, let us assume that broker <inline-formula id="ieqn-13"><mml:math id="mml-ieqn-13"><mml:msub><mml:mi>B</mml:mi><mml:mn>2</mml:mn></mml:msub></mml:math></inline-formula> is trying to find out where the mashup with ID 5 is hosted. The broker searches its finger table for an interval that includes the MashID 5. In this case, the second entry has an interval [4,6), and it includes MashID 5. The corresponding broker ID is 4, and based on the fact that the broker hosting a given MashID should have an ID equal to MashID or the closest broker with ID greater than MashID, broker <inline-formula id="ieqn-14"><mml:math id="mml-ieqn-14"><mml:msub><mml:mi>B</mml:mi><mml:mn>4</mml:mn></mml:msub></mml:math></inline-formula> precedes identifier 5, so we go for successor(4), which is 4 based on the entry in the finger table. Reaching broker <inline-formula id="ieqn-15"><mml:math id="mml-ieqn-15"><mml:msub><mml:mi>B</mml:mi><mml:mn>4</mml:mn></mml:msub></mml:math></inline-formula>, the same process is repeated. Identifier 5 is found in the first entry interval [5,6), and the broker ID is 5, and the successor(5) is 0. Here, the process stops because 0 is the successor of 5 going clockwise in the ring. Consequently, broker <inline-formula id="ieqn-16"><mml:math id="mml-ieqn-16"><mml:msub><mml:mi>B</mml:mi><mml:mn>2</mml:mn></mml:msub></mml:math></inline-formula> now would contact broker <inline-formula id="ieqn-17"><mml:math id="mml-ieqn-17"><mml:msub><mml:mi>B</mml:mi><mml:mn>0</mml:mn></mml:msub></mml:math></inline-formula> for any future requests to execute the mashup with MashID 5. For simplicity reasons, we refrain from explaining how finger tables are built since this is Chord-specific information and it is not needed for explaining the concepts in our work; what is required is how the finger tables are utilized for searching and routing, which we already explained.</p>
<fig id="fig-4">
<label>Figure 4</label>
<caption>
<title>Showing the structured part of the system with finger tables for brokers on the Chord ring.</title>
</caption>
<graphic mimetype="image" mime-subtype="tif" xlink:href="CMC_83861-fig-4.tif"/>
</fig>
</sec>
<sec id="s3_4">
<label>3.4</label>
<title>The Unstructured Part</title>
<p>Out of the brokers set in the system, several of them would join the structured Chord ring, and the rest would join the unstructured topology pertaining to one of the brokers in the structured topology. So, how can we make the distinction of which broker joins the structured or the unstructured parts of the topology? To achieve that, we form groups out of the brokers set such that one member of each group (Group Head) is the representative of that group on the structured Chord ring, and the rest of the brokers in each group belong to the unstructured part, which is under the control of the group head.</p>
<p>The way we form groups is depicted in Algorithm 1 and described as follows. First, the system administrator is responsible for deciding the desired number of groups (&#x201C;.&#x201D; number of groups), then the administrator picks one broker (<inline-formula id="ieqn-18"><mml:math id="mml-ieqn-18"><mml:msub><mml:mi>B</mml:mi><mml:mi>s</mml:mi></mml:msub></mml:math></inline-formula>) randomly to be a group head for one of the groups (line 1) and then launches &#x201C;k-1&#x201D; random walkers to select the remaining &#x201C;k-1&#x201D; group heads (lines 2&#x2013;6). Each random walker would travel starting from <inline-formula id="ieqn-19"><mml:math id="mml-ieqn-19"><mml:msub><mml:mi>B</mml:mi><mml:mi>s</mml:mi></mml:msub></mml:math></inline-formula> as deep as it can through the network, such that the random walker behaves as follows. The random walker starts from broker <inline-formula id="ieqn-20"><mml:math id="mml-ieqn-20"><mml:msub><mml:mi>B</mml:mi><mml:mi>s</mml:mi></mml:msub></mml:math></inline-formula> and randomly picks a broker from its direct neighbors, and the process is repeated until either an inevitable loop is encountered (line 4) or the random walker has already reached the allowed number of hops to travel through the network (line 5). The second condition is important because it forbids the random walker from traveling too long in the network, so each random walker is given a Time to Live (TTL) value such that the TTL value is decremented each time the random walker moves one hop ahead, and when the TTL value expires (i.e., reaches zero), then the random walker stops. The broker at which the random walker stops is chosen as another group head, regardless of the random walker being stopped due to an unavoidable loop or due to TTL expiration. The way a random walker knows if it hits an inevitable loop is by utilizing a list of previously visited brokers, which it keeps and updates through its way. After all the random walkers finish their work, the result is &#x201C;k&#x201D; group heads, and they will join the structured Chord ring using the same approach explained in <xref ref-type="sec" rid="s3_3">Section 3.3</xref>.</p>
<fig id="fig-13">
<graphic mimetype="image" mime-subtype="tif" xlink:href="CMC_83861-fig-13.tif"/>
</fig>
<p>Now, each of the group heads is responsible for forming a group of brokers that are connected in an unstructured peer-to-peer overlay. This is a process that each group head starts independently on its own and therefore makes use of parallel execution. Each group head starts a flooding process that starts from the group head and conditionally spreads through the network (lines 7&#x2013;24). To execute the flooding process, we utilize a list <inline-formula id="ieqn-45"><mml:math id="mml-ieqn-45"><mml:mi>f</mml:mi><mml:mi>L</mml:mi><mml:mi>i</mml:mi><mml:mi>s</mml:mi><mml:mi>t</mml:mi></mml:math></inline-formula> to contain the brokers from which the flooding process continues (line 9), and this list initially contains the group head from which flooding would start (line 10). The flooding process keeps going until the <inline-formula id="ieqn-46"><mml:math id="mml-ieqn-46"><mml:mi>f</mml:mi><mml:mi>L</mml:mi><mml:mi>i</mml:mi><mml:mi>s</mml:mi><mml:mi>t</mml:mi></mml:math></inline-formula> is empty, which indicates that there are no more brokers for the flooding process to continue from them (line 11). In each iteration of this loop, we start from the broker sitting on top of the <inline-formula id="ieqn-47"><mml:math id="mml-ieqn-47"><mml:mi>f</mml:mi><mml:mi>L</mml:mi><mml:mi>i</mml:mi><mml:mi>s</mml:mi><mml:mi>t</mml:mi></mml:math></inline-formula>, and we call it <inline-formula id="ieqn-48"><mml:math id="mml-ieqn-48"><mml:msub><mml:mi>B</mml:mi><mml:mi>c</mml:mi></mml:msub></mml:math></inline-formula> (lines 12,13), and to reach the direct neighbors of <inline-formula id="ieqn-49"><mml:math id="mml-ieqn-49"><mml:msub><mml:mi>B</mml:mi><mml:mi>c</mml:mi></mml:msub></mml:math></inline-formula>, we employ a list <inline-formula id="ieqn-50"><mml:math id="mml-ieqn-50"><mml:mi>a</mml:mi><mml:mi>d</mml:mi><mml:mi>j</mml:mi><mml:mi>L</mml:mi><mml:mi>i</mml:mi><mml:mi>s</mml:mi><mml:mi>t</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mi>B</mml:mi><mml:mi>c</mml:mi></mml:msub><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula> (line 14). The broker <inline-formula id="ieqn-51"><mml:math id="mml-ieqn-51"><mml:msub><mml:mi>B</mml:mi><mml:mi>c</mml:mi></mml:msub></mml:math></inline-formula> communicates with its direct neighbors (lines 15&#x2013;21), and each of the neighbors <inline-formula id="ieqn-52"><mml:math id="mml-ieqn-52"><mml:mi>N</mml:mi><mml:mi>b</mml:mi><mml:mi>r</mml:mi></mml:math></inline-formula> (line 16) would join the group that belongs to the group head, supposing that it did not previously belong to another group (lines 17&#x2013;20). Also, <inline-formula id="ieqn-53"><mml:math id="mml-ieqn-53"><mml:mi>N</mml:mi><mml:mi>b</mml:mi><mml:mi>r</mml:mi></mml:math></inline-formula> is added to the <inline-formula id="ieqn-54"><mml:math id="mml-ieqn-54"><mml:mi>f</mml:mi><mml:mi>L</mml:mi><mml:mi>i</mml:mi><mml:mi>s</mml:mi><mml:mi>t</mml:mi></mml:math></inline-formula> so that it would be the next broker from which the flooding process continues (line 19). In line 22, <inline-formula id="ieqn-55"><mml:math id="mml-ieqn-55"><mml:msub><mml:mi>B</mml:mi><mml:mi>c</mml:mi></mml:msub></mml:math></inline-formula> is removed from the <inline-formula id="ieqn-56"><mml:math id="mml-ieqn-56"><mml:mi>f</mml:mi><mml:mi>L</mml:mi><mml:mi>i</mml:mi><mml:mi>s</mml:mi><mml:mi>t</mml:mi></mml:math></inline-formula> because the flooding process is done with this broker and will move on to other brokers from the list. The same process is repeated, starting from each of the direct neighbors. The process stops when all the contacted direct neighbors belong to another group. When this process is completed, all brokers in the system will be members of the unstructured topology of one of the group heads in the structured topology. We mention here that although the flooding process is known to be a time-consuming operation, in this case, it is not expensive, and this is due to the ability of group heads to work in parallel. It is worth mentioning that during the flooding process, each travelling message keeps a list of previously visited brokers, which is used so that a message can memorize its way back to the group head. This way, when a broker joins the group of a given group head, then the broker can report back to the group head to inform it that it has become part of its group. Another use of this is the fact that a group head now knows the path that should be followed to reach a given broker within its unstructured group.</p>
<p>The previous way of forming groups depends on network flooding, as previously explained. We provide two flavors of the previous algorithm depending on a variation of the type of the flooding process, namely, sequence number flooding and reverse path flooding. Remember that a given group head executes a flooding process so that it finds brokers to join its group. However, the flooding process naturally involves that a given node would be reached several times from different paths. So, the previous two types of flooding determine what happens when a given broker receives a message from two different paths.
<list list-type="bullet">
<list-item>
<p><bold>Sequence number flooding:</bold> In this type of flooding, each message is associated with a sequence number, which is utilized to identify messages originating from the same source. Let us assume a simple scenario to make the concept clear. Suppose a given group head <inline-formula id="ieqn-57"><mml:math id="mml-ieqn-57"><mml:msub><mml:mi>B</mml:mi><mml:mi>c</mml:mi></mml:msub></mml:math></inline-formula> started the flooding process and sent a message to its direct neighbors <inline-formula id="ieqn-58"><mml:math id="mml-ieqn-58"><mml:msub><mml:mi>B</mml:mi><mml:mn>1</mml:mn></mml:msub></mml:math></inline-formula> and <inline-formula id="ieqn-59"><mml:math id="mml-ieqn-59"><mml:msub><mml:mi>B</mml:mi><mml:mn>3</mml:mn></mml:msub></mml:math></inline-formula> such that the two sent messages have the same sequence number. Broker <inline-formula id="ieqn-60"><mml:math id="mml-ieqn-60"><mml:msub><mml:mi>B</mml:mi><mml:mn>1</mml:mn></mml:msub></mml:math></inline-formula> also forwards the message to its neighbor <inline-formula id="ieqn-61"><mml:math id="mml-ieqn-61"><mml:msub><mml:mi>B</mml:mi><mml:mn>3</mml:mn></mml:msub></mml:math></inline-formula>. This means that broker <inline-formula id="ieqn-62"><mml:math id="mml-ieqn-62"><mml:msub><mml:mi>B</mml:mi><mml:mn>3</mml:mn></mml:msub></mml:math></inline-formula> would receive two messages from the broker <inline-formula id="ieqn-63"><mml:math id="mml-ieqn-63"><mml:msub><mml:mi>B</mml:mi><mml:mi>c</mml:mi></mml:msub></mml:math></inline-formula>, the first one through the path &#x201C;<inline-formula id="ieqn-64"><mml:math id="mml-ieqn-64"><mml:msub><mml:mi>B</mml:mi><mml:mi>c</mml:mi></mml:msub></mml:math></inline-formula> -<inline-formula id="ieqn-65"><mml:math id="mml-ieqn-65"><mml:mo>&#x003E;</mml:mo></mml:math></inline-formula> <inline-formula id="ieqn-66"><mml:math id="mml-ieqn-66"><mml:msub><mml:mi>B</mml:mi><mml:mn>3</mml:mn></mml:msub></mml:math></inline-formula>&#x201D; and the second one through the path &#x201C;<inline-formula id="ieqn-67"><mml:math id="mml-ieqn-67"><mml:msub><mml:mi>B</mml:mi><mml:mi>c</mml:mi></mml:msub></mml:math></inline-formula> -<inline-formula id="ieqn-68"><mml:math id="mml-ieqn-68"><mml:mo>&#x003E;</mml:mo></mml:math></inline-formula> <inline-formula id="ieqn-69"><mml:math id="mml-ieqn-69"><mml:msub><mml:mi>B</mml:mi><mml:mn>1</mml:mn></mml:msub></mml:math></inline-formula> -<inline-formula id="ieqn-70"><mml:math id="mml-ieqn-70"><mml:mo>&#x003E;</mml:mo></mml:math></inline-formula> <inline-formula id="ieqn-71"><mml:math id="mml-ieqn-71"><mml:msub><mml:mi>B</mml:mi><mml:mn>3</mml:mn></mml:msub></mml:math></inline-formula>&#x201D;. Let us assume that the message coming via path &#x201C;<inline-formula id="ieqn-72"><mml:math id="mml-ieqn-72"><mml:msub><mml:mi>B</mml:mi><mml:mi>c</mml:mi></mml:msub></mml:math></inline-formula> -<inline-formula id="ieqn-73"><mml:math id="mml-ieqn-73"><mml:mo>&#x003E;</mml:mo></mml:math></inline-formula> <inline-formula id="ieqn-74"><mml:math id="mml-ieqn-74"><mml:msub><mml:mi>B</mml:mi><mml:mn>3</mml:mn></mml:msub></mml:math></inline-formula>&#x201D; is received first, and the cost of that path is 8. Now, broker <inline-formula id="ieqn-75"><mml:math id="mml-ieqn-75"><mml:msub><mml:mi>B</mml:mi><mml:mn>3</mml:mn></mml:msub></mml:math></inline-formula> would report back to <inline-formula id="ieqn-76"><mml:math id="mml-ieqn-76"><mml:msub><mml:mi>B</mml:mi><mml:mi>c</mml:mi></mml:msub></mml:math></inline-formula> that <inline-formula id="ieqn-77"><mml:math id="mml-ieqn-77"><mml:msub><mml:mi>B</mml:mi><mml:mi>c</mml:mi></mml:msub></mml:math></inline-formula> can reach <inline-formula id="ieqn-78"><mml:math id="mml-ieqn-78"><mml:msub><mml:mi>B</mml:mi><mml:mn>3</mml:mn></mml:msub></mml:math></inline-formula> with a cost of 8, and <inline-formula id="ieqn-79"><mml:math id="mml-ieqn-79"><mml:msub><mml:mi>B</mml:mi><mml:mn>3</mml:mn></mml:msub></mml:math></inline-formula> joins the group of <inline-formula id="ieqn-80"><mml:math id="mml-ieqn-80"><mml:msub><mml:mi>B</mml:mi><mml:mi>c</mml:mi></mml:msub></mml:math></inline-formula>. In addition, <inline-formula id="ieqn-81"><mml:math id="mml-ieqn-81"><mml:msub><mml:mi>B</mml:mi><mml:mn>3</mml:mn></mml:msub></mml:math></inline-formula> proceeds with the flooding process by forwarding the first received message to its neighbors. Next, <inline-formula id="ieqn-82"><mml:math id="mml-ieqn-82"><mml:msub><mml:mi>B</mml:mi><mml:mn>3</mml:mn></mml:msub></mml:math></inline-formula> receives the other message coming through the path &#x201C;<inline-formula id="ieqn-83"><mml:math id="mml-ieqn-83"><mml:msub><mml:mi>B</mml:mi><mml:mi>c</mml:mi></mml:msub></mml:math></inline-formula> -<inline-formula id="ieqn-84"><mml:math id="mml-ieqn-84"><mml:mo>&#x003E;</mml:mo></mml:math></inline-formula> <inline-formula id="ieqn-85"><mml:math id="mml-ieqn-85"><mml:msub><mml:mi>B</mml:mi><mml:mn>1</mml:mn></mml:msub></mml:math></inline-formula> -<inline-formula id="ieqn-86"><mml:math id="mml-ieqn-86"><mml:mo>&#x003E;</mml:mo></mml:math></inline-formula> <inline-formula id="ieqn-87"><mml:math id="mml-ieqn-87"><mml:msub><mml:mi>B</mml:mi><mml:mn>3</mml:mn></mml:msub></mml:math></inline-formula>&#x201D; with a cost of 5. Hence, the sequence number of the second received message is identical to the first one, then broker <inline-formula id="ieqn-88"><mml:math id="mml-ieqn-88"><mml:msub><mml:mi>B</mml:mi><mml:mn>3</mml:mn></mml:msub></mml:math></inline-formula> would not forward the second received message as part of the flooding process.</p></list-item>
<list-item>
<p><bold>Reverse path flooding:</bold> This type of flooding does not recognize the sequence number of messages and acts differently. Picking up from the same previous scenario, when broker <inline-formula id="ieqn-89"><mml:math id="mml-ieqn-89"><mml:msub><mml:mi>B</mml:mi><mml:mn>3</mml:mn></mml:msub></mml:math></inline-formula> receives the second message via path &#x201C;<inline-formula id="ieqn-90"><mml:math id="mml-ieqn-90"><mml:msub><mml:mi>B</mml:mi><mml:mi>c</mml:mi></mml:msub></mml:math></inline-formula> -<inline-formula id="ieqn-91"><mml:math id="mml-ieqn-91"><mml:mo>&#x003E;</mml:mo></mml:math></inline-formula> <inline-formula id="ieqn-92"><mml:math id="mml-ieqn-92"><mml:msub><mml:mi>B</mml:mi><mml:mn>1</mml:mn></mml:msub></mml:math></inline-formula> -<inline-formula id="ieqn-93"><mml:math id="mml-ieqn-93"><mml:mo>&#x003E;</mml:mo></mml:math></inline-formula> <inline-formula id="ieqn-94"><mml:math id="mml-ieqn-94"><mml:msub><mml:mi>B</mml:mi><mml:mn>3</mml:mn></mml:msub></mml:math></inline-formula>&#x201D; with a cost of 5, then broker <inline-formula id="ieqn-95"><mml:math id="mml-ieqn-95"><mml:msub><mml:mi>B</mml:mi><mml:mn>3</mml:mn></mml:msub></mml:math></inline-formula> checks its records and notices that it was previously reached by broker <inline-formula id="ieqn-96"><mml:math id="mml-ieqn-96"><mml:msub><mml:mi>B</mml:mi><mml:mi>c</mml:mi></mml:msub></mml:math></inline-formula> with a cost of 8. Since the cost of the second received message is lower than the first one, then <inline-formula id="ieqn-97"><mml:math id="mml-ieqn-97"><mml:msub><mml:mi>B</mml:mi><mml:mn>3</mml:mn></mml:msub></mml:math></inline-formula> reports back again to <inline-formula id="ieqn-98"><mml:math id="mml-ieqn-98"><mml:msub><mml:mi>B</mml:mi><mml:mi>c</mml:mi></mml:msub></mml:math></inline-formula> that it can be reached with a cost of 5 via the path &#x201C;<inline-formula id="ieqn-99"><mml:math id="mml-ieqn-99"><mml:msub><mml:mi>B</mml:mi><mml:mi>c</mml:mi></mml:msub></mml:math></inline-formula> -<inline-formula id="ieqn-100"><mml:math id="mml-ieqn-100"><mml:mo>&#x003E;</mml:mo></mml:math></inline-formula> <inline-formula id="ieqn-101"><mml:math id="mml-ieqn-101"><mml:msub><mml:mi>B</mml:mi><mml:mn>1</mml:mn></mml:msub></mml:math></inline-formula> -<inline-formula id="ieqn-102"><mml:math id="mml-ieqn-102"><mml:mo>&#x003E;</mml:mo></mml:math></inline-formula> <inline-formula id="ieqn-103"><mml:math id="mml-ieqn-103"><mml:msub><mml:mi>B</mml:mi><mml:mn>3</mml:mn></mml:msub></mml:math></inline-formula>&#x201D;. Further, since the new path &#x201C;<inline-formula id="ieqn-104"><mml:math id="mml-ieqn-104"><mml:msub><mml:mi>B</mml:mi><mml:mi>c</mml:mi></mml:msub></mml:math></inline-formula> -<inline-formula id="ieqn-105"><mml:math id="mml-ieqn-105"><mml:mo>&#x003E;</mml:mo></mml:math></inline-formula> <inline-formula id="ieqn-106"><mml:math id="mml-ieqn-106"><mml:msub><mml:mi>B</mml:mi><mml:mn>1</mml:mn></mml:msub></mml:math></inline-formula> -<inline-formula id="ieqn-107"><mml:math id="mml-ieqn-107"><mml:mo>&#x003E;</mml:mo></mml:math></inline-formula> <inline-formula id="ieqn-108"><mml:math id="mml-ieqn-108"><mml:msub><mml:mi>B</mml:mi><mml:mn>3</mml:mn></mml:msub></mml:math></inline-formula>&#x201D; resulted in a lower cost, then <inline-formula id="ieqn-109"><mml:math id="mml-ieqn-109"><mml:msub><mml:mi>B</mml:mi><mml:mn>3</mml:mn></mml:msub></mml:math></inline-formula> proceeds with the flooding process and forwards the second message to its neighbors. However, if subsequent messages do not yield a lower cost, then the broker does not need to report back any new cost and does not need to forward those messages anymore.</p></list-item>
</list></p>
</sec>
<sec id="s3_5">
<label>3.5</label>
<title>Mashup Hosting</title>
<p>In this Section, we discuss how to choose a broker that is responsible for hosting/executing a given mashup. We explained in <xref ref-type="sec" rid="s3_3">Section 3.3</xref> that a mashup representation is translated into a mashup identifier (MashID). Then, the MashID is mapped to one of the group heads in the structured Chord ring. However, the group heads are not responsible for executing mashups; instead, they are responsible for guiding the mashup execution request to one of the brokers in their unstructured groups. Accordingly, when a given group head receives a request to execute a given mashup, it would need to instruct one of the brokers in its unstructured group to host the mashup. Nevertheless, the unstructured group of a given group head contains many brokers, and the decision of which broker of them would host a given mashup has implications that affect the delay in the system. Hence, it is the responsibility of the group head to decide which broker within its group would host a given mashup based on generating minimal delays in the system, and this is known to be an NP-complete problem. Evolutionary techniques can be used to solve this problem, and they rely on randomized search mechanisms. In our work, we adopt genetic algorithms to decide where each mashup is hosted in the unstructured groups.</p>
<p>For a given group head, when it receives a mashup execution request, it would need to map the mashup to a broker in its unstructured group. This is called a solution, and it is called a chromosome in genetic algorithms vocabulary. Therefore, a chromosome looks like what is represented in <xref ref-type="table" rid="table-2">Table 2</xref>, where a binary solution is represented as a one-dimensional array comprising mapping of mashups to brokers in the unstructured group. For example, the figure shows that <inline-formula id="ieqn-110"><mml:math id="mml-ieqn-110"><mml:mi>M</mml:mi><mml:mi>a</mml:mi><mml:mi>s</mml:mi><mml:msub><mml:mi>h</mml:mi><mml:mn>1</mml:mn></mml:msub></mml:math></inline-formula> is hosted at broker <inline-formula id="ieqn-111"><mml:math id="mml-ieqn-111"><mml:msub><mml:mi>B</mml:mi><mml:mn>1</mml:mn></mml:msub></mml:math></inline-formula>, <inline-formula id="ieqn-112"><mml:math id="mml-ieqn-112"><mml:mi>M</mml:mi><mml:mi>a</mml:mi><mml:mi>s</mml:mi><mml:msub><mml:mi>h</mml:mi><mml:mn>2</mml:mn></mml:msub></mml:math></inline-formula> is hosted at broker <inline-formula id="ieqn-113"><mml:math id="mml-ieqn-113"><mml:msub><mml:mi>B</mml:mi><mml:mn>3</mml:mn></mml:msub></mml:math></inline-formula>, and <inline-formula id="ieqn-114"><mml:math id="mml-ieqn-114"><mml:mi>M</mml:mi><mml:mi>a</mml:mi><mml:mi>s</mml:mi><mml:msub><mml:mi>h</mml:mi><mml:mn>3</mml:mn></mml:msub></mml:math></inline-formula> is hosted at broker <inline-formula id="ieqn-115"><mml:math id="mml-ieqn-115"><mml:msub><mml:mi>B</mml:mi><mml:mn>4</mml:mn></mml:msub></mml:math></inline-formula>.</p>
<table-wrap id="table-2">
<label>Table 2</label>
<caption>
<title>The structure of the chromosome (solution) showing the brokers that are responsible for hosting/executing mashups.</title>
</caption>
<table>
<colgroup>
<col align="center"/>
<col align="center"/>
<col align="center"/>
<col align="center"/>
<col align="center"/>
<col align="center"/>
<col align="center"/>
<col align="center"/>
<col align="center"/>
<col align="center"/>
<col align="center"/>
<col align="center"/>
</colgroup>
<thead>
<tr>
<th colspan="4"><inline-formula id="ieqn-116"><mml:math id="mml-ieqn-116"><mml:mi>M</mml:mi><mml:mi>a</mml:mi><mml:mi>s</mml:mi><mml:msub><mml:mi>h</mml:mi><mml:mn>1</mml:mn></mml:msub></mml:math></inline-formula></th>
<th colspan="4"><inline-formula id="ieqn-117"><mml:math id="mml-ieqn-117"><mml:mi>M</mml:mi><mml:mi>a</mml:mi><mml:mi>s</mml:mi><mml:msub><mml:mi>h</mml:mi><mml:mn>2</mml:mn></mml:msub></mml:math></inline-formula></th>
<th colspan="4"><inline-formula id="ieqn-118"><mml:math id="mml-ieqn-118"><mml:mi>M</mml:mi><mml:mi>a</mml:mi><mml:mi>s</mml:mi><mml:msub><mml:mi>h</mml:mi><mml:mn>3</mml:mn></mml:msub></mml:math></inline-formula></th>
</tr>
<tr>
<th><inline-formula id="ieqn-119"><mml:math id="mml-ieqn-119"><mml:msub><mml:mi>B</mml:mi><mml:mn>1</mml:mn></mml:msub></mml:math></inline-formula></th>
<th><inline-formula id="ieqn-120"><mml:math id="mml-ieqn-120"><mml:msub><mml:mi>B</mml:mi><mml:mn>2</mml:mn></mml:msub></mml:math></inline-formula></th>
<th><inline-formula id="ieqn-121"><mml:math id="mml-ieqn-121"><mml:msub><mml:mi>B</mml:mi><mml:mn>3</mml:mn></mml:msub></mml:math></inline-formula></th>
<th><inline-formula id="ieqn-122"><mml:math id="mml-ieqn-122"><mml:msub><mml:mi>B</mml:mi><mml:mn>4</mml:mn></mml:msub></mml:math></inline-formula></th>
<th><inline-formula id="ieqn-123"><mml:math id="mml-ieqn-123"><mml:msub><mml:mi>B</mml:mi><mml:mn>1</mml:mn></mml:msub></mml:math></inline-formula></th>
<th><inline-formula id="ieqn-124"><mml:math id="mml-ieqn-124"><mml:msub><mml:mi>B</mml:mi><mml:mn>2</mml:mn></mml:msub></mml:math></inline-formula></th>
<th><inline-formula id="ieqn-125"><mml:math id="mml-ieqn-125"><mml:msub><mml:mi>B</mml:mi><mml:mn>3</mml:mn></mml:msub></mml:math></inline-formula></th>
<th><inline-formula id="ieqn-126"><mml:math id="mml-ieqn-126"><mml:msub><mml:mi>B</mml:mi><mml:mn>4</mml:mn></mml:msub></mml:math></inline-formula></th>
<th><inline-formula id="ieqn-127"><mml:math id="mml-ieqn-127"><mml:msub><mml:mi>B</mml:mi><mml:mn>1</mml:mn></mml:msub></mml:math></inline-formula></th>
<th><inline-formula id="ieqn-128"><mml:math id="mml-ieqn-128"><mml:msub><mml:mi>B</mml:mi><mml:mn>2</mml:mn></mml:msub></mml:math></inline-formula></th>
<th><inline-formula id="ieqn-129"><mml:math id="mml-ieqn-129"><mml:msub><mml:mi>B</mml:mi><mml:mn>3</mml:mn></mml:msub></mml:math></inline-formula></th>
<th><inline-formula id="ieqn-130"><mml:math id="mml-ieqn-130"><mml:msub><mml:mi>B</mml:mi><mml:mn>4</mml:mn></mml:msub></mml:math></inline-formula></th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>1</td>
</tr>
</tbody>
</table>
</table-wrap>
<p>Each solution (chromosome) has a given value (Fitness Value) that resembles the quality of the solution. In our case, the quality is related to generating minimal delays. Accordingly, the fitness value of a given solution can be measured based on <xref ref-type="disp-formula" rid="eqn-2">Eq. (2)</xref>, where the delay is measured according to the delay resulting from extracting the data sources involved in mashups. The symbols used in the equation are as follows. <inline-formula id="ieqn-131"><mml:math id="mml-ieqn-131"><mml:mi>E</mml:mi><mml:mi>x</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>M</mml:mi><mml:mi>a</mml:mi><mml:mi>s</mml:mi><mml:msub><mml:mi>h</mml:mi><mml:mi>m</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>B</mml:mi><mml:mi>n</mml:mi></mml:msub><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula> is a simple function that returns 1 if mashup <inline-formula id="ieqn-132"><mml:math id="mml-ieqn-132"><mml:mi>M</mml:mi><mml:mi>a</mml:mi><mml:mi>s</mml:mi><mml:msub><mml:mi>h</mml:mi><mml:mi>m</mml:mi></mml:msub></mml:math></inline-formula> resides at broker <inline-formula id="ieqn-133"><mml:math id="mml-ieqn-133"><mml:msub><mml:mi>B</mml:mi><mml:mi>n</mml:mi></mml:msub></mml:math></inline-formula> and it return 0 otherwise. Similarly, <inline-formula id="ieqn-134"><mml:math id="mml-ieqn-134"><mml:mi>E</mml:mi><mml:mi>x</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mi>D</mml:mi><mml:mi>q</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:mi>M</mml:mi><mml:mi>a</mml:mi><mml:mi>s</mml:mi><mml:msub><mml:mi>h</mml:mi><mml:mi>m</mml:mi></mml:msub><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula> return 1 if data source <inline-formula id="ieqn-135"><mml:math id="mml-ieqn-135"><mml:msub><mml:mi>D</mml:mi><mml:mi>q</mml:mi></mml:msub></mml:math></inline-formula> is used in mashup <inline-formula id="ieqn-136"><mml:math id="mml-ieqn-136"><mml:mi>M</mml:mi><mml:mi>a</mml:mi><mml:mi>s</mml:mi><mml:msub><mml:mi>h</mml:mi><mml:mi>m</mml:mi></mml:msub></mml:math></inline-formula>, otherwise 0 is returned. The size of data extracted from data source <inline-formula id="ieqn-137"><mml:math id="mml-ieqn-137"><mml:msub><mml:mi>D</mml:mi><mml:mi>q</mml:mi></mml:msub></mml:math></inline-formula> is represented as <inline-formula id="ieqn-138"><mml:math id="mml-ieqn-138"><mml:mi>S</mml:mi><mml:mi>Z</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mi>D</mml:mi><mml:mi>q</mml:mi></mml:msub><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula>. <inline-formula id="ieqn-139"><mml:math id="mml-ieqn-139"><mml:mi>B</mml:mi><mml:mi>W</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mi>D</mml:mi><mml:mi>q</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>B</mml:mi><mml:mi>n</mml:mi></mml:msub><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula> returns the minimum bandwidth along the path from data source <inline-formula id="ieqn-140"><mml:math id="mml-ieqn-140"><mml:msub><mml:mi>D</mml:mi><mml:mi>q</mml:mi></mml:msub></mml:math></inline-formula> to broker <inline-formula id="ieqn-141"><mml:math id="mml-ieqn-141"><mml:msub><mml:mi>B</mml:mi><mml:mi>n</mml:mi></mml:msub></mml:math></inline-formula>. Accordingly, the optimization goal of the genetic algorithm becomes finding a solution that minimizes the delay. The optimization process needs to respect a constraint that restricts the number of copies of a given mashup to a certain number. This constraint is also stated in <xref ref-type="disp-formula" rid="eqn-2">Eq. (2)</xref>, and it is explained as follows. The default value that we use for the number of copies of a given mashup in the network is 1, and since the function <inline-formula id="ieqn-142"><mml:math id="mml-ieqn-142"><mml:mi>E</mml:mi><mml:mi>x</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>M</mml:mi><mml:mi>a</mml:mi><mml:mi>s</mml:mi><mml:msub><mml:mi>h</mml:mi><mml:mi>m</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>B</mml:mi><mml:mi>n</mml:mi></mml:msub><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula> returns 1 if mashup <inline-formula id="ieqn-143"><mml:math id="mml-ieqn-143"><mml:mi>M</mml:mi><mml:mi>a</mml:mi><mml:mi>s</mml:mi><mml:msub><mml:mi>h</mml:mi><mml:mi>m</mml:mi></mml:msub></mml:math></inline-formula> is hosted at broker <inline-formula id="ieqn-144"><mml:math id="mml-ieqn-144"><mml:msub><mml:mi>B</mml:mi><mml:mi>n</mml:mi></mml:msub></mml:math></inline-formula>, then the total summation of that value for a given mashup on all brokers should be 1. Although we deal with hosting a single copy of each mashup in the system, the constraint can be changed accordingly to allow the genetic algorithm to host more than one copy of a given mashup in the network.
<disp-formula id="eqn-2"><label>(2)</label><mml:math id="mml-eqn-2" display="block"><mml:mtable columnalign="right left" rowspacing="3pt" columnspacing="0em" displaystyle="true"><mml:mtr><mml:mtd /><mml:mtd><mml:mi>D</mml:mi><mml:mo>=</mml:mo><mml:munderover><mml:mo>&#x2211;</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>N</mml:mi></mml:mrow></mml:munderover><mml:munderover><mml:mo>&#x2211;</mml:mo><mml:mrow><mml:mi>m</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>M</mml:mi></mml:mrow></mml:munderover><mml:munderover><mml:mo>&#x2211;</mml:mo><mml:mrow><mml:mi>q</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>Q</mml:mi></mml:mrow></mml:munderover><mml:mrow><mml:mi>E</mml:mi><mml:mi>x</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>M</mml:mi><mml:mi>a</mml:mi><mml:mi>s</mml:mi><mml:msub><mml:mi>h</mml:mi><mml:mi>m</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>B</mml:mi><mml:mi>n</mml:mi></mml:msub><mml:mo stretchy="false">)</mml:mo><mml:mo>&#x00D7;</mml:mo><mml:mi>E</mml:mi><mml:mi>x</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mi>D</mml:mi><mml:mi>q</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:mi>M</mml:mi><mml:mi>a</mml:mi><mml:mi>s</mml:mi><mml:msub><mml:mi>h</mml:mi><mml:mi>m</mml:mi></mml:msub><mml:mo stretchy="false">)</mml:mo><mml:mo>&#x00D7;</mml:mo><mml:mfrac><mml:mrow><mml:mi>S</mml:mi><mml:mi>Z</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mi>D</mml:mi><mml:mi>q</mml:mi></mml:msub><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mrow><mml:mi>B</mml:mi><mml:mi>W</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>h</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mi>D</mml:mi><mml:mi>q</mml:mi></mml:msub><mml:mo stretchy="false">)</mml:mo><mml:mo>,</mml:mo><mml:mi>h</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mi>B</mml:mi><mml:mi>n</mml:mi></mml:msub><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mfrac></mml:mrow><mml:mo>,</mml:mo></mml:mtd></mml:mtr><mml:mtr><mml:mtd /><mml:mtd><mml:mi></mml:mi><mml:mspace width="1em" /><mml:mo>&#x220B;</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:munderover><mml:mo>&#x2211;</mml:mo><mml:mrow><mml:mi>n</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>N</mml:mi></mml:mrow></mml:munderover><mml:mi>E</mml:mi><mml:mi>x</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>M</mml:mi><mml:mi>a</mml:mi><mml:mi>s</mml:mi><mml:msub><mml:mi>h</mml:mi><mml:mi>m</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>B</mml:mi><mml:mi>n</mml:mi></mml:msub><mml:mo stretchy="false">)</mml:mo><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula></p>
<p>The genetic algorithm is shown in Algorithm 2, where it starts by creating an initial population of solutions such that each created solution is similar to the one in <xref ref-type="table" rid="table-2">Table 2</xref>. The default population size we use is 100, such that the initial population is initialized using a standard random initialization (line 1). Then, several parameters are set for the genetic algorithm (lines 2&#x2013;5). The genetic algorithm optimizes solutions by going through several iterations, and the number of iterations is set in line 2 (default is 1000). Also, the type of selection operator is set to tournament selection (line 3), where the default tournament size is 2. This selective pressure is considered moderate because two solutions are chosen at random, which leaves a chance for weaker solutions (with high delays) to be selected, and that helps to maintain the population diversity and prevents premature convergence. In addition, the crossover and mutation operators are set to single-point crossover and bit flip mutation, respectively, where the probability that each operator takes place is determined in lines (4, 5) such that the default probability for both operators is 0.8. What happens in each iteration is illustrated in lines (6&#x2013;13) such that &#x201C;T&#x201D; represents the number of iterations (line 6). In each iteration, tournament selection is used to select a parent list consisting of two parents (line 7), which will undergo a mating process. The mating process is performed using single-point crossover (line 8), where the probability of executing the crossover is previously set at line 4. The result of the crossover is two children, and a bit flip mutation is applied on the two children (line 9) with a probability set at line 5. Next, the delay (fitness value) resulting from each child is evaluated in lines 10 and 11. In line 12, the two children will replace two solutions with the worst fitness value in the population. This process is repeated until the number of iterations expires or the convergence condition is met. The default convergence condition we adopt is when the minimal achieved delay so far never changes for a consecutive 10% of the iterations. At the end of the optimization process, the best solution of the population is used as the result (line 14).</p>

<fig id="fig-14">
<graphic mimetype="image" mime-subtype="tif" xlink:href="CMC_83861-fig-14.tif"/>
</fig>
<p>Deciding which brokers should host a given mashup can be achieved using other ways. Here, we consider two approaches, namely, the greedy approach and the random approach.
<list list-type="bullet">
<list-item>
<p><bold>Greedy Approach:</bold> When the group head broker receives a request to host a given mashup, it starts a greedy search to find a broker to host the mashup. The group head sends a request to its direct neighbors, asking them for the cost of hosting the mashup. Each of them computes the cost based on <xref ref-type="disp-formula" rid="eqn-2">Eq. (2)</xref>, which we explained before. All the direct neighbors report back the cost to the group head. The group head picks the neighbor that resulted in the lowest cost and sends a request to that neighbor to repeat the same greedy process, starting from that neighbor to find a lower cost than the one currently achieved. The process continues until all of the direct neighbors fail to find a lower cost than the current cost.</p></list-item>
<list-item>
<p><bold>Random Approach:</bold> When a request to host a given mashup is received by the group head broker, then the broker randomly picks one of the brokers in its group to host the mashup.</p></list-item>
</list></p>
</sec>
<sec id="s3_6">
<label>3.6</label>
<title>Message Routing</title>
<p>In this Section, we review how message routing takes place, starting from requesting mashup execution by an end-user and ending with delivering results to the end-user.</p>
<p>As shown in <xref ref-type="fig" rid="fig-5">Fig. 5</xref>, when an end-user asks for the execution of a given mashup, the request is received by the broker (Group Head) in the structured part to which the end-user is directly connected. Now, if the group head sees that it did not receive this mashup before, then it starts the mashup hosting process described in <xref ref-type="sec" rid="s3_5">Section 3.5</xref> to decide which broker in its unstructured topology will be responsible for hosting/executing the mashup. However, if the mashup already exists in the system, then the group head broker checks its records to find the broker in its unstructured topology that is responsible for executing the mashup. Recall that an outcome of the process of forming groups was that the group head knows the paths that should be followed to reach the brokers in its unstructured group and vice versa. So, the group head forwards the request to the broker, which in turn executes the mashup and delivers its result back to the group head. Then, the group head emits the result to the end-user.</p>
<fig id="fig-5">
<label>Figure 5</label>
<caption>
<title>An illustration that shows how a user&#x2019;s request to execute a mashup is routed from the end-user, going through the structured part and then the unstructured part to reach a broker that hosts and executes the mashup.</title>
</caption>
<graphic mimetype="image" mime-subtype="tif" xlink:href="CMC_83861-fig-5.tif"/>
</fig>
</sec>
</sec>
<sec id="s4">
<label>4</label>
<title>System Security and Reliability</title>
<p>Security and reliability are key issues in networking systems. In this section, we discuss measures to enhance our system security and propose ways to improve its reliability against node failure and churn.</p>
<p>Security of mashup platforms is important [<xref ref-type="bibr" rid="ref-16">16</xref>]. One security measure to consider is to make sure brokers and data sources are really who they claim to be. This can be accomplished by entity authentication. One of the ways to realize that is by attestation [<xref ref-type="bibr" rid="ref-26">26</xref>], which can be implemented using, for example, Intel Software Guard Extensions [<xref ref-type="bibr" rid="ref-27">27</xref>]. Sometimes, the brokers might not be trusted, and they might inject malicious code into the results of mashup execution, which would harm the end-user&#x2019;s machine. Guarding against untrusted brokers can be applied using encryption techniques on mashup results, such as the order-preserving encryption algorithm [<xref ref-type="bibr" rid="ref-28">28</xref>].</p>
<p>Reliability is an important aspect in networking systems, which is needed to make sure the system is still functioning under node failure or node leaving the network (churn). Node failure and churn both cause degradation of service. Addressing the reliability issue in our system can be realized by the following measures. First, the way to detect node churn or failure is by brokers sending heartbeat messages to their neighbors to make sure they are still alive. Second, if the broker that fails or leaves the system belongs to the Chord ring (i.e., group head), then the ring connections can be restructured, which is explained in [<xref ref-type="bibr" rid="ref-25">25</xref>]. However, if the leaving/failing broker is one of the brokers in a given unstructured group, then the broker can assign one of its direct neighbors as a deputy. This way, the broker periodically synchronizes with its deputy to make sure the deputy is hosting the same mashups hosted by the broker. Consequently, when a deputy broker discovers the absence of its neighbor, it takes over and notifies the group head of this change. Third, allowing several copies of a given mashup to be hosted at different brokers would alleviate the effect of node failure and churn, which is explained as follows. The genetic approach is already capable of hosting a given mashup on several brokers instead of one. The only thing needed is to change the constraint mentioned in <xref ref-type="disp-formula" rid="eqn-2">Eq. (2)</xref> to reflect a higher number of copies of a given mashup in the network. This way, even when one of the brokers fails or leaves the network, there would be other brokers that host the same mashup, and they can satisfy the requests of end-users.</p>
</sec>
<sec id="s5">
<label>5</label>
<title>System Complexity</title>
<p>It is worthy to shed light on the complexity of our proposed system. Finding group heads in the system employs random walks, and the communication complexity for random walks is <inline-formula id="ieqn-159"><mml:math id="mml-ieqn-159"><mml:mi>O</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>N</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula> where N is the number of brokers in the network, but this is assuming that the random walker has an infinite TTL value. However, in our work, a random walk is constrained by a TTL value. Consequently, the communication complexity in our case becomes <inline-formula id="ieqn-160"><mml:math id="mml-ieqn-160"><mml:mi>O</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>T</mml:mi><mml:mi>T</mml:mi><mml:mi>L</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula>. This effort is only needed at the initialization of the architecture. After the choice of group heads is settled, the group heads join the Chord ring, and this join operation has a communication complexity of <inline-formula id="ieqn-161"><mml:math id="mml-ieqn-161"><mml:mi>O</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>l</mml:mi><mml:mi>o</mml:mi><mml:msup><mml:mi>g</mml:mi><mml:mn>2</mml:mn></mml:msup><mml:mtext>&#x00A0;</mml:mtext><mml:mi>R</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula> where R is the number of brokers in the Chord ring [<xref ref-type="bibr" rid="ref-25">25</xref>], and this operation is needed every time a broker joins the Chord ring.</p>
<p>After that, each group head would build its unstructured group using sequence number flooding or reverse path flooding. In sequence number flooding and reverse path flooding, each node is visited at most two times, one time in the forward path and another time to report back to the group head. So, each edge is visited at most twice, which is considered linear complexity. The number of messages initiated by sequence number flooding is less than that for reverse path flooding, which is due to not allowing a message with a previously received sequence number to be propagated further. Accordingly, both approaches have a linear communication complexity <inline-formula id="ieqn-162"><mml:math id="mml-ieqn-162"><mml:mi>O</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>J</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula> where J is the number of edges in the network. This is needed when the architecture is initialized and when a new broker joins the unstructured groups.</p>
<p>Deciding which broker hosts a given mashup is determined by the genetic algorithm, and its time complexity is affected by the number of generations, the size of the population, and the length of the chromosome. In our work, a new generation emerges after each iteration. Also, the length of the chromosome equals the number of brokers multiplied by the number of mashups. Therefore, the time complexity of the genetic approach is <inline-formula id="ieqn-163"><mml:math id="mml-ieqn-163"><mml:mi>O</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>T</mml:mi><mml:mo>&#x00D7;</mml:mo><mml:mi>P</mml:mi><mml:mo>&#x00D7;</mml:mo><mml:mi>N</mml:mi><mml:mo>&#x00D7;</mml:mo><mml:mi>M</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula> where T is the number of iterations, P is the population size, N is the number of brokers in the network, and M is the number of mashups. This cost is only needed when a new mashup is introduced to the system.</p>
<p>When a user requests the execution of a given mashup, then a lookup operation for the mashup is performed on the Chord ring and it takes <inline-formula id="ieqn-164"><mml:math id="mml-ieqn-164"><mml:mi>O</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>l</mml:mi><mml:mi>o</mml:mi><mml:mi>g</mml:mi><mml:mtext>&#x00A0;</mml:mtext><mml:mi>R</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula> communication complexity [<xref ref-type="bibr" rid="ref-25">25</xref>], then after reaching the group head, the request is forwarded to the broker responsible of hosting the mashup and this step requires at most H messages where H is the diameter of the unstructured group which the group head is responsible for; so this communication complexity is translated as <inline-formula id="ieqn-165"><mml:math id="mml-ieqn-165"><mml:mi>O</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>H</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula>. Then, the mashup is executed at that broker, and the result is returned via the reverse path to the end-user.</p>
</sec>
<sec id="s6">
<label>6</label>
<title>Results</title>
<p>We evaluate our proposed system via simulation on a Core i5 computer with a 2.4 GHz CPU speed and 8 GB RAM. Our experiments are performed on a network that we extracted from the Autonomous Systems &#x201C;as20000102&#x201D; network [<xref ref-type="bibr" rid="ref-29">29</xref>], which is part of the Stanford Network Analysis Project (SNAP) [<xref ref-type="bibr" rid="ref-30">30</xref>,<xref ref-type="bibr" rid="ref-31">31</xref>]. The Stanford Network Analysis Project (SNAP) provides several types of realistic networks, such as those used for social media. Since we are building an architecture that relies on peer-to-peer networks, we needed a network that represents peers on the Internet, which is exactly what the Autonomous Systems network represents. We employed the GraphStream dynamic graph library [<xref ref-type="bibr" rid="ref-32">32</xref>] to make sure that the extracted network does not contain any isolated subnetworks. The diameter of the extracted network is 8, and it contains 1050 nodes such that the number of end-users is 200, the number of data sources is 100, and the rest of the nodes are brokers. As much as possible, data sources and end-users are chosen among the nodes that have a degree of 1, which indicates that they reside on the edges of the network. To make sure our results are valid, we repeat each experiment 20 times and compute a 95% confidence interval, which we plot on our charts.</p>
<p>In the experiments, we use default values of a few parameters unless otherwise stated. The default value for the number of groups is 3, the crossover operator is single-point crossover with crossover probability 0.8, the mutation operator is bit flip mutation with mutation probability 0.8, the number of iterations is 1000, the population size is 100, the tournament size is 2, and the number of mashups is 150. Link delays and bandwidth values are distributed on network edges using a uniform distribution such that the average delay for network edges is 20 ms and the average bandwidth for network edges is 30 Kbps. The size of each data source is also drawn from a uniform distribution such that the average size of data sources is 70 Kb.</p>
<p>The way we build mashups is by randomly picking at most two data sources per mashup and then randomly selecting other operators to work on the data, such as filtering and sorting, such that the number of operators per mashup is 7. It is worth mentioning that the filter operators are simulated by assigning a filter percentage to each filter operator. We compare several combinations of approaches and architectures; these are listed as follows.
<list list-type="bullet">
<list-item>
<p>Sequence-GA: Our hybrid architecture, in which groups are formed using sequence number flooding, and mashup hosting is decided by using genetic algorithms.</p></list-item>
<list-item>
<p>Reverse-GA: Our hybrid architecture in which groups are formed using reverse path flooding, and mashup hosting is decided using genetic algorithms.</p></list-item>
<list-item>
<p>Sequence-Greedy: Our hybrid architecture, in which groups are formed using sequence number flooding, and mashup hosting is decided using the greedy approach.</p></list-item>
<list-item>
<p>Reverse-Greedy: Our hybrid architecture, in which groups are formed using reverse path flooding, and mashup hosting is decided using the greedy approach.</p></list-item>
<list-item>
<p>Sequence-Random: Our hybrid architecture in which groups are formed using sequence number flooding, and mashup hosting is decided using the random approach.</p></list-item>
<list-item>
<p>Reverse-Random: Our hybrid architecture in which groups are formed using reverse path flooding, and mashup hosting is decided using the random approach.</p></list-item>
<list-item>
<p>Structured: A completely structured architecture which follows Chord. It is identical to the structured part that we explained in this work.</p></list-item>
<list-item>
<p>Unstructured: A completely unstructured architecture where mashup hosting is decided by randomly selecting brokers to host mashups. Also, mashup search is performed using sequence number flooding.</p></list-item>
</list></p>
<p><xref ref-type="fig" rid="fig-6">Fig. 6</xref> shows the distribution of the different operators we used in mashups. We can see that the filter operator has the highest proportion since data filtering is potentially the most common task for end-users.</p>
<fig id="fig-6">
<label>Figure 6</label>
<caption>
<title>A chart showing the distribution of the different types of mashup operators used in the built mashups.</title>
</caption>
<graphic mimetype="image" mime-subtype="tif" xlink:href="CMC_83861-fig-6.tif"/>
</fig>
<p>The next experiment pertains to the part in which the genetic algorithm is employed to determine which brokers would host mashups in the unstructured network. So, in <xref ref-type="fig" rid="fig-7">Fig. 7</xref>, we test the effect of changing the number of iterations on the ability of the genetic algorithm to map mashups to brokers that result in minimal delays. The number of iterations pertains to only the genetic approach, so the only approaches we compare here are Sequence-GA and Reverse-GA. We can see that when the number of iterations increases, the genetic algorithm has a greater chance of finding better mashup hosting solutions, which yields minimal average delays in executing mashups. Also, we can see that the Reverse-GA generates solutions with lower delays than Sequence-GA. The reason behind that is that in Reverse-GA, when a broker receives a message with an identical sequence number coming from a different path, then it checks the recorded accumulative delay in the received message and compares it with the delay it previously recorded for reaching the group head. As a result, if the delay associated with the new message showed less delay than the delay recorded at the broker, then the broker records the new delay and reports that to the group head via the reverse path. In contrast, with Sequence-GA, the broker realizes that this message was previously received from a different path before, so, it simply ignores it and does not allow it to propagate further in the ongoing flooding process.</p>
<fig id="fig-7">
<label>Figure 7</label>
<caption>
<title>Average delay of executing mashups using the genetic algorithm while the number of iterations varies.</title>
</caption>
<graphic mimetype="image" mime-subtype="tif" xlink:href="CMC_83861-fig-7.tif"/>
</fig>
<p>In the next experiment, we study the outcome of changing the crossover probability on the effectiveness of the genetic algorithm to find a mashup hosting solution with less mashup execution delays. Also, here, the crossover percentage affects solely the genetic approach, so the only approaches in conversation are Sequence-GA and Reverse-GA. <xref ref-type="fig" rid="fig-8">Fig. 8</xref> implies that using a higher crossover probability generates mashup hosting solutions with less average delay of executing mashups, which is logical because a higher crossover probability means that when two solutions are chosen for mating, then there would be a higher chance for crossover to be performed and thereby generating children with different genes than their parents and hence generating different mashup hosting solutions. This adds to the variety of solutions in the solutions pool and accordingly helps the algorithm to move faster toward generating higher-quality mashup hosting solutions with lower delays. Again, the Reverse-GA allows for generating solutions with lower delay values due to the ability of reverse path flooding to find minimal paths between group heads and the brokers in their unstructured groups.</p>
<fig id="fig-8">
<label>Figure 8</label>
<caption>
<title>Average delay of executing mashups in the solutions found by the genetic algorithm while crossover probability varies.</title>
</caption>
<graphic mimetype="image" mime-subtype="tif" xlink:href="CMC_83861-fig-8.tif"/>
</fig>
<p>In the next two experiments, we do not include the completely structured and the completely unstructured approaches in the experiment, so that we focus the comparison between the different flavors of our hybrid approach. For the next experiment, we evaluate the average delay of mashup execution in the different approaches while the number of groups changes. So, we can notice in <xref ref-type="fig" rid="fig-9">Fig. 9</xref> that the increase in the number of groups results in generating solutions with lower delay. This is logical because when the number of groups increases, then the number of brokers existing in each group becomes smaller. This way, the search space on which Sequence-GA and Reverse-GA need to explore becomes smaller, and therefore, they would be able to find better solutions with fewer iterations. For Sequence-Greedy, Reverse-Greedy, Sequence-Random, and Reverse-Random, there is no clear relationship between the delay and the increase in the number of groups. Nevertheless, increasing the number of groups would allow those approaches to operate in different parts of the topology, which may sometimes result in lower delays. Further, we can see that all the approaches that employ reverse path flooding outperform their counterpart approaches that utilize sequence number flooding. This is reasonable since the flooding process in Sequence-GA can be cut earlier because of receiving messages with identical sequence numbers, whereas Reverse-GA allows for an extended flooding process that leads to finding paths with minimal delays between group heads and the brokers in their unstructured groups. Furthermore, we notice that Reverse-GA and Sequence-GA are superior to Reverse-Greedy and Sequence-Greedy approaches. This is because Reverse-GA and Sequence-GA rely on genetic algorithms in deciding where to host mashups, and this is a more effective way than depending on the greedy approach. The greedy approach guides the search toward the direction of the current best solution, and that may falsely pull the search away from other directions where the brokers with the lowest delays of hosting mashups exist. However, Sequence-Greedy and Reverse-Greedy approaches are still better than Sequence-Random and Reverse-Random approaches, which is due to the blind mashup to broker placement conducted by the random approach, resulting in higher delays.</p>
<fig id="fig-9">
<label>Figure 9</label>
<caption>
<title>Average delay of executing mashups in the different approaches while we vary the number of groups in the experiment.</title>
</caption>
<graphic mimetype="image" mime-subtype="tif" xlink:href="CMC_83861-fig-9.tif"/>
</fig>
<p>Next, we evaluate the computer execution time per group needed to execute the different approaches. We notice in <xref ref-type="fig" rid="fig-10">Fig. 10</xref> that having more groups indicates that the number of brokers within a single group becomes small, and consequently, less time is needed to form a single group. In addition, all the approaches that employ reverse path flooding need less execution time to form groups. This is rational because the sequence number flooding works such that if a given broker receives a message with the same sequence number as a previously received message, then it won&#x2019;t allow the message to continue its way in the flooding process. Another observation is that Sequence-Random and Reverse-Random approaches execute fast, which is a direct consequence of the random placement of mashups on broker nodes, which takes less time to conclude. However, Sequence-Greedy and Reverse-Greedy require more time than the random approach due to the greedy approach advancing the search process to look for brokers with less delay to host mashups. In contrast, Sequence-GA and Reverse-GA both demand more execution time, and this is due to the nature of the evolutionary approach that depends on iterations for improvement. Having said that, the high execution time of Sequence-GA and Reverse-GA is tolerable because each of them is only needed during the period of deciding where to host mashups, while subsequent requests to execute those mashups enjoy the efficient paths found.</p>
<fig id="fig-10">
<label>Figure 10</label>
<caption>
<title>Average computer execution time needed to form a single group in the unstructured part when the number of groups changes.</title>
</caption>
<graphic mimetype="image" mime-subtype="tif" xlink:href="CMC_83861-fig-10.tif"/>
</fig>
<p>In <xref ref-type="fig" rid="fig-11">Figs. 11</xref> and <xref ref-type="fig" rid="fig-12">12</xref>, we aim to compare the different architectures, namely, completely structured, completely unstructured, and the two flavors of our hybrid architecture (Reverse-GA and Sequence-GA). <xref ref-type="fig" rid="fig-11">Fig. 11</xref> depicts the delay of executing mashups in the different architectures. On the one hand, the completely unstructured approach is the worst, which is intuitive because it randomly hosts mashups on brokers without intentions to minimize delay. On the other hand, the completely structured approach follows the Chord structure, which is known for fast lookup operations, which is better than the unstructured approach. However, the strict structure of Chord does not leave any room for optimizing delays. In contrast, Reverse-GA and Sequence-GA rely partially on the Chord architecture in the structured part, and then they make use of the genetic approach in the unstructured part, which looks for effective minimization of delays. Hence, they beat the completely structured approach. It is worth mentioning that there is no error bar for the structured approach because it follows a very strict structured topology, which always guides the mashup hosting decisions in the same direction, and that leads to the same behavior and the same results in each run.</p>
<fig id="fig-11">
<label>Figure 11</label>
<caption>
<title>Average delay of executing mashups for the completely structured, completely unstructured, and the two flavors of our approach.</title>
</caption>
<graphic mimetype="image" mime-subtype="tif" xlink:href="CMC_83861-fig-11.tif"/>
</fig><fig id="fig-12">
<label>Figure 12</label>
<caption>
<title>Average computer execution time for the completely structured, completely unstructured, and the two flavors of our approach.</title>
</caption>
<graphic mimetype="image" mime-subtype="tif" xlink:href="CMC_83861-fig-12.tif"/>
</fig>
<p><xref ref-type="fig" rid="fig-12">Fig. 12</xref> shows the computer execution time for the different architectures. The completely structured outperforms the rest of the architectures due to the strict structured approach that behaves according to the Chord ring, and it is known to be fast at the expense of not generating the minimal delays (as previously shown in <xref ref-type="fig" rid="fig-11">Fig. 11</xref>). The completely unstructured approach, Reverse-GA, and Sequence-GA generate comparable computer execution time. This is explainable because the high execution time of the unstructured approach is due to using the flooding approach for performing lookups for mashups, which is a time-consuming process. Also, for Sequence-GA and Reverse-GA, they both use flooding in addition to using the genetic algorithm, which keeps improving delay values by repeated iterations, and this results in a high computer execution time. However, we mentioned before that the high execution time needed by Reverse-GA and Sequence-GA is only needed during the time of determining the brokers that will host mashups, and it won&#x2019;t affect executing mashups after that.</p>
<p>Current workflow automation and orchestration platforms appearing in industry, such as PipesDigital [<xref ref-type="bibr" rid="ref-4">4</xref>] and IFTTT [<xref ref-type="bibr" rid="ref-5">5</xref>], or the ones appearing in research, such as the work in [<xref ref-type="bibr" rid="ref-6">6</xref>], are based on centralized architecture. Therefore, adopting a distributed architecture like the one we propose would enhance their scalability. In addition, we showed in this section that our routing approach, which is achieved in a hybrid architecture, generates lower mashup execution delays than pure structured and pure unstructured approaches. Therefore, the current platforms can employ this hybrid approach to minimize workflow execution delay.</p>
</sec>
<sec id="s7">
<label>7</label>
<title>Conclusion</title>
<p>Decentralized architectures support scalable information-centric platforms. In this paper, we proposed a hybrid approach to design a decentralized mashup platform relying on both structured and unstructured peer-to-peer networks, which is an answer to the research question <bold>RQ1</bold>. The structured part utilized Chord to build a virtual ring topology. We employed sequence number flooding and reverse path flooding to build groups of brokers that are connected via an unstructured peer-to-peer overlay. Consequently, relying on both structured and unstructured topologies on one hand and employing reverse path flooding in forming groups on the other hand allowed for efficient message routing, which is an answer for the research question <bold>RQ2</bold>. Further, we made use of genetic algorithms to decide which brokers would host and execute mashups with minimal execution delays. Our results are promising, and they show that the flavor of our scheme that uses reverse path flooding generates less mashup execution delays than other flavors that utilize sequence number flooding, random mashup placement, and greedy mashup placement. Our approach also outperformed the pure structured and unstructured approaches. We discussed how our system can be protected from node failure and churn. We also pointed out security measures that can be followed to enhance our system. However, these issues are not discussed in detail, and therefore, they are considered a limitation of this work, and we aim to investigate them as part of future work. Another part of the future work is to evaluate other optimization techniques, such as particle swarm optimization and ant colony optimization, in finding mashup hosting solutions in the unstructured part of our proposed architecture.</p>
</sec>
</body>
<back>
<ack>
<p>Not applicable.</p>
</ack>
<sec>
<title>Funding Statement</title>
<p>This study has no funding support.</p>
</sec>
<sec>
<title>Author Contributions</title>
<p>The authors confirm contribution to the paper as follows: conceptualization, Osama Al-Haj Hassan; methodology, Osama Al-Haj Hassan and Ammar Odeh; validation, Ammar Odeh and Abdullah Aref; investigation, Osama Al-Haj Hassan and Ammar Odeh; data curation, Abdullah Aref and Ghassan Samara; writing&#x2014;original draft preparation, Osama Al-Haj Hassan, Ammar Odeh, Abdullah Aref and Ghassan Samara; writing&#x2014;review and editing, Osama Al-Haj Hassan and Ghassan Samara; visualization, Abdullah Aref and Ghassan Samara; supervision, Osama Al-Haj Hassan. All authors reviewed and approved the final version of the manuscript.</p>
</sec>
<sec sec-type="data-availability">
<title>Availability of Data and Materials</title>
<p>Data available on request from the Corresponding Author, [Osama Al-Haj Hassan], upon request.</p>
</sec>
<sec>
<title>Ethics Approval</title>
<p>Not applicable.</p>
</sec>
<sec sec-type="COI-statement">
<title>Conflicts of Interest</title>
<p>The authors declare no conflicts of interest.</p>
</sec>
<ref-list content-type="authoryear">
<title>References</title>
<ref id="ref-1"><label>[1]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>Huang</surname> <given-names>A</given-names></string-name>, <string-name><surname>Huang</surname> <given-names>N</given-names></string-name>, <string-name><surname>Hong</surname> <given-names>Y</given-names></string-name></person-group>. <article-title>Workflow automation in open-source software development: accelerating innovation through mechanization and orchestration</article-title>. <source>Inf Syst Res</source>. <year>2026</year>.</mixed-citation></ref>
<ref id="ref-2"><label>[2]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>Wu</surname> <given-names>Q</given-names></string-name>, <string-name><surname>Zhou</surname> <given-names>Q</given-names></string-name>, <string-name><surname>Sun</surname> <given-names>R</given-names></string-name>, <string-name><surname>Zhou</surname> <given-names>M</given-names></string-name>, <string-name><surname>Feng</surname> <given-names>J</given-names></string-name>, <string-name><surname>Guo</surname> <given-names>T</given-names></string-name>, <etal>et al</etal></person-group>. <article-title>Blending serverful and serverless cloud resources for cost-effective workflow execution</article-title>. <source>IEEE Trans Autom Sci Eng</source>. <year>2026</year>;<volume>23</volume>:<fpage>9925</fpage>&#x2013;<lpage>36</lpage>.</mixed-citation></ref>
<ref id="ref-3"><label>[3]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>Alam</surname> <given-names>KA</given-names></string-name>, <string-name><surname>Haroon</surname> <given-names>M</given-names></string-name>, <string-name><surname>Ain</surname> <given-names>Q</given-names></string-name>, <string-name><surname>Inayat</surname> <given-names>I</given-names></string-name></person-group>. <article-title>A data-driven API recommendation approach for service mashup composition</article-title>. <source>Int J Syst Assur Eng Manag</source>. <year>2025</year>:<fpage>1</fpage>&#x2013;<lpage>22</lpage>.</mixed-citation></ref>
<ref id="ref-4"><label>[4]</label><mixed-citation publication-type="other"><person-group person-group-type="author"><collab>Pipes Digital</collab></person-group>. [cited 2026 May 18]. Available from: <ext-link ext-link-type="uri" xlink:href="https://www.pipes.digital/">https://www.pipes.digital/</ext-link>.</mixed-citation></ref>
<ref id="ref-5"><label>[5]</label><mixed-citation publication-type="other"><person-group person-group-type="author"><collab>IFTTT</collab></person-group>. [cited 2026 May 18]. Available from: <ext-link ext-link-type="uri" xlink:href="https://ifttt.com/">https://ifttt.com/</ext-link>.</mixed-citation></ref>
<ref id="ref-6"><label>[6]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>Trinh</surname> <given-names>TD</given-names></string-name>, <string-name><surname>Wetz</surname> <given-names>P</given-names></string-name>, <string-name><surname>Do</surname> <given-names>BL</given-names></string-name>, <string-name><surname>Kiesling</surname> <given-names>E</given-names></string-name>, <string-name><surname>Tjoa</surname> <given-names>AM</given-names></string-name></person-group>. <article-title>Distributed mashups: a collaborative approach to data integration</article-title>. <source>Int J Web Inform Syst</source>. <year>2015</year>;<volume>11</volume>(<issue>3</issue>):<fpage>370</fpage>&#x2013;<lpage>96</lpage>. doi:<pub-id pub-id-type="doi">10.1108/IJWIS-04-2015-0018</pub-id>.</mixed-citation></ref>
<ref id="ref-7"><label>[7]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>Xu</surname> <given-names>Y</given-names></string-name>, <string-name><surname>Zhang</surname> <given-names>S</given-names></string-name>, <string-name><surname>Gao</surname> <given-names>H</given-names></string-name>, <string-name><surname>Yin</surname> <given-names>Y</given-names></string-name>, <string-name><surname>Hu</surname> <given-names>J</given-names></string-name>, <string-name><surname>Li</surname> <given-names>R</given-names></string-name></person-group>. <article-title>Explainable service recommendation for interactive mashup development counteracting biases</article-title>. <source>Inf Sci</source>. <year>2025</year>;<volume>708</volume>:<fpage>122049</fpage>. doi:<pub-id pub-id-type="doi">10.1016/j.ins.2025.122049</pub-id>.</mixed-citation></ref>
<ref id="ref-8"><label>[8]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>Sun</surname> <given-names>M</given-names></string-name>, <string-name><surname>Xu</surname> <given-names>Y</given-names></string-name>, <string-name><surname>Tan</surname> <given-names>Z</given-names></string-name>, <string-name><surname>You</surname> <given-names>D</given-names></string-name>, <string-name><surname>Chen</surname> <given-names>Z</given-names></string-name></person-group>. <article-title>Multi-level graph contrastive learning for cold-start recommendation in mashup development</article-title>. <source>Inf Sci</source>. <year>2025</year>;<volume>717</volume>:<fpage>122319</fpage>. doi:<pub-id pub-id-type="doi">10.1016/j.ins.2025.122319</pub-id>.</mixed-citation></ref>
<ref id="ref-9"><label>[9]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>Deng</surname> <given-names>S</given-names></string-name>, <string-name><surname>Wu</surname> <given-names>H</given-names></string-name>, <string-name><surname>Taheri</surname> <given-names>J</given-names></string-name>, <string-name><surname>Zomaya</surname> <given-names>AY</given-names></string-name>, <string-name><surname>Wu</surname> <given-names>Z</given-names></string-name></person-group>. <article-title>Cost performance driven service mashup: a developer perspective</article-title>. <source>IEEE Trans Parall Distrib Syst</source>. <year>2015</year>;<volume>27</volume>(<issue>8</issue>):<fpage>2234</fpage>&#x2013;<lpage>47</lpage>. doi:<pub-id pub-id-type="doi">10.1109/TPDS.2015.2482980</pub-id>.</mixed-citation></ref>
<ref id="ref-10"><label>[10]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>Chen</surname> <given-names>Z</given-names></string-name>, <string-name><surname>Kim</surname> <given-names>M</given-names></string-name>, <string-name><surname>Cui</surname> <given-names>Y</given-names></string-name></person-group>. <article-title>SaaS application mashup based on High Speed Message Processing</article-title>. <source>KSII Trans Internet Inform Syst</source>. <year>2022</year>;<volume>16</volume>(<issue>5</issue>):<fpage>1446</fpage>&#x2013;<lpage>65</lpage>. doi:<pub-id pub-id-type="doi">10.3837/tiis.2022.05.003</pub-id>.</mixed-citation></ref>
<ref id="ref-11"><label>[11]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>Sehar</surname> <given-names>U</given-names></string-name>, <string-name><surname>Ghazal</surname> <given-names>I</given-names></string-name>, <string-name><surname>Mansoor</surname> <given-names>H</given-names></string-name>, <string-name><surname>Saba</surname> <given-names>S</given-names></string-name></person-group>. <article-title>A comprehensive literature review on approaches, techniques &#x0026; challenges of mashup development</article-title>. <source>Int J Scient Eng Res</source>. <year>2022</year>;<volume>13</volume>(<issue>3</issue>):<fpage>383</fpage>&#x2013;<lpage>397</lpage>.</mixed-citation></ref>
<ref id="ref-12"><label>[12]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><surname>Shiddiqi</surname> <given-names>AM</given-names></string-name>, <string-name><surname>Prasamya</surname> <given-names>S</given-names></string-name></person-group>. <article-title>Shortest path determination using google mashups technology</article-title>. In: <conf-name>International Conference on Informatics for Development</conf-name> (ICID 2011); 2011 Nov 26; Yogyakarta, Indonesia.</mixed-citation></ref>
<ref id="ref-13"><label>[13]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>Yan</surname> <given-names>C</given-names></string-name>, <string-name><surname>Zhong</surname> <given-names>W</given-names></string-name>, <string-name><surname>Zhai</surname> <given-names>D</given-names></string-name>, <string-name><surname>Khan</surname> <given-names>AA</given-names></string-name>, <string-name><surname>Gong</surname> <given-names>W</given-names></string-name>, <string-name><surname>Xu</surname> <given-names>Y</given-names></string-name>, <etal>et al</etal></person-group>. <article-title>Popularity bias in correlation graph-based API recommendation for mashup creation</article-title>. <source>ACM Trans Intell Syst Technol</source>. <year>2024</year>;<volume>16</volume>(<issue>1</issue>):<fpage>1</fpage>&#x2013;<lpage>18</lpage>.</mixed-citation></ref>
<ref id="ref-14"><label>[14]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>Cao</surname> <given-names>B</given-names></string-name>, <string-name><surname>Peng</surname> <given-names>M</given-names></string-name>, <string-name><surname>Xie</surname> <given-names>Z</given-names></string-name>, <string-name><surname>Liu</surname> <given-names>J</given-names></string-name>, <string-name><surname>Ye</surname> <given-names>H</given-names></string-name>, <string-name><surname>Li</surname> <given-names>B</given-names></string-name>, <etal>et al</etal></person-group>. <article-title>PRKG: pre-training representation and knowledge-graph-enhanced Web service recommendation for Mashup creation</article-title>. <source>IEEE Trans Netw Serv Manag</source>. <year>2024</year>;<volume>21</volume>(<issue>2</issue>):<fpage>1737</fpage>&#x2013;<lpage>49</lpage>.</mixed-citation></ref>
<ref id="ref-15"><label>[15]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>Alhosaini</surname> <given-names>H</given-names></string-name>, <string-name><surname>Alharbi</surname> <given-names>S</given-names></string-name>, <string-name><surname>Wang</surname> <given-names>X</given-names></string-name>, <string-name><surname>Xu</surname> <given-names>G</given-names></string-name></person-group>. <article-title>API recommendation for mashup creation: a comprehensive survey</article-title>. <source>Comput J</source>. <year>2024</year>;<volume>67</volume>(<issue>5</issue>):<fpage>1920</fpage>&#x2013;<lpage>40</lpage>. doi:<pub-id pub-id-type="doi">10.1093/comjnl/bxad112</pub-id>.</mixed-citation></ref>
<ref id="ref-16"><label>[16]</label><mixed-citation publication-type="book"><person-group person-group-type="author"><string-name><surname>Yoshihama</surname> <given-names>S</given-names></string-name></person-group>. <chapter-title>Security for mashups</chapter-title>. In: <source>Encyclopedia of cryptography, security and privacy</source>. <publisher-name>Cham, Switzerland: Springer</publisher-name>; <year>2025</year>. p. <fpage>2291</fpage>&#x2013;<lpage>3</lpage>.</mixed-citation></ref>
<ref id="ref-17"><label>[17]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>Bamhdi</surname> <given-names>A</given-names></string-name></person-group>. <article-title>Evaluation of end-user web mashup development</article-title>. <source>Comput Inform</source>. <year>2024</year>;<volume>4</volume>(<issue>2</issue>):<fpage>112</fpage>&#x2013;<lpage>29</lpage>.</mixed-citation></ref>
<ref id="ref-18"><label>[18]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>Verma</surname> <given-names>A</given-names></string-name>, <string-name><surname>Thakur</surname> <given-names>S</given-names></string-name>, <string-name><surname>Kumar</surname> <given-names>A</given-names></string-name>, <string-name><surname>Prasad Mahato</surname> <given-names>D</given-names></string-name></person-group>. <article-title>Routing algorithm for sparse unstructured P2P networks using honey bee behavior</article-title>. <source>Int J Commun Syst</source>. <year>2025</year>;<volume>38</volume>(<issue>2</issue>):<fpage>e5978</fpage>. doi:<pub-id pub-id-type="doi">10.1002/dac.5978</pub-id>.</mixed-citation></ref>
<ref id="ref-19"><label>[19]</label><mixed-citation publication-type="other"><person-group person-group-type="author"><string-name><surname>Cruciani</surname> <given-names>A</given-names></string-name></person-group>. <article-title>Maintaining a bounded degree expander in dynamic peer-to-peer networks</article-title>. <comment>arXiv:250617757. 2025</comment>.</mixed-citation></ref>
<ref id="ref-20"><label>[20]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><surname>Legheraba</surname> <given-names>MA</given-names></string-name>, <string-name><surname>Potop-Butucaru</surname> <given-names>M</given-names></string-name>, <string-name><surname>Tixeuil</surname> <given-names>S</given-names></string-name>, <string-name><surname>Fdida</surname> <given-names>S</given-names></string-name></person-group>. <article-title>Emergent peer-to-peer multi-hub topology</article-title>. In: <conf-name>2024 22nd International Symposium on Network Computing and Applications (NCA)</conf-name>. <publisher-loc>Piscataway, NJ, USA</publisher-loc>: <publisher-name>IEEE</publisher-name>; <year>2024</year>. p. <fpage>219</fpage>&#x2013;<lpage>26</lpage>.</mixed-citation></ref>
<ref id="ref-21"><label>[21]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><surname>Lim</surname> <given-names>A</given-names></string-name>, <string-name><surname>Jang</surname> <given-names>S</given-names></string-name>, <string-name><surname>Lee</surname> <given-names>J</given-names></string-name></person-group>. <article-title>P2P-Fed: a decentralized federated learning platform on structured peer-to-peer systems</article-title>. In: <conf-name>2025 IEEE 25th International Symposium on Cluster, Cloud and Internet Computing (CCGrid)</conf-name>. <publisher-loc>Piscataway, NJ, USA</publisher-loc>: <publisher-name>IEEE</publisher-name>; <year>2025</year>. p. <fpage>124</fpage>&#x2013;<lpage>33</lpage>.</mixed-citation></ref>
<ref id="ref-22"><label>[22]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>Roy</surname> <given-names>I</given-names></string-name>, <string-name><surname>Mitra</surname> <given-names>R</given-names></string-name>, <string-name><surname>Rahimi</surname> <given-names>N</given-names></string-name>, <string-name><surname>Gupta</surname> <given-names>B</given-names></string-name></person-group>. <article-title>Efficient non-DHT-based RC-based architecture for fog computing in healthcare 4.0</article-title>. <source>IoT</source>. <year>2023</year>;<volume>4</volume>(<issue>2</issue>):<fpage>131</fpage>&#x2013;<lpage>49</lpage>.</mixed-citation></ref>
<ref id="ref-23"><label>[23]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><surname>Ching</surname> <given-names>CW</given-names></string-name>, <string-name><surname>Chen</surname> <given-names>X</given-names></string-name>, <string-name><surname>Kim</surname> <given-names>T</given-names></string-name>, <string-name><surname>Ji</surname> <given-names>B</given-names></string-name>, <string-name><surname>Wang</surname> <given-names>Q</given-names></string-name>, <string-name><surname>Da Silva</surname> <given-names>D</given-names></string-name>, <etal>et al</etal></person-group>. <article-title>Totoro: a scalable federated learning engine for the edge</article-title>. In: <conf-name>Proceedings of the Nineteenth European Conference on Computer Systems</conf-name>. <publisher-loc>New York, NY, USA</publisher-loc>: <publisher-name>ACM</publisher-name>; <year>2024</year>. p. <fpage>182</fpage>&#x2013;<lpage>99</lpage>.</mixed-citation></ref>
<ref id="ref-24"><label>[24]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>Samimi</surname> <given-names>A</given-names></string-name>, <string-name><surname>Goudarzi</surname> <given-names>M</given-names></string-name></person-group>. <article-title>A novel strategy for optimal data replication in peer-to-peer networks based on a multi-objective optimisation&#x2013;NSGA-II algorithm</article-title>. <source>IET Netw</source>. <year>2025</year>;<volume>14</volume>(<issue>1</issue>):<fpage>e12141</fpage>. doi:<pub-id pub-id-type="doi">10.1049/ntw2.12141</pub-id>.</mixed-citation></ref>
<ref id="ref-25"><label>[25]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>Stoica</surname> <given-names>I</given-names></string-name>, <string-name><surname>Morris</surname> <given-names>R</given-names></string-name>, <string-name><surname>Karger</surname> <given-names>D</given-names></string-name>, <string-name><surname>Kaashoek</surname> <given-names>MF</given-names></string-name>, <string-name><surname>Balakrishnan</surname> <given-names>H</given-names></string-name></person-group>. <article-title>Chord: a scalable peer-to-peer lookup service for internet applications</article-title>. <source>ACM SIGCOMM Comput Commun Rev</source>. <year>2001</year>;<volume>31</volume>(<issue>4</issue>):<fpage>149</fpage>&#x2013;<lpage>60</lpage>.</mixed-citation></ref>
<ref id="ref-26"><label>[26]</label><mixed-citation publication-type="other"><person-group person-group-type="author"><string-name><surname>M&#x00E9;n&#x00E9;trey</surname> <given-names>J</given-names></string-name>, <string-name><surname>Gr&#x00FC;ter</surname> <given-names>A</given-names></string-name>, <string-name><surname>Yuhala</surname> <given-names>P</given-names></string-name>, <string-name><surname>Oeftiger</surname> <given-names>J</given-names></string-name>, <string-name><surname>Felber</surname> <given-names>P</given-names></string-name>, <string-name><surname>Pasin</surname> <given-names>M</given-names></string-name>, <etal>et al</etal></person-group>. <article-title>A holistic approach for trustworthy distributed systems with WebAssembly and TEEs</article-title>. <comment>arXiv:231200702. 2023</comment>.</mixed-citation></ref>
<ref id="ref-27"><label>[27]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>Wang</surname> <given-names>Z</given-names></string-name>, <string-name><surname>Zhou</surname> <given-names>Y</given-names></string-name></person-group>. <article-title>Analysis and evaluation of intel software guard extension-based trusted execution environment usage in edge intelligence and internet of things scenarios</article-title>. <source>Future Internet</source>. <year>2025</year>;<volume>17</volume>(<issue>1</issue>):<fpage>32</fpage>.</mixed-citation></ref>
<ref id="ref-28"><label>[28]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>Pei</surname> <given-names>J</given-names></string-name>, <string-name><surname>Shi</surname> <given-names>Y</given-names></string-name>, <string-name><surname>Feng</surname> <given-names>Q</given-names></string-name>, <string-name><surname>Shi</surname> <given-names>R</given-names></string-name>, <string-name><surname>Lan</surname> <given-names>L</given-names></string-name>, <string-name><surname>Yu</surname> <given-names>S</given-names></string-name>, <etal>et al</etal></person-group>. <article-title>An efficient confidentiality protection solution for pub/sub system</article-title>. <source>Cybersecurity</source>. <year>2023</year>;<volume>6</volume>(<issue>1</issue>):<fpage>34</fpage>.</mixed-citation></ref>
<ref id="ref-29"><label>[29]</label><mixed-citation publication-type="other"><person-group person-group-type="author"><string-name><surname>Leskovec</surname> <given-names>J</given-names></string-name></person-group>. <article-title>Autonomous systems dataset</article-title>. [cited 2026 May 18]. Available from: <ext-link ext-link-type="uri" xlink:href="https://snap.stanford.edu/data/as-733.html">https://snap.stanford.edu/data/as-733.html</ext-link>.</mixed-citation></ref>
<ref id="ref-30"><label>[30]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>Leskovec</surname> <given-names>J</given-names></string-name>, <string-name><surname>Sosi&#x010D;</surname> <given-names>R</given-names></string-name></person-group>. <article-title>SNAP: a general-purpose network analysis and graph-mining library</article-title>. <source>ACM Trans Intell Syst Technol (TIST)</source>. <year>2016</year>;<volume>8</volume>(<issue>1</issue>):<fpage>1</fpage>&#x2013;<lpage>20</lpage>.</mixed-citation></ref>
<ref id="ref-31"><label>[31]</label><mixed-citation publication-type="other"><person-group person-group-type="author"><string-name><surname>Leskovec</surname> <given-names>J</given-names></string-name>, <string-name><surname>Krevl</surname> <given-names>A</given-names></string-name></person-group>. <article-title>SNAP datasets: stanford large network dataset collection</article-title>. <year>2014 [cited 2026 May 18]</year>. Available from: <ext-link ext-link-type="uri" xlink:href="http://snap.stanford.edu/data">http://snap.stanford.edu/data</ext-link>.</mixed-citation></ref>
<ref id="ref-32"><label>[32]</label><mixed-citation publication-type="other"><collab>University of Le Havre</collab>. <article-title>GraphStream: A dynamic graph library</article-title>. Available from: <ext-link ext-link-type="uri" xlink:href="https://graphstream-project.org/">https://graphstream-project.org/</ext-link>. [Accessed: 2026 May 18].</mixed-citation></ref>
</ref-list>
</back></article>