在互联网行业中,开发框架可以根据其用途和设计目标分为几大类。每一类框架都有其特定的应用场景和代表工具。为此有必要梳理下框架的分类以及他们之间的关系。
1、常见疑问
1.1、web框架与rpc框架的关系
通常情况下 web框架 和 rpc框架之间的关系大概如下。
客户端(HTTP) -> Web 框架(Gin) -> RPC 框架(gRPC) -> 微服务
(1)web框架作为网关。
-
Web 框架(如 Gin、Echo)可以作为 API 网关,接收客户端的 HTTP 请求。
-
网关将请求转换为 RPC 调用,转发给后端的微服务。
-
后端微服务使用 RPC 框架(如 gRPC)进行通信。
(2)RPC框架接受网关请求
1.2、诸如trpc-go框架也可以用于构建http服务,为什么还会需要web框架呢?
一句话:trpc-go对http能力只是做了基本的支持,很多场景不专业。
(1)trpc-go框架虽然也支持http协议,但是其核心功能仍然是RPC调用。其对http的支持更多是为了兼容性和网关场景。主流场景依然是微服务架构中的服务间通信。
(2)trpc-go的http能力更大程度是简单接口的暴露,对于很多梗专业的事情web框架不可替代。
- 深度的http协议控制
- 涉及浏览器字节交互(SSR、表单提交)
- 追求极致的http性能
- 需要模板引擎(用于渲染html)等等。
实际使用场景。
实际使用项目中进场出现两者共存的情况。
例如, 用Gin提供对外API接口,同时用trpc-go实现服务间通信。
这种混合架构技能发挥rpc的高性能,又能利用web框架的协议完整性。
2、常用框架
2.1、web开发框架
用于构建 Web 应用程序或 RESTful API,处理 HTTP 请求和响应。
代表框架:
-
Go: Gin、Echo、Beego、Fiber
-
Python: Django、Flask、FastAPI
-
Java: Spring MVC、Play Framework
-
Node.js: Express、Koa、NestJS
-
Ruby: Ruby on Rails
-
PHP: Laravel、Symfony
特点:
-
提供路由、中间件、模板引擎等功能。
-
适合构建面向客户端的 Web 应用或 API 服务。
2.2、rpc框架(微服务框架)
用于实现服务间通信,支持远程过程调用(RPC)。
代表框架:
-
Go: gRPC-Go、tRPC-Go、Go-kit
-
Java: gRPC-Java、Dubbo、Thrift
-
Python: gRPC-Python、Pyro
-
C++: gRPC-C++、Thrift
特点:
-
支持高性能、低延迟的服务间通信。
-
通常使用二进制协议(如 Protobuf、Thrift)进行数据传输。
-
适合微服务架构中的服务调用。
2.3、数据库框架/ORM框架
用于简化数据库操作,提供对象关系映射(ORM)功能。
代表框架:
-
Go: GORM、XORM
-
Python: SQLAlchemy、Django ORM
-
Java: Hibernate、MyBatis
-
Node.js: Sequelize、TypeORM
-
PHP: Eloquent(Laravel 内置)
特点:
-
提供数据库操作的抽象层,支持多种数据库(如 MySQL、PostgreSQL)。
-
适合需要与数据库交互的应用。
2.4、前端框架
用于构建用户界面(UI),通常运行在浏览器中。
代表框架:
-
JavaScript: React、Vue.js、Angular
-
TypeScript: Next.js、Nuxt.js
-
CSS: Bootstrap、Tailwind CSS
特点:
-
提供组件化开发、状态管理、路由等功能。
-
适合构建单页应用(SPA)或动态 Web 界面。
2.5、测试框架
用于编写和运行自动化测试。
代表框架:
-
Go: Go test、Testify
-
Python: pytest、unittest
-
Java: JUnit、TestNG
-
JavaScript: Jest、Mocha
特点:
-
提供单元测试、集成测试、性能测试等功能。
-
适合确保代码质量和功能的正确性。
2.6、配置管理框架
用于管理应用程序的配置。
代表框架:
-
Go: Viper
-
Java: Spring Cloud Config
-
Python: Dynaconf
-
Node.js: node-config
特点:
-
支持多种配置格式(如 JSON、YAML、环境变量)。
-
适合需要动态加载和管理配置的应用。
2.7、日志框架
用于记录应用程序的运行日志。
代表框架:
-
Go: Zap、Logrus
-
Java: Log4j、SLF4J
-
Python: Logging(标准库)、Loguru
-
Node.js: Winston、Bunyan
特点:
-
提供日志级别、格式化、输出目标等功能。
-
适合监控和调试应用程序。
2.8、任务式调度框架
用于实现定时任务和任务调度。
代表框架:
-
Java: Quartz、Spring Scheduler
-
Python: Celery(结合定时任务)、APScheduler
-
Go: Cron
-
Node.js: Agenda、Node-schedule
特点:
-
支持定时任务、周期性任务、任务队列等功能。
-
适合需要定时执行任务的场景。
2.9、容器与编排框架
用于实现应用的容器化和集群管理。
代表框架:
-
Docker: 容器化工具。
-
Kubernetes: 容器编排工具。
-
Helm: Kubernetes 包管理工具。
特点:
-
提供应用的打包、部署、扩展和管理功能。
-
适合构建云原生应用。
2.10、机器学习框架
用于构建和训练机器学习模型。
代表框架:
-
Python: TensorFlow、PyTorch、Scikit-learn
-
Java: Deeplearning4j
-
JavaScript: TensorFlow.js
特点:
-
提供模型训练、推理、数据处理等功能。
-
适合人工智能和数据科学领域。