浅谈微服务-SpringCloud以及框架发展史

Posted 小花皮猪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅谈微服务-SpringCloud以及框架发展史相关的知识,希望对你有一定的参考价值。

1 为什么已经有了SpringCloud还要学习SpringCloud Alibaba?

因为SpringCloud中多项组件已经停止维护了,SpringCloud Alibaba在SpringCloud的基础上进行升级改造,使得更加方便好用

2 SpringCloud的优点和缺点

优点

1、服务拆分粒度更细,有利于资源重复利用,有利于提高开发效率

2、可以更精准的制定优化服务方案,提高系统的可维护性

3、微服务架构采用去中心化思想,服务之间采用Restful等轻量级通讯,比ESB更轻量

4、适于互联网时代,产品迭代周期更短

缺点

1、微服务过多,治理成本高,不利于维护系统

2、分布式系统开发的成本高(容错,分布式事务等)对团队挑战大
总的来说优点大过于缺点,目前看来SpringCloud是一套非常完善的分布式框架,目前很多企业开始用微服务

3 系统架构演变

随着互联网的发展,网站应用的规模也在不断扩大,进而导致系统框架也在不断的进行变化

从互联网早起到现在,系统框架大体经历了下面几个过程:单体应用架构->垂直应用架构->分布式架构->SOA架构->微服务架构,当然还有悄然兴起的Service Mesh(服务网格化,因为还未兴起,这里暂时不说)

1 单服务架构


把全部的系统模块放在一个项目中开发.把整个项目部署到tomcat上,适合小型项目或小团队

优点:

1 由于模块都在一个项目中.架构简单易懂,对于小型项目来说开发,维护比较容易

2 部署一个单点的tomcat,后期维护比较方便

缺点:

1 对于大型项目来说,维护比较困难

2 模块之间耦合紧密,单点容错率低

2 垂直应用架构

在单体应用架构基础上变化出来的,把系统中的每一个模块单独开发成一个项目,每个项目单独部署到各自的tomcat上,解决了单体应用系统之间耦合性高的问题,系统之间互不相关,并且可以针对一个模块进行水平化扩展

优点:

1 系统拆分之后,就可以对单独的模块进行水平扩展优化
2 降低系统耦合性,提高单点容错率

缺点:

1 由于系统被拆分,无法互相调用
2 由于系统模块无法互相调用,所以会造成代码冗余,由于项目越来越大,冗余代码可能会越来越多,造成系统性能降低

3分布式架构

由于垂直应用架构系统直接无法调用,会产生大量冗余的代码,所以产生了分布式架构,它把公用的代码进行解耦生成一个单独的模块,需要调用直接调用即可,大大减少了代码的重复量

优点

抽取公共代码为服务层,增强代码复用性

缺点

调用关系复杂,维护困难

4 SOA架构


SOA架构(面向服务架构)就是为了解决分布式错综复杂的关系,引用服务治理中心(Dubbo)进行管理

优点

使用服务治理中心(dubbo)帮我们服务复杂的调用关系,减少人工开发难度

缺点

调用服务关系是有依赖性的,如果服务出现问题,那么可能导致各个系统可能因为一个服务的问题导致多个系统不可用(拆分的不彻底)

5 微服务架构


微服务架构(强调的是服务的原子化彻底拆分,把服务拆分到颗粒度最细),在SOA的基础上继续进行升级,把业务以最大程度拆分成单独的服务,并且单独使用tomcat发布,这样用户想要调用哪个微服务就去调用哪个微服务即可

优点

1 服务原子化拆分,独立打包,部署和升级,保证每个微服务清晰的任务划分,不会影响到其他的微服务,利于扩展和维护

2 微服务采用Restful等轻量级http协议互相调用

缺点

1 分布式系统开发的技术成本高(容错,分布式事务等)

微服务架构常见问题和解决思路

由于微服务进行原子化拆分,拆分的太多了就会出现以下问题

问题1: 这么多小服务,应该如何管理?

服务治理,注册中心

相关技术栈有Nacos,Eureka,Consul,Zookeeper
涉及到CAP三特性
服务注册,服务发现,服务剔除

问题2: 这么多小服务,它们之间应该如何调用?

restful(http) rpc(tcp)

REST:HTTP调用的格式
RPC:进程间通信方式
具体技术有feign,restTemplate

问题3: 这么多小服务,客户端如何访问?

网关


把网关相当于一个微服务,用网关的接口把其他接口覆盖,想要使用某一个接口的时候,只需要通过网关的接口访问即可。

问题4:这么多小服务,如果一个出现问题了,那么作为服务自身来讲,应该如何自处理?

服务容错

问题5:这么多小服务,如果中间哪个环节出问题,作为程序员来讲,应该如何排查

链路追踪

对一次请求进行追踪,追踪其涉及的模块,数据中心,服务器。进行性能分析,异常处理等等等。

总之一图概况

微服务架构的常见解决方案

1 servicecomb

2 springcloud

3 springcloudAlibaba

SpringCloudAlibaba介绍

Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。

依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里微服务解决方案,通过阿里中间件来迅速搭建分布式应用系统。

主要功能

服务限流降级:默认支持 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
Apache RocketMQ™ 基于 Java 的高性能、高吞吐量的分布式消息和流计算平台。

Dubbo
Apache Dubbo™ 是一款高性能 Java RPC 框架。

Seata
阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案。
Alibaba Cloud OSS

阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。

Alibaba Cloud SchedulerX
阿里中间件团队开发的一款分布式任务调度产品,支持周期性的任务与固定时间点触发任务。

Alibaba Cloud SMS
覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道。

以上是关于浅谈微服务-SpringCloud以及框架发展史的主要内容,如果未能解决你的问题,请参考以下文章

浅谈微服务架构设计

智汇华云 | 浅谈微服务架构下的服务发现机制

浅谈微信小程序

浅谈微服务架构——容错模式2

浅谈微服务架构与服务治理的Eureka和Dubbo

浅谈微服务的来龙去脉