尚筹网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;

}

注册中心

远程接口的声明式调用之所以能够实现,就是因为DubboFeign这样的框架把服务的具体信息存入了注册中心,对程序员在上层进行的具体代码编写全部屏蔽细节.

分布式架构优缺点

优点

模块化程度更高,有利于分工

有利于提升项目性能

  整体提升

  整个项目中每个模块都可以独占一台服务器,整个项目分配到的服务器资源更多

  局部提升

  由于对项目进行了拆分,所以可以有针对性的对项目中局部模块进行专门的优化

  纵向:给当前模块所在的服务器增加硬件资源

  横向:给当前模块配置集群

缺点

结构复杂

  调用关系复杂

  部署复杂

数据不一致问题

  Session不一致问题

  分布式事务问题

分布式和集群

相同点

都需要使用多台服务器

不同点

分布式:每台服务器运行的模块不同--异构

集群:每台服务器上运行模块相同--同构

原文地址:https://www.cnblogs.com/Adam-Ye/p/13357010.html