{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,4,18]],"date-time":"2026-04-18T03:21:04Z","timestamp":1776482464141,"version":"3.51.2"},"reference-count":33,"publisher":"MDPI AG","issue":"12","license":[{"start":{"date-parts":[[2020,12,2]],"date-time":"2020-12-02T00:00:00Z","timestamp":1606867200000},"content-version":"vor","delay-in-days":0,"URL":"https:\/\/creativecommons.org\/licenses\/by\/4.0\/"}],"content-domain":{"domain":[],"crossmark-restriction":false},"short-container-title":["Information"],"abstract":"<jats:p>The Internet of Things (IoT) has created new and challenging opportunities for data analytics. The IoT represents an infinitive source of massive and heterogeneous data, whose real-time processing is an increasingly important issue. IoT applications usually consist of multiple technological layers connecting \u2018things\u2019 to a remote cloud core. These layers are generally grouped into two macro levels: the edge level (consisting of the devices at the boundary of the network near the devices that produce the data) and the core level (consisting of the remote cloud components of the application). The aim of this work is to propose an adaptive microservices architecture for IoT platforms which provides real-time stream processing functionalities that can seamlessly both at the edge-level and cloud-level. More in detail, we introduce the notion of \u03bc-service, a stream processing unit that can be indifferently allocated on the edge and core level, and a Reference Architecture that provides all necessary services (namely Proxy, Adapter and Data Processing \u03bc-services) for dealing with real-time stream processing in a very flexible way. Furthermore, in order to abstract away from the underlying stream processing engine and IoT layers (edge\/cloud), we propose: (1) a service definition language consisting of a configuration language based on JSON objects (interoperability), (2) a rule-based query language with basic filter operations that can be compiled to most of the existing stream processing engines (portability), and (3) a combinator language to build pipelines of filter definitions (compositionality). Although our proposal has been designed to extend the Senseioty platform, a proprietary IoT platform developed by FlairBit, it could be adapted to every platform based on similar technologies. As a proof of concept, we provide details of a preliminary prototype based on the Java OSGi framework.<\/jats:p>","DOI":"10.3390\/info11120565","type":"journal-article","created":{"date-parts":[[2020,12,2]],"date-time":"2020-12-02T07:49:54Z","timestamp":1606895394000},"page":"565","update-policy":"https:\/\/doi.org\/10.3390\/mdpi_crossmark_policy","source":"Crossref","is-referenced-by-count":10,"title":["A Flexible IoT Stream Processing Architecture Based on Microservices"],"prefix":"10.3390","volume":"11","author":[{"given":"Luca","family":"Bixio","sequence":"first","affiliation":[{"name":"FlairBit S.r.l., 16121 Genova GE, Italy"}],"role":[{"role":"author","vocabulary":"crossref"}]},{"given":"Giorgio","family":"Delzanno","sequence":"additional","affiliation":[{"name":"Department of Computer Science, Bioengineering, Robotics and Systems Engineering, University of Genova, 16126 Genova GE, Italy"}],"role":[{"role":"author","vocabulary":"crossref"}]},{"ORCID":"https:\/\/orcid.org\/0000-0002-6020-4035","authenticated-orcid":false,"given":"Stefano","family":"Rebora","sequence":"additional","affiliation":[{"name":"FlairBit S.r.l., 16121 Genova GE, Italy"}],"role":[{"role":"author","vocabulary":"crossref"}]},{"given":"Matteo","family":"Rulli","sequence":"additional","affiliation":[{"name":"FlairBit S.r.l., 16121 Genova GE, Italy"}],"role":[{"role":"author","vocabulary":"crossref"}]}],"member":"1968","published-online":{"date-parts":[[2020,12,2]]},"reference":[{"key":"ref_1","unstructured":"Fowler, M., and Lewis, J. (2020, November 30). Microservices\u2014A Definition of This New Architectural Term. Available online: https:\/\/martinfowler.com\/articles\/microservices.html."},{"key":"ref_2","unstructured":"Abbott, M., and Fisher, M. (2015). The Art of Scalability: Scalable Web Architecture, Processes, and Organizations for the Modern Enterprise, Addison-Wesley Professional."},{"key":"ref_3","unstructured":"Robert, M. (2003). Agile Software Development: Principles Patterns and Practices, Pearson."},{"key":"ref_4","unstructured":"Richardson, C. (2020, November 30). Building Microservices: Using an API Gateway. Available online: https:\/\/www.nginx.com\/blog\/introduction-to-microservices\/."},{"key":"ref_5","unstructured":"Richardson, C. (2020, November 30). Event-Driven Data Management for Microservices. Available online: https:\/\/www.nginx.com\/blog\/event-driven-data-management-microservices\/."},{"key":"ref_6","unstructured":"Richardson, C. (2020, November 30). Choosing a Microservices Deployment Strategy. Available online: https:\/\/www.nginx.com\/blog\/deploying-microservices."},{"key":"ref_7","unstructured":"(2020, November 30). OSGi Alliance. Available online: https:\/\/www.osgi.org."},{"key":"ref_8","unstructured":"(2020, November 30). OSGi Architecture. Available online: https:\/\/www.osgi.org\/developer\/architecture\/."},{"key":"ref_9","unstructured":"Hall, R., Pauls, K., McCulloch, S., and Savage, D. (2011). OSGi in Action, Creating Modular Applications in Java, Manning."},{"key":"ref_10","unstructured":"(2020, November 30). OSGi Service Layer. Available online: https:\/\/osgi.org\/specification\/osgi.core\/7.0.0\/framework.service.html."},{"key":"ref_11","unstructured":"(2020, November 30). Remote Services Specification. Available online: https:\/\/osgi.org\/specification\/osgi.cmpn\/7.0.0\/service.remoteservices.html."},{"key":"ref_12","unstructured":"(2020, November 30). Apache CXF Distributed OSGi. Available online: https:\/\/cxf.apache.org\/distributed-osgi.html."},{"key":"ref_13","unstructured":"(2020, November 30). Apache Zookeeper. Available online: https:\/\/zookeeper.apache.org\/."},{"key":"ref_14","unstructured":"(2020, November 30). Senseioty. Available online: http:\/\/senseioty.com\/."},{"key":"ref_15","unstructured":"(2020, November 30). Apache Karaf. Available online: https:\/\/karaf.apache.org\/."},{"key":"ref_16","unstructured":"Arvind, A.B.S., and Jennifer, W. (2020, November 30). The CQL Continuous Query Language: Semantic Foundations and Query Execution. Available online: http:\/\/ilpubs.stanford.edu:8090\/758\/1\/2003-67.pdf."},{"key":"ref_17","unstructured":"(2020, November 30). Siddhi Streaming and Complex Event Processing System. Available online: https:\/\/siddhi.io\/."},{"key":"ref_18","unstructured":"(2020, November 30). Bnd Tools. Available online: https:\/\/bnd.bndtools.org\/."},{"key":"ref_19","unstructured":"(2020, November 30). Apache Ignite. Available online: https:\/\/ignite.apache.org\/."},{"key":"ref_20","unstructured":"(2020, November 30). Apache Samza. Available online: http:\/\/samza.apache.org\/."},{"key":"ref_21","unstructured":"(2020, November 30). Apache Flink. Available online: https:\/\/flink.apache.org\/."},{"key":"ref_22","unstructured":"(2020, November 30). Apache Storm. Available online: https:\/\/storm.apache.org\/."},{"key":"ref_23","unstructured":"(2020, November 30). Kafka Streams. Available online: https:\/\/kafka.apache.org\/documentation\/streams\/."},{"key":"ref_24","unstructured":"(2020, November 30). Apache CXF. Available online: http:\/\/cxf.apache.org\/."},{"key":"ref_25","unstructured":"(2020, November 30). Kubernetes. Available online: https:\/\/kubernetes.io\/."},{"key":"ref_26","unstructured":"(2020, November 30). RabbitMQ. Available online: https:\/\/www.rabbitmq.com\/."},{"key":"ref_27","unstructured":"(2020, November 30). AMQP Protocol. Available online: https:\/\/www.amqp.org\/."},{"key":"ref_28","unstructured":"(2020, November 30). OSGi Event Admin Service. Available online: https:\/\/osgi.org\/specification\/osgi.cmpn\/7.0.0\/service.event.html."},{"key":"ref_29","unstructured":"(2020, November 30). Maven. Available online: https:\/\/maven.apache.org\/."},{"key":"ref_30","unstructured":"(2020, November 30). Pax URL. Available online: https:\/\/ops4j1.jira.com\/wiki\/spaces\/paxurl\/overview."},{"key":"ref_31","doi-asserted-by":"crossref","first-page":"265","DOI":"10.1108\/APJML-03-2018-0088","article-title":"Customer behavior analysis using real-time data processing: A case study of digital signage-based online stores","volume":"31","author":"Alfian","year":"2019","journal-title":"Asia Pac. J. Mark. Logist."},{"key":"ref_32","doi-asserted-by":"crossref","first-page":"23","DOI":"10.1016\/j.future.2020.07.047","article-title":"An intelligent healthcare monitoring framework using wearable sensors and social networking data","volume":"114","author":"Ali","year":"2021","journal-title":"Future Gener. Comput. Syst."},{"key":"ref_33","doi-asserted-by":"crossref","unstructured":"Alfian, G., Syafrudin, M., Ijaz, M.F., Syaekhoni, M.A., Fitriyani, N.L., and Rhee, J. (2018). A Personalized Healthcare Monitoring System for Diabetic Patients by Utilizing BLE-Based Sensors and Real-Time Data Processing. Sensors, 18.","DOI":"10.3390\/s18072183"}],"container-title":["Information"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/www.mdpi.com\/2078-2489\/11\/12\/565\/pdf","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,10,11]],"date-time":"2025-10-11T10:40:27Z","timestamp":1760179227000},"score":1,"resource":{"primary":{"URL":"https:\/\/www.mdpi.com\/2078-2489\/11\/12\/565"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2020,12,2]]},"references-count":33,"journal-issue":{"issue":"12","published-online":{"date-parts":[[2020,12]]}},"alternative-id":["info11120565"],"URL":"https:\/\/doi.org\/10.3390\/info11120565","relation":{},"ISSN":["2078-2489"],"issn-type":[{"value":"2078-2489","type":"electronic"}],"subject":[],"published":{"date-parts":[[2020,12,2]]}}}