What are the Different Types of Software Architectures