1.网站架构演变过程简述

一、网站架构演变过程

网站架构大致可以分为以下几个阶段:
传统架构(单体应用)->分布式架构(以项目进行拆分)->SOA(面向服务架构)->微服务架构

1.Monolith(单体应用)架构

1.1 什么是单体应用
首先请回想一下我们所开发的服务是什么样子的。通常情况下,这个服务所对应的代码由多个项目所组成,各个项目会根据自身所提供功能的不同具有一个明确的边界。在编译时,这些项目将被打包成为一个个JAR包,并最终合并在一起形成一个WAR包。接下来,我们需要将该WAR包上传到Web容器中,解压该WAR包,并重新启动服务器。在执行完这一系列操作之后,我们对服务的编译及部署就已经完成了。这种将所有的代码及功能都包含在一个WAR包中的项目组织方式被称为Monolith。例如我们使用的SSH、SSM架构都是单体架构。
在这里插入图片描述

1.2 缺点
这种架构将整个业务模块在一个项目中进行开发,按照MVC思想分层。
在项目很小的情况下这种单体应用比较简单,但是随着项目越变越大,代码越来越多,就会存在以下缺点:

  • 编译难,部署难,测试难
    代码量变多,及时更改一行代码,也需花大量时间编译,部署前要编译打包,解压等所以部署难,部署完了还要测试所以测试难。
  • 耦合度高
    一旦某个模块导致服务不可用,可能会影响到整个项目。
  • 扩展难
    按照Monolith组织的代码将只产生一个包含了所有功能的WAR包,因此在对服务的容量进行扩展的时候,我们只能选择重复地部署这些WAR包来扩展服务能力,而不是仅仅扩展出现系统瓶颈的组成。

2.分布式架构

基于传统架构演变而来,将整个项目拆分为多个子项目,分为以下几个阶段:
2.1数据库服务、应用、文件分离阶段
在这里插入图片描述
2.2应用服务器集群部署阶段
当业务访问量很大的时候,用户的请求会进行排队等待,这导致了糟糕的用户体验,这个时候可以将同一个应用部署在多台服务器上,将大量的用户请求分发到各个服务器上,以缓解一台服务器的压力。
在这里插入图片描述
而怎么分发请求,这就涉及到负载均衡(Load Balancing)算法的设计,一个好的负载均衡算法可以将服务器性能最大化,常用的负载均衡算法有:

  • 轮询法
    轮询法,就是将用户的请求轮流分配给服务器,就像是挨个数数,轮流分配。这种算法比较简单,他具有绝对均衡的优点,但是也正是因为绝对均衡它必须付出很大的代价,例如它无法保证分配任务的合理性,无法根据服务器承受能力来分配任务。
  • 随机法
    随机法,是随机选择一台服务器来分配任务。它保证了请求的分散性达到了均衡的目的。同时它是没有状态的不需要维持上次的选择状态和均衡因子[5]。但是随着任务量的增大,它的效果趋向轮询后也会具有轮询算法的部分缺点。
  • 最小连接法
    最小连接法,将任务分配给此时具有最小连接数的节点,因此它是动态负载均衡算法。一个节点收到一个任务后连接数就会加1,当节点故障时就将节点权值设置为0,不再给节点分配任务。最小连接法适用于各个节点处理的性能相似时。任务分发单元会将任务平滑分配给服务器。但当服务器性能差距较大时,就无法达到预期的效果。因为此时连接数并不能准确表明处理能力,连接数小而自身性能很差的服务器可能不及连接数大而自身性能极好的服务器。所以在这个时候就会导致任务无法准确的分配到剩余处理能力强的机器上。

2.3数据库读写分离阶段
在这里插入图片描述
2.4为了缓解数据库压力,又在系统加入NoSql(Redis、MongoDB)等内存型数据库作为缓存
此时遇到用户请求,先去查找缓存,若查到则只需要1次内存I/O;缓存中没有时,经过1次磁盘I/O从数据库读取数据,再经过1次内存I/O写入缓存。
在这里插入图片描述
2.5将服务器集群按照应用拆分并拆分数据库
随着业务量的增加,表的数据不断增长,数据查询性能便成了问题,所以必须要对数据库进行水平拆分。水平拆分是将单个表的数据拆分到多个数据库中,如100W数据的表拆分到10个数据库后,每个表就只有10w。
在这里插入图片描述

3.SOA架构(Service-Oriented Architecture)

在上面的架构中,用户服务会调用到商品服务,商品服务又会调用交易服务,用户服务又调用订单服务,调用关系错综复杂,维护成本不断变高。此时,SOA架构出现了:
SOA是一种粗粒度、松耦合服务架构,服务之间通过简单、精确定义接口进行通讯,不涉及底层编程接口和通讯模型。SOA可以看作是B/S模型、XML(标准通用标记语言的子集)/Web Service技术之后的自然延伸。
SOA将能够帮助软件工程师们站在一个新的高度理解企业级架构中的各种组件的开发、部署形式,它将帮助企业系统架构者以更迅速、更可靠、更具重用性架构整个业务系统。较之以往,以SOA架构的系统能够更加从容地面对业务的急剧变化。

SOA架构通俗的理解为将共同的业务逻辑抽取出来形成一个通用服务,如Mq、Hdfs、检索工具等,该服务作为一个独立项目部署,给其他服务提供接口进行调用,服务间调用依然使用RPC远程技术。
在这里插入图片描述

4.微服务架构

微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相沟通(通常是基于Http的Restful API)。每个服务都围绕着具体业务进行构建,并且能够被独立地部署到生产环境、类生产环境等。另外,应尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建。
微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立开发,独立部署,独立运维,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。
4.1.那么服务间的远程调用方式有哪些呢?
常见的远程调用方式有以下几种:

  • RPC:Remote Produce Call远程过程调用,类似的还有RMI。自定义数据格式,基于原生TCP通信,速度快,效率高。早期的webservice,现在热门的dubbo,都是RPC的典型
  • Http:http其实是一种网络传输协议,基于TCP,规定了数据传输的格式。现在客户端浏览器与服务端通信基本都是采用Http协议。也可以用来进行远程服务调用。缺点是消息封装臃肿。

由于微服务架构中存在多个微服务,那么如何管理和协调这些服务呢?就需要服务治理框架,而springcloud就是一个基于Spring Boot实现的服务治理工具包。
4.2. 什么是Spring Cloud
Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Springcloud并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
以下是主要组成部分(摘自百度):
在这里插入图片描述
Spring Cloud有很多优秀组件,后面的文章会一一列举。

发布了13 篇原创文章 · 获赞 26 · 访问量 6395

猜你喜欢

转载自blog.csdn.net/weixin_44269312/article/details/104343419