SOA( Service Oriented Architecture )
随着互联网的发展,网站应用的规模不断扩大,常规的应用架构已无法应对,分布式服务架构以及
微服务架构势在必行,急需一个治理系统确保架构有条不紊的演进。
Web应用程序发展的早期,大部分web工程(包含前端页面,web层代码,service层代码,dao层代码)是将所有的功能模块,打包到一起并放在一个web容器中运行。
比如搭建一个电商系统:客户下订单,商品展示,用户管理。这种将所有功能都部署在一个web容器中运行的系统就叫做单体架构。
所有的功能集成在一个项目工程中。
项目架构简单,前期开发成本低,周期短,小型项目的首选。
全部功能集成在一个工程中,对于大型项目不易开发、扩展及维护。
系统性能扩展只能通过扩展集群结点,成本高、有瓶颈。
技术栈受限。
当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率。
项目架构简单,前期开发成本低,周期短,小型项目的首选。
通过垂直拆分,原来的单体项目不至于无限扩大。
不同的项目可采用不同的技术。
全部功能集成在一个工程中,对于大型项目不易开发、扩展及维护。
系统性能扩展只能通过扩展集群结点,成本高、有瓶颈。
SOA 全称为 Service-Oriented Architecture,即面向服务的架构。它可以根据需求通过网络对松散耦合的粗粒度应用组件(服务)进行分布式部署、组合和使用。一个服务通常以独立的形式存在于操作系统进程中。
站在功能的角度,把业务逻辑抽象成可复用、可组装的服务,通过服务的编排实现业务的快速再生,目的:把原先固有的业务功能转变为通用的业务服务,实现业务逻辑的快速复用。
通过上面的描述可以发现 SOA 有如下几个特点:分布式、可重用、扩展灵活、松耦合。
当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。
抽取公共的功能为服务,提高开发效率。
对不同的服务进行集群化部署,解决系统压力。
基于ESB/Dubbo减少系统耦合。
抽取服务的粒度较大。
服务提供方与调用方,接口耦合度较高。
通过服务的原子化拆分,以及微服务的独立打包、部署和升级,小团队的交付周期将缩短,运维成本也将大幅度下降。
微服务遵循单一原则。微服务之间采用Restful等轻量协议传输。
微服务过多,服务治理成本高,不利于系统维护。
分布式系统开发的技术成本高(容错、分布式事务等)。
“面向服务的架构”:他是一种设计方法,其中包含多个服务, 服务之间通过相互依赖最终提供一系
列的功能。
一个服务,通常以独立的形式存在与操作系统进程中,各个服务之间通过网络调用。
其实和 SOA 架构类似,微服务是在 SOA 上做的升华,微服务架构强调的一个重点是“业务需要彻
底的组件化和服务化”,原有的单个业务系统会拆分为多个可以独立开发、设计、运行的小应用。
这些小应用之间通过服务完成交互和集成。
功能 | SOA | 微服务 |
---|---|---|
组件大小 | 大块业务逻辑 | 单独任务或小块业务逻辑 |
耦合度 | 通常松耦合 | 总是松耦合 |
公司架构 | 任何类型 | 小型、专注于功能交叉团队 |
管理 | 着重中央管理 | 着重分散管理 |
目标 | 确保应用能够交互操作 | 执行新功能、快速拓展开发团队 |
Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统
基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可
以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有重复制造轮子,它只是将
目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行
再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分
布式系统开发工具包。
SpringCloud, 基于SpringBoot提供了一套微服务解决方案,包括服务注册与发现,配置中心,
全链路监控,服务网关,负载均衡,熔断器等组件,除了基于NetFlix的开源组件做高度抽象封装之
外,还有一些选型中立的开源组件。
SpringCloud是目前国内使用最广泛的微服务框架。
官网地址:https://spring.io/projects/spring-cloud
SpringCloud集成了各种微服务功能组件,并基于SpringBoot实现了这些组件的自动装配,从而提
供了良好的开箱即用体验。
Spring Cloud Netflix,主要由:Eureka
、Ribbon
、Feign
、Hystrix
、Zuul|Gateway
、Config
等组件组成。
服务注册与发现:Spring Cloud Eureka可以实现服务的注册与发现,使得服务之间可以方便地进行通信和调用。
负载均衡:Spring Cloud Ribbon提供了负载均衡的功能,可以根据配置的负载均衡策略将请求分发到不同的服务实例上。
服务调用:Spring Cloud Feign可以简化服务之间的调用,通过声明式的方式定义服务接口,实现服务之间的远程调用。
服务容错:Spring Cloud Hystrix提供了服务容错的功能,可以实现服务的降级、熔断和限流,保证系统的稳定性和可靠性。
配置管理:Spring Cloud Config可以集中管理应用程序的配置,支持动态刷新配置,方便应用程序的部署和管理。
服务网关:Spring Cloud Gateway提供了统一的API网关,可以对外暴露统一的接口,并提供路由、过滤和限流等功能。
消息总线:Spring Cloud Bus可以实现消息总线的功能,方便在分布式系统中传播状态变化和配置变更。
分布式追踪:Spring Cloud Sleuth可以实现分布式系统的请求追踪和日志聚合,方便排查和解决问题。
监控聚合:使用 Hystrix 监控,我们需要打开每一个服务实例的监控信息来查看。而 Turbine 可以帮助我们把所有的服务实例的监控信息聚合到一个地方统一查看。
Netflix Eureka:服务的注册与发现(注册中心)。
Eureka就是用来管理微服务的通信地址清单的,有了Eureka之后我们通过服务的名字就能实现服务的调用。
Netflix Ribbon:客户端负载均衡,主要负责负载均衡,针对每次请求,Ribbon会从Euraka client服务列表中选择一个服务发起请求,均匀的把请求分发到各个服务中。
Netflix Feign:服务接口调用, Feign是一个声明式 REST 客户端,主要是为了简便服务调用,更快捷、优雅地调用 HTTP API。主要是实现原理是用动态代理。
Ribbon和Feign都是客户端负载均衡器,它的作用是在服务发生调用的时候帮我们将请求按照某种规则分发到
多个目标服务器上,简单理解就是用来解决微服务之间的通信问题。
Spring Cloud Config:分布式配置
分布式配置管理中心,用来统一的管理服务的配置文件,运行期间动态调整配置,不再需要在每个服务部署的机器上编写配置文件,服务会向配置中心统一拉取自己的配置。
Netflix Zuul:服务网关
我们可以把它看作是微服务的大门,所有的请求都需要经过zuul之后才能到达目标服务,根据这一特性,我们
可以把微服务公共的是事情交给zuul统一处理。
Netflix Hystrix:断路器
Hystrix是用来解决微服务故障,保护微服务安全的组件,避免因为服务器故障,导致整个调用链上的微服务
全都出现异常。
Spring Cloud Bus:消息总线
消息总线是在微服务中给各个微服务广播消息的一个组件,我们使用消息总线构建一个消息中心,其他微服务
来接入到消息中心,当消息总线发起消息,接入的微服务都可以收到消息从而进行消费。
Spring Cloud Sleuth:微服务链路追踪。
链路追踪的作用就是来监控维护之间的调用关系,让程序员方便直观的感受到一个请求经历了哪些微服务,以
及服务的请求时间,是否有异常等。
Netflix Turbine:聚合Hystrix监控数据,监控聚合,使用 Hystrix 监控,我们需要打开每一个服务实例的监
控信息来查看。而 Turbine 可以帮助我们把所有的服务实例的监控信息聚合到一个地方统一查看。
Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。
依托 Spring Cloud Alibaba,你只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里微服务解决方案,通过阿里中间件来迅速搭建分布式应用系统。
Spring Cloud Alibaba,主要由:Nacos
、Sentinel
、Seata
等组件组成。
服务限流降级 :默认支持 WebServlet、WebFlux, OpenFeign、RestTemplate、Spring Cloud Gateway, Zuul, Dubbo 和 RocketMQ 限流降级功能的接入,可以在运行时通过控制台实时修改限流降级规则,还支持查看限流降级 Metrics 监控。
服务注册与发现 :适配 Spring Cloud 服务注册与发现标准,默认集成了 Ribbon 的支持。
分布式配置管理 :支持分布式系统中的外部化配置,配置更改时自动刷新。
消息驱动能力 :基于 Spring Cloud Stream 为微服务应用构建消息驱动能力。
分布式事务 :使用 @GlobalTransactional 注解, 高效并且对业务零侵入地解决分布式事务问题。
阿里云对象存储 :阿里云提供的海量、安全、低成本、高可靠的云存储服务。支持在任何应用、任何时间、任何地点存储和访问任意类型的数据。
分布式任务调度 :提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。同时提供分
布式的任务执行模型,如网格任务。网格任务支持海量子任务均匀分配到所有 Worker(schedulerx-client)上执行。
阿里云短信服务 :覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道。
Sentinel:阿里巴巴源产品,把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
Nacos:一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
RocketMQ:一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务。
Dubbo:Apache Dubbo? 是一款高性能 Java RPC 框架。
Seata:阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案。
Alibaba Cloud OSS : 阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。
Alibaba Cloud SchedulerX: 阿里中间件团队开发的一款分布式任务调度产品,提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。
Alibaba Cloud SMS: 覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道。
随着互联网的发展,网站应用的规模不断扩大,常规的应用架构已无法应对,分布式服务架构以及
微服务架构势在必行,急需一个治理系统确保架构有条不紊的演进。
系统架构的演变:1、单体应用架构。2、垂直应用架构。3、分布式SOA架构。4、微服务架构。
常见微服务框架有Spring Cloud、Spring Cloud Alibaba。