从架构视角了解SpringCloud

本篇主要从系统架构演进、微服务架构以及为什么要选择SpringCloud作为微服务架构三个层面进行分析,从中我们可以知道架构演进以及如何使用SpringCloud。

目录

1、系统架构演进历程

1.1 什么是集中式系统

1.2  什么是分布式系统

2、系统架构演进由来

3、什么是微服务架构

4、微服务架构的优点与不足

4.1 微服务优点

4.2 微服务不足

5、为什么要选择Spring Cloud

1) 稳定性

2)综合性解决方案

3)  应用门槛低

6、微服务设计遵循原则

6.1 职责单一原则

6.2 业务范围界定

6.3 恰当取舍

7、微服务全景图


1、系统架构演进历程

在系统架构演进过程中,主要经历了两个阶段。第一个阶段是2000年左右的集中式系统,第二个阶段是近几年流行的分布式系统。感兴趣的可以去看下我之前些的这篇文章:从电商系统看互联网场景下的分布式系统进化之路, 文中会告诉大家架构演进的过程以及为什么会出现这些架构。

1.1 什么是集中式系统

集中式系统也叫单体应用,就是把所有的程序、功能、模块都集中到一个项目中,部署在一台服务器上,从而对外提供服务。如下图,

 

对于刚起步的业务,而且即使出现系统宕机或者服务异常,对用户影响范围较小。我们往往会从企业或公司的成本角度考虑:将WEB服务器、文件服务器和数据库服务器部署在同一台物理机上。

1.2  什么是分布式系统

分布式系统就是把所有的程序、功能拆分成不同的子系统,部署在多台不同的服务器上,这些子系统相互协作共同对外提供服务,而对用户而言他并不知道后台是多个子系统和多台服务器在提供服务,在使用上和集中式系统一样。如下图,

分布式系统页成为服务化治理。 

服务化治理主要是针对原有业务耦合比较严重的系统进行垂直化改造,使整个系统拆分为各子系统,每个子系统负责独立的业务职责。这样便降低了业务逻辑耦合、提升应用的容错能力。最重要的是,对应研发而言,不同人员负责不同业务模块即可,职责分明,运维起来也轻松了不少。

综上, 我们知道所谓的集中式架构和分布式架构本质上是相反的两个概念,从事物变化层面上来看就是“合久必分”, 即分布式采用“分”的策略,而集中式采用“合”的策略。

2、系统架构演进由来

从互联网发展历程来看,系统进化的背景与中国互联网用户规模庞大有巨大关系,主要经历了四个阶段:

第一个阶段是传统网络, 主要是传统的网站当道,这个阶段持续了十几年; 第二阶段主要是网站和内容流型社交网络并存,这个阶段目前正在趋于尾声,已经持续了七、八年;第三阶段则是网站弱化、移动app与消息流型社交网络并存的阶段。这个阶段是目前正在发生的,却也持续有两、三年了; 第四阶段则是即将发生的。超级APP将以用户为基础,承载一切的内容与服务,最终完成互联网信息的全面整合。

据2022年最新统计,我国网民规模达10.51亿 互联网普及率74.4%。这么庞大的用户访问量对系统的架构设计是巨大的挑战。

对于传统型架构,在产品或者网站初期,通常功能较少,用户量也不多,所以一般按照单体应用进行设计和开发,按照经典的MVC三层架构设计即可满足。

那随着业务的发展,应用功能的增加,访问用户的增多,传统的采用集中式系统进行开发的方式就不再适用了,因为在这种情况下,集中式系统就会逐步变得非常庞大,很多人维护这么一个系统,开发、测试、上线都会造成很大问题,比如代码冲突,代码重复,逻辑错综混乱,代码逻辑复杂度增加,响应新需求的速度降低,隐藏的风险增大;

所以需要按照业务维度进行应用拆分,采用分布式开发,每个应用专职于做某一些方面的事情,比如将一个集中式系统拆分为用户服务、订单服务、产品服务、交易服务等,各个应用服务之间通过相互调用完成某一项业务功能。

3、什么是微服务架构

微服务最早是由Martin Fowler(马丁.福勒)与James Lewis与2014年共同提出的一种新的架构风格。

这里面有关于Martin Fowler的Microservices 的博文, 可以在他的官方博客上找到这篇文章:Microservices

简单地说, 微服务主旨是将一个原本独立的系统拆分成多个小型服务,这些小型服务都在各自独立的进程中运行,服务之间通过轻量级的机制进行通讯。如基于HTTP的RESTful API进行通信协作。

而被拆分后的每一个小型服务都围绕着系统中的某一项业务功能进行构建, 并且每个服务都是一个独立的项目,可以进行独立的测试、开发和部署等。这种拆分方式,在整个系统结构上或者从业务结构上来看,整个架构是非常清晰明了的,页非常利于敏捷式开发、测试和维护。

但万事都由两面性。那微服务架构存在哪些优缺点呢?接着往下看。

4、微服务架构的优点与不足

4.1 微服务优点

1)微服务架构将系统中的不同功能模块拆分成多个不同的服务,这些服务进行独立地开发和部署,每个服务都运行在自己的进程内,这样每个服务的更新都不会影响其他服务的运行;

2) 每个服务是独立部署的,所以我们可以更准确地监控每个服务的资源消耗情况,进行性能容量的评估,通过压力测试,也很容易发现各个服务间的性能瓶颈所在。

3)由于每个服务都是独立开发,项目的开发也比较方便,减少代码的冲突、代码的重复,逻辑处理流程也更加清晰,让后续的维护与扩展更加容易。

4) 微服务可以使用不同的编程语言进行开发,比如可以使用Java、C#、PHP、Go或者Scala等任意一种能提供服务的语言开发。

4.2 微服务不足

1)微服务架构增加了系统维护、部署的难度,导致一些功能模块或代码无法复用。

2)随着系统规模的日渐增长,微服务在一定程度上也会导致系统变得越来越复杂,增加了集成测试的复杂度。

3) 随着微服务的增多,数据的一致性问题,服务之间的通信成本等都凸显了出来。

综上所述,我们在架构设计时,一定不能是为了微服务而微服务。一定是紧密结合公司业务发展情况做出更优的架构选择,比如从成本层面考虑等。所以在系统架构时要提醒自己:为什么要做微服务化?做微服务化带来的价值是什么?为什么一定要现在做而不是未来某个时间点做? 这些问题是我们在做微服务选型前需要考虑清楚的。

5、为什么要选择Spring Cloud

近几年微服务架构的讨论非常火热,无数的架构师和开发者在实际项目中实践着微服务架构的设计理念,他们在微服务架构中针对不同应用场景出现的各种问题,也推出了很多解决方案和开源框架,其中我们国内的互联网企业也有一些著名的框架和方案.比如,阿里巴巴、百度、美团都在用的 Spring Cloud 微服务架构!

市场需求层面:

下面页由以下公司专门招聘SpringCLoud方向的人才。

技术选型层面:

我们知道,整个微服务架构是由大量的技术框架和方案构成,比如大厂案例有:

服务基础开发Spring MVC、Spring、SpringBoot

服务注册与发现Netflix的Eureka、Apache的ZooKeeper等

服务调用RPC调用有阿里巴巴的Dubbo,Rest方式调用有当当网Dubbo基础上扩展的Dubbox、 还有其他方式实现的Rest,比如Ribbon、Feign

分布式配置管理百度的Disconf、360的QConf、淘宝的Diamond、Netflix的Archaius

负载均衡Ribbon

服务熔断Hystrix

API网关 Zuul

批量任务 当当网的Elastic-Job、Linkedln的Azkaban

服务跟踪 京东的Hydra、Twitter的Zipkin等

但是在微服务架构上,几乎大部分的开源组件都只能解决某一个场景下的问题,所以这些实施微服务架构的公司也是整合来自不同公司或组织的诸多开源框架,并加入针对自身业务的一些改进,没有一个统一的架构方案;

所以当我们准备实施微服务架构时,我们要整合各个公司或组织的开源软件,而且某些开源软件又有多种选择,这导致在做技术选型的初期,需要花费大量的时间进行预备研、分析和实验,这些方案的整合没有得到充分的测试,可能在实践中会遇到各种各样的问题。

Spring Cloud的出现,可以说是为微服务架构迎来一缕曙光。

1) 稳定性

Spring Cloud 来源于 Spring,质量、稳定性、持续性都可以得到保证。有SpringCloud社区的巨大支持和技术保障,让我们实施微服务架构变得异常简单了起来。加之Spring Cloud 有其Spring 的强大技术背景,极高的社区活跃度,也许未来Spring Cloud会成为微服务的标准技术解决方案。

2)综合性解决方案

Spring Cloud不同于我们前面所列举的框架,只是为了解决微服务中的某一个问题,而是一个解决微服务架构实施的综合性解决框架,它整合了诸多被广泛实践和证明有效的框架作为实施的基础组件,又在该体系基础上创建了一些非常优秀的边缘组件将它们很好地整合起来。

3)  应用门槛低

首先,spirng Cloud 天然支持 Spring Boot,更加便于业务落地。这有助于我们可以快速在原有Spring Boot项目上使用。

其次,Spring Cloud 是 Java 领域最适合做微服务的框架。相比于其它框架,Spring Cloud 对微服务周边环境的支持力度最大。对于中小企业来讲,使用门槛较低。

其次,Spring Cloud 是微服务架构的最佳落地方案。它解决了分布式系统所存在一系列复杂问题。 包括网络问题,延迟开销,带宽问题,安全问题。如处理服务发现的能力,解决冗余问题;改进跨多个计算资源(例如计算机集群,网络链接,中央处理单元)的工作负载分布;减少因各种操作开销导致的性能问题等。

6、微服务设计遵循原则

那我们在微服务中应该怎样设计呢。以下是微服务的设计指南:

6.1 职责单一原则

把某一个微服务的功能聚焦在特定业务或者有限的范围内会有助于敏捷开发和服务的发布。

6.2 业务范围界定

设计阶段就需要把业务范围进行界定。需要关心微服务的业务范围,而不是服务的数量和规模尽量小。数量和规模需要依照业务功能而定。另外,与SOA架构不同,某个微服务的功能、操作和消息协议尽量简单。项目初期把服务的范围制定相对宽泛,随着深入,进一步重构服务,细分微服务是个很好的做法。

6.3 恰当取舍

在合适的项目,合适的团队,采用微服务架构收益会大于成本。 微服务架构有很多吸引人的地方,但在拥抱微服务之前,也需要认清它所带来的挑战。需要避免为了“微服务”而“微服务”。 另外,微服务架构引入策略,对传统企业的建议,开始时可以考虑引入部分合适的微服务架构原则对已有系统进行改造或新建微服务应用,逐步探索及积累微服务架构经验,而非全盘实施微服务架构。

7、微服务全景图

最后,来一张微服务全景图,让我们俯瞰整个微服务生态。

 以上!

猜你喜欢

转载自blog.csdn.net/wangyongfei5000/article/details/129823726
今日推荐