1.1 系统架构的演变
1.1.1 集中式
当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(ORM)是影响项目开发的关键。集中式架构的优点是:系统开发速度快、维护成本低、适用于并发要求较低的系统。缺点是:代码耦合度高,后期维护困难、无法针对不同模块进行针对性优化、无法水平扩展、单点容错率低,并发能力差。
1.1.2 垂直拆分
当访问量逐渐增大,单一应用无法满足需求,此时为了应对更高的并发和业务需求,我们根据业务功能对系统进行拆分。垂直架构的优点:系统拆分实现了流量分担,解决了并发问题、可以针对不同模块进行优化、方便水平扩展,负载均衡,容错率提高。缺点:系统间相互独立,会有很多重复开发工作,影响开发效率。
1.1.3 分布式
当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。此时,用于提高业务复用及整合的分布式调用是关键。分布式架构的优点:将基础服务进行了抽取,系统间相互调用,提高了代码复用和开发效率。缺点:系统间耦合度变高,调用关系错综复杂,难以维护。
1.1.4 流动计算架构(SOA: 面向服务的架构)
当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。此时,用于提高机器利用率的资源调度和治理中心(SOA)是关键。流动计算架构的优点:服务注册中心,实现服务自动注册和发现,无需人为记录服务地址;服务自动订阅,服务列表自动推送;服务调用透明化,无需关心依赖关系;动态监控服务状态监控报告,人为控制服务状态。缺点:服务间会有依赖关系,一旦某个环节出错会影响较大;服务关系复杂,运维、测试部署困难。
1.1.5 微服务架构
微服务架构是使用一套小服务来开发单个应用的方式或途径,每个服务基于单一业务能力构建,运行在自己的进程中,并使用轻量级机制通信,通常是 HTTP API,并能够通过自动化部署机制来独立部署。这些服务可以使用不同的编程语言实现,以及不同数据存储技术,并保持最低限度的集中式管理。
API Gateway 网关是一个服务器,是系统的唯一入口。为每个客户端提供一个定制的 API。API 网关核心是,所有的客户端和消费端都通过统一的网关接入微服务,在网关层处理所有的非业务功能。如它还可以具有其它职责,如身份验证、监控、负载均衡、缓存、请求分片与管理、静态响应处理。通常,网关提供 RESTful / HTTP 的方式访问服务。而服务端通过服务注册中心进行服务注册和管理。
微服务架构与 SOA 都是对系统进行拆分;微服务架构基于 SOA 思想,可以把微服务当做去除了 ESB 的 SOA。ESB 是 SOA 架构中的中心总线,设计图形应该是星形的,而微服务是去中心化的分布式软件架构。两者比较类似,但其实也有一些差别:
功能 | SOA | 微服务 |
---|---|---|
组件大小 | 大块业务逻辑 | 单独任务或小块业务逻辑 |
耦合 | 通常松耦合 | 总是松耦合 |
管理 | 着重中央 | 管理着重分散管理 |
目标 | 确保应用能够交互操作 | 易维护、易扩展、更轻量级的交互 |
1.2 服务调用方式
1.2.1 RPC
Remote Produce Call 远程过程调用,类似的还有 RMI。自定义数据格式,基于原生 TCP 通信,速度快,效率高。早期的 webservice,现在的 dubbo,都是 RPC 的典型代表。
1.2.2 HTTP
HTTP 其实是一种网络传输协议,基于 TCP,规定了数据传输的格式。现在客户端浏览器与服务端通信基本都是采用 HTTP 协议,也可以用来进行远程服务调用。缺点是消息封装臃肿,优势是对服务的提供和调用方没有任何技术限定,自由灵活,更符合微服务理念。现在热门的 REST 风格,就可以通过 HTTP 协议来实现。
1.3 Spring Cloud
1.3.1 概述
Spring Cloud 是一系列框架的有序集合。它利用 Spring Boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用 Spring Boot 的开发风格做到一键启动和部署。Spring Cloud 并没有重复制造轮子,它只是将各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过 Spring Boot 风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
1.3.2 版本选择
在创建项目时我们应该根据 Spring Cloud 的版本来选择 Spring Boot 的版本,咋们可以去【 ☞ 对应版本】查看对应版本。
大体的版本对应为
Cloud | Boot |
---|---|
Hoxton | 2.2.x,2.3.x (Starting with SR5) |
Greenwich | 2.1.x |
Finchley | 2.0.x |
Edgware | 1.5.x |
Dalston | 1.5.x |
在 Spring Cloud 官网可以看到现在的稳定版是 H.SR8,那么 Spring Boot 的版本是不是可以在可选版本之间随便选择呢,理论上是可以的,但是我们点到参考文档中会发现它推荐我们使用 2.3.3.RELEASE。
1.3.3 技术选型
经过长时间的技术迭代,有许多技术已经停止维护了,如今创建新项目建议使用阿里巴巴提供的 Nacos,Nacos 可以充当注册中心、消息总线、配置中心,一挑三强大无比。当然 Eureka 等不更新依旧使用低版本也是没有问题的。