单体架构
单体架构将所有功能都写在同一个项目中,开发时调用简单,编译时直接打包整个项目,十分简单,但也存在缺点:
- 协作困难:如果几百人的团队同时修改同一个项目,git可能会经常出现冲突。
- 耦合度高:代码高度耦合,局部Bug可能会导致整个应用的崩溃。
- 发布效率低:每次更新一个模块都需要重新编译部署整个项目,耗费时间过长。
- 扩展性差:不同模块间的并发压力不同,高并发模块的压力可能会影响到其他模块,而为了应对高并发模块的压力,必须对整个大应用进行扩容,浪费了资源。
微服务架构
微服务分而治之,解决了上述问题,但与此同时,也衍生出了新的问题:
- 服务发现:如果出现跨服务的业务如何进行?
- 远程调用:跨服务的业务不能直接调用本地方法,该怎么调用?
- 网关服务:前端到底应该访问哪一个服务?
- 配置管理:如果一个服务有很多个实例,修改配置要怎么办?
相关框架
Spring Cloud
Spring Cloud是微服务架构下一系列组件的集合,为解决微服务的相关问题提供了一站式解决方案。
| API网关 | 服务发现 | 配置中心 | 服务熔断和限流 | 远程调用 | |
|---|---|---|---|---|---|
| 解决的问题 | 前端请求繁杂,入口不一 | 服务太多,找不到地址 | 配置文件多,修改繁琐 | 某个服务挂了拖垮全局 | 远程调用代码太繁琐 |
| 实现 | Spring Cloud Gateway | Nacos、Eureka | Nacos、Spring Cloud Config | Sentinel、Resilience4j | Dubbo、OpenFeign |