如何快速熟悉业务系统

标签: 业务 系统 | 发表时间:2022-09-04 17:20 | 作者:物联网小黑
出处:https://juejin.cn/backend

“我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第1篇文章, 点击查看活动详情

作为开发人员在工作中,最常见遇到以下问题:新人入职需要学习已有系统,被调到新的项目组参与陌生的系统迭代,维护一个离职同事负责的系统等等。这些都是工作中避免不了的难题,那么我们应该怎样快速应对这些场景呢。我觉得主要应该从两方面入手,主要分为业务学习和技术学习。然后再结合工作中的实际项目案例来进行细分拆解,梳理常见问题以及应对方法。

业务学习

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

常见问题:

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

以企业短信平台为例

业务分析

1.1 背景

“【xxx】您的验证码是xxx(有效期5分钟)”。

上述验证码短信已经让我们习以为常,然而这只是企业短信最为常见的一个场景。

企业短信服务旨在解决企业运营过程中的信息传递与交流沟通问题,从传统的本地部署模式到如今基于云计算技术理念和服务模式提供的企业级云短信,云计算的资源共享、弹性扩展等特点充分发挥了企业短信降本增效价值和灵活扩展价值,进一步降低了企业接入门槛。

短信属于运营商业务,基于运营商资源的短信是企业在信息触达用户过程中所使用的最传统的通讯方式。而运营商签发的短信通道质量决定了短信质量,如到达率、到达时间等指标,不同运营商所签发的通道号码可以根据前面几位数字区分。

例如:

全网通道:「1069xxx」 移动通道:『10657xxx』 联通通道:『10655xxx』 电信通道:「10659xxx,020xxx,0760xxx,0769xxx」 不同通道又大致分为三种模式:固定独享通道、固定共享通道和随机共享通道。

以上,企业短信仍然属于高增长且高频业务,云计算厂商希望借力于短信的高频属性,将其打造为自身其他云业务的客户切入点和场景延伸,于是纷纷布局短信市场。同时利用自身平台优势接入多家短信代理商从而打造融合短信,最终通过负载均衡实现最优化调度

1.2 应用场景

严格意义上,新一代短信包含了文本,语音和视频短信,而默认短信为文本短信。

随着电话实名制的推行,手机号码已经被视为判断用户真实身份的关键依据,据工信部2017年发布的消息,全部电话用户均实现实名登记。因此,短信业务再度崛起,在身份验证和服务登陆场景下扮演着重要的角色。

文本短信主要分为短信通知、短信验证码和短信推广三大类。短信通知如物流、付款和登陆通知等等,验证码如注册、身份验证等,推广主要是通过活动进行用户唤醒和召回等等。

尽管语音短信有着低效和单价昂贵等缺点,且需要通过语音电话拨号的方式向用户传达信息导致用户抗拒,但是其到高达率以及防刷量等特性也让其成为了文本短信的有效补充

2.1 厂商分析

这里简单将短信厂商可分为两类,第一类是以短信为主营业务的厂商,这类企业营业额90%以上来源于短信业务,第二类是综合云短信厂商,其短信业务更多是作为场景延伸和生态完善。

第一类主要是梦网、大汉三通、创蓝253和云片等单一短信场景厂商,第二类是阿里云、腾讯云、七牛云、华为云、百度云和金山云等综合公有云厂商。

2.2 盈利模式

国内企业短信服务厂商盈利主要来源于两点:运营商酬金(返利)和进销差价。

  • 运营商酬金(返利):主要是指B端客户和运营商签约,采用代理商平台进行短信发送,按发送额获得运营商一定比例酬金;
  • 进销差价:从运营商处批量采购短信,并转售给下游企业客户

上图为企业短信厂商产业链,可以看得出,运营商对于下游企业的强主导性,而第三方短信厂商间最关键的竞争要素在于能否掌握质优价廉的运营商资源。

2.3 短信客户选择因素调研

根据赛邮的一份公开调查数据表明,B端客户选择企业短信厂商最看重的两大因素分别是短信及时性&送达率和安全性。

而这两点也和目前企业短信主要用途是业务验证码有关,无论是身份验证和服务登陆都和B端客户业务数据息息相关。

目前业内各大短厂商官方宣称送达率普遍在95%以上,5秒内可达。

3.1 竞品比较

根据尼尔·博登提出的经典4P营销理论,产品(Product)、价格 (Price)、渠道(Place)和促销(Promotion),价格和产品是决定市场接受度的核心因素。

这里由于某些限制无法得出产品质量(短信及时性&送达率和安全性),仅从价格侧略作分析。

由上图总结,以官方报价模式中,综合云短信厂商整体价格更具优势,这也符合综合云厂商对于企业短信的定位,将其视为自身业务的延伸以增加客户粘度。

而如七牛云新兴企业短信服务商更是在活动中将单价拉到了0.023元/条。

3.2 功能对比

各厂商企业短信功能趋于同质化,最核心的功能即发送短信,完成这个步骤需要创建签名和模板,然后根据签名和模板发送短信。

由于单一短信厂商大部分需要企业认证,无法作进一步分析,上图数据仅包含综合云短信厂商。

得益于媒介的发展,企业信息触达用户的手段也日益丰富,甚至于由短信和语音长期垄断格局被打破,如更多的企业希望通过社交工具代理代替短信营销。不可否认,客户服务与社交媒体的边界正在变得模糊。

然而对于某些特殊场景如身份认证和服务通知等,企业短信仍然是最佳选择。而对于云短信服务商而言,如何将自身短信业务从售前到转换甚至到流失后的召回从而覆盖客户服务全生命周期是一个值的深思的问题。

而且短信业务通过进销差价实现盈利,短信通道的质量很大程度又取决于运营商,所以各大企业短信厂商的核心竞争点在于掌握质优价廉的通道从而薄利多销。

技术学习

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

五视图分别是:

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

逻辑架构

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

常见问题:

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

企业短信服务为了满足不同的使用需求,功能框架可分为以下5个模块:

  • 普通用户:提供了短信发送、短信记录、账单查询、数据统计、账户管理、账户设置等功能,方便了不同用户群体的基本需求
  • 运营管理:提供短信管理、运营管理、财务管理、监控管理、系统管理等,为了方便运营人员查询,配置,监控的操作
  • 应用程序:按功能划分,主要分为定时任务、网关程序、推送程序、同步程序
  • 数据中心:使用Oracle/Mysql进行持久化数据,数据库划分为四种,业务库、网关库、短信队列库和状态报告库
  • 基础服务:整个应用程序的基础环境,包含服务器、网络传输、数据存储等,保障了应用的稳定运行

短信平台具备功能:短信管理、数据统计、运营管理、监控管理、财务管理、系统管理等功能

缓存服务

单机部署:可以通过直接使用内存队列来缓存页面及接口传递的短信数据,通过单线程获取内存队列数据批量持久化到数据库中,同时为防止应用因为各种因素导致服务挂掉,使用了JVM的shutdown hook进行序列化到磁盘中,当启动项目时,会重新加载序列化到磁盘的文件。

分布式部署:使用Redis作为缓存中间件

平台核心数据流转

API核心功能实现

1.所有业务系统调用接口、所有校验:账户合法性、号码合法性、内容合法性、发送时段等配置全在内存进行,没有进行任务DB操作 2.校验完毕后,进行计费,在这里如果要求控制配额需要进行一次DB操作,若不需要则不需要操作DB 3.计费完毕后直接把群发或单发的短信直接放入内存组件,然后直接返回客户端本次提交短信结果,响应毫秒级 4.API使用单独的线程从内存队列取数据批量入库,异步处理

网关核心功能实现

1.短信网关采用异步方式实现多通道并行处理发送 2.每个通道配置一个内存队列,一般队列长度为通道速度的4~6倍 3.网关由专门提升发送的线程根据网关下的通道队列判断,如果任务一个队列可用长度大于300时,从DB提取队列对应长度到待发送队列中 4.每个通道配置多个发送线程,不断从待发送队列中取出数据发往运营商。发送完毕后把信息转移到已发送内存队列 5.网关专门有接收响应线程,当异步接收到响应后与已发送队列配对,直接放入待入库内存队列 6.专门单独的线程从待入库队列批量把已发送短信入库 7.网关有专门状态报告线程接收运营商状态报告数据,所有接收状态均先入内存队列。再由独立线程从内存队列批量入库,暂不做处理 8.最后由网关线程组,从状态库报告表取数据批量同步下行表 9.所有数据处理采用内存操作,操作DB部分均采用批量处理

短信发送业务流程(时序图)

短信回复业务流程

开发架构

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

常见问题:

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

运行架构

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

常见问题:

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

物理架构

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

常见问题:

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

微服务架构图

\

\

\

系统采用容器化部署方式,为了做持续的集成和部署,引入了jenkins,利用jenkins来构建应用的docker镜像并push到私有仓库,然后再基于应用的docker镜像来发布项目,这样减少了很多的手动操作,基本能实现持续集成和持续部署。

\

数据架构

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

常见问题:

数据存储在哪?用了什么数据库,如 oracle、mysql;梳理 E-R 图;

数据量有多少?是否有分库分表?用了哪些 nosql 库?

有哪些数据同步任务?大数据框架的使用情况如何?

\

系统运维

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

常见问题:

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

\

实践

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

总结

  • 已有系统通常经历了从 0 到 N 的建设过程,熟悉系统其实是一个逆向推导过程,也是一个学习架构、阅读源码的过程。
  • 在学习的过程中最好能带上思考,比如为什么要这么设计?为什么要用这个中间件?是否有更好的编码方式?哪些地方可以优化等,以此达到一个深入熟悉的过程。

相关 [业务 系统] 推荐:

谈对业务系统的切入

- - 人月神话的BLOG
在这里想谈下对于一个原来没有接触过的新行业的新业务系统切入的方法,当然谈这点的时候首先是需要已有有一定的IT行业其它业务系统的工作经验,包括业务和技术双方面的积累,那么在这种情况下如何快速的切入一个新的业务系统,就需要注意相关的方式和方法方面的问题. 接触一个全新的业务系统,首先要搞清楚这个业务系统主要是支撑什么样的业务.

如何快速熟悉业务系统

- - 掘金 后端
“我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第1篇文章, 点击查看活动详情”. 作为开发人员在工作中,最常见遇到以下问题:新人入职需要学习已有系统,被调到新的项目组参与陌生的系统迭代,维护一个离职同事负责的系统等等. 这些都是工作中避免不了的难题,那么我们应该怎样快速应对这些场景呢. 我觉得主要应该从两方面入手,主要分为业务学习和技术学习.

整合Activiti Modeler到业务系统(或BPM平台)

- - 咖啡兔
Activiti 5.10版本把原本独立的Activiti Modeler模块整合到了Activiti Explorer中,两者相结合使用起来很方便,通过Modeler设计的流程模型可以直接部署到引擎,也可以把已经部署的流程转换为Model从而在Modeler中编辑. 在实际应用中也有这样的需求,把Modeler整合到业务系统中可以供管理员使用,或者作为BPM平台的一部分存在,很遗憾官方没有给出如何整合Modeler的文档.

在系统中生成业务ID的几种方法

- - 编程语言 - ITeye博客
在系统中,除了使用数据库表本身的Id,如何生成各种业务Id. 使用数据库表记录生成的Id,以MySQL为例:. 1) 首先创建一个数据库表,来记录当前的业务Id.  2) 获取Id的方法:. int currentCount = jdbcTemplate.update("update global_auto_number set current_num = LAST_INSERT_ID(current_num + 1) where business_key = ?", new Object[] {businessKey}); if(currentCount == 0) {.

美团点评业务风控系统构建经验

- - 美团点评技术团队
本文根据“第八届中国系统架构师大会”演讲内容整理而成. 美团最初以团购的形式出现,到现在有了很大的业务形态转变. 尤其是经过与大众点评的业务融合,从单一业务发展成了覆盖到店餐饮、到店综合、猫眼、外卖、酒店、旅游等多个垂直领域的综合性电商,并且在各个领域都处于行业领先的地位. 在这背后,美团点评不仅面临激烈的行业竞争,还有黑色产业(以下简称“黑产”)带来的各种风险,因为我们的业务有这样一些特点:.

使用Vert.x + SpringBoot编写业务系统 - 知乎

- -
这一期文章主要为大家介绍如何将Vert.x与SpringBoot结合起来编写最最最常见的业务系统,即数据库增删改查. 谈两句SpringBoot. SpringBoot大家都很熟了,一个快速开发框架,其最大的特点是可将Spring应用打成可执行jar包,从而不再依赖外部容器,如Tomcat. 可能绝大多数人在使用SpringBoot时一定离不了嵌入式Tomcat, 从而造成了一想到SpringBoot就会将其与SpringMVC联系在一起的现象.

业务流程成熟度对应用系统的四个影响

- - 《商业价值》杂志
企业若能在实施应用系统之前就提高流程的成熟度,建立成熟的业务流程体系,那么就能从源头上减少上述问题带来的不利影响. 业务流程是企业运作的基本条件之一,应用系统依附于企业的业务流程上,整个生命周期都和业务流程息息相关. 笔者从事IT工作20多年,发现企业管理层常常希望通过实施应用系统来实现规范化、标准化的管理来提高企业经营效率.

推行ERP业务流程管理系统的6个关键步骤

- - 互联网 - ITeye博客
  行之有效的企业业务流程管理系统其实与具体的解决方案、甚至与所部署的具体流程没有关系. 不管你用什么软件,也不管你把业务流程管理部署到哪个部门,这些最佳策略都适用. 以下是积极推行业务流程管理系统时应当采取的六个步骤.   一、确定业务流程管理项目和战略目标执行的契合度.   许多组织犯这样一个错误:没有把业务流程管理系统与项目实施部门及整个企业最重要的战略目标紧密联系起来.

指数级增长背后,滴滴出行业务系统的架构升级

- - 运维派
成立四年,估值已超260亿美元,公司指数级发展、业务爆炸式增长,在此背景下,滴滴出行业务系统的架构升级是怎样进行的. 本文根据滴滴出行平台产品中心技术总监——杜欢在2016ArchSummit全球架构师(深圳)峰会上的演讲整理而成. 杜欢,滴滴平台产品中心技术总监. 2015年加入滴滴,负责公司公共业务、客户端/前端架构和新业务孵化,致力于用技术手段解决业务痛点和提升研发效率,曾作为技术负责人主导公司技术架构升级以支撑公司业务快速迭代的需求.

运营支撑系统(BSS)在面向物联网IoT业务场景的模型简要分析和设计

- - 企业架构 - ITeye博客
BSS运营支撑系统(主要指电信运营商),通常都是为了支撑个人客户的业务运营. 虽然在业务运营上也面向集团客户,但是总体上来说,业务的特性总结归纳为2C的业务场景. 而当前运营商在面向物联网的业务运营下,主要是以2B的业务场景. 运营商实际并不会直接面向最终的客户,而是通过其他业务的运营企业的合作或者买卖关系提供,即是一种B2B2C的场景.