架构演进
随着互联网的发展,互联网企业的业务也在不断的飞速发展,进而导致系统的架构也在不断的发生着变化。目前系统的架构大致经历了:单体应用架构->垂直应用架构->分布式架构->SOA架构->微服务架构->云原生架构的演变
单体架构
单体架构(Monolithic Architecture)是一种传统的软件架构模式,将应用程序的所有功能模块打包成一个独立的单元,并部署在一个进程中。它通常包含用户界面、业务逻辑和数据访问层,所有代码都集中在一个代码库中。
单体架构的优点:
- 开发简单: 开发人员可以将所有代码放在一个代码库中,方便管理和协作。
- 部署简单: 部署只需要将一个应用程序包部署到服务器上即可。
- 调试方便: 所有代码都在同一个进程中,调试起来比较方便。
- 易于理解: 由于所有代码都在一个地方,因此更容易理解应用程序的整体结构。
单体架构的缺点:
- 难以扩展: 随着应用程序的增长,单体架构的扩展性会变得越来越差。
- 难以维护: 由于所有代码都在一个代码库中,因此修改代码可能会影响其他模块,导致维护困难。
- 部署速度慢: 每次修改代码都需要重新部署整个应用程序,导致部署速度慢。
- 技术栈限制: 单体架构通常使用相同的技术栈,难以引入新的技术。
- 可靠性低: 一个模块的错误可能会影响整个应用程序的运行。
单体架构的实现方案:
- 语言选择: 可以选择 Java、Python、PHP、C# 等语言。
- 框架选择: 可以选择 Spring Boot、Django、Laravel、ASP.NET Core 等框架。
- 数据库选择: 可以选择 MySQL、PostgreSQL、MongoDB 等数据库。
- 部署方式: 可以选择将应用程序部署到物理服务器、虚拟机或容器中。
单体架构的适用场景:
- 小型应用程序: 对于小型应用程序,单体架构可以提供快速开发和部署的优势。
- 简单业务逻辑: 对于业务逻辑简单的应用程序,单体架构可以提供易于理解和维护的优势。
- 快速原型开发: 单体架构可以快速构建应用程序原型,以便快速验证想法。
常见的包规范
com.example.project // 根目录 通常以公司或项目名称命名
├── user //用户模块
│ ├── controller
│ │ └── UserController.java
│ ├── service
│ │ └── UserService.java
│ ├── repository
│ │ └── UserRepository.java
│ └── entity
│ └── User.java
├── order //订单模块
│ ├── controller
│ │ └── OrderController.java
│ ├── service
│ │ └── OrderService.java
│ ├── repository
│ │ └── OrderRepository.java
│ └── entity
│ └── Order.java
├── product // 商品模块
│ ├── controller
│ │ └── ProductController.java
│ ├── service
│ │ └── ProductService.java
│ ├── repository
│ │ └── ProductRepository.java
│ └── entity
│ └── Product.java
├── config // 配置
│ └── AppConfig.java
├── exception // 异常
│ └── MyException.java
└── util // 工具类
└── StringUtils.java