- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
这是一个工程类技术方案模板,基于我之前的一些积累,适合相对独立的需求,实际开发中可以作为一个宽集,在这个基础上进行增加或者删减.
很多时候,大家做项目的时候容易陷入为了上线而上线,尤其技术出身的同学,接到一个项目后,会陷入快速了解需求、做方案的圈子里.
通过概要分析,先了解下你要做的项目、在整个业务发展过程中所处的位置及价值,可以简单问几个问题,相信会有所帮助:
1、项目是解决哪个业务的需求?处于什么发展阶段?
2、当前业务有哪些问题/优化空间/增长点,通过这个项目能否解决?
3、参与业务上下游有哪些角色?
4、项目的成本和收益如何评价,有没有可衡量的指标体系?
5、后期业务发展的趋势如何?未来可能的增长规模多大?
基于以上的问题,为后续落地的方案可扩展性及未来业务发展做预判.
。
统一术语的目的是让沟通在一个频道上,避免出现鸡同鸭讲,在项目后期出现返工等现象.
把术语放在最开始,以确保本文档的阅读者能够在一篇文档中就可以了解所有的关键术语.
。
示例:
优惠券:商品促销手段,通过发放或者领取两种渠道,让用户在下单时抵扣一定的金额.
。
背景是STAR法则中情境(situation)的体现,一般来自需求提出者,产研等部门.
背景通常包括项目内外部、团队内外部、组织内外部、公司内外部等。
综合不同维度上的背景,可以综合反映项目当前的价值,帮助下一步统一项目目标。
。
基于背景分析,明确项目的目标,项目开发的意义,挖掘用户真实的可评测目标.
。
商业目标一般会在PRD文档中明确,列出商业目标的目的是为了让我们的系统分析不要偏离业务主线.
。
系统目标是为了支持商业目标,是商业目标在系统层面的具体化.
系统目标只是达到商业目标的充分条件,当我们的系统最终达到这几个方面,也意味着系统完全能够支持商业目标,但商业目标能否实现,与系统目标没有必然关系.
系统目标要从当前需求出发,不局限于当前需求.
系统分析不是简单的对PRD当前需求的满足,而是站在整体产品的角度来看本次需求处于产品的那个位置,该位置在产品中的目标就是一个具体的系统目标.
“如果你不能用一个过程来描述你正在做的事情,你就不可能真正明白你在做什么。” —— By W.爱德华兹.戴明 (PDCA循环的推广者) 。
。
业务流程从系统全局来看,用例关注的是自己内部的流程.
系统的业务流程是用户要完成他的业务目的,在系统层面发生着什么样的流程、事件来支撑用户的业务.
此处的流程节点同时是粗粒度的,它关注数据流、事件流在系统里的流转.
。
通过梳理业务系统边界,明确系统的上下游关系.
示例:
。
本系统采用了哪些关键技术,如业务算法、分布式session、分布式事务、分布式cache、分库分表等.
本系统引入了哪些外部框架、jar包.
模块的划分,相关描述 。
。
对接口的输入,输出,主要作用,使用场景做描述,输入输出中传递的值对象,也要做描述。不需要描述接口的实现细节.
对于一些复杂状态的流转,建议通过状态机的方式来描述.
。
输入输出,功能描述,UC图等
。
示例,秒杀模块设计:
。
几个图可根据情况选择,但至少要有一个。
例如:状态图,流程度,顺序图
如果是改造型功能,列出改造
系统内用到的算法要有技术公式和计算步骤,参数管理方案等。算法要充分考虑性能因素,大批量操作的部分要首先保证性能。需要加密的数据要定义加解密方式。
核心业务逻辑的实现方法可事先定义好,把类图画出来
比如RPC接口,HTTP接口,可以通过单独的文档描述
同 XX模块设计
。
可以从以下几个角度进行分析:
描述关联上下游系统需要的改造.
描述数据库的设计,包括新的设计和原来设计的修改.
示例,权限模型的ER图:
。
注:数据冗余,优化查询方案等 。
。
列出可能需要的索引层设计.
业务安全可以从如下几个方面考虑:
只要涉及资金(如广告消耗)和电商履约(如商品出库)的项目,都存在资损风险.
。
。
针对某些资损风险点,需要通过一个完整的方案才能从根源上解决资损风险,具体的方案分析在这里展开.
比如,在做电商退货退款的业务设计,我们要从几个角度进行防资损:
。
从系统目标和业务的角度,进行合理的容量规划.
从业务的角度分析对性能的需求:
• 对事务的响应时间(平均、最长) 。
• 吞吐量(例如每秒处理的事务数) 。
• 容量(例如业务所能容纳的客户或事务数) 。
在性能分析的时候,通常关注业务链路的起点、连接点、受限制的资源点.
。
至少可以从以下方面分析:
。
避免使用统一的指标要求所有业务,可能各个系统use case,或各个业务有不同的性能要求,应该要分别描述.
可以从以下方面分析:
。
考虑极端场景下,系统的降级方案.
系统的容错能力可以从以下方面进行分析:
1、系统所依赖的外部系统发生一些错误的时候,系统有没有相应的容错机制 。
2、系统所依赖的硬件网络等基础设施发生故障,系统有没有相应的容错机制 。
由于所选择的通信,存储等方面的不可确定的因素,以及在某一个临界点处导致的质变,需要我们在此处指出可能存在的风险以及解决方案.
。
可以从以下方面分析:
。
可以从以下方面分析:
。
可以从以下方面分析:
可以从以下方面分析:
可以从以下方面分析:
。
拆解到人天,可以划分具体里程碑.
根据具体的业务情况,选择是否需要灰度上线、AB方案等.
。
最后此篇关于服务端技术方案模板参考的文章就讲到这里了,如果你想了解更多关于服务端技术方案模板参考的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我应该编写一个函数来打印一组给定的三个数字中两个较大数字的平方和。 我对这种情况的处理相当笨拙。我没有编写返回一组 3 中最大的两个数字的函数,而是编写了函数,以便表达式减少到两个所需的数字。 # S
如果有人可以提供帮助,我将不胜感激。我一直在敲我的头一天试图让这个工作。我已经在互联网上搜索并重新阅读了手册,但我就是不明白。 guile << __EOF__ ( define heading-li
目前我正在处理一个方案问题,其中我们正在使用方案列表表示一个图。我们使用的第一个变体是表示为 的边列表图 '((x y) (y z) (x z)) 我们正在使用的图的第二个变体被称为 x 图,表示为
我正在尝试创建一个函数,该函数将两个函数作为参数并执行它们。 我尝试使用 cond ,但它只执行 action1 . (define seq-action (lambda (action1 act
我提前为我的原始英语道歉;我会尽量避免语法错误等。 两周前,我决定更新我对 Scheme(及其启示)的知识,同时实现我在手上获得的一些数学 Material ,特别是我注册的自动机理论和计算类(cla
Scheme中有没有函数支持分数的“div”操作? 意思是 - 11 格 2.75 = 4。 最佳答案 我认为你的问题的答案是:没有,但你可以定义它: #lang racket (define (di
我在scheme中实现合并排序,我必须通过定义两个辅助方法来实现:merge和split。 Merge 需要两个列表(已经按递增顺序)并将它们合并在一起。我这样做了如下: (define merge
尝试从终端加载方案文件。我创建了一个名为 test.scm 的文件,其中包含以下代码: (define (square x) (* x x)) (define (sum-of-squares x y)
我有以下代码: (define (howMany list) (if (null? list) 0 (+ 1 (howMany (cdr list))))) 如果我们执行以
我有点了解如何将基本函数(例如算术)转换为Scheme中的连续传递样式。 但如果函数涉及递归怎么办?例如, (define funname (lambda (arg0 arg1)
我正在尝试附加两个字符串列表 但我不知道如何在两个单词之间添加空格。 (define (string-concat lst1 lst2) (map string-append lst1
这个问题已经有答案了: How do I pass a list as a list of arguments in racket? (2 个回答) 已关闭 8 年前。 我有一个函数,它需要无限数量的
我对这段代码的工作方式感到困惑: (define m (list 1 2 3 '(5 8))) (let ((l (cdr m))) (set! l '(28 88))) ==>(1 2 3 (5 8
我正在为学校做一项计划作业,有一个问题涉及我们定义记录“类型”(作为列表实现)(代表音乐记录)。 我遇到的问题是我被要求创建一个过程来创建这些记录的列表,然后创建一个将记录添加到该列表的函数。这很简单
我有以下代码: (define (howMany list) (if (null? list) 0 (+ 1 (howMany (cdr list))))) 如果我们执行以
我正在尝试附加两个字符串列表 但我不知道如何在两个单词之间添加空格。 (define (string-concat lst1 lst2) (map string-append lst1
如何使用抽象列表函数(foldr、foldl、map 和 filter 编写函数),无需递归,消耗数字列表 (list a1 a2 a3 ...) 并产生交替和 a1 - a2 + a3 ...? 最
我试图找出在 Scheme 中发生的一些有趣的事情: (define last-pair (lambda (x) (if (null? (cdr x))
这个问题在这里已经有了答案: Count occurrence of element in a list in Scheme? (4 个答案) 关闭 8 年前。 我想实现一个函数来计算列表中元素出现
我正在尝试使用下面的代码获取方案中的导数。谁能告诉我哪里出错了?我已经尝试了一段时间了。 (define d3 (λ (e) (cond ((number? e) 0) ((e
我是一名优秀的程序员,十分优秀!