玩转Spring Cloud微服务架构之微服务架构初探

玩转Spring Cloud微服务架构之微服务架构初探

  • 一、软件架构发展简介
      • 1、单体架构
      • 2、微服务架构
      • 3、服务选择
  • 二、微服务框架比较
      • 1、Dubbo
      • 2、Spring Cloud
      • 3、SpringCloud Alibaba
  • 三、玩转Spring Cloud Alibaba微服务架构
      • 1、需要掌握的技术
      • 2、技术栈梳理

一、软件架构发展简介

软件架构的发展,经历了最初的单体架构到目前流程的分布式架构,以及正在高速发展中的云原生架构 ,而微服务是一种经过良好架构设计的分布式架构方案,也是当前中大型软件系统的首选方案。

1、单体架构

单体架构,将业务的所有功能集中在一个项目中开发,打成一个包部署。

单体应用的优点是架构简单,部署成本"低"; 缺点也很明显,耦合性太高,应用的扩展都需要对整个应用进行重新部署,随着功能越来越复杂,单次部署需要的时间会越来越大,发布失败回滚用时也会越来越大,据淘宝架构十年演化中,淘宝单体应用晚期,功能复杂,单次发布要几个小时的时间才能完成;而且,模块间的高度耦合可能会导致系统出现问题时,整个服务不可用。

在这里插入图片描述
如上单体应用架构图,最终图中所有层的代码打包成一个war包部署。

2、微服务架构

正是为了应对复杂的业务需要,解决单体应用的局限性,微服务架构应运而生。微服务架构根据业务功能将复杂的应用程序划分为一组小型的独立服务,每个服务都运行在独立的进程中,服务之间通过网络进行通信。每个微服务都可以独立部署、独立扩展,从而提供高度的模块化和分布式部署。
在这里插入图片描述
如上是微服务架构图,不难看出,除了业务服务外,还需要掌握和部署服务发现,配置中心,服务监控,分布式日志分析,链路追踪等等用来治理,监控,运维的技术,相对于单体应用,复杂度的增加是显著的

微服务架构降低了服务间的耦合,较强的容错性(单个服务问题不影响其他服务正常使用),有利于服务升级扩展,但也存在一定的缺点,比如微服务之间需要进行网络通信可能会带来一定的性能损失,微服务的部署较复杂,微服务的问题跟踪也会相对麻烦,需要付出更多的努力来管理服务之间的依赖关系。

一般来说,对于大型的,需要高度可扩展和可维护的系统,微服务架构是一个很好的选择。另外,如果一个服务需要使用特定的语言或者技术栈开发,也可以选择微服务架构,支持技术异构性也是微服务架构的优点。

因此,从单体架构到微服务架构的演进,是为了更好地适应业务的发展,提高系统的可扩展性和可维护性。

3、服务选择

单体架构和微服务架构各有优劣,具体选择哪一个,要看了场景和需求再决定。如果你正在开发一个小型的应用或者你的项目并不复杂,那么单体架构足以应付,反之,如果你的服务复杂需要高度的可伸缩性,可靠性和容错性,那么微服务是你的首选。总之,适合自己的才是最好的!让我们一起根据实际情况做出最好的选择吧。

二、微服务框架比较

微服务方案需要相应的技术框架来实现落地,各个公司都在积极尝试自己的微服务落地技术,在国内最知名的就是阿里巴巴的Dubbo和SpringCloud Alibaba

1、Dubbo

首先我们介绍下Dubbo。Dubbo是一个基于Java的高性能、轻量级的RPC框架,由阿里巴巴开发并在近年广泛应用。它支持多种服务发现协议、多种负载均衡策略、多种熔断容错策略等,实现了请求的透明、智能化路由。但是,Dubbo并未内置完整的微服务治理方案,如配置管理、服务监控等。

2、Spring Cloud

接着,我们介绍下SpringCloud。Spring Cloud是Spring团队为开发人员提供的微服务框架,用以快速构建分布式系统中的微服务解决方案,包含服务注册与发现、配置管理、服务消费、负载均衡、断路器、数据监控等,并且继承了SpringBoot的开发便利性。这意味着开发人员可以非常便利快速的构建微服务应用。然而,SpringCloud的项目组件众多,实施复杂,学习成本较高。

3、SpringCloud Alibaba

最后,隆重的介绍下SpringCloud Alibaba。SpringCloud Alibaba集成了Alibaba系的一些开源产品,比如Nacos(实现了服务发现与配置管理的一体化)、以及配置中心。它在Spring Cloud的基础上,进一步提供了一整套微服务解决方案,降低了学习成本,为应用提供了便利,减少了SpringCloud版本迭代快速、升级风险大的问题。

在这里插入图片描述

总的来说,三者都是优秀的微服务框架,选择使用哪个,需要具体的业务场景和团队能力来决定。如果推崇轻量级,可以选择Dubbo;偏重全方位微服务解决方案,且阿里系的技术栈对团队更友好,那么SpringCloud Alibaba将是不错的选择。

三、玩转Spring Cloud Alibaba微服务架构

在这里插入图片描述

从微服务系统完整架构图,不难看出,如果想完全掌握并熟练应用微服务技术,需要掌握的技术还是不少的,简单整理如下。

1、需要掌握的技术

1,业务应用服务+基础应用服务 需要掌握SpringBoot。
2,身份认证+网关+鉴权 需要掌握Spring Gateway。
3,负载均衡 需要 Ribbon+nginx+keepalive。
4,异步通知,服务解耦 需要掌握 MQ。
5,系统性能+并发能力提升 需要用到缓存技术Redis。
6,文件读写,需要文件服务的搭建和应用,比如FastDFS,MiniIO等;
7,数据持久层技术+分布式事务+分库分表,需要掌握MyBatis Plus+Seata+ShardingSphere等;
8,分布式日志采集分析, 需要掌握ELK等;
9,服务链路追踪,指标收集,需要掌握SkyWalking+Grafana+Prometheus等;
10,分布式任务调度, 需要掌握xxljob等。
11,DevOps+CI&CD, 需要掌握Docker+Jenkins等。

对于以上技术,我会逐个进行深度讲解,每周会在在CSDN和公.众.号 “字节跑动” 更新,部分内容会在公.众.号 “字节跑动” 首发,敬请关注。通过文章的阅读和实践,能够一步一步玩转这些技术,轻松掌握Spring Cloud相关技术栈,并具备相应的实战能力,能够在工作中轻松拿捏微服务开发,掌握分布式事务的实际应用方法,Redis高可用高并发缓存集群应用和搭建实战,MQ高可用消息服务应用和搭建实战,分布式高可用搜索服务ES集群的应用和搭建,以及DevOps相关技术的掌握。

2、技术栈梳理

1,玩转SpringBoot;
SpringBoot应用,自定义Starter,SpringBoot原理,SpringBoot最佳实践等。
2,玩转微服务治理
服务注册,服务发现,服务调用, 配置管理,网关路由,微服务最佳实践等。
3,玩转Docker技术
Docker安装, Docker应用,Dockerfile,Docker私服,Dockcompose等。
4,玩转MQ
MQ消息模型,Spring AMQP,消息堆积问题,数据持久化,最佳实践等。
5,玩转Redis应用
Redis数据结构,SpringDataRedis,缓存穿透及防范,雪崩问题及防范,最佳实践等。
6,玩转ES集群
DSL语句,RestAPI应用,ES高可用集群,最佳实践等。
7,玩转微服务保护
服务流量控制,系统保护,熔断降级,服务授权,最佳实践等。
8,玩转分布式事务
分布式事务讲解,TCC模型应用,AT模型应用,Seata实战等。
9,玩转多级缓存,让系统飞起来
多级缓存拓扑,Redis缓存,应用缓存,OpenResty缓存,缓存数据同步,Nginx本地缓存等。
10,玩转Redis集群
Redis数据持久化,Redis主从复制,Redis集群, Lua脚本等;
11,玩转消息可靠性
消息可靠性持续化,MQ集群,延迟队列,消息幂等性等。
12,分布式日志分析服务
日志收集分析工具介绍,部署日志收集,日志分析实战等
13,系统监控与链路跟踪
监控工具分析,链路跟踪工具分析,实战等。

技术分享创作不易,新的内容正在热烈酝酿中,期待您的关注。每一次创作都倾注了我的心血,经验和汗水,如果您认可我的努力,烦请多多打赏,多多分享,多多关注(VX公.众.号:"字节跑动 "),让我能有更多的动力去创作,为您带来更多的精彩内容。非常感谢!