今天谈下软件行业技术方案编写方面的内容,对于软件公司或团队,经常会遇到的就是对于一个业务场景或需求,一个软件平台建设,都涉及到需要选择某项关键的技术或构建一个完整的技术解决方案来解决问题。
在前面我分享过对于一个完整的售前项目应该如何编写售前技术建议书和完整的解决方案。一个完整的售前建议书实际包括了项目建设目标范围,业务需求分析,项目整体建设方案,功能架构,技术架构,IT基础设施和部署架构,项目实施管理,验收多个方面的内容。而今天只谈解决一个特定业务场景或问题下的技术选型或技术架构方案的要点。
简单来说,这篇文章希望回答的是:
如果你的领导或团队负责人,希望你对一个特别的业务问题或技术问题给出一个完整的技术解决方案,那么你如何做,如何一个完整的方案汇报文档。
问题定义-业务场景和需求
当你准备一个技术方案的时候,首先还是得把问题说清楚。
这个问题可能是一个业务场景下的业务需求,或者是一个技术类问题,比如技术选型,技术实现方式,性能或高可靠性问题等。
对于业务需求简单来说就是业务希望实现的目标,是用业务语言描述的内容。比如我需要实现预算的端到端管控,实现项目的全成本核算等。而对于技术需求或问题,则一般是回答How来问题,比如如何解决当前系统运行缓慢的性能问题,如何构建一个统一的平台支撑所有业务系统开发等。
业务需求到技术方案
业务需求到技术方案,实际需要体现完整的演进过程。
即业务需求-》业务方案-》技术方案-》技术选型。业务需求的解决首先要给出完整的业务方案,其次才是基于业务方案给出技术实现方案。在技术实现中可能又涉及到多种技术,那么对于每种技术都给出具体的技术选型。
技术问题到技术方案
如果本身已经是一个技术需求或问题。那么整个过程相当简单,即技术问题-》技术方案-》技术选型。首先是要基于技术问题确定技术方案,再有技术方案到最终技术工具的选型。首先要确定采用什么技术,其次才是确定选择哪个工具或产品。
比如一个性能问题的解决。
首先要确定是采用缓存数据库,还是说采用消息中间件技术。其次才是确定消息中间件是采用哪种开源的消息中间件,即技术选型问题。
问题分析-静态+动态分析
对于问题分析,实际又回到了我常说的静态加动态的分析逻辑。
简单来说你需要先把问题说清楚。
在前面问题定义阶段你可能只是在说存在技术问题了,但是到问题分析阶段你需要详细分析和诊断问题如何产生的,究竟是在系统的哪个组件,在整个软件运行的哪个阶段或步骤产生的问题。
从问题场景到具体的问题根源点
还是拿一个简单的性能问题来说。
当用户访问一个功能菜单出现严重的性能问题的时候,实际用户从界面点击按钮到返回数据中间经过了前端界面,中间的逻辑层,数据访问层,数据库多个环节。同时场景本身又存在具体的网络环境,具体的资源,具体当时出现性能问题的时候用户访问并发量。
所以问题分析实际要具体分析清楚是哪里出现了问题?
如果本身单用户访问调用并没有性能问题,确实是大并发量访问导致性能下降,那么这个时候不是去修改程序,而是应该去扩展集群资源。当分析了确实是程序问题后,还需要诊断定位就是是在前端界面,逻辑层,还是数据库出现问题。
问题根源点到技术解决思路
还是接着上面说明。
当发现是大批量数据写入到数据库的时候,数据库出现了性能问题。那么这个时候如何去解决这个问题?
实际上具体的技术问题根源点的技术解决思路,即使你没有历史经验积累,你也很容易在互联网上搜索到相关的业界做法。比如这个问题,你到网络上搜索很容易搜索到采用消息中间件进行消峰处理,或者对数据库进行集群扩展,对数据库进行前端缓存或索引优化等。
当到这里的时候,你会发现多种技术的解决思路。这里会出现第一次选择,即采用哪种思路。所以这里就出现了问题分析的一个关键内容,即需要将问题场景和技术适用场景进行分析。任何一个技术都有适用的场景,那么这个场景与你会遇到的问题场景是一致的。
比如上面这个,消息中间件特征是异步和最终一致性。而你的业务场景是同步和强事务要求那么现在就不合适了。或者你的数据库本身就不支持集群扩展,如果要集群扩展可能就需要更换数据库或数据库部署架构,那么从成本投入上面就需要重点考量。
具体技术组件或工具的选型
当问题初步分析清楚后,实际已经选择了采用哪种技术来解决业务或技术问题。比如前面的,如果最终分析可以通过引入消息中间件来解决问题。在这里实际上你已经分析了消息中间件的异步机制,事务处理,消息发布订阅等能力都刚好能够满足问题场景的需求。
因此紧接着的问题就是对消息中间件进行对比分析。
实际这个对比一般来说互联网上已经有人做了详细的对比,比如常说的消息中间件,分布式缓存,注册中心,链路监控等各种开源工具,往往有很多文章实际就在做这些开源工具的对比,方便你进行选型分析。
如果没有类似的资料,你如何做对比?
简单来说你应该先整理出消息中间件的核心功能清单或者根据你的业务需求整理出消息中间件必须具备的技术能力。然后在列表对比各个开源消息中间件是否具备这些能力。比如对于消息中间件,一个对比参考图如下:
如果网上本身能够找到类似的资料。
那么你选型的重点就是基于业务需求或问题来分析哪些是必须具备的核心能力,哪些是可选能力。当多个消息中间件都具备核心能力的时候。那么技术选型的重点一定会转移到当前产品的应用广泛度,各类技术资料,文档,社区的成熟度,学习成本,实施成本,后续的运维成本等方面的考量。
对于技术方案要注意,一定不是说技术最先进的就是最好的,而是应该基于问题选择在当下最合适的技术,最容易学习并实施的技术。
从技术选型到POC验证
POC测试,即Proof of Concept,是富贵论坛流行的针对客户具体应用的验证性测试,根据用户对采用系统提出的性能要求和扩展需求的指标,在选用服务器上进行真实数据的运行,对承载用户数据量和运行时间进行实际测算,并根据用户未来业务扩展的需求加大数据量以验证系统和平台的承载能力和性能变化。
实际上要最终选择一个技术组件的时候,还需要进行基于场景的POC测试和验证。虽然网上可能有其他人做的测试验证报告。
但是每个企业,每个团队或项目实际所处的环境都存在不同,别人测试的结果并不代表就适合你,因此最好的做法还是需要对产品搭建测试环境进行验证。这种验证注意不是对产品所有功能的完整验证,而是应该基于业务场景驱动,基于你的场景来准备测试用例,并通过你选择的开源技术或产品来完成最小化的验证场景。
这个验证可以是对多个产品进行对比验证,以确定前面谈到的核心功能和实施难度。也可以是已经选择的技术组件进行验证,即验证这个组件是否完全满足选型时候的假设条件。如果验证失败,那么很可能你还需要进一步选择其他组件进行迭代验证。
技术方案部分内容参考
下面分析下一个分布式事务选型的方案材料部分内容,作为参考。
共同学习,写下你的评论
评论加载中...
作者其他优质文章