一、概念
一种架构体系,是为了实现以下目标
- 实现业务功能的工程模块
- 为了应对业务功能之外的需求、压力给项目中增加的中间件等其他系统
- 为了让整个项目能够顺畅、高效的运行,需要把业务功能和中间件以及其他系统有效的整合起来
二、和单一架构的对比
2.1 单一架构
所有的业务功能都是通过一个工程内的,最终打包成一个文件,部署到一个单机服务器中运行
单一架构的演进
-
水平拆分
将一个工程拆拆分成多个模块分别进行开发,最终部署的工程依赖于这些实现了业务逻辑的模块
一定程度上提高了项目的模块化程度
2. 垂直拆分
将业务功能拆分成多个模块化工程,不同的业务模块不会进行互相调用,所以不算是一个真正的分布式架构
相当于对大工程拆分成小工程进行开发(分治思想)
三、分布式架构的目标
3.1 高可扩
项目的设计架构需要考虑到功能的持续更新。能够向后兼容
3.2 高性能
系统处理请求的时间尽可能的端,减少用户的等待时间,优化用户体验
3.3 高并发
用户访问量非常的大时,会增加系统的并发压力
四、分布式思想
4.1 方法远程调用(RMI)
4.1.1 本地调用
在同一个项目内进行调用,包括对自己定义的方法和第三方jar内的方法进行调用
4.1.2 远程调用
通过网络去调用另外一个方法,将方法的参数通过网络传递过去,得到的执行结果作为响应返回
4.1.3 意义
对内:实现分布式架构
对外:调用第三方接口
- 短信发送
- 物流查询
- 支付功能
- 。。。
4.2 SOA
Service Oriented Architecture(面向服务的架构)
将系统中,功能相同的代码抽取成一个单独的服务,用于系统提供给系统中其他的模块进行调用
4.3 微服务
Microservice,对SOA的进一步深化,即将抽取出的通用服务提供者进一步的优化,实现独立、可部署的的特性
4.4 技术的演进
4.4.1 WebService
解决应用程序之间的跨平台访问问题。基于SOAP/WSDL协议,让应用程序之间可以进行远程通信。
4.4.2 Dubbo+Zookeeper
Dubbo:基于RPC远程过程调用的框架
Zookeeper:基于树形目录结构、异步通知机制的注册中心
4.4.3 SpringBoot+SpringCloud
SpringBoot:开发具体的微服务,使用“场景启动器”快速整合第三方中间件
SpringCloud:提供基本的微服务架构整体管理的解决方案
Eureka:注册中心
Ribbon:客户端(消费者)负载均衡
Feign:远程接口的声明式调用
Hystrix:服务的熔断、降级、监控
Zuul:网关
五、分布式架构的优缺点
5.1 优点
-
模块化程度提高,有利于分工
-
有利于提升项目性能
-
整体提升
整个项目中每个模块都可以独占一台服务器,整个项目分配到的服务资源更多
-
局部提升
由于对于项目进行了拆分,可以对项目中的局部模块进行专门的优化,提升性能
纵向:模块的服务器硬件资源增加
横向:给模块配置集群,通过数量提升性能
-
5.2 缺点
-
缺点复杂
- 调用关系复杂
- 部署复杂
-
数据不一致问题
- Session 不一致
- 分布式事务问题