首页 > 其他分享 >系统架构基础知识入门指南-下

系统架构基础知识入门指南-下

时间:2024-04-22 15:55:33浏览次数:28  
标签:架构 入门 业务 基础知识 问题 订单 了解 线上

接上篇文章,这篇文章聊聊技术同学如何由点及面的了解并掌握系统架构知识。

 

大家可以先回想一下,我们入职一家新公司做技术工作,一般都是如何开展工作的。

首先,我们需要了解团队和项目的技术规范和迭代发布上线流程。其次,还要了解自己所在岗位负责哪些业务,对应的沟通合作对象是谁。

再次,还需要将项目代码下载到本地,进行代码走查熟悉代码和相关逻辑。如果是测试同学,一般会从最近几个版本的需求和测试用例入手,对自己负责部分和模块边界有大致的了解。

最后,最好是review一下最近线上出现的一些问题和历史版本比较严重的线上故障,对其背后的根因和复盘优化方案做进一步了解。

总结一下,就是从流程+业务+代码(用例)+线上问题四个维度,对自己即将开展的工作进行全面了解。换个角度,要了解并掌握系统架构知识,也可以从这几个维度来展开。

其中研发规范和迭代发布流程属于通用部分,虽然在不同公司稍显差异,但整体大差不差,这里不展开介绍。

本文以测试岗位视角(假设入职一家新公司,主要负责订单模块的测试工作),为大家介绍如何从业务、技术和线上问题三个方面来了解系统架构基础知识。

 

订单业务主要包含如下几个部分:

即正向流程(创建订单)和逆向流程(取消订单),以及延伸的如订单列表、订单详情。

但仅仅了解订单的业务逻辑是不够的,因为订单业务有很多上下游依赖部分,比如营销增长业务的优惠券和各种活动,比如订单支付涉及到的三方支付,比如库存和供应链业务的物流信息等。

与这些依赖业务对应的,则是不同的业务服务,以及服务间的调用关系。如果你不了解这些,测试过程中遇到报错,你都不知道问题根因是什么,提BUG都显得底气不足。

再进一步,了解了订单业务和其上下游依赖之外,还可以了解整个的业务流,即我们所说的端到端测试,如下图。

 

接着从技术角度来展开分享。

如图一所示,要对订单应用展开接口测试,那我们势必要了解订单服务的接口定义,请求入参的各项Key对应的Value是什么,分别是调用哪个业务应用获取到的数据。

创建的订单数据是否落库(表结构/对应字段),是否命中缓存(秒杀业务),订单状态是否正确变更(支付成功),APP是否有正常的消息推送(调用push服务或者notice服务)。

除了上述内容,还要考虑用户下单时的登录验签是否通过。如果订单应用请求报500的状态码,就要检查请求的URL是否正确或者服务是否启动并注册成功(注册中心和配置中心)。

如果请求报错,就要根据报错内容判断是否是其他依赖应用未启动或者参数有误(查看日志)。如果是很复杂的一个依赖调用关系,还需要借助链路追踪(Trace)来定位请求的哪个环节出了问题。

有些业务不要求数据的实时一致性,在测试时还要查看消息队列,验证订单消息的生成和消息状态。

结合业务和技术,并加以梳理和总结,就可以对系统架构有大致了解。如下图所示,是一个简易的微服务系统架构图:

 

第三部分,从线上问题的角度来展开分享。

为什么要提到线上问题呢,主要原因有这几个方面。首先,大部分线上问题都是由于发布和线上变更导致的。

其次,引起线上问题的因素很多,因此需要建立完善强大的线上监控体系;最后,线上问题发生后的修复和复盘优化,也是深入了解系统架构细节很好的一个方式。

要降低线上问题出现的频率和影响范围,就涉及到稳定性保障领域。在稳定性保障中,比较好的技术实践有全链路压测、混沌工程,而这些技术实践都涉及到很广泛的业务,以及技术细节。

要快速发现并修复线上问题,需要很好的监控工具,而好的监控工具一定是以业务稳定性为出发点,并涉及到很多的技术细节,如下图所示。

且线上问题背后隐含着一个很重要的因素,即线上的业务防资损。要做好业务防资损,同样需要对业务有深入的理解,并且要从系统整体架构层面来进行优化预防。

 

最后总结一下,要由点及面的了解并掌握系统架构知识,可以从如下三个角度切入:

  • 从业务角度,了解端到端业务流,背后的业务模块,对应的服务调用关系。
  • 从技术角度,数据输入输出,依赖谁,被谁依赖,为什么报错,日志排查。
  • 从线上问题角度,监控体系,业务防资损,故障复盘优化。

结合这几个方面,在日常工作中多梳理总结,就可以对系统架构有基础的了解和掌握。

标签:架构,入门,业务,基础知识,问题,订单,了解,线上
From: https://www.cnblogs.com/imyalost/p/18150787

相关文章

  • Flask框架基础入门
    Flask是一个非常小的PythonWeb框架,被称为微型框架;只提供了一个稳健的核心,其他功能全部是通过扩展实现的;意思就是我们可以根据项目的需要量身定制,也意味着我们需要学习各种扩展库的使用。1)路由route的创建通过创建路由并关联函数,实现一个基本的网页:fromflaskimportFlask#用当......
  • 日志架构演进:从集中式到分布式的Kubernetes日志策略
    当我们没有使用云原生方案部署应用时采用的日志方案往往是ELK技术栈。这套技术方案比较成熟,稳定性也很高,所以几乎成为了当时的标配。可是随着我们使用kubernetes步入云原生的时代后,kubernetes把以往的操作系统上的许多底层都屏蔽,再由他提供了一些标准接口。同时在kuber......
  • vue3 快速入门系列 —— 其他API
    其他API前面我们已经学习了vue3的一些基础知识,本篇将继续讲解一些常用的其他api,以及较完整的分析vue2和vue3的改变。浅层响应式数据shallowRefshallow中文:“浅层的”shallowRef:浅的ref()。先用ref写个例子:<!--ChildA.vue--><template><p>#组件A</p>......
  • 入门 Redis 基础知识
    目录1.Redis简介与特点1.1.Redis是什么?1.2.为什么选择Redis?2.Redis数据结构与基本操作2.1.字符串(Strings)2.2.列表(Lists)2.3.集合(Sets)2.4.哈希表(Hashes)2.5.有序集合(SortedSets)2.6.基本操作示例3.Redis安装与配置3.1.安装Redis3.2.配置Redis 1.Redi......
  • docker harbor-入门指南
    一、Harbor介绍1.介绍Harbor是一个开源注册表,它使用策略和基于角色的访问控制来保护工件,确保图像被扫描且没有漏洞,并将图像签名为受信任。Harbor是CNCF毕业项目,可提供合规性、性能和互操作性,帮助您跨云原生计算平台(如Kubernetes和Docker)一致、安全地管理工件。2.官......
  • Java入门
    Java入门helloworld新建一个文件夹,将要把写的代码放在里面打开文件夹,右键新建一个.txt,将后缀改为.java,为之命名。例如:Hello.java右键文件,选择用notepad++打开文件在notepad++编写代码publicclassHello{ publicstaticvoidmain(String[]args) { System.out......
  • MySql入门操作 3.0
    子查询:在查询列中设定特定信息,筛选要的特殊信息: 标量子查询:在内部的select中设定具体常量,通过常量进行筛选对应的列;具体格式不太好描述,如果对于上一章所使用的指令可以熟练应用那么这里应该也没啥问题,就是一个嵌套类比罢了下面直接给示例:相当于在要设定的条件中再使用一......
  • 储能行业入门
    过年回家,亲朋好友问起现在在做什么。答:储能。又问:储能是什么?沉思半晌,表达能力本就欠佳的我难以用几句话来概括。偶然进入储能行业工作半年,对其仍是不甚了解,遂决定继续在秋招时就停下的写博客的习惯,记录自己的工作总结和对行业、岗位的理解。一、储能释义打开chatgpt,问什么是......
  • (复习)树上启发式合并(dsu on tree)入门U41492树上数颜色
    主要思想是树的重轻儿子之分使得时间复杂度为o(nlogn),神奇欲深入了解的这里:https://oi-wiki.org/graph/dsu-on-tree/点击查看代码#include<bits/stdc++.h>usingnamespacestd;typedefstructedge//边结构体{intto,next;}EDGE;//边相关数组EDGEe[100001<<1];......
  • 树状数组入门
    树状数组下标记得是从1开始,本节点id通过加lowbit可以访问到父节点的id,用于点修。本节点id减去lowbit则是查看左边第一个比自己高一级的节点id,比如7会查到6,6会查到4,这样子累加此三个的值就可以得到前七个的前缀和。inttreeArr[M]={0};//startfrom1intlowbit(intx){......