尚筹网07分布式架构
架构
项目的主体结构
1、实现业务功能的工程模块
2、为了应对业务功能之外的需求、压力给项目中增加的中间件等其他系统
3、为了让整个项目能够顺畅、高效的运行,需要把业务功能和中间件以及其他系统有效的整合起来.
单一架构
概念
一个工程-》一个war包-》运行在一个Tomcat上
All in one
单机版
......
演变
单体应用架构(水平)
把原来的一个工程拆分成多个模块分别进行开发,一定程度上提高了模块化程度.
Web应用程序发展的早期,大部分web工程将所有功能模块放在一个web容器
优点:
1、所有的功能集成在一个项目工程中
2、项目架构简单,前期开发成本低,周期短,小型项目首选
缺点:
1、全部功能集成在一个工程中,对于大型项目不易开发、扩展及维护
2、系统性能扩展只能通过扩展集群节点,成本高、有瓶颈
垂直应用架构(垂直)
随着访问量增大,单一应用增加机器带来的加速度越来越小,因此考虑将应用拆分成不想干的几个应用,以提升效率
优点
1、项目架构简单,前期开发成本低,周期短,小型项目的首选
2、通过垂直拆分,原来的单体项目不至于无限扩大
3、不同的项目可采用不同的技术
缺点
1、全部功能集成在一个工程中,对于大型项目不易开发、扩展及维护
2、系统性能扩展只能扩展集群节点,成本高、有瓶颈
开发、扩展、维护、成本
互联网时代的新挑战
高可扩展性
项目设计架构的时候要考虑到功能的持续更新.
高性能
提高响应速度,系统处理一个请求的时间尽可能短,减少用户等待时间,优化用户体验.
高并发
用户访问量非常大时,会增加系统的并发压力.
分布式架构
概念
一个项目拆分成多个模块项目,每个模块工程都是一个war包,运行在各自的tomcat上,模块之间可以通过网络互相调用.
方法远程调用
本地调用
在同一个项目内部,不经过网络直接调用方法.不管是我们自己声明的方法还是第三方jar包中的方法都算本地调用.
远程调用
意义
1、对内:让我们能够实现分布式架构
2、对外:让我们能够调用第三方接口
a) 发送短信
b) 查询物流
c) 执行支付
d) 天气预报
e) ....
思想
SOA
Service oriented Archiecture面向服务的架构
在整个系统中,把相同的功能抽取出来作为一个服务,供系统中的其他模块调用,提高代码的复用性.
微服务
微服务强调的特征:独立、可部署
技术演进
webService
解决应用程序之间的跨平台访问问题.基于SOAP/WSDL协议,让应用程序之间可以进行远程通信.
Dubbo+Zookeeper
Dubbo:基于RPC的远程过程调用框架
Zookeeper:基于树形目录结构、异步通知机制的注册中心.
SpringBoot+SpringCloud
SpringBoot:开发具体微服务,使用“场景启动器”快速整合第三方中间件
SpringCloud:提供的微服务架构整体管理的一站式解决方案
Eureka:注册中心
Ribbon:客户端负载均衡
Feign:远程接口的声明式调用
Hystrix:服务的熔断、降级、监控
Zuul:网关
记忆:恶人副会长、注册客户均衡远程访问服务网关
相关概念
接口
一个以“接口”为功能代表的分布式环境下的服务模块.
远程接口的声明式调用
@Controller Public class EmpController{ //想调用本地方法一样调用远程方法.所有远程方法调用时产生的请求、响应等细节全部被框架屏蔽了 @Autowired Private EmpRemoteService empRemoteService; }
注册中心
远程接口的声明式调用之所以能够实现,就是因为Dubbo或Feign这样的框架把服务的具体信息存入了注册中心,对程序员在上层进行的具体代码编写全部屏蔽细节.
分布式架构优缺点
优点
模块化程度更高,有利于分工
有利于提升项目性能
整体提升
整个项目中每个模块都可以独占一台服务器,整个项目分配到的服务器资源更多
局部提升
由于对项目进行了拆分,所以可以有针对性的对项目中局部模块进行专门的优化
纵向:给当前模块所在的服务器增加硬件资源
横向:给当前模块配置集群
缺点
结构复杂
调用关系复杂
部署复杂
数据不一致问题
Session不一致问题
分布式事务问题
分布式和集群
相同点
都需要使用多台服务器
不同点
分布式:每台服务器运行的模块不同--异构
集群:每台服务器上运行模块相同--同构