Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >软件架构演变过程

软件架构演变过程

作者头像
星哥玩云
发布于 2022-09-14 13:49:10
发布于 2022-09-14 13:49:10
1.1K0
举报
文章被收录于专栏:开源部署开源部署

1、系统架构的发展

1.1、单体应用阶段

在互联网发展的初期,用户数量少,一般网站的流量也很少,但硬件成本较高。很多企业会将所有的功能都集成在一起开发一个单体应用,然后将单体应用部署到一台服务器上.一个简单的单本应用如图:

虽然应用是最初的架构,但是目前它并没有消失,还在不停的发展和演进,依然拥有巨大的市场。例如:采用MVC、MVP、MVVM开发的单体应用程序依然火爆,仍能够满足实际业务需求.

1.1.1 单体应用的优点
  • 易于集中式开发、测试、管理和部署
  • 无须考虑跨语言
  • 能够避免功能重复开发
1.1.2 单体应用的缺点
  • 团队合作困难
  • 代码的维护、重构、部署都比较难
  • 稳定性、可用性(停机维护)、扩展性不高
  • 需要绑定某种特定的开发语言

1.2 垂直应用阶段

为了应对更高的并发、业务需求和解决单体应用的缺点,需要根据业务功能对单体应用的架构方法进行演进,如图:

  • 拆分后的系统可以解决高并发、资源按需分配的问题
  • 可以针对不同的模块进行优化和资源分配

拆分应有两种方式:水平拆分和垂直拆分

1.2.1 水平拆分

水平拆分是指根据业务来拆分应用.例如,原应用中包含订单、会员两个部分,拆分后可以将其拆分成订单系统和会员系统

其优点是:拆分后保证业务之间的相互影响较小,能合理地分配硬件资源(不同的业务对浏览和性能的要求是不一样的).但是这样可能会导致整个系统存在"重复造轮子"的问题,而且难于维护

1.2.2 垂直拆分

垂直拆分是根据调用方法对系统进行拆分.比如,会员系统可以垂直拆分为普通用户和企业用户

其优点是:能按需分配资源和流量,各个垂直调用之间互不影响;但是同样是"重复造轮子"

1.3 分布式系统阶段

在分布式系统中,各个小系统之间的交互是不可避免的,此时可将核心业务作为独立的服务抽取出来,

逐渐形成稳定的基础服务,如图:

其优点是:对基础服务进行了抽取,服务之间可以相互调用,提高了代码的复用和开发效率

其缺点是:业务间耦合度变高;调用关系错综复杂;系统难以维护;在搭建集群后,很难实现负载均衡

1.4 服务治理阶段

在服务治理(SOA)架构中,需要一个企业服务总线(ESB)将基于不同无图协议的服务节点连接起来,它的工作是转换、解释消息和路由。服务治理架构如图:

SOA解决了以下问题:

  • 服务间的通信问题:引入了ESB、技术规范、服务管理规范,从而解决了不同服务间的通信问题
  • 基础服务的梳理问题:以ESB为中心梳理和规整分布式服务
  • 业务的服务化问题:以业务为驱动,将业务单元封装到服务中
  • 服务的可复用性问题:将业务功能设计为通用的业务服务,以实现业务逻辑的复用

随着业务复杂性、需求多变性和用户规模的不断增长,敏捷开发DevOps(一种过程、方法的统称,用于促进开发、运维和质量保证部门之间的沟通、合作和整合)变得特别重要。

1.5 微服务阶段

微服务(Microservices)架构是指:将系统的业务功能划分为极小的独立微服务,每个微服务只关注于完成某个小的任务。系统中的单个微服务可以被独立部署和扩展,且各个微服务之间高内聚、松耦合的。微服务之间采用轻量化通信机制暴露接口来实现通信。

微服务系统架构如图:

1.6 服务网络阶段

服务网格(Service Mesh)独立于服务之外运行,是服务间通信的基础设施层。服务网络类似于在每个服务上粘贴的功能模块。如图:

服务之间通过Sidercar(边车)进行通信,所有Sidercar和网络连接就形成了Service Mesh。

组件说明:

  • SiderCar主要负责服务发现和容错处理
  • 数据平台: 处理服务间通信,并实现服务发现、负载均衡、流量管理、健康检查等
  • 控制平台: 管理并配置Sidercar,以执行策略和收集数据

2、主流的微服务框架

2.1 Dubbo

2.1.1 Dubbo概述

Dubbo致力于提供高性能和透明化的远程服务调用方案和SOA服务治理方案。Dubbo也是采用了Spring的配置方式,对应用没用API没有侵入。

2.1.2 Dubbo的核心功能
  • 面向接口的高性能RPC调用
  • 智能负载均衡
  • 服务的自动注册与发现
  • 高度的可扩展
  • 运行期流量调度
  • 可视化的服务治理与运维

2.2 Spring Cloud

2.2.1 Spring Cloud概述

Spring Cloud是基于Spring boot的一个快速开发微服务的框架。它提供了开发微服务所需的一些常见组件。

  • 服务发现(Spring Cloud通过DiscoveryClient接口实现类,让服务中心发现服务)
  • 断路器(底层服务出现故障可能导致用户级联故障,Spring Cloud 采用断路器机制解决问题。电路关闭,不进行通信,电路打开进行通信)
  • 智能路由(路由功能是微服务的一部分,比如/api/user转发到到user服务,/api/shop转发到到shop服务)
  • 微代理(统一代理控制请求入口,弱化各个微服务被客户端记忆功能)
  • 控制总线(利用分布式消息将服务和服务实例连接在一起,用于在一个集群中传播状态的变化)
  • 一次性令牌(使用一次就失效)
  • 全局锁(在并发时全局锁定资源)
  • 领导选举(基于Zookeeper, Redis, Hazelcast, Consul实现的领导选举的抽象和实现)
  • 配置管理(Spring Cloud 利用配置中心统一管理配置)
  • 分布式会话(Springcloud微服务项目中,使用redis实现简单高效的session共享)
  • 集群状态(集群的健康状态)

Spring Clou使得构建大型系统变得非常容易和低成本。小型项目可以采用SpringBoot进行架构,当需要升级到微服务架构时,可以使用Spring Cloud方便地对其进行升级。

2.2.2 Spring Cloud核心功能
  • 分布式、版本化配置
  • 服务注册与发现
  • 路由
  • 负载均衡
  • 断路器
  • 分布式消息传递

3、服务网络(Service Mesh)框架lstio

3.1 lstio概述

lstio将流量管理添加到微服务中,提供了连接、安全、管理和监控微服务的方案。

3.2 lstio 核心功能

  • 流量管理
  • 安全
  • 监控功能
  • 平台无关性

4、比较Dubbo、Spring Cloud和lstio

对比项

Dubbo

Spring Cloud

lstio

学习曲线

一般

平滑,有大量成熟的实例

资料较少

开发效率

集成性

Jar包依赖的问题多

基于Spring Boot,更加便于业务落地

目前只在Kubernets上支持比较好

文档

齐全

英文文档齐全

齐全

支持言语

Java、Node.js等

Java、Kotlin、Groovy

与语言无关

开源社区

活跃度低

活跃度高

活跃度高

客户端负载均衡

Ribbon

Envoy

批量任务

Spring Bathc

总结:

Spring Cloud 是Spring家庭产品,一直保持着更新和完善。Spring Cloud的一站式解决方案对于资金和技术实力有限的中小型互联网公司来说是极佳的选择。Spring Cloud 在现阶段或未来较长时间内是最为稳妥的微服务框架。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
不是所有的应用都需要Service Mesh架构
采访嘉宾 | 张培培 编辑 | Tina “微服务架构”的含义在过去十年里不断演变,今天的服务网格实现已经相当复杂,第二代 Service Mesh 诞生在 Kubernetes 之后,它的代表是 lstio。在 lstio 之外,同时存在着各种层出不穷的框架,解决的却都是相同的问题。 正确的选择框架却不是件简单的事情。就像在容器编排领域,之前我们有 Kubernetes、Docker Swarm、Mesos 和 Cloud Foundry,其中一些后来逐渐被市场淘汰,没有选择 Kubernetes 的企
深度学习与Python
2023/04/01
5640
不是所有的应用都需要Service Mesh架构
Nacos架构与原理 -服务网格生态
要深入理解服务网格的概念,明确服务网格要解决的问题,以及认识服务网格带来的业务价值,需要从应用架构的演进发展从头开始讲起。
小小工匠
2023/07/11
1.2K0
Nacos架构与原理 -服务网格生态
微服务架构体系
分布式关注的是服务分开部署,也就是如何将单一服务部署,变为多服务部署(垂直+水平拆分)。 微服务关注的是服务拆分力度,即:一个服务要拆分到多大的维度合适
架构之家
2022/07/12
8850
微服务架构体系
带你认识互联网架构的演变过程
1.分层开发:解决单体架构容错性差的问题,同时提高了代码的维护性。 2.MVC架构(Web应用程序的设计模式) 3.服务器的部署分离。 特点: 1.MVC分层开发:解决容错性问题。 2.数据库和项目部署分离。 问题: 1.高并发:随着用户访问量的持续增加,单台服务器无法满足用户访问需求。 解决方案: 1.集群
攻城狮Chova
2022/01/22
2980
从架构演进的角度聊聊Spring Cloud都做了些什么?
Spring Cloud作为一套微服务治理的框架,几乎考虑到了微服务治理的方方面面,之前也写过一些关于Spring Cloud文章,主要偏重各组件的使用,本篇主要解答这两个问题:Spring Cloud在微服务的架构中都做了哪些事情?Spring Cloud提供的这些功能对微服务的架构提供了怎样的便利? 这也是我写Spring Cloud三部曲的最后一篇文章,前两面篇内容如下: 中小型互联网公司微服务实践-经验和教训 Spring Cloud在国内中小型公司能用起来吗? 我们先来简单回顾一下,我们以往互联
纯洁的微笑
2018/04/18
8860
从架构演进的角度聊聊Spring Cloud都做了些什么?
Service Mesh开源实现之Istio架构概览
在之前关于Service Mesh(服务网格)的系列文章中,我们从实战的角度分享了一些关于Istio的入门安装、服务发现、熔断限流及流量管理(灰度发布)等细节方面的内容(可参考文末推荐阅读)。
用户5927304
2021/10/20
9830
应用技术架构 —— 微服务架构
在 2010s 进入移动互联网(web3.0)时代,互联网用户规模再次迎来井喷式增长,面向服务的技术架构在服务海量规模用户时显得力不从心。SOA 架构中 ESB 存在单点以及 RPC 中缺少服务的治理能力,ESB 和 RPC 架构都很难满足移动互联网海量用户的要求,微服务开始出现,并成为今天技术架构的主流。
腾讯云 CODING
2022/03/16
1.9K0
应用技术架构 —— 微服务架构
干货|软件架构的演化过程
目前大部分的企业系统和互联网应用都是采用的Web形式提供服务能力,根据系统的组织和部署结构。
用户10245619
2023/02/23
1.1K0
干货|软件架构的演化过程
SpringCloud——微服务介绍+系统架构
* 全部功能集成在一个工程中,对于大型项目来讲不易开发和维护* 项目模块之间紧密耦合,单点容错率低* 无法针对不同模块进行针对性能优化和水平扩展
用户10196776
2022/11/22
1.1K0
SpringCloud——微服务介绍+系统架构
日均服务调用超65万亿!腾讯是怎么做云原生微服务治理的?
云原生时代,越来越多的企业借助于微服务与容器化,来提升业务弹性与研发效率。在服务治理的道路上,我们也吸取各家之所长打磨了相关的产品。本次分享以腾讯微服务架构建设为主,介绍了 TCS/TSF、北极星(PolarisMesh)和微服务治理方面的实践经验,以及在企业的相关落地案例。
腾讯云开发者
2024/12/03
8250
日均服务调用超65万亿!腾讯是怎么做云原生微服务治理的?
微服务架构详解
首先微服务并没有一个官方的定义,想要直接描述微服务比较困难,我们可以通过对比传统WEB应用,来理解什么是微服务。
技术zhai
2019/02/15
1.4K0
微服务之基础知识
微服务是系统架构上的一种设计风格, 它的主旨是将一个原本独立的系统拆分成多个小型服务,这些小型服务都在各自独立的进程中运行,服务之间通过基于HTTP的RESTful API进行通信协作。 被拆分成的每一个小型服务都围绕着系统中的某一项或一些耦合度较高的业务功能进行构建, 并且每个服务都维护着自身的数据存储、 业务开发、自动化测试案例以及独立部署机制。 由千有了轻量级的通信协作基础, 所以这些微服务可以使用不同的语言来编写。
Jacob丶
2020/08/05
4040
day9 | 架构初探-谁动了我的蛋糕 | 第三届字节跳动青训营笔记
同时这也是课表的第9天课程《架构初探-谁动了我的蛋糕》。PC端阅读效果更佳,点击文末:阅读原文即可。
千羽
2022/11/11
7800
day9 | 架构初探-谁动了我的蛋糕 | 第三届字节跳动青训营笔记
云原生之微服务架构
傍晚时分,你坐在屋檐下,看着天慢慢地黑下去,心里寂寞而凄凉,感到自己的生命被剥夺了。当时我是个年轻人,但我害怕这样生活下去,衰老下去。在我看来,这是比死亡更可怕的事。--------王小波
山河已无恙
2023/01/30
9300
云原生之微服务架构
构建云原生架构版图:安信证券服务化平台实践
本文描述了安信证券服务化平台实践之路,包括对微服务、容器和云原生等技术的理解、业务系统研发过程中面临的实际问题、服务化平台路线规划、解决方案和实践案例,最后展望平台的未来发展方向。希望能够将实践内容和思考与读者呈现,共同探索这一领域的演进方向。
深度学习与Python
2020/12/07
9570
SpringCloud-微服务项目架构
在当今软件开发领域,微服务架构正成为构建灵活、可伸缩、独立部署的应用的首选,微服务架构作为一种灵活而强大的设计模式,通过将系统拆分为独立的、自治的服务,使得应用更容易维护、扩展和升级。本文将探讨微服务项目架构的关键特征和设计原则,帮助读者更好地理解和应用这一先进的软件设计范式。
Damon小智
2024/02/07
6981
SpringCloud-微服务项目架构
微服务架构的演变及其设计思想
微服务架构的演变是一个逐步发展和成熟的过程,它建立在传统软件架构演进的基础之上。微服务架构主要的演变阶段:
用户7353950
2024/06/18
3550
微服务架构的演变及其设计思想
从Spring Cloud 开始,聊一聊微服务架构的设计与实战
随着互联网的发展,网站应用的规模也在不断的扩大,进而导致系统架构也在不断的进行变化。
Java程序猿
2022/07/31
5530
架构师必须要知道的阿里的中台战略与微服务
  传统企业平台都是烟囱式的系统架构,企业内部为了迎合业务发展不停的打造各种系统,导致各系统间的重复功能建设和维护带来的重复投资。重复投资不仅消耗的是人力,财力还有时间。但打通烟囱式系统间交互的集成和协作成本高昂,各大企业不得不借助ESB产品,构建企业服务总线,打通各系统间的交互问题。
欢醉
2019/05/25
1.4K0
从单体到微服务:如何借助 Spring Cloud 实现架构转型
Spring Cloud 是一套基于 Spring 框架的微服务架构解决方案,它提供了一系列的工具和组件,帮助开发者快速构建分布式系统,尤其是微服务架构。
用户7954602
2024/12/06
4530
从单体到微服务:如何借助 Spring Cloud 实现架构转型
推荐阅读
相关推荐
不是所有的应用都需要Service Mesh架构
更多 >
LV.5
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档