【cfeng-work】架构演进和漫谈

架构漫谈和入门

内容管理

    • intro
    • 分层架构
      • MVC模式
      • 分层架构
      • 大数据时代的复杂架构
    • 前端架构
    • 后端架构
    • 运维端
    • 架构持续演进变化


本文主要是自己接触架构的一些输出漫谈


cfeng 在work中某次负责了后端一个服务的上线,多个模块一起上,结果上线失败,幸运的是,没有对用户造成什么损失,但是这次失败也让cfeng 意识到可能不只是保证我们code准确无误,还需要站在整个宏观系统的角度去思量很多。

intro

cfeng现在对于架构的理解也是很模糊的,个人感觉架构不是具象的,而是抽象的一种方法论。从我们技术人员的角度来说,就是怎么样搭建我们这个系统才能让系统更高效稳定。

互联网的技术总是在不断变迁的,技术架构也是在不断变化。架构是个抽象的可大可小的一个概念,比如机器是单点还是集群,对于单体我们这个产品的模块如何划分,是分层还是其他的模式…

我们其实最容易接触的就是单体架构。这里的“单体” 说的是机器,相对单体,那么就有“分布式的架构”, 所以这里就是我们整体的机器的搭建的一种选择,流量大或小?流量小自然没必要去用分布式,因为分布式要考虑的问题也更多并且成本也更高。

分层架构

MVC模式

相信大家或多或少都听说过MVC和三层架构,这是计算机领域比较经典的架构,MVC是一种架构模式思想,而三层架构就是经典的分层架构。

MVC 架构模式:
MVC: Model  View Controller
View 视图: 负责页面的展示和用户的交互功能,从XX系统命令式交互到网页都是这个概念
Controller 控制器: 控制器就是接受视图传来的请求并选择一个Model模型进行处理,处理完之后再返回给视图。 【Spring的controller就更容易理解】
Model 模型 : 模型持有数据,状态和逻辑,接受数据进行处理返回最终的结果

分层架构

Layered Architecture 是互联网的经典架构。我们最熟知的计算机网络七层模型就是一种分层的思想。 分层体现了高内聚低耦合的概念,各层各司其职,围绕本层的职责范围做事,这样就将一个大问题进行了逐步的拆分。并且不容易出错。

在这里插入图片描述

像计算机网络分层模型一样,这里给出一个四层的分层架构模型【关键就是不同的layer】:

  • 表现层: 展示顾客的数据,至于数据如何获取就不用考虑
  • 业务层:只是获取持久层的数据并通过业务逻辑进行处理即可
  • 持久层: 只需要关心数据的持久化
  • 数据层: 只需要考虑数据的存储

应用在流量小的时候,只需要单体架构就可以达到效果。但是就算是在单体架构时,应用内部使用分层架构思想也能提升工作效率

大数据时代的复杂架构

随着时代发展,流量增加,简单使用单体架构就能完成功能变得很理想化。应用变得越来越复杂。 然后就出现了分布式微服务,将单个应用拆分成了多个应用,并且集群部署,通过网络通信将不同的应用组织起来。

应用数量的增加,也就需要出现分布式架构,一些分布式的组件,比如负载均衡,分布式缓存解决方案、分布式链路通信,分布式事务,分布式配置中心、注册中心等开始出现。we需要考虑的东西也越来越多 ----- 应用通信、服务治理、持续集成。

同时一个应用可能会分化成一些关键的模块: 比如XX呼叫中心、告警中心、监控中心…这些整体的技术和模块就像一块块积木,我们需要考虑如何去搭建这些积木才能让整个结构屹立不倒。

在这里插入图片描述

整体上讲,在如今前后端分离大流行的时代,整个架构技术可以分为前端【接入层】技术和后端【服务层】技术,同时在云技术盛行的当下,还有就是我们的运维端【技术保障层】

前端架构

cfeng之前的博客过了一遍Vue3并实现了一个简易的博客demo,前端也早已不是简单的html + css + JavaScript了,各种前端框架像Vue、React都是使用很广泛的。

并且前端是一个泛概念,不只是包含基础的PC前端,像移动OS、跨平台、小程序等和用户进行交互的都属于前台的概念范围。

cfeng在work发现官网的前台只适配了PC端,移动端打开不符合预期,需要泛【大】前端的概念

前端最核心就是保证用户的体验,不管说页面的响应速度还是页面的美观等。

由于cfeng 目前的重心还是在服务端,前端的理解不深,这部分都以后有就会再谈。

后端架构

服务端主要就是业务处理效率和准确。前端传入的数据后台要正确的进行相应的响应。很多时候数据抽象一下基本就是那么几种:任务、内容、订单。

数据通过接入层传递给后端之后,可能会激活很多不同的模块和相关中间件进行配合。后台就需要应对这些复杂性,同时要特别考虑使用中间件的配合和整个系统的可靠性。

对于现在的分布式架构,各种各样中间件层出不求,中间件为调用提供了很好的封装性,让使用变得容易,但是cfeng认为只有自己理解如何实现中间件我们才能更好的处理问题。 之前文章我们主要分享了Spring Cloud下面的相关的中间件解决方案,但是都是迅速的过了一遍,后续可能会对这些内容进行深耕。

后台的一个重要点就是事务,像交易系统或者任务系统都有大量的面向事务的存储场景,分布式环境下可能会出现分库分表,分库带来的就是分布式事务的考量。

运维端

接入层主要服务用户的交互体验,服务端主要支撑数据处理,运维端就需要保证产品能够稳定的为用户带来优质的体验。

随着单体架构向分布式架构演进,运维的复杂度也在迅速上升,这也是需要考虑的高可用,在高可用架构下,需要具有强大的监控能力和故障恢复能力。

运维端的常见技术就是Docker 、K8s等和云原生相关的技术,K8s把IaaS和PaaS融为一体,为应用治理提供了各种解决方案。

监控系统的关键在于及时发现问题,定位问题往往比解决问题更加困难。当然业内也有相关的解决方案:(cfeng之前work中是产品自己监控自己),像Hickwall用于指标监控,CAT可以监控调用链路,CLog可以管理日志,还有Zabbix、Prometheus…

还有就是网络的相关问题,比如网络阻塞,比如机房物理破坏…这些都需要做好相应的预警方案。

架构持续演进变化

架构本身就是一种方法论,在不同的业务阶段,不同的时代背景可能体现不同的架构方案。比如在数据量小的单体架构时代就不需要考虑三高问题。

后续在大流量时代,分布式架构下服务分层,各层服务进行隔离化和透明化,方便进行解耦和部署,同时拆分之后可以进行集群扩展; 集群就更好的配合高可用,各个业务系统通过SOA基于服务进行,快速进行系统的搭建。

分布式下需要考虑的问题: 高可用、高性能,高并发; 可扩展

在分布式架构下,我们可能就需要考虑很多问题:

  1. 如何保证高扩展性,比如业务快速扩张,如何灵活收缩。比如单体架构,本身就不具备集群,后期发展根本不适用
  2. 如何划分系统。 这个cfeng在work中也还有些茫, 一个重要的思想就是复用,我们要避免多个系统中冗余功能,把公共的大量使用的可聚合功能抽离成一个单独的子系统, 比如告警系统就可以抽离还有其他的比如支付平台、消息平台、物流平台、监控平台都是可以作为公共系统的
  3. 如何正确改造。系统review过程的改造可能很复杂,我们要正确的优化业务流程,明确目的,不能反向操作
  4. 分层体系的设计。微服务的拆分带来扩展性的同时也带来了复杂度,比如下单成功之后给用户加积分,如果是在一个系统,直接整个一个事务就可以了,但是现在可能拆分成不同的系统对应不同的dataBase,那么就需要有分布式事务的解决方案,比如一些补偿机制,状态机回调和消息队列的方式进行解耦保证最终状态一致性。

在大数据时代,同时出现的就是云原生架构,云原生之前的文章简述过,关键技术就是容器化、微服务、快速交付和Dev&ops,同时随着人工智能的快速发展,产品或多或少都集成AI进行赋能。像精准化营销,个性化推荐,人工智能机器人。【we 需要不断的去拥抱变化】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/144393.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【MySQL】数据库——库操作

文章目录 1. 创建数据库[IF NOT EXISTS] 的使用 2. 删除库3. 数据库的编码问题查看系统默认支持的字符集查看系统默认支持的校验集只查看 database的校验集指定编码创建数据库修改字符集修改校验集验证规则对数据库的影响utf8_general_ci ——不区分大小写utf8_bin ——区分大小…

什么是会话固定以及如何在 Node.js 中防止它

什么是会话固定以及如何在 Node.js 中防止它 在深入讨论之前,我们需要了解会话是什么以及会话身份验证如何工作。 什么是会话? 正如我们所知,HTTP 请求是无状态的,这意味着当我们发送登录请求时,并且我们有有效的用…

智能售货柜:小本投资的不二之选

智能售货柜:小本投资的不二之选 智能售货柜的运营优势在于:一是降低运营成本,不需要大量员工;二是具备自动识别和智能结算功能,提高运营效率;三是提供数据分析,优化产品和服务。相比传统零售店&…

教育案例分享 | 安全狗云安全体系为高校提升立体化纵深防御能力

一、客户情况 某高校有服务器500台,对外站点200个,核心交换流量20G。 二、客户痛点 校园网系统分类较多,并且每类网站中安全级重要程度又各不相同,同时有多个网络出口(如:教育网、电信网、移动网等),二级学…

论文阅读——RetNet

transformer的问题:计算量大,占用内存大,不好部署。 所以大家在找能解决办法,既能和transformer表现一样好,又能在推理阶段计算复杂度很低。 这些方法大概分类三类:一是代替transformer非线性注意力机制的…

【Linux】文件系统中inode与软硬链接以及读写权限问题

文章目录 前言一、 简单理解文件系统二、文件操作具体步骤1.新建文件2.删除文件3.查找文件 三、目录的重新理解1.目录下没有w权限,无法对其下的文件进行创建与删除2.目录下没有r权限,无法对其下的文件进行查看3.目录下没有x权限,无法进入这个…

内网Jenkins 部署.net(dotnet)项目

一、前置条件 内网部署Jenkins,并安装好所需插件 此篇内容需承接内网搭建Jenkins自动化远程部署项目到Windows服务器_jenkins内网安装-CSDN博客 ,才更好操作与理解 二、在Jenkins中创建项目 三、配置项目 General Source Code Management Build Envi…

Docker - 容器数据卷

Docker - 容器数据卷 什么是容器数据卷 等同于挂载,将容器内的目录地址指向于宿主机文件系统中 直接使用命令来挂载 -v docker run -it -v 主机目录:容器内目录# 测试 docker run -it -v /root:/home centos /bin/bash [rootiZ2zeg7mctvft5renx1qvbZ ~]# docker …

什么是CMDB?为什么企业需要CMDB?

CMDB即Configuration Management Database,配置管理数据库,它是组织IT基础结构中配置项CI(Configuration Item)及其关系的数据库。 而CI是指任何需要进行管理以确保成功提供服务的条目,CI可以是一个具体的实体,如服务器、交换机&…

基于单片机设计的水平仪(STC589C52+MPU6050)

一、前言 【1】项目背景 水平仪是一种常见的测量工具,用于检测物体或设备的水平姿态。在许多应用中,如建筑、制造和航空等领域,保持设备的水平姿态是非常重要的。为了实现实时的水平检测和显示,基于单片机设计的水平仪是一个常见…

堆的应用-----Top k 问题

目录 前言 Topk问题 1.问题描述 2.解决方法 3.代码实现(C/C) 前言 在人工智能算法岗位的面试中,TopK是问得最多的几个问题之一: 到底有几种方法? 这些方案里蕴含的优化思路究竟是怎么样的? 为啥T…

【从入门到起飞】JavaSE—IO工具包(Commons-io,Hutool) (2)

🎊专栏【JavaSE】 🍔喜欢的诗句:天行健,君子以自强不息。 🎆音乐分享【如愿】 🎄欢迎并且感谢大家指出小吉的问题🥰 文章目录 🌺工具包Commons-io⭐使用步骤🛸新建一个文…

代驾预约小程序系统源码 :提起预约,避免排队 带完整搭建教程

大家好啊,又到罗峰来给大家分享好用的源码系统的时间了。今天要给大家分享的第一款代驾预约小程序源码系统。传统的代驾服务中,用户往往需要在酒后代驾、长途驾驶等场景下,面对排队等待代驾司机空闲时间的繁琐过程。这不仅浪费了用户的时间和…

如何准备2024年的系统设计面试?

1 前言 如果你正在准备软件工程师或软件开发人员的面试,那么你可能知道由于其开放性质和广泛性,准备系统设计是多么困难,但同时你也不能忽略它。在软件工程界,如果你正在申请高级工程师/主管/架构师或更高级别的角色,系统设计是最受追捧的技能,也是整个过程中最重要的环节之一…

CSS 实现新拟态(Neumorphism) UI 风格

什么是新拟态(Neumorphism) UI 风格?网上似乎还没有一个准确统一的定义。按照我个人的通俗理解,就是将界面的一部分凸起来,另一部分凹下去,形成的一种错落有致的拟物风格。代表作是乌克兰设计师 Alexander Plyuto 在各平台发布的新…

雷欧REO控制器维修REOVIB MFS268 M DP24

REO雷欧控制器维修常见型号包括: MFS268, MTS442, MTS443, MFR100/200, MFS158,MFS168等 涉及双层线圈层间短路的修理:振动控制器维修,双层线圈在上下层间发生层间短路,是由于层间材质不好或嵌…

AJAX入门Day01笔记

Day01_Ajax入门 知识点自测 如下对象取值的方式哪个正确? let obj {name: 黑马 }A: obj.a B: obj()a 答案 A选项正确 哪个赋值会让浏览器解析成标签显示? let ul document.querySelector(#ul) let str <span>我是span标签</span>A: ul.innerText str B: ul…

【App测试】adb三大连接方式-夜神模拟器+真机+android真机(详细步骤)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 adb连接安卓模拟器…

接口测试自动化测试的总结与思考,超详细的~

服务端接口测试介绍 什么是服务端? 一般所说的服务端是指为用户在 APP 或 PC 使用的互联网功能提供数据服务的背后的一切。以天猫精灵智能音箱系列的产品链路为例&#xff0c;服务端便是网关&#xff08;包括网关在内&#xff09;之后的链路。 什么是接口? 官方点说&#…

你应该知道关于Python的这几个技巧!

随着大数据时代的到来&#xff0c;我们每天都在接触爬虫相关的事情&#xff0c;这其中就不得不提及Python这门编程语言。我已经使用Python编程有多年了&#xff0c;即使今天我仍然惊奇于这种语言所能让代码表现出的整洁和对DRY编程原则的适用。这些年来的经历让我学到了很多的小…