微服务架构学习与思考(12):从单体架构到微服务架构的演进历程

从单体架构到微服务架构的详细演化历程 代码难以理解,导致代码质量逐渐降低,复杂性逐渐增加,代码难以被修改和重构,简言之:屎山。"屎山"懂得都懂,代码量大耦合度高动一发乱全身,构建和部署耗时长,难以定位问题,大部分时间花费在解决代码冲突上,导致开发效率极低,可靠性差,一个bug可能会引起整个应用崩溃。伸缩性差,单体只能按整体横向扩展,无法分模块垂直扩展,无法分团队独立开发部署;IO密集型模块和CPU密集型模块无法独立升级和扩容。高度耦合的单体工程使得逻辑边界模糊不清,新业务需求开发任务无法有效分配到人,团队人员职责不清晰,沟通成本增加。 阅读详情

从单体架构到微服务架构的演进历程

一、单体架构

1.1 什么时候用单体架构

在创业初期或项目开始时,项目整体功能比较少,开发人员也少,且项目需要用最少时间开发出来,用 MVP 方式快速进行市场验证是否可行,这时候就可以用单体架构进行快速开发。

1.2 单体架构设计举例-电商应用

功能分析:

拿淘宝网来举例,现代电商网站功能是很复杂的,有多少功能呢?可以看看我前面的文章《电商产品设计全攻略》读书笔记(https://www.cnblogs.com/jiujuan/p/14452748.html#1574269892) 里的电商管理系统和电商平台产品结构 2 小节。

拿淘宝网举例的话,当然是最早期的淘宝网 - -!,它最简单的 3 个功能:商品展示,用户下单,订单中心。这三个功能构成一个最简单的电商业务流程。

展示给用户看的商品页面以及用户购买商品的操作功能。那我们需要对用户和订单进行管理,怎么办?

就需要一个管理后台来对用户订单进行管理。如此简单分析过后,就知道了电商网站应用功能。

应用功能架构图:

image-20230124022153045

程序架构设计:

这时候我们开发的单体应用程序,部署在应用服务器上。程序架构可能采用 MVC 这种程序架构模式。

当然也有可能什么架构都不用,直接撸代码了,所有的程序都混合在一起,这就是所谓的“大泥球”单体,这是一种糟糕的开发方式。

java 里最常用的 MVC 框架,比如 SpringMVC 框架。

  1. 划分模块

比如根据上面电商功能架构图,在程序里可以把电商功能划分为相对应的模块,如用户模块,订单模块,商品模块。

这时程序里不管是前台功能,后台功能都有这些模块。

image-20230124110006299

​ (应用程序模块)

这时候应用程序模块都在一个大的单体项目里,前台功能和管理后台共用一套代码。

  1. 模块里的功能

比如前台商品模块,就有商品列表,商品详情页等页面功能。

  1. 程序开发

编写程序时可能应用 MVC 这种程序设计模式来进行程序代码开发。

程序部署架构图:

image-20230124122806802

编写的程序代码部署到应用服务器上,用户的所有数据存储到 MySQL 数据库里。

程序和 MySQL 都部署在同一台服务器上。

二、单体架构程序演进

2.1 MySQL 性能瓶颈-缓存

随着项目上线,公司对项目加大力度推广和运营,用户数越来越多。

有一天,用户投诉说,商品详情页面浏览好慢。如是你一番操作猛如虎,发现详情页显示慢,性能瓶颈出现在数据库 MySQL 上,

MySQL 在用户访问高峰时,扛不住那么大的访问量。这时你想到的解决方法,可以用缓存来缓存一部分数据,不必每次都到 MySQL 取数据,

可以用 Redis 来缓存部分商品信息数据。如是,增加一个 Redis 缓存,架构图如下:

image-20230124122020910

2.2 MySQL 读写分离

这时候,你也可能想到另外的一种方法:数据的读写分离,减轻对 MySQL 访问压力。

image-20230124122113934

经过上面 2 种措施改进后,商品详情页访问速度开始变快,访问正常了。

但是这种舒服日子没过几个月,又有用户开始反馈页面访问比较慢。

你又一番埋头辛苦分析,发现是单台服务器负载高,单台服务器的性能已经到了极限,它已经承载不了那么多用户的访问。

如是你想,把数据存储和应用程序部署到 2 台服务器上,减轻服务器的负载压力。

2.3:数据存储和应用程序服务器分离

于是你申请买了一台服务器,把 MySQL 和 Redis 都部署在这台新买的服务器上,让原来那台服务器负载得到缓解。

image-20230124122240609

新的架构部署成功后,用户访问页面又恢复正常。

但是随着业务发展越来越好,新增用户越来越多,应用服务器的负载又居高不下了。

这时候要增加新的应用服务器了,这样做是最简单的。多台应用服务器形成集群,那怎么访问这些应用服务器?才能使每台服务器负载保持平衡,或者性能好的多接受一些用户访问?这时候就要用到负载均衡了。

2.4 集群-分布式

集群-负载均衡(多台应用服务器)

部署多台应用服务器形成一个应用服务器集群,前面用户通过负载均衡器来进行服务的访问。

image-20230124124859989

比较常用的负载均衡软件有 Nginx、LVS、KeepAlived 等等。

还有硬件负载均衡,比如 F5 等。

部署后,页面访问又恢复了正常。

过了几个月,数据服务器也出现负载过高情况,这时候可以把 Redis 缓存和 MySQL 分离,部署到不同服务器上。

随着数据量增加,把 Redis 部署为分布式缓存。

数据库分离和 Redis 分布式缓存

image-20230124130955865

把 MySQL 和缓存 Redis 部署到不同的服务器上。

随着缓存数据的增多,Redis 也部署为主从模式,然后到 Redis Cluster 集群模式,也就是 Redis 的分布式缓存。

此时数据存储服务器负载得到缓解,访问恢复正常。

由于业务发展太快,用户变得更多,数据库又出现了性能瓶颈,这时可以对数据库进行分库分表

分库分表

为了进一步的降低数据库由于数据量太多,访问太大而造成的瓶颈,可以对数据库进行分库分表,减轻数据库的访问压力。

搜索分离

把搜索独立出来,用 Elasticsearch 进行全局搜索处理。

分布式文件存储

使用 HDFS 进行分布式文件存储。
对象存储、块存储、文件存储 Ceph。

三、应用程序发展演进

3.1 应用程序功能变化-硬件发展

上面画的架构图都是后端技术部分,服务端架构从单体到集群再到分布式的演进。

那么前面给用户使用的应用程序呢?也是在变化之中。

比如在《淘宝技术这十年》里的淘宝网的发展变化,刚开始时是一个很简单的 PC 端页面,到后来随着手机普及,移动互联网发展起来,

手机应用就出现了。淘宝 APP 也随之出现。随着国民应用微信逐渐发展壮大,小程序也成为第三种互联网程序应用形式。当然,还有其它终端,比如平板 ipad,自动售货机等等各种终端。

上面是不同硬件出现,程序应用承载出现不同形式。

image-20230124185223955

​ (多终端用户出现后的架构图)

那么淘宝网的功能呢?当然增加了很多。

还孵化出了多种不同的业务应用,比如天猫,1688,支付宝,聚划算,淘宝旺旺等等很多应用。

在今年 2013.1 再去打开淘宝 APP 看看,里面的功能多到眼花缭乱。

现在的电商系统有哪些子系统,系统里都有啥功能,可以看看我之前发布的这篇文章。

3.2 多端程序单体架构

多种终端的出现,当然不是一下子就出来的,都有一个发展过程,只不过到写这篇文章为止,出现了上面说的PC,手机 APP、小程序,平板等多个终端,最常用的还是前面 3 种。

最开始开发程序时,应用程序要适应多个终端,最简单的方式就是拷贝 PC 端的代码到多个终端程序里。按照上面 1.2 小节的电商最简单业务功能模块实现,多终端应用程序功能架构如下:

image-20230124193811484

​ (后端功能模块架构图)

上面的三种终端程序应用,还是使用同一个 MySQL 数据库,也及是说订单数据、用户数据等都存储在一个库中。

可能会问,怎么区分订单来自哪一个终端?

可以给订单数据一个类型标识来进行区分,订单是从哪一个终端过来的。

那管理后台呢?

多终端程序可以共用一个管理后台。

多终端的后台功能模块都搞起来了,但是这种程序模块架构有什么弊端缺点呢?

  1. 代码重复
  2. 增加/修改功能复杂:比如说要修改一个订单模块的功能,需要修改 3 个终端的后台代码
  3. 代码维护复杂:每次维护代码都需要动 3 个后端的代码

那有没有办法可以改进上面所说的情况?

能不能把 3 个后端重复模块代码合并为一个,统一向前端提供服务,当然是可以的。怎么做?

  1. 前后端分离 - 把前后端代码进行分离,前端展示操作页面和后端功能模块分离
  2. 抽象公共模块 - 把多个后端公共模块进行抽象为一个模块,为前端提供统一服务

3.3 前后端分离,抽象公共模块

页面前后端分离,其实在上面 1.1 小节的单体架构中也可以这样实施前后端分离。

多个终端当然也可以进行前后端分离,这样不用开发多个终端的页面,程序代码进行适配就可以了。前端现在有很多种多终端适配的技术。

后端的多个相同功能模块进行抽象,变成一个共用模块,对外提供服务。

这种方式提供功能服务我想到的有 3 种方式:

第一种:单体结构-函数提供接口

后端还是在一个单体工程下面,但是公共功能抽象为一个函数或对象接口,对外提供服务。

后端其他模块引入这个模块然后调用函数或者对象,完成程序功能开发。

应用程序结构图如下:

image-20230124225610407

第二种:用 Maven 当作一个远程包引入

在 java 里,用 maven 可以引入一个远程包进行使用。我们可以用这种方式引入公共功能包。

在 Go 里,用 module 模块方法引入远程包使用。

第三种:RPC 方式调用

这种方式是把应用程序里的公共模块功能变成一个独立的服务,对外提供服务。这个”外“是公司内部的业务可以调用这个服务。公司以外的应用就不可以调用这个服务。

这里也有2种方式,

第一种:只是公共模块独立提供服务,数据库还是共用。

第二种:数据库随着公共模块一起,独立对外提供服务。

我们来讨论第二种情况,既然要作为一个独立的服务存在,它就是自适应自维护的,此时数据库变成独立数据库,跟着它的服务模块一起独立。

此时不仅应用模块进行分离,应用服务器也进行了分离。

这时候就有点微服务的味道了。

image-20230124233108779

四、微服务架构演进

4.1 架构宏观演进:单体->SOA->微服务

架构宏观演进如下图:单体->SOA->微服务->serverless

image
(来自:blog.bytebytego.com)

有的人认为上面这张架构演进图少了一部分,对业务按照功能进行垂直划分,也就是对大单体应用划分为小的应用,这一架构变化,如是有下面这张架构演进图:

image

现在 SOA 架构已经很少使用了,应用拆分之后,如果服务越来越多,慢慢就进化到微服务架构了。

对于微服务的了解,可以看看我前面关于微服务系列文章的讲解,比如下面文章:

微服务的技术架构实际是一个体系,它是由很多技术组成的。

4.2 以 SpringCloud 和 Golang 为基础的微服务技术体系

下面重点说说 SpringCloud。

最开始最 netflix 公司开源的以 springcloud 为基础的微服务技术体系,它把微服务体系开源了。不过后来 netflix 放弃维护它开源的微服务框架。

但是 spring 框架的公司和阿里巴巴都开源了自己的以 springcloud 为基础的微服务体系,阿里巴巴叫 springcloud-alibaba。

阿里还开源了另外一个微服务框架 dubbo。

这些框架都提供了一些主要功能:服务发现和注册,限流熔断,链路追踪,RPC通信,网关等功能。

SpringCloud 微服务体系有哪些缺点?

  1. 代码侵入性强 - 业务层中需要加入治理层代码,与治理层混淆在一起
  2. 组件多 - 组件多,学习成本就变高
  3. 治理功能不全 - 比如协议转换、动态请求路由、灰度发布等功能
  4. 无法实现语义无关性 - 只能是一种语言或几种语言实现,无法做到与编程语言无关

针对以上的一些问题,就出现了 Service Mesh 这种架构,它作为一个基础设施层,真正做到与业务解耦,与语言无关,解决复杂架构下微服务应用与微服务应用之间网络相关问题。

其实就是把网络相关功能拆分出来,与业务系统解耦。

image

4.3 Service Mesh

Service Mesh 解决复杂系统架构下微服务应用与微服务应用之间网络相关问题,它的实现形态一般为轻量级的网络代理,以应用以边车(SideCar)模式部署。

第一代ServiceMesh

image-20230125001047147

​ (from:https://philcalcado.com/2017/08/03/pattern_service_mesh.html ,Phil Calçado)

来看一个全局图:

​ image-20230125001700722

​ (from:https://philcalcado.com/2017/08/03/pattern_service_mesh.html ,Phil Calçado)

绿色:应用服务

蓝色:SideCar

第二代 ServiceMesh:istio

第一代 Service Mesh 是由独立运行的单机服务代理构成,为了提供统一的控制入口,演进出了统一的控制面板,称为 control plane。

控制面板(control plane)和数据面板(data plane,即边车代理)进行交互,比如策略下发、数据采集等。这就是以Istio为代表的第二代Service Mesh。

image-20230125002338290

​ (from:https://philcalcado.com/2017/08/03/pattern_service_mesh.html ,Phil Calçado)

image-20230125002415442

​ (from:https://philcalcado.com/2017/08/03/pattern_service_mesh.html ,Phil Calçado)

Istio架构,Istio 服务网格从逻辑上分为数据平面和控制平面:

image
(from:https://istio.io/)

springcloud 与 ServiceMesh 的区别:

image-20230125002930584

​ (from:https://medium.com/codex/a-spring-cloud-compatible-service-mesh-6ce58c571012)

4.4 kubernetes(k8s)

一图解千言

image-20230529194906925

(来源:redhat blog:spring-cloud-for-microservices-compared-to-kubernetes, Bilgin Ibryam )


第1次更新日期: 2023.05.31
第2次更新日期: 2024.05.25 增加单体到微服务架构演进图


大家可以到俺公众号继续讨论:九卷技术录-从单体架构到微服务架构的演进历程


五、参考

  • https://philcalcado.com/2017/08/03/pattern_service_mesh.html Pattern: Service Mesh,详细介绍了微服务到 Servie Mesh的演进

  • https://medium.com/codex/a-spring-cloud-compatible-service-mesh-6ce58c571012

  • https://www.cnblogs.com/jiujuan/p/14452748.html 《电商产品设计全攻略》读书笔记

  • https://www.cnblogs.com/jiujuan/p/13301055.html 微服务架构学习与思考(04):微服务技术体系

  • https://developers.redhat.com/blog/2016/12/09/spring-cloud-for-microservices-compared-to-kubernetes Spring Cloud for Microservices Compared to Kubernetes,(redhat blog,Bilgin Ibryam)

  • https://istio.io/

面试官:单体架构怎么向分布式微服务架构演变的?(8000字) 随着网站规模越来越大,单体应用往往很难再满足要求,就需要向分布式,微服务架构演变。那么这个演变过程是怎么样的呢?都涉及到哪些组件,会遇到哪些问题,以及相应的解决方案都是什么,本篇文章就来回答这些问题。本文将介绍微服务架构和相关的组件,介绍他们是什么以及为什么要使用微服务架构和这些组件。本文侧重于简明地表达微服务架构的全局图景,因此不会涉及具体如何使用组件等细节。要理解微服务,首先要先理解不是微服务的那些。通常跟微服务相对的是单体应用,即将所有功能都打包成在一个独立单元的应用程序。 阅读详情

相关推荐

微服务架构的演进与实践:从单体到分布式

微服务架构的引入,极大地改善了单体架构中存在的可扩展性、部署、维护等问题,但也带来了新的复杂性。其核心优势在于服务的独立性高可扩展性和灵活的技术栈选择,但它也需要解决服务间通信、数据一致性、故障恢复等诸多挑战。在实际应用中,微服务架构并非一蹴而就的解决方案,而是一个循序渐进的过程。通过合理的服务划分、完善的通信协议和高效的监控体系,微服务架构能够满足大规模分布式系统的需求,推动企业数字化转型和业务创新。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1145

单体架构到微服务架构演进

随着互联网的发展,互联网企业的业务也在不断的飞速发展,进而导致系统的架构也在不断的发生着变化。总体来说,系统的架构大致经历了:单体应用架构—>垂直应用架构—>分布式架构—>SOA架构—>微服务架构的演变。 当然,很多互联网企业的系统架构已经向Service Mesh(服务化网格)演变。本文记录系统架构的演进这个话题。互联网早期,一般的网站应用流量较小,只需要一个应用,将所有的功能代码打包成一个服务,部署到服务器上就能支撑公司的业务。这样也能够减少开发、部署和维护的成本。比如在电商系统中涉及的业务主要有:用户

m0_49692893的博客 1738

Java Web架构演进与技术思考

微服务架构是一种用于开发单个应用程序的方法,其中应用程序可被视为一组微小的、独立的服务,每个服务都可由不同的程序员或团队开发,并可独立于其他服务运行。每个服务都实现一个小型API,可以使用任何编程语言编写,服务之间通过API相互调用。Spring Boot是一个基于Spring框架的快速开发Web应用的微服务架构,它采用约定大于配置的方式,避免了大量的XML配置文件和繁琐的环境部署,极大地提高了开发效率和运行效果。

陈书予 7317

SpringCloud+Oauth2+Vue+ElementUI前后端分离快速上手项目实战开发

适用人群Java开发人员, Vue开发人员, 前后端分离开发人员, 权限管理和配置开发人员,微服务SpringCloud版本开发人员课程概述微服务SpringCloud前后端分离Vue企业项目实战,微服务脚手架,具有统一授权、认证后台管理系统;SpringCloud+Nacos+ SpringBoot+OAuth2+Jwt+Swagger等,核心技术采用Nacos、Fegin、Ribbon、Gateway、Hystrix、JWT Token、Mybatis、SpringBoot、Redis等主要框架和中间件。SpringCloud整合详细如下:

告别F5失灵!手把手教你为Cursor配置.Net Core控制台项目专属调试环境

本文详细指导如何在Cursor编辑器中为.Net Core控制台项目配置专属调试环境,解决F5失灵等常见问题。从调试器选择到launch.json配置,再到高级调试技巧,帮助开发者高效搭建完整的调试工具链,提升开发效率。

weixin_28834765的博客 286

Applied Intelligence投稿经验分享(正在投稿中)

这几天在投稿Applied Intelligence这个期刊,过程很曲折,反反复复,因此写一篇经验分享,希望能记录一下自己的过程,也能给其他人一些帮助(可以在评论区讨论),提醒一下,一定要写一些声明,不会写、不知道写啥就看第四章的第二个问题。

weixin_55988068的博客 1万+

微服务架构思考

另外,引入ESB进一步简化了系统集成的问题,降低了不同服务之间的耦合,但是系统大了之后,各个服务接口的协议也变多,ESB需理解这些协议才能执行后续的订阅分发、转发等操作,协议的维护会变得困难。软件服务架构的演变过程及原因,从单体架构、分布式架构、SOA架构,到如今流行的微服务架构。SOA架构进一步解决了分布架构存在的问题,它可以将一些公共的功能提炼为基础服务,提高功能复用性,同时这些基础服务、各个子系统也可以进行更细粒度的伸缩,同时,采用ESB也减少了整个系统中服务与服务之间的耦合。

小蒋聊技术 979

ESP8266入门(一)固件烧录及常见问题分析

为了实现对数据的远程收集和分析,偶然间发现了esp8266这个模块,对此进行了深入的学习,可是在学习之初遇到了大量的问题,这个系列文章就为大家讲讲我遇到的坑以及解决办法,还有esp8266如何连上oneNet云平台的方法。因为我用的是esp8266nodemcu,可以直接连接usb进行烧录,如果用模块的话接线就比较麻烦,可以去搜搜看.

Jerryxuzherui的博客 8955

Badgeyay项目架构演进:从单体到微服务的完整思考指南

Badgeyay是一款专业的会议徽章生成工具,为活动组织者提供简单易用的界面来创建和生成可打印的徽章PDF。本文将深入探讨Badgeyay项目架构从传统单体架构向现代化微服务架构的演进历程,帮助您理解开源项目架构设计的核心思考。 ## 📊 项目架构演进背景 Badgeyay最初采用传统的单体架构设计,将所有功能模块集成在一个应用中。随着用户需求的增长和功能复杂度的提升,项目团队开始探索更加灵

gitblog_00410的博客 785

Figma汉化教程

Figma汉化教程

cc蒲公英的博客 1万+

C# WinForm和Sherlock进行对接

文章目录 前言 一、使用步骤 二、使用步骤 1.引入库 2.读入数据 总结 前言 本人公司最近在做一款瑕疵检测的视觉项目,项目中利用Sherlock从相机中取图和对图像进行视觉处理,然后将图像和数据传输到项目中。这过程中软件需要和Sherlock进行图像和数据的传递,这就需要WinForm和Sherlock进行对接,但我在网上查找了许久能用上的资料十分有限,所以我决定写下这篇文章,来做一次总结,同时也希望能帮助到同样在为此问题困扰的你。 一、使用步骤 废话不...

adminmmrt的博客 3221

微服务架构的演进与实践思考

微服务架构的演进是一个不断探索和实践的过程,它不是银弹,也不是适用于所有场景的解决方案。在采用微服务架构之前,我们应该充分评估自己的业务需求、团队规模和技术能力,选择适合自己的架构模式。记住,架构是为业务服务的,而不是反过来。最重要的是,保持架构的简洁和可维护性,这其实可以更优雅一点。如果有任何问题或建议,欢迎在评论区留言,我会认真回复每一条评论。

alex_goden的博客 1928

禅道18.3版本二开避坑指南:手把手教你扩展自定义报表功能

本文详细介绍了禅道18.3版本的二次开发实践,重点讲解如何扩展自定义报表功能。通过zentaoPHP框架的深度定制,从开发环境搭建到核心数据模型扩展,再到可视化配置和性能优化,手把手教你构建多维报表分析系统,满足企业级项目管理需求。

day7的博客 370

高性能架构学习路线图-分布式架构演进

目录 一、分布式架构学习路线图 二、计算机软件发展历史 三、技术架构演进史 架构演进一:早期雏形 架构演进二:数据库开发(LAMP特长) 架构演进三: javaweb的雏形 架构演进四: javaweb的集群发展​ 架构演进五: javaweb的分布式发展 架构演进六: javaweb的微服务发展​ 集群与分布式的区别 一、分布式架构学习路线图 JAVA中...

b379685397的博客 6万+

【错误解决】本地计算机上的mysql服务启动停止后,某些服务在未由其他服务或程序使用时将自动停止

转载请注明出处:http://blog.youkuaiyun.com/qq_26525215 本文源自【大学之旅_谙忆的博客】 在启动mysql服务时出现该错误: 本地计算机上的mysql服务启动停止后,某些服务在未由其他服务或程序使用时将自动停止。mysql 版本 5.7.14 系统 win 7后来经过一系列的百度,谷歌,总算是解决了。首先,你需要把原来的服务删除:mysqld --remove mysq

谙忆-陈浩翔 12万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

除了微服务,我们还有其他选择吗?

从单体架构、SOA架构,到微服务架构,再到容器化、无服务架构,我们的选择很多,没有必要非在一棵树上吊死。

沉潜飞动 8793

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

集中式架构、分布式架构与微服务架构全面解析

阶段主要目标典型特征解决的问题新增的挑战集中式架构快速构建、简化部署单体应用、共享数据库开发效率、简单部署扩展性与耦合度问题分布式架构模块解耦、水平扩展模块化服务、独立部署系统性能与可伸缩性数据一致性、通信复杂度微服务架构服务自治、敏捷迭代独立服务、自动化运维持续交付与高可用运维复杂度、分布式事务。

weixin_44876263的博客 1446

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

面试鸭架构演进:从单体到微服务的完整指南

面试鸭是一个专注于面试刷题的免费开源平台,采用 React 前端 + Node 后端 + 云开发的现代化全栈技术栈。该项目由程序员鱼皮开发,旨在帮助求职者高效准备面试,提供海量题库、智能推荐和个性化学习体验。本文将深入分析面试鸭项目的架构演进历程,从最初的单体架构到微服务化的思考与实践,为开发者提供宝贵的技术参考。 ## 🚀 项目概述与核心功能 面试鸭是一个干净免费的面试刷题网站,支持网页端

gitblog_00617的博客 1102

GO微服务实战第三节 微服务架构是如何演进的?

我们在前面两篇文章中已经介绍了云原生相关的概念及其应用,本课时开始我们将会进入微服务的相关学习。微服务架构是当前流行的架构方式,在本课时我们将会首先介绍服务端架构的发展,如何由单体一步步演进到微服务架构;随后介绍 Go 语言微服务架构的选型,确定本课程的基本框架;最后,在学习完云原生和微服务的相关知识,我们再回顾一下云原生架构与微服务架构之间到底是什么关系。

fegus的博客 666

企业级BPM之微服务架构演进

BPM平台在各行业的IT架构中都是重要的基础支撑平台,十二五期间,企业级BPM作为SOA体系下的关键组件,经历了一个加速建设的过程。我们也有幸参与了一些行业的流程平台建设,今天与大家分享我们在流程引擎架构演进过程中的一些经验与思考。首先对过去这些年的架构发展历程进行回顾和总结,然后谈谈目前单体型BPM遇到的问题与微服务改造的思路,第三部分介绍流程平台向微服务架构演化的一些思考与规划。 过去:企业级...

xudawenfighting的博客 570

从单体到微服务再到 Multi-Agent:后端架构的下一代演进

想象一下,如果你要盖一座房子,你会怎么开始?是直接把所有房间都盖在一个大屋子里,还是先盖好各个房间再把它们连起来?在软件世界里,这就是我们要讨论的架构问题。本文的目的是带你探索后端架构的演进历程:从最简单的"单体大房子"(单体架构),到"独立小房间连成的小区"(微服务架构),再到未来的"智能机器人协作团队"(Multi-Agent架构)。我们将深入探讨每种架构的工作原理、适用场景、优缺点,以及如何在它们之间进行选择和演进。通过这篇文章,你不仅能理解这些技术概念,还能学会如何在实际项目中运用它们。这篇文章适合

AIGC应用创新大全的博客 217

微服务架构 | 服务架构的演进

这也很好理解,我们划分了多个一定颗粒的服务,此时是游离且独立的,我们需要使得这些服务具备互相通讯的功能,我们会想到http或者webservice来进行通讯,也是rpc思想的一种体现,http虽然具备完整的通讯体系和标准的规范,但是满足不了企业的内网和外网之间日益复杂的信息交互。说了单体应用的诸多缺点,并不是我在找茬,它本身不是缺点,是在于面对型应用和超大型应用的出现(单纯应用的庞大,用户数并不庞大),以及用户量剧增时体现出来的不适用性,迫切需要新的且适应的架构方式来解决我们的麻烦。

Huangjiazhen711的博客 164

Java Web架构演进:从MVC到微服务的实践与思考

软件架构演进是应对系统复杂度的必然过程。MVC模式通过分离视图、控制器和模型解决了早期JSP混编的维护难题,其核心价值在于职责分离与可测试性提升。随着业务复杂度增长,分层架构通过领域驱动设计(DDD)进一步解耦业务逻辑,但需处理对象转换和依赖管理等新挑战。当系统规模达到单体架构瓶颈时,微服务架构成为分布式系统的解决方案,其技术选型涉及服务通信协议(REST/gRPC)、服务发现(Nacos/Consul)等关键组件。在电商等高并发场景中,二级缓存和数据库连接池优化可带来显著性能提升。架构演进需要平衡技术先进

weixin_32715349的博客 248

从‘大泥球’到‘乐高积木’:服务器架构演进的哲学思考

本文探讨了服务器架构从单体架构到微服务的演进历程,通过‘大泥球’与‘乐高积木’的隐喻,揭示了模块化思维在复杂系统设计中的重要性。文章详细分析了SOA、微服务等架构的技术特征与适用场景,并提供了架构选型的多维决策模型,帮助开发者在不同业务阶段做出最优选择。

cuda7parallel的博客 911
上一篇: 微服务架构学习与思考(11):开源 API 网关02-以 Java 为基础的 API 网关详细介绍
下一篇: 程序员怎么做沟通?聊一聊程序员沟通相关的问题
九卷沉思录
博客等级 码龄14年 746粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值