陈奇网络工作室

你如何熟悉系统?(包括知识大图)

云计算

作者|? 唐志龙(鲱鱼龙)? 阿里巴巴高级开发工程师

导读:本文将熟悉的系统主要分为三个部分:业务学习、技术学习、实战。 各部分对学习过程中需要解答的问题进行梳理,这些问题需要随着经验的积累而逐渐补充完善。

前言

开发人员经常面临以下情况:

新人要进入公司,需要学习现有的系统。 作为landing的一部分,你怎么学?

过去参加陌生系统的反复开发和系统维护( bugfix ),如何能迅速得到?

如果同事要辞职或调动工作,需要把系统交接给你。 我怎么去接你? 内心操作系统:这是锅吗?

这样的场景多了,就有必要整理一下常见问题和应对方法,以便之后遇到类似场景时能迅速应对。 本文主要分业务学习、技术学习、实战三部分对系统熟悉。 各部分对学习过程中需要解答的问题进行梳理,这些问题需要随着经验的积累而逐渐补充完善。

业务学习

业务学习是从业务的角度学习系统。 需要知道系统的顾客是谁,使用者是谁,会带来什么样的价值,系统提供了什么样的功能等。 不知道业务就等于不知道系统在做什么。 技术是业务落地的服务,业务清晰才知道如何使用技术更好地服务业务,所以业务学习是熟悉系统的首要任务。 这主要的学习方法是与产品、运营、开发的交流,学习产品设计文档、PRD、自己使用的系统,还有产品的功能结构图、业务流程图、功能树、用例图等一般图。

常见问题:

系统行业的情况怎么样?

系统的目标用户是谁? 例如,是为了向公司高层作出决策吗? 为了运营和顾客服务? 还是互联网用户用的?

平均有多少人在使用? 高峰时期有多少人在使用?

系统有什么商业价值? 可以衡量系统商业价值的指标是什么?

系统中有什么功能模块?

系统有哪些领域概念? 整理系统的区域模型

系统的主要业务流程是什么? 重要的业务流程是什么?

系统的非功能性需求是什么? 性能、质量、可扩展性、安全性等

系统未来的发展计划如何?

技术学习

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

五个视图分别如下所示

逻辑体系结构

开发体系结构

架构运行

物理体系结构

数据架构

逻辑体系结构

逻辑结构重点考虑功能需求,系统应该为用户提供什么样的服务,关注点主要是行为或职责的划分。 常用的表现图形、静态图有包图、类图、对象图; 动态图有序列图、合作图、状态图、活动图。 逻辑架构的核心设计任务是模块划分、接口定义和领域模型的细分。

常见问题:

有哪些子系统或模块? 系统之间是什么关系?

对外上下游接口是什么? 对接的人是谁?

重要的业务流程是如何实现的? 用类图、序列图等表示。

开发体系结构

与体系结构相关的主要兴趣是系统的源代码、第三方SDK、使用的框架、中间件和工具包。

常见问题:

代码在哪里?

包是怎么分的? 怎么分层? 例如mvc、controller-service-dao;

是否使用了ssh、dubbo等框架;

你用了什么工具包? 例如apache commons、guava;

你用了什么样的中间件? 例如metaq、tair、schedulerX、Diamond;

您依赖哪个平台? 权限平台、流程引擎等。

架构运行

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

常见问题:

系统能支持多少qps? 峰值qps是多少?

它如何与上下游系统交互? rpc? http? 同步还是异步?

物理体系结构

物理体系结构的设计重点是安装和部署需要,目标程序及其依赖的运行库和系统软件最终将如何安装或部署到物理机上,以及软件系统的可靠性、可伸缩性

常见问题:

如何部署系统? 请告诉我导入环境。

系统里有多少台机器?

如何部署系统? 关注接入层,如何部署集群部署、分布式部署等

被容器化了吗?

有多间机房部署吗?

数据架构

数据体系结构的设计重点关注数据要求,重点关注永久数据的存储方案。 这不仅包括物理和物理关系的数据存储格式,还可能包括数据传输、数据复制和数据同步等策略。

常见问题:

数据存储在哪里? 您是否正在使用oracle、mysql等数据库

整理E-R图

数据量是多少? 有分库分表吗?

您使用了哪个NoSQL库?

有哪些数据同步任务?

大数据框架的使用情况如何?

系统运输

系统运维的重点在于什么时候出现问题,出现问题后如何解决。

常见问题:

什么时候容易发生问题? 例如,电商双方11对系统的压力很大,此时容易发生问题

你在监视重要的功能吗? 需要看系统中配置了什么样的警报项目,监测了哪些方面

出了问题怎么解决? 日志在哪里? 有整个链接的追踪吗? 是否有开关配置、降级、限流配置等紧急操作;

系统里有什么漏洞? 不要踩漏洞向开发同学回顾历史问题。 通过同事总结的case,或者负责的产品、运营、技术、理解。 系统中一定有几个漏洞。 需要填补这些漏洞。 历史代码重复多次难免会增加复杂度(多为分支、嵌套、环路),存在设计缺陷、性能隐患等,难以维护。 有必要重构这些。 请记住一句话。 填补的洞越大,能力就越大。

关于运营、顾客反馈的常见问题是什么?

实践

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

总结

现有的系统通常经历从0到n的建设过程,熟悉系统其实是一个逆向推导的过程,也是一个学习体系结构、阅读源代码的过程。 在学习的过程中,最好带着思考,为什么要这样设计。 为什么要用这个中间件? 有更好的编码方法吗? 通过什么样的地方可以优化等,达成深入熟悉的过程。

附:总结图

云母语实践峰会即将开幕

“云原生关注微服务、Serverless、容器、Service Mesh等技术领域,关注云原生流行技术趋势、云原生大规模落地实践,最大限度提升云原生开发者技术圈”

详情请访问云服务器、域名注册、虚拟主机的问题,请访问西部数码代理商官方网站: www.chenqinet.cn

相关推荐

后台-系统设置-扩展变量-手机广告位-内容页底部广告位3