系统架构演变与SpringCloud简介
Posted double_lifly
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了系统架构演变与SpringCloud简介相关的知识,希望对你有一定的参考价值。
系统架构的演变
随着互联网的发展,网站应用的规模不断扩大。需求的激增,带来的是技术上的压力。系统架构也在不断的演变、升级、迭代。从单一应用到垂直拆分、到分布式服务、到SOA,以及当下较火的微服务架构。
集中式架构
当网站流量较小时,只需要一个应用,将所有的功能都部署在一起,以减少部署节点和成本。此时,用于简化增删该查工作量的数据访问框架ORM是影响向项目开发的关键。
存在的问题
代码耦合,开发维护困难
无法针对不同模式进行针对性优化
无法水平扩展
单点容错率低,并发能力差
垂直拆分
当访问量逐渐增大,单一应用无法满足用户请求,此时为了应对更高的并发和业务需求,需要根据业务功能对系统进行拆分
优缺点
优点
- 系统拆分实现了流量分担,解决了并发问题
- 可以针对不同模块进行优化
- 方便水平扩展,负载均衡,容错率较高
缺点
系统间相互独立,会有很多重复工作,影响开发效率
分布式服务
当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快的响应多变的市场需求。此时,用于提高业务复用及整合的分布式调用是关键
优缺点
优点
将基础服务进行了抽取,系统间相互调用,提高了代码复用和开发效率
缺点
系统间耦合度变高,调用关系错综复杂,难以维护
流动计算架构(SOA)
SOA:面向服务的架构
当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需要增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。此时,用于提高机器利用率的资源调度和治理重心(SOA)是关键
优缺点
优点
服务注册中心,实现服务自动注册和发现,无需人为记录服务地址
服务自动订阅,服务列表自动推送,服务调用透明化,无序关系依赖关系
动态监控服务状态监控报告,人为控制服务状态
缺点
服务间会有依赖关系,一旦某个环节出错会影响较大
服务关系复杂,运维,测试部署困难,不符合DevOps思想
微服务
微服务没有一个统一的标准定义,简单的说,微服务是系统架构的一种设计风格,它的主旨是将一个原本独立的系统拆分成多个小型服务,这些小型服务都在各自独立的进程中运行,服务之间通过基于HTTP的REST API进行通信协作;
被拆分的每一个小型服务都围绕着系统中的某一项业务功能进行构建,并且每个服务都是一个独立的项目,可以进行独立的测试,开发和部署等;
由于各个独立的服务之间使用的是基于HTTP的JSON作为数据通信写作的基础,所以为服务可以使用不同的语言来开发。
优缺点
优点
单一职责:微服务中每一个服务都对应唯一的业务能力,做到单一职责
微:微服务的服务拆分力度很小,例如一个用户管理就可以作为一个服务。每个服务虽小,但五脏俱全
面向服务:面向服务是说每个服务都要对外暴露Rest风格服务接口API。并不关系服务的技术实现,做到与平台和语言无关性,也不限定什么技术实现,只需提供Rest的接口即可。
自治:自治就是说服务间互相独立,互不干扰
- 团队独立:每个服务都是一个独立的开发团队,人数不能过多
- 技术独立:因为是面向服务,提供Rest接口,使用什么技术没有别人干涉
- 前段后分离:采用前后端分离开发,提供统一Rest接口,后端不用再为PC,移动端开发不同接口
- 数据库分离:每个服务都使用自己的数据源
- 部署独立:服务间虽有调用,但要做到服务重启不影响其他服务。有利于持续集成和持续交付。每个服务都是独立的组件,可复用,可替换,降低耦合,易维护
缺点- 微服务架构增加了系统维护,部署的难度,导致一些功能模块或代码无法复用
- 随着系统规模的日渐增长,微服务在一定程度上也会导致系统变得越来与复杂,增加了集成测试的复杂度
- 随着微服务的增多,数据的一致行问题,服务之间的通信成本等都凸显了出来
所以在系统架构时也要提醒自己,不要为了微服务而为服务
服务调用方式
常见的远程调用
- RPC:Remote Produce Call远程过程调用,类似的还有RMI。自定义数据格式,基于原生TCP通信,速度快,效率高。早期的webservice,现在热门的dubbo都是RPC的典型代表
- Http:http其实是一种网络传输协议,基于TCP,规定了数据传输的格式。现在客户浏览器与服务端通信都是采用Http协议,也可以用来进行远程服务调用。缺点是消息封装臃肿,优势是对服务的提供和调用方没有任何技术限定,自由灵活,更符合微服务理念。
Http客户端工具
HttpsClient
OKHttp
URLConnection
Spring的RestTemplate
Spring提供了一个RestTemplate模板工具类,对基于Http的客户端进行了封装,并且实现了对象与json的序列化和反序列化,非常方便。RestTemplate并没有限定Http的客户端类型,而是进行了抽象,目前常用的3中都有支持:HttpClient,OKHttp,URLConnection
为什么使用SpringCloud
后台硬:springcloud作为spring家族的一员,有整个spring全家桶靠山,背景十分强大。
技术强:spring作为java领域的前辈,有强力的技术团队支持
群众基础好:springcloud与spring的各个框架无缝连接,大多数程序员的成长都是伴随着spring框架
使用方便:springcloud完全支持springboot的开发,用很少的配置就能完成微服务的框架
springcloud简介
Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有重复制造轮子,它只是将各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
主要涉及的组件包括:
Eureka:服务治理组件,包含服务注册中心,服务注册和发现机制的实现
Zull:网关组件,提供智能路由,访问过滤功能
Ribbon:客户端负载均衡的服务调用组件(客户端负载)
Frign:服务调用,给予Ribbon和Hystrix的声明式服务调用组件(声明式服务调用)
Hystrix:容错管理组件,实现断路器模式,帮助服务依赖中出现的延迟和为故障提供强大的容错能力(熔断,断路器,容错)
架构图:
版本
springcloud的版本是版本名+版本号
版本名:伦敦的地名
版本号:SR(Service Releases)是固定的,意味版本稳定
springcloud与springboot版本匹配关系
Finchley | 兼容springboot2.0.x 不兼容springboot 1.5.x |
Edgware | 兼容springboot1.5.x 不兼容springboot 2.0.x |
Dalston | 兼容springboot1.5.x 不兼容springboot 2.0.x |
Camden | 兼容springboot1.4.x 也兼容springboot 1.5.x |
Brixton | 兼容springboot1.3.x 也兼容springboot 1.4.x |
Angel | 兼容springboot1.2.x |
springcloud并不是从0开始开发一整套微服务解决方案,而是集成各个开源软件,构成一整套的微服务解决方案,这其中有非常著名的Netflix公司的开源产品;
Netflix公司成立于1997年,是目前美国最大的版权视频交易网站项目,Netflix OOS(Open Source)就是由Netflix公司主持开发的一套代码框架和库。
springcloud所包含的众多组件中,Spring Cloud Netflix就是其中一组不可忽视的组件,由Netflix公司开发后又并入springcloud大家庭
目前Netflix公司贡献的活跃项目包括
spring-cloud-netflix-eureka
spring-cloud-netflix-hystrix
spring-cloud-netflix-stream
spring-cloud-netflix-archaius
spring-cloud-netflix-ribbon
spring-cloud-netflix-zuul
Spring Cloud的整体架构
Service Provider:暴露服务的服务提供方
Service Consumer:调用远程服务的服务消费方
Service Server:服务注册中心和服务发现中心
以上是关于系统架构演变与SpringCloud简介的主要内容,如果未能解决你的问题,请参考以下文章
图解Nginx,系统架构演变 + Nginx反向代理与负载均衡
图解Nginx,系统架构演变 + Nginx反向代理与负载均衡
Java 微服务之 SpringCloud快速入门day01 系统架构的演变,服务调用方式