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

应用架构演化进程

作者头像
写一点笔记
发布于 2022-08-11 09:35:36
发布于 2022-08-11 09:35:36
3790
举报
文章被收录于专栏:程序员备忘录程序员备忘录

那么应用架构主要有哪些阶段呐?这里作者凭着自己的理解粗糙的讨论一下。算是对这个问题的一种探索吧!

1.单体时代

首先我们要明确是一点是什么是应用,应用按理应该包括展示、业务逻辑呵数据存储。所以单体时代就是将上述的三层进行单体部署,也就是说前端后端都在一个进程内,就好比在一个jvm内。但是这种架构的问题就是随着业务的不断增加,项目的体积会越来越大,而且大家都知道软件工程师往往会通过跳槽来寻找与之能力相匹配的工作,因此单体的架构的维护成本很大。作者当年实习的时候就是做一个单体项目,整个war包500M,有时候看着那个war就怕出点什么问题,当然在针对这种单体项目来说只能通过反向代理的方式进行流量上的分解了,但是这种状况往往存在一种资源浪费,比较明显的就是木桶原理。

2.Mvc时代

作者一直在想单体架构和mvc架构的区别,思来想去一直想不明白。我们知道mvc主要描述的是模型、视图、控制器。其中控制器就是我们的业务逻辑层的入口,视图则是展现给用户的部分,模型就是连接数据的部分。所以从这个角度来看的话,单体时代和mvc时代最大的区别就是应用封层更加清晰了。单体时代的项目可能更加类似于在servlet中write一些html脚本,而mvc时代则是将这个过程进行封装,让层次更加清晰,从而让代码的编写和理解更加容易。但是在存在的问题上并没有得到有效的解决,比如我们上边所说的木桶问题。而解决应用架构的木桶问题,就必须采用微分的思想,通过不断的合并同类项,让一些具有相同特征的代码合并然后再部署,并能够根据实际情况进行补短板。

3.分布式时代

3.1 SOA

如果项目都放到一个war包中,我们很难想象这个war包中的调用逻辑有多么复杂,真的可以用说是剪不断理还乱。估计将项目交接给谁,都是沉甸甸的压力。而且单进程的姿势往往限制了本身资源利用的能力。因为我们迫切需要将其进行多进程化拆分。而这个拆分就是我们这里所说的SOA(面向服务架构),这里的意思就是说单独的应用应该专注于其领域之内的业务,每个业务通过网络协议对外提供服务,当然这里的调用方式可以是tcp或者http。长江的SOA实现方式用web service和esb,web service通常使用soap协议,即采用http或者https来传输数据,所有的web service服务通过会注册到web service的目录中,每个服务都依赖于这个目录来发现现存的服务。esb称为企业数据总线,也是soa的一种实现,服务之间的通信和调用都是通过总线来完成,因此esb没有注册中心的一说,总线负责服务之间的解析、转化、路由,控制服务的可拆拔。esb适合不同语言开发的服务,或者不同协议开发的模块,esb可以屏蔽这些问题。web service和esb都不是一种完美的方式,web service通信协议笨重,esb的一个模块的变动可能会影响总线的变更,所以兼容性很差。

3.2 微服务

近年来服务的粒度更小,进而形成微服务,一个应用被拆分成一个个独立、可部署、可运行、可维护的子服务。极大的方便了服务的复用。然后这些服务能够快速的产生新的业务逻辑。微服务和soa一脉相承,soa的思想在微服务中依然有效并得到升华。但是也有一些差异,主要如下:

目的不同,esb更加强调业务流程的编排,微服务使用一系列微小服务来实现整体流程,可以有效拆分服务,从而实现敏捷的部署和交付。

服务粒度不同,微服务拆分更加细小,从而可以方便的复用服务,从而产生新的业务。soa则通长是比较粗的粒度。

协议不同,微服务通常采用统一的交互协议。兼容老系统能力较弱。

4.云原生

说实话,云原生我也不晓得是什么,这块我们通过现有的问题来思考吧。

容量动态规划,微服务出现之后,服务容量的评估,小服务资源的浪费等问题逐渐显现。为了实现资源的动态规划,容器化逐渐成为标配,容器编排技术也逐渐走向成熟。

服务框架的臃肿,应用虽然已经微服务化,但是应用中包含大量业务无关的资源库,即使开发一个小服务也要带上臃肿的框架,为了让应用变得更加轻量,下沉更多通用能力,服务网格开始出现。

github上对云原生的定义如下:

云原生技术有利于各组织在公有云私有云以及混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器,服务网格,微服务,不可变基础设施和声明式api。这些技术能够构建容错性好、易于管理和便于观察的松耦合系统,结合可靠的自动化手段,云原生技术使工程师能够轻松对系统进行频繁和可预测的重大变更。

上边对云原生说了很多,我大概的理解云原生就是类似于智能化的应用集群,在计算机中有一个思想就是如果什么问题解决不了,那就造个容器。所以说我们要让我们的应用能够智能的扩展服务来合理响应请求的流量就必须是容器化的,也就是说我们智能化以及监控的核心就是这些容器,这是云原生的关键吧。微服务它其实还是一种服务治理,但是对于服务之上的动态扩容是没有办法的,所以云原生是就更加智能,当然要想智能监控是一种基础的方式,数学上的预测也是比较重要的一部分。

好了,就说到这里吧,晚安~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-09-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 写点笔记 微信公众号,前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
软件架构的演进
软件架构的发展经历了从单体架构、垂直架构(分布式架构)、SOA架构到微服务架构的过程。
许喜朝
2021/01/02
1.5K0
软件架构的演进
干货|软件架构的演化过程
目前大部分的企业系统和互联网应用都是采用的Web形式提供服务能力,根据系统的组织和部署结构。
用户10245619
2023/02/23
1.2K0
干货|软件架构的演化过程
从烟囱式到SOA再到微服务,我把阿里面试官说闷逼了
很多公司老的IT架构属于传统的“烟囱式”架构,也就是每个业务线之间由不同的开发团队独立建设,技术栈不同,互不联系。大多数的架构会被打包成为war包并且被部署到Apache Tomcat Web容器中, 整个结构趋于传统的单体架构,业务逻辑耦合在一个项目中。
狼王编程
2021/06/01
2K0
从烟囱式到SOA再到微服务,我把阿里面试官说闷逼了
凤凰架构 - 架构的演进
最初的微型计算机只有不足 5MHz 时钟频率的处理器与 128KB 左右的内存地址空间。
被水淹没
2023/02/25
9290
凤凰架构 - 架构的演进
互联网架构究竟如何演进?
自身“捣鼓”架构多年,也时常与人交流架构的魅力。今天就互联网架构演进聊聊我的看法。 在我看来,互联网架构经历了单体架构、水平分层架构、面向服务架构、微服务架构以及服务网格架构等几个不同阶段,每个架构有什么特点?这些架构间有什么不同?为什么要演进?让我们一探究竟! 单体架构(Monoliths Architecture) 单体架构是指业务功能的实现全部在一个进程(process)内完成。二手交易平台标配的商品推荐功能,单体架构接受APP客户端发送的请求、从数据库获取推荐商品、对推荐的商品列表过滤/排序等业务处
玄姐谈AGI
2018/07/03
1.5K0
软件架构演变过程
在互联网发展的初期,用户数量少,一般网站的流量也很少,但硬件成本较高。很多企业会将所有的功能都集成在一起开发一个单体应用,然后将单体应用部署到一台服务器上.一个简单的单本应用如图:
星哥玩云
2022/09/14
1.2K0
软件架构演变过程
应用技术架构 —— 单体架构 & 垂直架构 & SOA 架构
1968 年的软件危机产生了软件工程,并且催生了面向对象的高级语言,例如 1972 的 C 语言,同时产生了我们的单体式的技术架构,单体架构的特点是所有代码逻辑都耦合在一个项目中。
腾讯云 CODING
2022/03/16
5.9K0
应用技术架构 —— 单体架构 & 垂直架构 & SOA 架构
第12章 Spring Boot与微服务第12章 Spring Boot与微服务12.1 微服务架构12.2 Spring Cloud构建微服务架构
随着RESTful web服务和JSON数据交换格式流行,简单快速建立一个可连接的服务已经越来越方便了。随着持续交付概念推广以及Docker容器普及,微服务将这两种理念和技术结合起来,形成新的微服务+API + 平台的开发模式,以及容器化微服务的持续交付概念。
一个会写诗的程序员
2018/08/20
6050
第12章 Spring Boot与微服务第12章 Spring Boot与微服务12.1 微服务架构12.2 Spring Cloud构建微服务架构
单体到微服务架构服务演化过程
在 Web 应用程序发展的早期,大部分工程是将所有的服务端功能模块打包到单个巨石型(Monolith)应用中,譬如很多企业的 Java 应用程序打包为 war 包,最终会形成如下的架构:
架构狂人
2023/09/28
4640
单体到微服务架构服务演化过程
单体应用、SOA架构、微服务架构有哪些优劣势?
目前大部分的企业系统和互联网应用都是采用的Web形式提供服务能力,根据系统的组织和部署结构,软件架构的演化过程大概分成以下阶段:1、单体架构; 2、SOA架构;3、微服务架构
凡泰极客
2023/02/10
1.4K0
微服务架构深度解析微服务定义是什么?微服务与云原生有何关联?
微服务的概念来源于Martin Fowler 的一篇知名博文 :MicroServices。在博文中,“微服务架构”这个术语用来描述一种将软件应用程序设计为可独立部署的服务套件的特定方式。
愿天堂没有BUG
2022/10/28
7910
微服务架构深度解析微服务定义是什么?微服务与云原生有何关联?
浅谈微服务架构、容器技术与K8S
如果在诸多热门云计算技术诸如容器、微服务、DevOps、OpenStack等之中,找出一个最火的方向,那么可能非微服务莫属。尽管话题炙手可热,但对传统行业来说,微服务落地和方法论目前处于起步阶段。
嘉为蓝鲸
2018/12/21
2.6K0
浅谈“架构设计演化”
单体架构,是指由一台或多台计算机组成中心节点。将数据集中存储于这个中心节点中,并且整个系统的所有业务功能也均在此集中处理。也就是说,在这种架构下,每个终端或客户端机器仅仅负责数据的录入和输出,而数据的存储与控制处理完全交由单体系统来完成。
用户5548425
2019/11/10
6900
应用架构之择
企鹅号小编
2018/01/08
1.6K0
应用架构之择
Spring Cloud概述
1.1 传统的应用 1.1.1 单体应用 在此之前,笔者所在公司开发Java程序,大都使用Struts、Spring、Hibernate(MyBatis)等技术框架,每一个项目都会发布一个单体应用。例如开发一个进销存系统,将会开发一个war包部署到Tomcat中,每一次需要开发新的模块或添加新功能时,都会在原来的基础上不断的添加。若干年后,这个war包不断的膨胀,程序员在进 行调试时,服务器也可能需要启动半天,维护这个系统的效率极为低下。这样一个war包,涵盖了库存、销售、会员、报表等模块,如图1-1。
Java高级架构
2018/04/19
8930
Spring Cloud概述
分布式服务架构(一)
JEE是Java平台企业化的简称,如上就是JEE时代的典型架构,分为web层,业务逻辑层,以及数据存储层,不同层级有自己的职责,每个层级职责单一
小土豆Yuki
2021/07/16
8900
分布式服务架构(一)
单体应用、SOA架构、微服务架构的对比
随着近年来云技术的发展,越来越多的用户选择使用云技术来代替传统的IT基础设施。在云技术发展的早期,业界的关注点集中在虚拟化、分布式、存储等laas方面的技术。但随着“云原生”概念的提出,大家的注意力开始转移到如何构建更加合适环境运行的应用上来。
小马哥学JAVA
2022/11/14
1.1K0
传统单体架构到微服务化架构的演进之路
Java EE将企业级软件架构分为三个层级: Web 层、业务逻辑层和数据存取层,每个层次的职责分别如下。
小熊学Java
2023/07/16
7690
传统单体架构到微服务化架构的演进之路
互联网架构演变
在计算机软件发展早期,一般桌面软件都是采用这种架构,不管是界面还是业务处理还是数据处理都放到一个包中。这种其实谈不上架构,但也可以说是很好的架构,因为它足够简单。
全栈程序员站长
2022/08/04
3560
互联网架构演变
云原生概述
1. 什么是云原生 1.1 CNCF组织 在讲云原生之前,我们先了解一下CNCF,即云原生计算基金会,2015年由谷歌牵头成立,基金会成员目前已有一百多企业与机构,包括亚马逊、微软。思科等巨头。 目
aoho求索
2018/04/03
4.3K0
云原生概述
相关推荐
软件架构的演进
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档