Digital twins have recently emerged as an innovative paradigm for improving the performance of cyber-physical systems, software and processes. In essence, a digital twin is a virtual replica of the system whose operation is to be optimized by improving its performance, detecting possible anomalies, or enabling its preventive maintenance. Although some consensus exists in the community about what a digital twin is, there are still unresolved questions about its definition, architecture, and related concepts. This paper proposes an architecture for the implementation of digital twins, and compares it with existing proposals in the literature with the goal of reaching a common understanding.