一、前言
如今,AI大爆发的时代,作为一名IT从业者,你是否也想尝试开发一套自己的系统,实现那些看似有可能实现的天马行空的想法,变成一个优秀甚至伟大的产品,甚至带来某个行业的革新,那作为一名非开发人员,你是不是一样也很想知道一个系统从想法到产品是如何一步步实现的呢,本文基于此进行探究,为有想法的人提供借鉴参考。
二、软件开放全流程
2.1)需求沟通:
开始搭建系统之前,首先需要明确系统的需求。那就要求我们首先应根据客户/自己公司提出的目标和功能,了解用户或客户的需求、系统的功能和特点等,收集并整理需求信息,形成需求文档,需求文档应该详细描述系统的各项功能、性能要求、用户界面设计等,为后续的系统设计提供基础;梳理出适合的开发模式,提供一份《产品功能需求逻辑图》,并给出需要的时间和费用。
产出物:产品功能需求逻辑图、预估时间,预估费用。
2.2)需求确认和合同
在确认功能需求、时间、费用三方面都没有问题之后,签署合同,细节与服务商进行沟通,客户付完首付款项目开发工作正式启动,周期给予客户进度反馈。
产出物:产品功能需求列表确认版,合同
2.3)设计阶段
系统设计阶段涉及多个方面,系统架构设计要确定系统的整体结构和各个组件之间的关系,确保系统的稳定性和可扩展性。数据库设计要合理规划数据库结构,确保数据的存储和访问效率。界面设计要关注用户体验,设计简洁、易用的界面。
1、原型设计
由产品经理设计原型图,采用Axure或者Figma设计工具设计,根据功能需求列表,绘制页面框架线稿图。
2、UI设计
原型图设计完成后,由设计师绘制UI界面,会给出高保真系统界面设计图。
3、数据库设计
项目技术经理设计根据功能需求列表设计数据库模型,设计表、关联关系等。其中,要重视索引的引入,什么时候建索引?建什么样的索引?
索引:编码前、统一建表时把索引设定好确认好,写代码时围绕着这些索引去写查询条件。但注意索引并不是越多越好,应坚持够用,越少越好
数据归档:数据量大的表,可以做归档
查询sql:查数据时,别用 select * ,请指定要查哪些字段;少用用 select count() ,浪费性能;慎用 limit,用主键判断再配合 limit 使用,尤其类似 limit 100000000,10 这样系统会直接卡死,性能非常差。查询时间范围时,尽量带上默认时间范围; 不要在循环里查数据库。这性能特别差;
善用事务:应考虑必要用事务,来保证数据一致性,尽量减少出现脏数据错误数据的情况。但事务设置不合理会容易死锁。
读写分离:访问量一多,必须考虑读写分离,一主多从。数据库的压力就会降下来。但一定要注意,更新数据后又查询时,如果时时性要求高,自己注意这是否会查主库,如果不会,请自己指定去主库查询。比如采集到商品数据后,丢入队列进行一些额外处理,队列里判断数据是否存在,如果不存在就返回false,这就会有问题。一般的ORM的底层有自动处理好,同一事务里,会自动连接主库。Thinkphp的框架还有个配置 read_master ,写入操作之后的读数据库,会自动去主库读取。这是个很好的功能。
分库分表:如果短时间之内会有大量数据,或者不能做数据归档。可以使用分表,甚至分库。
4、架构设计
项目技术经理对设计整体的系统分层架构,便于以后再次扩展功能。
产出物:原型设计文档、UI设计图、数据库设计文档
缓存:缓存key的长度,尽量减短;缓存的内容,尽量减短,并使用压缩;必须设置过期时间。否则内存会有爆的一天。不能过期不能随时清除的缓存,请在后端代码里自行维护。避免在同一时间大量key过期。你可以根据业务情况,随机过期时间。注意避免缓存穿透。数据库无值时,别一直查库。请先判断是否存在此key;注意热点KEY的问题。如何发现热点KEY,提供几个方案:代码访问时封装一个统一入口、用redis提供的命令。解决方案,提供几个方案:人工拆分、主从节点key、二级缓存。 不要在循环里查缓存。这性能也挺差。
频繁请求的接口,请使用websocket进行推送。 请不要使用前端ajax轮询,请用websocket推送
Nginx单节点的QPS能达到10万左右。
使用HTTP 2.0:可以大大提升性能。
2.4)开发阶段
该阶段需要根据前面的系统设计,选择合适的编程语言和开发框架,编写系统各个组件的代码。在编程实现过程中,要注重代码的可读性、可维护性和可扩展性。同时,要遵循编码规范,确保代码的质量和稳定性。目前主流的开发方式是,前后端分离开发模式,优点效率高,易扩展。
1、前端开发
前端开发工程师负责根据原型设计图及UI设计图开始编写前端代码,用代码实现设计图中的功能界面,交互,动效等等内容。
当一个页面信息元素比较多时,你可以先加载主要数据,后加载次要数据。复杂的交互,可以拆分成两步甚至多步。
2、后端开发
后端开发工程师负责根据原型设计图、UI设计图,数据库文档编写后端代码,用代码实现业务逻辑接口,如请求参数,请求方法,数据库持久化,数据返回等等内容。
复杂数据,能在代码里计算就在代码里计算。从数据库仅取出简单数据,然后用代码进行计算,别直接用sql语句去数据库里处理。
该用锁的地方要用锁。比如定时将任务丢入队列,如果队列里其中一个任务卡住了,这个时候会依然持续不断的丢入新的任务到队列里,这样会把队列撑爆。
3、前后端对接
前端和后端人员分别同时开发,互不影响,等到双方都写好功能以后,就可以进行联调了,根据后端开发编写的请求接口文档,前端开始进行代码功能对接,并在其中不断修改和优化接口代码。
产出物:系统API接口文档
2.5)测试阶段
测试是确保系统质量和稳定性的重要环节。测试包括单元测试、集成测试、系统测试等多个阶段。单元测试主要测试各个组件的功能和性能,集成测试测试各个组件之间的协作和交互,系统测试测试整个系统的功能和性能。在测试过程中,要及时发现并修复问题,确保系统的稳定性和可用性。测试工程师应按阶段设计《测试用例》,未测试通过的需要反馈给开发人员进行调整,开发人员修改代码提交测试,测试通过会在测试结果报告中打钩确认。
产出物:软件测试报告
保证每个接口在本地测试时的耗时在100ms以内。
及时性要求不高的任务,特别是耗时任务,请用队列; 减少http接口的数量。这样可以减少你的各种连接数;
2.6)软件上线
1、操作培训/指导
会给用户提供一份详尽的系统/产品操作文档,协助用户使用软件。
2、试运营
试运营中可能会存在一些问题,可以在正式上线前优化解决掉。另外在完成测试后,应该已经开始对系统进行优化。优化包括性能优化、用户体验优化等多个方面。性能优化主要关注系统的运行速度和资源消耗,通过优化算法和数据结构等方式提高系统性能。用户体验优化关注系统的易用性和美观性,通过改进界面设计、优化操作流程等方式提升用户体验。
3、正式上线
系统部署到正式环境,开始正常运行,进入日常维护阶段。
七、售后维护
为非功能性的需求提供一定的技术支持。