1. 单体架构-Monolithic Architecture
对于非专业人士来说,所谓的单体架构,其就像一个超大容器,容器内集中包含了该应用的所有软件组件,并且组件与组件之间紧密耦合。
总结:
- **臃肿僵化不灵活:**单体架构很难采用多种技术
- **可靠性较差:**这种架构最明显的特征就是牵一发而动全身,一个小小的功能失效可能会导致系统的不可用
- **扩展性较差:**应用本身无法轻易的进行扩展,一旦需要进行对某个或者某些功能进行扩展或者更新,我们需要重新构建整个系统
- **阻碍连续性的开发:**应用的许多功能特性无法被同时构建和部署
- **开发速度慢:**单体应用的开发耗时较长,因为我们需要依次构建相应的功能模块
- **不适用于复杂的应用:**复杂应用的各个功能特性紧耦合
2. 何为微服务?
微服务,又称微服务架构,这种架构聚焦业务领域,将应用通过一个个小而自治的服务组织起来。在微服务架构中,每一个服务都是自包含的且唯一实现某个单一业务功能。
2.1 微服务与传统单体架构的区别
为了便于理解,我们这里以我们常见的电子商务应用为示例说明,很明显,传统的单体架构下,所有服务共享一个应用实例并且共享同一个后台数据库,而微服务架构下则应用本身业务功能划分为不同的微小服务,每个服务都自行处理各自业务数据,处理不同的业务功能。
2.2 微服务架构
- 设备不同,各客户端所使用的的服务也不尽相同,比如:检索、构建、配置抑或其他管理功能
- 基于各自业务领域的不同,每个服务都相对独立,而且会根据实际被进一步细化为更小力度的服务
- 每个服务都有各自的负载均衡和运行环境,并且各自拥有相对独立的数据源
- 服务间的通信通常采用无状态通信协议 ,比如:REST或者消息总线
- 借助服务发现机制,服务消费方与提供方可以彼此无忧通信,并可进行一些自动化及监控操作
- 服务与客户端的交互都是通过服务网关进行的
- 所有内部连通节点均与服务网关相连,即一旦你连接到服务网关,你即可访问网关后的所有服务端口
2.3 微服务的主要特征
- 解耦
- 组件化
- 业务功能化
- 自治
- 持续集成
- 单一责任
- 去中心化
- 敏捷
2.4 微服务架构的优势
- 独立部署开发
- 独立开发
- 故障隔离
- 混合技术栈
- 细粒度级扩展,即单个组件可以自由横向扩展
3. SpringCloud
3.1为什么要学习SpringCloud
不论是商业应用还是用户应用,在业务初期都很简单,我们通常会把它实现为单体结构的应用.但是,随着业务逐渐发展,产品思想会变得越来越复杂,单体结构的应用也会越来越复杂.这就会给应用带来如下的几个问题:
- 代码结构混乱:业务复杂,导致代码量很大,管理越来越困难.同时,这也会给业务的快速迭代带来巨大挑战;
- 开发效率变低:开发人员同时开发一套代码,很难避免代码冲突.开发过程中会伴随着不断解决冲突的过程,这会严重的影响开发效率;
- 排查解决问题成本高:线上业务出现bug,修复bug的过程可能很简单.但是,又只有一套代码,需要重新编译,打包,上线,成本很高.
由于单体结构的应用随着系统复杂度的增高,会暴露出各种各样的问题.近些年来,微服务架构逐渐取代了单体架构,且这种趋势将会越来越流行.spring cloud是目前最常用的微服务开发框架,已经在企业级开发中大量的应用.
3.2 SpringCloud技术栈
- 服务网关:ZUUL,zuul2,gateway(主流)
- 服务注册与发现:Eureka(停更),Nacos(主流)
- 服务调用:Ribbon(停更),LoadBalancer
- 服务负载与调用:Feign,OpenFeign
- 服务熔断降级:Hystrix,resilience4j,sentienl
- 服务分布式配置:Spring Cloud Config,Nacos
- 服务开发:Spring Boot
- 服务总线:Bus,Nacos