吴涛互联网产品研发流程概论下

本文由6氪企服点评专家团吴涛原创。

6氪企服点评专家团——吴涛

————正文————

本文接上篇:互联网产品研发流程概论(上)

5、架构设计

架构设计是架构师对各个子系统关系的抽象模型,用于指导大型系统的开发和运维。

架构设计主要包括三项工作:系统架构设计、软件架构设计、网络架构设计三个部分。

系统架构设计一般都会采用MVC(Model-View-Controller)模型,将业务逻辑模型、软件界面、控制器逻辑层进行分层处理,然后通过控制器逻辑层确保业务逻辑层和软件界面层的同步。MVC模型的好处是在优化界面及用户交互的同时,无需重新编写业务逻辑。同时也有助于管理复杂的应用程序,可以在不依赖业务逻辑的情况下专注于视图设计,不同开发人员可以同时开发界面、控制器逻辑和业务逻辑,同时也让测试变得更加容易。

(1)系统架构设计

如果整个系统研发是从零开始的,架构设计则需要从概况图开始梳理,然后再补充各个模块的架构图。这部分一般由首席架构师牵头,属于整个产品技术架构的总纲。

支付宝平台系统架构概况图

一般而言,子系统名称都会与产品概念保持一致。子系统不论是应用前台还是后台,通过公共服务层、业务逻辑层、基础业务逻辑层关联到一起。这种对象化的架构设计方法,会让整个团队使用同一种语言在沟通,相互理解起来更容易,有利于提高协作效率。

支付宝财会系统架构图

(2)软件架构设计

软件架构设计一般采用分层架构设计模型。

软件首先分为两个大层次:前端和后台。前端应用负责提供与用户交互的软件,分成Web应用,PC客户端应用、移动APP应用等场景;后台负责实现所有业务相关的操作和服务,分成接口层、业务逻辑层、基础逻辑层。

软件架构设计时,需要主要做到以下几点:支持模块化、高内聚、低耦合、可伸缩性,同时也要防止过度设计。已上线软件如果要新增某个功能,则需要针对该功能进行软件架构设计,并最终形成软件架构设计图。

腾讯视频邮件推荐功能软件架构设计图

然后针对这个软件架构图进行细化,先明确系统涉及的所有基础逻辑层模块(对象),以及该模块的输入和输出项,并明确模块内部的基本处理逻辑。这些模块有的有可能已经存在,则无需再开发,单独标注出来即可;还没有开发的模块,则可以交给软件项目经理指派给工程师开发。

所有基础逻辑层模块

然后明确界面上可以直接调用的各个业务逻辑层模块(对象)名称,以及对应接口、属性、方法。

所有基础逻辑层模块

对于还未开发的接口,如果涉及到数据调用,则需要梳理相关的数据结构,并确定算法。

所有基础逻辑层模块

上面介绍的只是最基础的软件架构设计流程,为了保证软件的柔性可用,经常还会RPC服务组件(让网络分布式应用开发变得更容易)、消息中间件(将模块之间的交互异步化)等方案。

()网络架构设计

A)运维架构

架构设计需要保证每个环节都能快速迭代配置,尤其是在服务器CPU、内存、存储、带宽几个方面需要做到高可用性。

以新零售个性化推荐动态Feed为例,我们梳理下整个网络结构设计的流程。首先需要根据业务数据分析网络系统需求。一般Feed信息流前页访问量往往占了90%以上,因此在做缓存设计的时候,我们完全可以在缓存数据中只保存每个用户最近的条数据,其他的需要用户下拉再从数据库中实时生成。

然后需要从技术上解决高并发和高性能的问题。因为Feed性能压力主要集中在查询请求量上,而且一条Feed数据经常是数百甚至上百万人访问,因此Feed很适合采用缓存系统。当访问压力不大时,采用单层缓存数据就可以了。如果日均访问量达到了百万人次而且峰值非常明显,则最好采用双层缓存机制以增加系统扩容的灵活性。当写入Feed量很小但是访问量暴增时,只需扩容L1层服务即可;写入量暴增,则对L2层服务快速扩容。缓存扩容主要是提升QPS、带宽瓶颈以及缓存数据库性能。

多级双机房缓存系统

如果希望降低研发成本,也可以考虑购买腾讯云个性化推荐服务,这些中间处理过程就全部交给云服务去处理,这样可以集中力量解决业务层问题。

云推荐引擎CRE

Feed中除了文本数据外,还会有大量图片甚至视频数据,此时可以采用该CDN做文件缓存。LocalCache+分布式缓存,这是常见CDN缓存策略。此时比较经济的选择,是购买CDN云服务,发布Feed时,把这些图片和视频数据先Post到服务器,然后再同步到CDN云服务中去。

然后是数据库的分布式架构。网络架构师拿到软件架构师的数据结构后,首先对Feed数据区分冷热数据。Feed数据冷热一般都非常明显,可以按时间维度拆分做分表(例如每天Feed数据是独立一张分表)进行冷热数据分离,并对冷热数据采用不同的存储方案降低成本。Feed数据还有快速检索的需求,因此需要通过建立索引提高检索速度。

Feed存储架构-MySQL

B)服务拨测系统

运维发布系统后,运维团队的压力才真正开始。随着用户量的不断增加,稳定性、性能和监控成了刚需。每个客户请求过来,都需要在后台不同机器之间不停地调用并返回。只要有1个接口出现问题,就会导致整个系统出现性能下降、服务延时甚至崩溃。

此时,就需要有效的服务追踪系统。对新零售企业而言,最经济有效的办法是采用腾讯云拨测系统。通过部署抽样接口到云拨测系统,特别是在高峰时段进行监测,即可通过手机短信或邮件监控服务异常。

云拨测CAT

C)日志统计系统

日志统计系统建议直接采用腾讯云日志服务。

日志服务CLS

此外,还要考虑全链路压测、服务器登录安全性、运维权限分配、流量峰后降级预案、共享Docker集群资源等问题,确保系统可用性、安全性、单位成本。

6、创建版本计划

当架构设计完成并评审后,研发项目经理开始对需求和架构进行切分,形成版本计划。

版本主要作用是用来明确研发节奏,方便团队协作,特别是方便测试和产品发布。

一般产品研发节奏都是按每周1个小版本,以便安排和协作。但是因为APP有发布周期和推广成本的考虑,因此会每隔几周发布一个大版本。

每个版本都包括若干需求点,因此自然就明确了测试范畴,这样测试范围就不会无限制蔓延,可以让产品节奏非常明确,形成快速迭代和敏捷开发的研发风格。

版本落地到代码管理层面上,关键就是代码管理系统(一般都选用Git)中的Trunk版本。首先项目经理需要在Git中创建Trunk版本,并为每个研发人员创建分支版本。研发人员在分支版本中测试没有问题的版本代码,将由架构师或项目经理合并到Trunk版本中,这个版本经过编译后进行功能和系统测试,没问题后再同步到运维发布系统中发布。

7、开发阶段

(1)开发测试环境准备

主要是部署Web、APP开发测试环境,以及部署需求管理系统、代码管理系统Git等。

QQ游戏大厅研发环境搭建计划

(2)开发设计文档

开发工程师拿到架构师设计文档后,就可以将自己负责的部分拆分出来,然后提前对这部分的开发细节进行补充和完善,形成开发设计文档。开发设计文档主要用来提高软件开发效率,保证软件质量,并有利于后续产品客服文档的编写,也非常有利于后续的研发迭代和代码维护工作。

前端开发、APP客户端开发、后台开发完善的内容和细节各不相同,但是内容主要集中在开发环境、开发语言、使用框架、对象属性方法、接口封装、数据结构设计、界面开发、编译发布等方面。

()前端开发

前端开发工程师通过使用JavaScript来编写和封装具有良好性能的前端交互组件,并通过CSS+XHTML输出Web操作界面。前端工程师经常不仅要考虑前端实现,很多时候也需要了解后台研发,从而能不断优化前端代码分层架构,让Web产品的稳定性和可用性不断提升。

()APP客户端开发

App客户端开发主要是指IOS、Android、


转载请注明:http://www.aierlanlan.com/rzdk/4153.html