记一次项目技术回顾总结

项目简介

针对用户不同阶段的需求,挖掘出有导流价值的月嫂业务类型,在APP的多个入口进行推荐,获取导流收入,从而产生月嫂项目

技术方案选型

项目启动时可选取的技术方案有两种

方案1. 基于已有的点评系统进行拓展,以新增模块的方式进行开发

image.png

方案2.新开月嫂项目仓库,以对接的方式进行开发

image.png

经过和产品经理、技术主管各种撕逼,最终选择了方案一,理由如下
1.开发量
方案一相对来说开发量少一些
不用再多对接点评系统(减少写SDK的时间)
不用重新部署开发、测试、灰度、线上环境
不用重复开发基础系统功能
2.时间
项目开发时间永远都是一个需要纳入考虑的因素,产品经理的想法是这需求很简单,希望一周内开发完成,进行提测
o( ̄︶ ̄)o,不可描述的1000W字的吐槽
3.运营操作
运营不希望太多的后台,因为目前面向运营的管理后台太多了
小编都不知道操作哪一个后台,管理后台太多了,不好管理

需求评估

开发工作需要主要分为几个模块:点评管理、派单管理、数据统计、商家中心、前台页面、系统对接
其中参与人员:月嫂项目后端、商家中心后端、前端、设计、测试
月嫂项目后端评估耗时:192h
商家中心后端评估耗时:16h
前端评估耗时:64h
设计评估耗时:72h
测试评估耗时:53h

开发编码

编码的过程中,这里主要来说说遇到的一个主要问题:首页列表推荐

产品提的需求是:
1)推荐商户和月嫂评价信息交叉显示,以10条数据为一页,第1,2条为月嫂评价,第3条为商户推荐,之后每隔5条月嫂评价信息显示一条商户推荐信息
2)排序要求:用户所在城市->后台推荐排序->所在省份其他城市->后台推荐排序->除了所在省份城市的其他城市->后台推荐排序
3)月嫂的服务区域跨市,跨省时,列表上的数据需要去重

第1)需求和广告系统的实现有点像,商户信息就像是一条广告,穿插进月嫂评价列表里面
常见的解决方案是提供两个接口给前端(商户接口,月嫂评价接口),由前端来穿插商户推荐信息到月嫂评价列表中,最终渲染出首页列表,为了减少前端的开发量,把业务逻辑全部封装在后端,前端只负责显示数据

这里采用了另一个解决方案:列表数据穿插由后端封装,提供一个首页列表接口
列表数据穿插时,这里会产生一个问题:分页获取时,商户推荐信息在列表的位置不是固定
第一页,第3,9条数据是商户推荐信息
第二页,第5条数据是商户推荐信息
第三页,第1,7条数据是商户推荐信息
第四页,第3,9条数据是商户推荐信息
...
从上面的商户推荐信息的位置来看,可以看出如果以30条数据为一行的话,商户推荐信息才会固定下来

但是需求是以10条数据为一页,撕不过产品,所以这里产生了一个“基本页”的概念
一个基本页有30条数据,以3为基数,当前请求页数对基数求模,得出当前页数对应的基本页数
每次获取数据的时候是获取一个基本页的数据,再获取当前基本页数的数据

第2)需求由于月嫂业务是面向全国多个城市,每个用户所在城市不同,按正常的分页查询实现排序是很困难的

这里采用的是分级查询、逐级获取的方案
①用户所在城市->后台推荐排序
②用户所在省份其他城市->后台推荐排序
③除了所在省份城市的其他城市->后台推荐排序

跨级获取数据时,获取完①的数据,开始获取②的数据,这里会产生一个问题:在获取②的第一页第一条和获取①的最后一页最后一条数据之间,
月嫂评价数据的条数会可能会有2,3,4,5,7条数据,这种情况只会出现在跨级获取数据第一页数据的时候会出现
后面和产品沟(撕)通(逼)过后,产品觉得这能够接受,所以这种情况就不处理了
现在想想,如果需要处理的话,可以考虑使用redis的zsortset进行处理

第3)需求由于月嫂是可以有多个服务区域的,所以在查询数据的时候,会出现重复的情况
由于打开首页列表浏览信息是不需要登录的,所以没法拿到用户信息,那这里只能使用session进行去重了

测试反馈

测试开始进场,测出了xx个bug,这个时候只能微笑地修改bug
自己为这个月嫂项目共贡献了10个bug

性能优化

项目上到线上,试运行了两天,产品说这首页列表的性能不行,太慢了,受不了,然后看了下浏览器的控制台,请求首页列表接口居然用了1.8s

首页列表接口需要进行优化,从哪里下手优化呢?哪里导致慢呢?是查数据库太慢了?

该用性能测试工具的时候,这里推荐xdebug+webgrind工具组合

这里推荐一篇很好的博文(https://www.cnblogs.com/xjnotxj/p/6233614.html)

经工具进行性能测试后,发现导致性能问题的主要问题不是数据库,而是curl内部大UC系统获取用户信息慢,其次才是数据库慢

找到导致接口性能的问题所在,采取了以下几个措施:

①大UC接口换成可分批获取头像接口,并且使用redis缓存用户的头像

②请求大UC的用户信息使用redis加缓存

③对评价数据表、商户数据表分别加索引

④对基本页的数据使用redis加缓存

经过上面的4个措施,发到线上,请求首页列表的时间剧降(1.8s➢➢➢400ms),性能提升了140%

产品测试过后,满意度100%

技术主管测试过后,满意度80%,表示希望优化到200ms以内

如果需要把最后这200ms进行优化,从性能检查工具上看,

需要把基本页和分级查询这两个复杂的业务逻辑简单化,也就是把部分逻辑移到前端处理。

又和产品、技术主管谈(撕)论(逼)一番后,得到的结果是先上线运行一段时候后,如果还有性能上的要求的话,再进行优化

项目心得

① 做这个项目总体来说还是很流畅的

在项目前期要把技术方案、任务拆分这些工作做好,后面编码的过程中就一气呵成了

② 由于要和别人协同开发,在沟通方面也是有很多技巧的。

给别人分配任务时,要尽可能地以简单易懂的方式说明所分配的任务,特别是在带实习生、实战经验不足的初级程序员的时候。

描述任务,给出你的方案,引导别人的思维接上自己的思维。

在对于应该给出多少个方案这个问题上,和不同人沟通有不同的标准

⑴和产品/技术主管沟通的话,要给出多个方案,供他们选择

⑵和实际开发沟通的话,给出一个方案就好(主要考虑到实际开发者会在选择中一直徘徊,最终哪个方案都没实现),当然也鼓励他想想有没有其它解决方案

③ 在开发逻辑较复杂的接口时,需要预先评估性能会去到什么级别,是否能达到标准,善用工具(xdebug+webgrind)提供开发效率

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,423评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,147评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,019评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,443评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,535评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,798评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,941评论 3 407
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,704评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,152评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,494评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,629评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,295评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,901评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,742评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,978评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,333评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,499评论 2 348

推荐阅读更多精彩内容

  • 点击查看原文 Web SDK 开发手册 SDK 概述 网易云信 SDK 为 Web 应用提供一个完善的 IM 系统...
    layjoy阅读 13,700评论 0 15
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,092评论 1 32
  • 每天进步一点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点~~从开始只能写几句话、模仿别人的观点,到现...
    一个帅气的名字呀阅读 18,058评论 4 31
  • 越是不熟悉的环境越要努力让自己有掌控感。 这句话其实听起来有点难。而我最近,基本都在做这样的挣扎。陌生的环境是有很...
    晴千千阅读 233评论 0 1
  • 炮弹英雄是一款射击类游戏,目前游戏中含有4个人物可供选择。默认的只有一个,其他的人物需要通过金币来解锁。金币可以从...
    SGZKJYXGS阅读 208评论 0 0