系统架构的演变
随着互联⽹的发展,⽹站应⽤的规模不断扩⼤,常规的应⽤架构已⽆法应对,分布式服务架构以及微服务架构势在必⾏,必需⼀个治理系统确保架构有条不紊的演进。
单体应用架构
Web应⽤程序发展的早期,⼤部分web⼯程(包含前端⻚⾯,web层代码,service层代码,dao层代码)是将 所有的功能模块,打包到⼀起并放在⼀个web容器中运⾏。
优点:
-
- 所有的功能集成在⼀个项⽬⼯程中
- 项⽬架构简单,前期开发成本低,周期短,⼩型项⽬的⾸选。
缺点:
-
- 全部功能集成在⼀个⼯程中,对于⼤型项⽬不易开发、扩展及维护。
- 系统性能扩展只能通过扩展集群结点,成本⾼、有瓶颈。
- 技术栈受限。
垂直应⽤架构
当访问量逐渐增⼤,单⼀应⽤增加机器带来的加速度越来越⼩,将应⽤拆成互不相⼲的⼏个应⽤,以提升效率
优点 :
-
- 项⽬架构简单,前期开发成本低,周期短,⼩型项⽬的⾸选。
- 通过垂直拆分,原来的单体项⽬不⾄于⽆限扩⼤
- 不同的项⽬可采⽤不同的技术。
缺点 :
-
- 全部功能集成在⼀个⼯程中,对于⼤型项⽬不易开发、扩展及维护。
- 系统性能扩展只能通过扩展集群结点,成本⾼、有瓶颈。
分布式SOA架构
什么是SOA?
SOA 全称为 Service-Oriented Architecture,即⾯向服务的架构。它可以根据需求通过⽹络对松散耦合的粗粒度应⽤组件(服务)进⾏分布式部署、组合和使⽤。⼀个服务通常以独⽴的形式存在于操作系统进程中。
站在功能的⻆度,把业务逻辑抽象成可复⽤、可组装的服务,通过服务的编排实现业务的快速再⽣,⽬的:把原先固有的业务功能转变为通⽤的业务服务,实现业务逻辑的快速复⽤。
通过上⾯的描述可以发现 SOA 有如下⼏个特点:分布式、可重⽤、扩展灵活、松耦合
SOA架构
当垂直应⽤越来越多,应⽤之间交互不可避免,将核⼼业务抽取出来,作为独⽴的服务,逐渐形成稳定的服务中⼼,使前端应⽤能更快速的响应多变的市场需求
优点 :
-
- 抽取公共的功能为服务,提⾼开发效率
- 对不同的服务进⾏集群化部署解决系统压⼒
- 基于ESB/DUBBO减少系统耦合
缺点 :
-
- 抽取服务的粒度较⼤
- 服务提供⽅与调⽤⽅接⼝耦合度较⾼
微服务架构
优点 :
-
- 通过服务的原⼦化拆分,以及微服务的独⽴打包、部署和升级,⼩团队的交付周期将缩短,运维成 本也将⼤幅度下降
- 微服务遵循单⼀原则。微服务之间采⽤Restful等轻量协议传输。
缺点 :
-
- 微服务过多,服务治理成本⾼,不利于系统维护。
- 分布式系统开发的技术成本⾼(容错、分布式事务等)。
SOA架构
“⾯向服务的架构”:他是⼀种设计⽅法,其中包含多个服务,服务之间通过相互依赖最终提供⼀系列的功能。 ⼀个服务通常以独⽴的形式存在与操作系统进程中。各个服务之间通过⽹络调⽤。微服务是在SOA上做的升华
分布式
分布式中的远程调用
1、RESTful接口:
每⼀个URI代表⼀种资源;
客户端和服务器之间,传递这种资源的某种表现层;
客户端通过四个HTTP动词,对服务器端资源进⾏操作,实现"表现层状态转化"。
2、RPC协议:
⼀种进程间通信⽅式。允许像调⽤本地服务⼀样调⽤远程服务。
RPC框架的主要⽬标就是让远程服务调⽤更简单、透明。 RPC框架负责屏蔽底层的传输⽅式(TCP或者UDP)、序列化⽅式(XML/JSON/⼆进制)和通信细节。开发⼈员在使⽤的时候只需要了解谁在什么位置提供了什么样的远程服务接⼝即可,并不需要关⼼底层通信细节和调⽤过程。
3、区别与联系
比较项 | RESTful | RPC |
通讯协议 | HTTP | ⼀般使⽤TCP |
性能 | 略低 | 较⾼ |
灵活度 | ⾼ | 低 |
应⽤ | 微服务架构 | SOA架构 |
分布式中的CAP原理
Consistency(⼀致性) :数据⼀致更新,所有数据的变化都是同步的
Availability(可⽤性) :在集群中⼀部分节点故障后,集群整体是否还能响应客户端的读写请求
Partition tolerance(分区容忍性) :某个节点的故障,并不影响整个系统的运⾏
常见的微服务架构——SpringCloud概述
Spring Cloud是⼀系列框架的有序集合。它利⽤Spring Boot的开发便利性巧妙地简化了分布式系统基 础设施的开发,如服务发现注册、配置中⼼、消息总线、负载均衡、断路器、数据监控等,都可以⽤ Spring Boot的开发⻛格做到⼀键启动和部署。
服务注册与发现
服务注册:服务实例将⾃身服务信息注册到注册中⼼。这部分服务信息包括服务所在主机IP和提供服务的Port ,以及暴露服务⾃身状态以及访问协议等信息。
服务发现:服务实例请求注册中⼼获取所依赖服务信息。服务实例通过注册中⼼,获取到注册到其中的服务实例的信息,通过这些信息去请求它们提供的服务。
负载均衡
负载均衡是⾼可⽤⽹络基础架构的关键组件,通常⽤于将⼯作负载分布到多个服务器来提⾼⽹站、应⽤、数据库或其他服务的性能和可靠性。
熔断
在互联⽹系统中,当下游服务因访问压⼒过⼤⽽响应变慢或失败,上游服务为了保护系统整体的可⽤性,可以暂时切断对下游服务的调⽤。这种牺牲局部,保全整体的措施就叫做熔断。
链路追踪
随着微服务架构的流⾏,服务按照不同的维度进⾏拆分,⼀次请求往往需要涉及到多个服务。互联⽹应⽤构建在不同的软件模块集上,这些软件模块,有可能是由不同的团队开发、可能使⽤不同的编程语⾔来实现、有可能布在了⼏千台服务器,横跨多个不同的数据中⼼。因此,就需要对⼀次请求涉及的多个服务链路进⾏⽇志记录,性能监控即链路追踪
API⽹关
是将所有API调⽤统⼀接⼊到API⽹关层,由⽹关层统⼀接⼊和输出。 ⼀个⽹关的基本 功能有:统⼀接⼊、安全防护、协议适配、流量管控、⻓短链接⽀持、容错能⼒。有了⽹关之后,各个API服务提供团队可以专注于⾃⼰的的业务逻辑处理,⽽API⽹关更专注于安全、流量、路由等问题。
SpringCloud中的核⼼组件
Spring Cloud Netflix组件
Spring Cloud Alibaba组件
Spring Cloud原⽣及其他组件
RestTemplate介绍
Spring框架提供的RestTemplate类可⽤于在应⽤中调⽤rest服务,它简化了与http服务的通信⽅式,统⼀了RESTful的标准,封装了http链接, 我们只需要传⼊url及返回值类型即可。相较于之前常⽤的HttpClient ,RestTemplate是⼀种更优雅的调⽤RESTful服务的⽅式。