Blockchain (e.g., Bitcoin and Ethereum) has drawn much attention and has been widely deployed in recent years. However, Blockchain scalability is emerging as a challenging issue. This tutorial will overview existing solutions to Blockchain scalability, which can be classified into two categories [:] First layer and second layer solutions. First layer solutions propose modifications to the Blockchain (i.e., changing the Blockchain structure, such as block size) while second layer solutions propose mechanisms that are implemented outside of the Blockchain. In particular, we focus on sharding as a promising first layer solution to the scalability issue; the basic idea behind sharding is to divide the Blockchain network into multiple committees, each processing a separate set of transactions. More specifically, (a) we propose a taxonomy based on committee formation and intra-committee consensus; and (b) we compare the main existing sharding-based Blockchain protocols. We also present a performance-based comparative analysis (i.e., throughput and latency), of the advantages, and disadvantages in existing scalability solutions. Finally, we present a security analysis of sharding-based Blockchain protocols.