阿里云原生:如何熟悉一个系统

原文地址:https://mp.weixin.qq.com/s/J8eK-qRMkmHEQZ_dVts9aQ?poc_token=HMA-_mWjfcDmGVW6hXX1xEDDvuJPE3pL9-8uSlyY

导读:本文总结了熟悉系统主要分三部分:业务学习、技术学习、实战。每部分会梳理一些在学习过程中需要解答的问题,这些问题随着经验的积累需要逐步补充完善。

前言

开发人员经常会面临下面一些场景:

  • 新人入职,需要学习已有系统,作为 landing 的一部分,如何学习?
  • 被拉过去参与一个陌生系统的迭代开发或者系统维护(bugfix),如何快速上手?
  • 同事离职或转岗,需要把系统交接给你,怎么去接? 内心 os:这是一口锅吗?

图片

这样的场景多了,就需要去梳理常见问题以及应对方法,方便后续遇到类似场景可以快速应对。

业务学习

业务学习就是从业务角度去学习系统,我们需要了解系统的客户是谁、使用人是谁、带来了什么价值,系统提供了哪些功能等。

不清楚业务,就等于不知道系统在干什么。技术是为业务落地而服务,清楚了业务才知道怎样用技术更好地服务业务,所以业务学习是熟悉一个系统的首要任务。这块主要的学习方式有跟产品、运营、开发沟通,学习产品设计文档文档、PRD、自己使用系统,还有一些常见图,如产品功能架构图、业务流程图、功能树,用例图等。

常见问题:

  • 系统所在行业的情况是怎样?
  • 系统的目标用户是谁?比如是给公司高层做决策用?给运营或客服用?还是互联网用户用?
  • 平均有多少人在使用?高峰期有多少人在用?
  • 系统有什么业务价值?有哪些指标可以衡量系统业务价值?
  • 系统有哪些功能模块?
  • 系统有哪些领域概念?梳理下系统的领域模型;
  • 系统的关键业务流程有哪些?关键业务流程是怎样?
  • 系统的非功能性需求有哪些?如性能、质量、扩展性、安全性等;
  • 系统未来的发展规划是怎样?

技术学习

技术学习主要学习系统的架构、如何实现、系统的运维等。描述一个系统的架构有五视图方法论。

五视图分别是:

  • 逻辑架构
  • 开发架构
  • 运行架构
  • 物理架构
  • 数据架构

1. 逻辑架构

逻辑架构着重考虑功能需求,系统应当向用户提供什么样的服务,关注点主要是行为或职责的划分。

常用表达图形,静态图有包图、类图、对象图;动态图有序列图、协作图、状态图、活动图。逻辑架构的核心设计任务是模块划分、接口定义、领域模型细化。

常见问题:

  • 有哪些子系统或模块?系统之间是什么样的关系?
  • 对外上下游接口有哪些?对接人是谁?
  • 关键业务流程怎么实现的?用类图、序列图等方式表达出来。

2. 开发架构

开发架构关主要关注系统源代码、第三方 SDK、使用的框架、中间件、工具包。

常见问题:

  • 代码在哪?
  • 包怎么划分的?怎么分层?如 mvc、controller-service-dao;
  • 用了什么框架,如 ssh、dubbo;
  • 用了哪些工具包?如 apache commons、guava;
  • 用了哪些中间件?如 metaq、tair、schedulerX、Diamond;
  • 依赖哪些平台?如权限平台、流程引擎等。

3. 运行架构

运行架构的着重考虑运行期质量属性,关注点是系统的并发、同步、通信等问题,这势必涉及到进程、线程、对象等运行时概念,以及相关的并发、同步、通信等。

常见问题:

  • 系统能支撑多少 qps?峰值 qps 多少?
  • 与上下游系统怎么交互的?rpc?http?同步还是异步?

4. 物理架构

物理架构的设计着重考虑安装和部署需求,关注点是目标程序及其依赖的运行库和系统软件最终如何安装或部署到物理机器,以及如何部署机器和网络来配合软件系统的可靠性、可伸缩性、持续可用性、性能和安全性等要求。

常见问题:

  • 系统如何发布部署?有哪些部署环境?
  • 系统有多少台机器?
  • 系统部署怎么部署的?关注接入层,部署方式,如集群部署、分布式部署等
  • 有没有容器化?
  • 有没有多机房部署?

5. 数据架构

数据架构的设计着重考虑数据需求,关注点是持久化数据的存储方案,不仅包括实体及实体关系数据存储格式,还可能包括数据传递、数据复制、数据同步等策略。

常见问题:

  • 数据存储在哪?用了什么数据库,如 oracle、mysql;
  • 梳理 E-R 图;
  • 数据量有多少?是否有分库分表?
  • 用了哪些 nosql 库?
  • 有哪些数据同步任务?
  • 大数据框架的使用情况如何?

6. 系统运维

系统运维重点关注什么时候会出问题,出了问题怎么解决。

常见问题:

  • 什么时间容易出问题?比如电商 双11,对系统的压力很大,这时候很容易出问题;
  • 对关键功能是否有监控?需要看系统有配置了哪些报警项,监控了哪些方面;
  • 出了问题怎么解决?日志在哪?是否有全链路跟踪?是否有一些紧急操作,比如开关配置、降级、限流配置;
  • 系统有哪些坑?找开发同学回顾历史问题,以免踩坑。通过同事总结的 case,或者与负责的产品、运营、技术与了解。系统总会有一些坑,需要把这些坑填上。历史代码经过多次迭代总会导致复杂度高(分支、嵌套、循环很多),存在设计漏洞,性能隐患等,很难维护,这些就需要我们去重构了。记住有一句话:填的坑越大,能力越大;
  • 运营、客服反馈的常见问题有哪些?

实践

熟悉了系统的业务和技术后,就要实战了,通过实战进一步加深对系统的熟悉程度。实践可以通过做需求、修 bug、重构等方式,亲自动手编码、调试、测试、上线。

总结

已有系统通常经历了从 0 到 N 的建设过程,熟悉系统其实是一个逆向推导过程,也是一个学习架构、阅读源码的过程。

在学习的过程中最好能带上思考,比如为什么要这么设计?为什么要用这个中间件?是否有更好的编码方式?哪些地方可以优化等,以此达到一个深入熟悉的过程。

在这里插入图片描述

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

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

相关文章

集成学习 | 集成学习思想:Stacking思想

目录 一. Stacking 思想 一. Stacking 思想 Stacking(或stacked generalization),是指训练一个模型用于组合(combine)其他各个模型 Stacking有两层第一层是不同的基学习器(classifiers/regressors)第二层是用于组合基学习器的元学习&#xf…

Reactor Netty

在springframework 里面,我们只有connection id。但是在底层的reactor netty,我们除了connection id还有local address and remote address HTTP/1 HTTP/2

Qt creator构建DLL库

文章目录 一、构建DLL库二、隐式调用DLL库 一、构建DLL库 Qt creator创建DLL项目。 实现功能函数。 运行代码,debug目录下会有.dll和.lib文件。 二、隐式调用DLL库 QT新建控制台项目。将.lib文件和与之关联的头文件赋值到项目文件夹。 3. 添加头文件和外部依赖库…

GuLi商城-商品服务-API-三级分类-网关统一配置跨域

参考文档: https://tangzhi.blog.csdn.net/article/details/126754515 https://github.com/OYCodeSite/gulimall-learning/blob/master/docs/%E8%B0%B7%E7%B2%92%E5%95%86%E5%9F%8E%E2%80%94%E5%88%86%E5%B8%83%E5%BC%8F%E5%9F%BA%E7%A1%80.md 谷粒商城-day04-完…

[数据结构初阶]二叉树

各位读者老爷好,鼠鼠我现在浅浅介绍一些关于二叉树的知识点,在各位老爷茶余饭后的闲暇时光不妨看看,鼠鼠很希望得到各位老爷的指正捏! 开始介绍之前,给各位老爷看一张风景照,有读者老爷知道在哪里吗&#x…

003- AutoCoder 使用Web版大模型,性感的Human As Model 模式

这是下面这篇文章的继续。 002- 用 AutoCoder 添加和修改代码 前面我们提到,如何解决你没有API版大模型,或者你的API版大模型太弱,而你只有Web版本的诸如 Kimi/GPT4 的情况下,改如何让AutoCoder帮助你完成编程? 我们有…

Excel数字乱码怎么回事 Excel数字乱码怎么调回来

在日常工作中,Excel是我们最常使用的数据处理软件之一,它强大的功能使得数据处理变得既简单又高效。然而,用户在使用Excel时偶尔会遇到数字显示为乱码的问题,这不仅影响了数据的阅读,也大大降低了工作效率。那么&#…

会员中心微服务

文章目录 1.环境配置1.创建会员中心模块2.检查父子模块的pom.xml1.父模块注意:如果父模块中的依赖显示not found,原因是子模块并没有引用,不用在意 2.子模块 3.pom.xml 引入相关依赖(别忘记刷新maven)4.application.ym…

【Node.js】全局变量和全局 API

node 环境中没有 dom 和 bom ,此外 es 基本上都是可以正常使用的。 如果一定要使用 dom 和bom,可以借助第三方库 jsdom 帮助我们实现操作。npm i jsdom 实例: const fs require(node:fs) const {JSDOM} require(jsdom)const dom new JS…

scrapy爬虫框架

scrapy爬虫框架 一、scrapy的概念作用和工作流程1、scrapy的概念2、scrapy框架的作用3、scrapy的工作流程(重点)3.1 回顾之前的爬虫流程3.2 改写上述流程3.3 scrapy的流程3.4 scrapy的三个内置对象3.5 scrapy中每个模块的具体作用 二、scrapy的入门使用1…

Spring Boot1

SpringBoot概述 Spring Boot是Spring提供的一个子项目,用于快速构建Spring应用程序 SpringBoot特性 起步依赖 本质上就是一个Maven坐标,整合了完成一个功能所需要的所有坐标 自动配置 遵循约定大于配置的原则,再boot程序启动后&#xff0…

学习Python的第一天(下载Python环境和工具Pycharm)

下载工具 PyCharm Community Edition 2023.3.4 下载环境 Python3.10.4 目录 1.环境Python下载 1.1 Python环境变量下载网址: 1.2 下载步骤 2.工具Pycharm下载 2.1 pycharm下载网址 2.2 pycharm下载步骤 1.环境Python下载 1.1 Python环境变量下载网址: Python Releas…

C# WPF编程-控件

C# WPF编程-控件 概述WPF控件类别包括以下控件:背景画刷和前景画刷字体文本装饰和排版字体继承字体替换字体嵌入文本格式化模式鼠标光标 内容控件Label(标签)Button(按钮) 概述 在WPF领域,控件通常被描述为…

java常用编程算法——方法递归概述及猴子吃桃案例

前言: 接触到了递归算法,整理下笔记。打好基础,daydayup! 方法递归 方法调用自身的形式称为方法递归,是编程时常用的一种算法 递归的形式 递归有两种情况:1,直接递归;2,间接递归&…

阿里CICD流水线Docker部署,将阿里镜像私仓中的镜像部署到服务器中

文章目录 阿里CICD流水线Docker部署,将阿里镜像私仓中的镜像部署到服务器中一、CICD流水线的初步使用可以看我之前的两篇文章二、添加部署任务,进行Docker部署,创建一个阿里的试用主机1、选择主机部署,并添加服务主机2、创建免费体…

dash 初体验(拔草)

Dash简介 Dash 是一个高效简洁的 Python 框架,建立在 Flask、Poltly.js 以及 React.js 的基础上,设计之初是为了帮助前端知识匮乏的数据分析人员,以纯 Python 编程的方式快速开发出交互式的数据可视化 web 应用。 搭建环境 在学习 Dash 的…

Redis的String类型为什么重新设计使用了SDS数据结构呢

Redis 选择重新设计其 String 类型的底层数据结构,采用 SDS(Simple Dynamic String)而不是直接使用 C 语言标准库提供的原生字符串(char*)的原因主要包括以下几点: O(1) 时间复杂度获取长度: 在…

极简自建web视频会议,私有云,rtmp/rtsp/webrtc一键参会直播会议互动方案

随着视频互动深入工作日常,很多客户需要自建一个会议,监控的交互平台,目前外面不管是开源还是非开源的平台,都是极为复杂,一般linux安装库关联部署复杂,非技术人员根本没办法使用,不方便集成部署…

区块链技术下的新篇章:DAPP与消费增值的深度融合

随着区块链技术的持续演进,去中心化应用(DAPP)正逐渐受到人们的瞩目。DAPP,这种在分布式网络上运行的应用,以其去中心化、安全可靠、透明公开的特性,为用户提供了更为便捷和安全的消费体验。近年来&#xf…

JMeter并发工具的使用

视频地址:Jmeter安装教程01_Jmeter之安装以及环境变量配置_哔哩哔哩_bilibili 一、JMeter是什么 JMeter是一款免安装包,官网下载好后直接解压缩并配置好环境变量就可以使用。 环境变量配置可参考:https://www.cnblogs.com/liulinghua90/p/…