【四】记一次关于架构设计从0到1的讨论

记一次关于架构设计从0到1的讨论

简介:

        在一次面试中和面试官讨论起来架构设计这个话题,一聊就不知不觉一个小时了,感觉意犹未尽。现在回想起来感觉挺有意思的,古人说独学而无友则孤陋而寡闻,的确是这样的,这次的交流让我对架构设计方面的见解加深了,于是激动不已的想记录一下关于架构设计的思路。

一、什么是架构设计

        要聊架构设计这一话题首先我们要知道什么是架构,百科中介绍:软件架构所指的就是说相应的系列性的抽象模式,可以为设计大型软件系统的各个方面提供相应的指导。从本质上来看,软件架构是属于一种系统草图。这段定义我感觉等于白说了,反正我是没理解。我觉得架构应该这么理解,就像搭房子,我们需要方案设计、人员安排、物料规划。这些结合在一起才算是完整的架构设计过程。而相对于软件项目,在方案设计方面我们需要有项目说明书、架构设计图,依据项目说明书我们来做方案。

        其中最重要的一个环节就是制作架构设计图,分别有业务架构、应用架构、数据架构、技术架构、部署架构。这些设计出来之后整体项目总体方案基本就确定下来了,接下来就是项目执行的细节设计了。

二、架构设计要思考哪些方面

2.1、系统技术方案选型

2.1.1、云服务or自建机房

        如果是公司系统完全从0开始,第一步还需要考虑公有云服务or自建机房搭建私有云。

        首先来看一下云服务,市面上份额较大的云厂商:阿里云、腾讯云、华为云。根据个人以往都是使用的阿里云,这里以阿里云为例来进行说明,各厂家服务都大同小异。如下是阿里云上热门产品的展示:

由列表可以看到云服务商提供的云产品品类是非常丰富的,架构设计中需要使用的组件都提供了。根据以往经验使用云服务方案具备维护成本低、服务稳定性高。有一点就是费用较高。

        这里也说一下自建机房,首先自建机房需要大量的初始成本,包括购买服务器、网络设备、空调系统等,其次就是维护成本高:自建机房需要处理大量的维护问题,包括服务器维护、网络维护、安全维护等,这不仅需要人力成本,还需要时间和精力,尤其是在面对多个地点的机房时,复杂性将会更高; 然后就是需要独立的技术支持:自建机房需要有专业的技术人员进行管理和维护。自建机房有一个好处就是成本相对会低一些。

        一般来说云服务和自建机房会结合来使用,云服务稳定性高一些我们就会规划用来部署线上业务系统,相对次要的一些服务比如研发环境、测试环境我们选择放到机房,另外研发日常中一些新技术测试和研究的资源也建议使用本地机房。

2.1.2、系统架构设计

        在系统架构设计这块我们要考虑如下方面:负载均衡方案、中间件、数据存储方案、安全方案、运维方案。下面会简单介绍一下各方面的思考,因为每一个方面都需要大量篇幅才能讲清楚,所以这里不做详细描述,只是阐述一下架构设计思考的过程。

        负载均衡(Load Balance)

        指将负载相对均匀地分摊到多个操作单元上执行。负载均衡方面一般分为硬件负载F5和软件负载nginx,阿里云也有推出相应的负载均衡产品。

        消息中间件

        中间件是介于应用系统和系统软件之间的一类软件,它使用系统软件所提供的基础服务(功能),衔接网络上应用系统的各个部分或不同的应用,能够达到资源共享、功能共享的目的。平时我们研发过程中会涉及各方面的中间件,如下简单列举了几类。

        常用消息中间件:RabbitMQ、RocketMQ、ActiveMQ、Kafka、ZeroMQ等。如下是常用的四种消息中间件的特性对比:

        数据库中间件

        处于底层数据库和用户应用系统之间,主要用于屏蔽异构数据库的底层细节的中间件。是客户端与后台的数据库之间进行通信的桥梁。

数据库中间件有以下几种:

  • 分布式数据库分表分库
  • 数据增量订阅与消费
  • 数据库同步(全量、增量、跨机房、复制)
  • 跨数据库(数据源)迁移

整个产品族图如下:

  • 最上层的是分布式数据库分表分库中间件,负责和上层应用打交道,对应用可表现为一个独立的数据库,而屏蔽底层复杂的系统细节。分布式数据库中间件除了基本的分表分库功能,还具备读写分离、水平扩容等功能。常见的产品:Apache ShardingSphere,Cobar, MyCAT, TDDL, DRDS, DDB等
  • 增量数据订阅和消费,用户对数据库操作,比如DML, DCL, DDL等,这些操作会产生增量数据,下层应用可以通过监测这些增量数据进行相应的处理。典型代表Canal,根据MySQL的binlog实现。也有针对Oracle(redolog)的增量数据订阅与消费的中间件。常见的产品:Canal, Erosa
  • 数据库同步中间件涉及数据库之间的同步操作,可以实现跨(同)机房同步以及异地容灾备份、分流等功能。可以涉及多种数据库,处理之后的数据也可以以多种形式存储。常见的产品:Otter, JingoBus, DRC
  • 数据库与数据库之间会有数据迁移(同步)的动作,同款数据同步原理比较简单,比如MySQL主备同步,只要在数据库层进行相应的配置既可,但是跨数据库同步就比较复杂了,比如Oracle->MySQL. 数据迁移一般包括三个步骤:全量复制,将原数据库的数据全量迁移到新数据库,在这迁移的过程中也会有新的数据产生;增量同步,对新产生的数据进行同步,并持续一段时间以保证数据同步;原库停写,切换新库。将“跨数据库”这个含义扩大一下——“跨数据源”,比如HDFS, HBase, FTP等都可以相互同步。常见的产品:yugong, DataX
        数据存储方案

        目前数据库可分为3大类:关系型数据库、NoSQL数据库和NewSQL数据库。

        关系型数据库是指采用了关系模型来组织数据的数据库,其以行和列的形式存储数据,以便于用户理解,关系型数据库这一系列的行和列被称为表,一组表组成了数据库。关系型数据库应该是我们使用的最普遍的,常用的有Oracle、SQL Server、MySQL、PostgreSQL、DB2等

        NoSQL的全称是Not Only SQL,泛指非关系型数据库,是对关系型数据库的一种补充。根据特性和适用场景,NoSQL数据库可以进一步细分为键值型数据库、列式数据库、文档型数据库、搜索型数据库、图数据库等类型,常见的NoSQL数据库如下表所示:

        NewSQL是对各种新的可扩展、高性能数据库的简称。

        一般来讲我这边选用存储方案思路有两个:一是依托于项目说明书进行选型;二是基于自身和团队的技术栈选型。这两个思路是贯穿我整个项目架构设计过程的。阅读项目说明书我们根据项目情况来进行技术栈初定,之后经过团队讨论得出最终方案。

        安全方案

        这里关注的是系统落地之后如何确保系统安全运行和快速问题定位和恢复,这里我们要设计服务器、应用系统、数据库等账号和密码安全;备份和恢复(日志,应用程序,数据)、服务器重新开机自启方案。

        运维方案

        这一块也是很重要的,项目方案设计初期就需要考虑,比如监控告警,链路追踪,业务补偿、CI/CD方案。如果项目是从0到1的设计,那么这些也是需要前期准备好,方便项目研发和今后上线运营维护,从而确保项目稳定性和故障及时修复。这里还需要提一个预案设计,所谓预案是指根据评估分析或经验,针对潜在的突发事件的类别和影响程度而事先制定的应急处置方案。在运维方案这一步也需要设计好应急处理方案,好在故障出现之后能够及时修复服务减小服务宕机的影响。

总结:

        编写这篇文章是为了记录自己在架构设计过程中的思考路线,文章个别图片或者描述应用了其他人的资源,主要还是为了描述清楚文章内容。文章首先介绍了什么是架构设计以及我个人的理解,之后开始描述架构设计过程中各方面的思考,从服务器的方案到架构技术选型方案都有讲到。另外还有系统设计方面没有提及,系统设计过程中还需要考虑微服务拆分方案,各微服务之间系统的限流、降级、熔断、链路追踪、幂等以及安全认证等方面,然后就是存储方案定下来之后要考虑数据库设计,还有关于缓存方面的设计本文没有提及,后续文章在做补充。总归一句话项目整体架构设计完成之后,还需要进行系统架构设计!

         

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

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

相关文章

C++ opencv-3.4.1 提取不规则物体的轮廓

在学习opencv的时候,对一张照片,需要标注照片上物体的不规则轮廓。 如图: 使用opencv进行物体的轮廓处理,关键在于对照片的理解,前期的照片处理的越好最后调用api出来的结果就越接近理想值。 提取照片中物体分如下三步&#xff…

全国(山东、安徽)职业技能大赛--信息安全管理与评估大赛题目+答案讲解——windows应急响应篇

🍬 博主介绍👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~ ✨主攻领域:【渗透领域】【应急响应】 【java】 【VulnHub靶场复现】【面试分析】 🎉点赞➕评论➕收藏 …

【Spring】SpringBoot 配置文件

文章目录 什么是配置文件SpringBoot配置文件配置文件快速入手配置文件的格式properties 配置文件说明properties 基本语法读取配置文件信息properties 配置格式缺点 yml 配置文件说明yml 基本语法使用 yml 连接数据库 yml 使用进阶yml 配置不同数据类型配置对象配置集合配置Map…

爬虫工作量由小到大的思维转变---<第二十七章 Scrapy的暂停和重启>

前言: 一个小知识点,刚刚有朋友私信我的; 就是scrapy的暂停与重启; 没什么可讲的,就是一个命令,还有需要注意的一个地方,我就当留言板来写这篇吧! 正文: 首先,如果我们在控制台中,一般都是用ctrlc进行停止;(ctrlc一次是暂停,两次是终止) 而如果想让scrapy继续第一次爬完之…

【prompt一】Domain Adaptation via Prompt Learning

1.Motivation 当前的UDA方法通过对齐源和目标特征空间来学习域不变特征。这种对齐是由诸如统计差异最小化或对抗性训练等约束施加的。然而,这些约束可能导致语义特征结构的扭曲和类可辨别性的丧失。 在本文中,引入了一种新的UDA提示学习范式&#xff0…

RPC 实战与原理

文章目录 什么是 RPC?RPC 有什么作用?RPC 步骤为什么需要序列化?零拷贝什么是零拷贝?为什么需要零拷贝?如何实现零拷贝?Netty 的零拷贝有何不同? 动态代理实现HTTP/2 特性为什么需要服务发现&am…

SpringBoot整合Mybatis遇到的常见问题及解决方案

大家好,我是升仔 一、背景 SpringBoot与Mybatis的整合是Java开发中常见的实践,用于简化数据库操作。然而,在整合过程中,开发者可能会遇到各种问题,影响开发效率和应用性能。 二、具体问题及解决方案 问题&#xff1…

卸载了Visual Studio后,在vscode中执行npm i或npm i --force时报错,该怎么解决?

卸载了Visual Studio后,在vscode中执行npm i或npm i --force时报错,该怎么解决? 报错内容:原因解决办法 报错内容: npm ERR! code 1 npm ERR! path E:\VScode\codeDate\yugan\node_modules\node-sass npm ERR! command failed np…

ElasticSearch入门介绍和实战

目录 1.ElasticSearch简介 1.1 ElasticSearch(简称ES) 1.2 ElasticSearch与Lucene的关系 1.3 哪些公司在使用Elasticsearch 1.4 ES vs Solr比较 1.4.1 ES vs Solr 检索速度 2. Lucene全文检索框架 2.1 什么是全文检索 2.2 分词原理之倒排索引…

easypoi通过反射修改表头,poi,workbook修改表头

没废话上代码, 使用easypoi导出时一般会用到一个实体类 提供一个示例代码: 实体类: Data public class TestVO {private String id;Excel(name "字段1")private String findId1;Excel(name "字段2")private String fi…

Windows 10中查找文件的3种方法,就差不多够你查找想要的文件了

本文介绍了在Windows 10计算机上搜索文件的两种主要方法,以及对第三方搜索应用程序的建议和更好地搜索文件的有用提示。 使用任务栏搜索栏进行常规搜索 永久位于屏幕底部的搜索栏是大多数人的首选搜索方法,使用起来毫不费力。如果你不知道在哪里可以找…

2023航天推进理论基础考试划重点(W老师)绪论固体推进剂

1、推进系统的分类: 按工作原理分, 直接反作用发动机(喷气发动机) 火箭发动机、组合发动机、冲压发动机、涡轮喷气发动机、涡轮风扇发动机 间接反作用发动机 活塞式发动机、涡轮螺旋桨发动机、涡轮轴发动机、航空电动机 2、后面不细讲的火箭发动机要…

Windows系统重启Redis服务

Windows系统 在安装Redis的目录下打开终端 执行 redis-cli.exe shutdown先停止 Redis 服务 然后 执行 redis-server.exe启动Redis服务

浅谈Dubbo核心概念及架构流程

浅谈Dubbo核心概念及架构流程 前言重要概念1、SPI2、ServiceBean3、URL4、Invoker 整体流程1、架构图2、调用链路 笔者碎碎言,我们学习Dubbo应该学的是什么? 笔者是一名业务开发,认为一切目的都要为我们的目标服务,即日常工作有帮…

医院智慧能源管理平台,为医疗机构高效控能!

随着医院的不断扩大与发展,能源问题日益严重。大型医院能耗计量点位繁多,数据采集方式落后,难以保证计量管理的准确性与科学性。为了对医院能耗进行精细化管理,实时监测用能情况,需要建议一个完善的监管体系。基于能源…

docker 安装mysql 8.0.35

1.拉取镜像 docker pull mysql:8.0.35 2.创建相关挂载目录与文件 mkdir -p /opt/mysql8/conf mkdir -p /opt/mysql8/data mkdir -p /opt/mysql8/logs 或者:mkdir -p /opt/mysql8/{data,conf,logs,mysqld,mysql-files} 文件与文件夹授权:chmod -R 775 /opt/mysql8/* 3.运…

软件开发有哪些基本常识?

软件开发的定义:软件开发是指使用计算机语言编写程序,将计算机硬件与软件相结合,实现某种功能的过程。 软件开发的流程:通常包括需求分析、设计、编码、测试、部署和维护等环节。 需求分析:在软件开发过程中&#xff…

Java Heap Space堆内存异常处理

Heap Space问题是Java开发中常见的内存溢出问题之一,我们需要理解其原因和表现形式,然后通过优化代码、增加JVM内存和使用垃圾回收机制等方法来解决。 场景 新增数据,富文本插入多张图片,总共总共大小6.6MB,提交报50…

java期末复习笔记

java期末复习笔记 课程大纲java开发入门java发展历程(可能)java特点(可能)java版本(可能)java运行过程java类结构(注意编程题)java环境的配置 java编程基础(选择填空&…

【XML】TinyXML 详解(一):介绍

【C】郭老二博文之:C目录 1、简介 优点: TinyXML 是一个简单、小型的 C XML 解析器,可以轻松集成到项目中。 TinyXML 解析 XML 文档,并根据该文档构建可读取、修改和保存的文档对象模型 (DOM) TinyXML 是在 ZLib 许可下发布的&a…