在合肥-S7: 这一年多(上篇)

JerryZhang 2016/11/23

上周四发了一个版本,上周五早上忙活了到快一点钟,下午去拜访了两家门店,说了我比我一周都要说得更多的话,感触颇多。

每当你直面你产品的用户的时候,总会有两个感觉:喜悦与惭愧。 在别人夸赞你的产品的时候,心里有一丝开心,但更多的是惭愧,因为你心里明明知道,你要做的还有很多;而别人抱怨你产品有问题的时候,同样也是这两个感觉,有人反馈说明有人关注你的产品,而你做的不够好。

第二个感触是,当你出去的时候,你不再是一个技术人员,你可以是销售,你可以是售后,更重要的你代表的你所做的产品和你的公司。

从去年10月份开发到现在,版本发了十几个,产品自身也逐渐的完善和稳定起来,才发现你作为一个技术,在一个产品的生命周期中,所能做的事情是非常有限。售前、售后、技术每个环节出了问题,产品都是失败的。「做技术越做越无力」,这是我最近几个月的感受。

在离开风行的时候,我意识到「如果公司的上层出了问题,无论你的团队、你得技术多么牛逼,也无济于事」,这个想法在上家公司得到的验证,我不希望在现在这个项目上再验证一次。整个公司,没有一个人像我一样更希望这个项目能成(至少在我看来),因为我来合肥就只为了这一件事,ALL IN。所以有的时候情绪难免控制的不是很好,当我看到我做的产品是那样做售后的,门店有那样用的,有完全没有用起来的,甚至服务门店的人对系统都不太熟,我非常的不开心(其实是愤怒)。我常常在想,我们是做互联网的,我们是做服务行业的,那怎么来证明我们是做这些的呢?我们凭什么和传统行业不同?差距怎么拉开呢? 何况我们才刚刚开始。

下午从一家门店去另外一家门店的路上,和徐总又刺了几句。印象中,在七行这一年多的时间里,我和赵总、和徐总还有其他人都刺过,后来我已经尽力的控制自己的情绪,一方面让别人非常的不爽,另外一方面每次起冲突的过后,自己也特别的烦。但那天下午还是没忍住,犟了几句,回想一下好生尴尬呀。坦白说,我喜欢和更专业的人、更有效的人一起做事,尽管这些人可能是活在书里或者在我的想象中。

在技术和产品上我都有自己的追求,在协作上我也刻意的想让与我和配合的人更加高效,尽管这可能会让别人觉得非常不舒服。就好像王经理说的,在七行的这段时间收发的邮件可能比他前几十年的邮件还要多。

但是,我们还是要去面对当下的要做的事情,面对现实。每个人都有自己需要面对的问题,站在赵总的角度、站在徐总的角度。高标准招不到人,低标准招到了人可能水平不行;高效的流程,可能会直接把别人吓跑了;在希望别人做的更好的同时,还是安抚别人的小情绪,都不易。好在赵总、徐总都没有责怪我,但愿心里也别怪我(没有什么事情是一顿饭不能解决的,如果有,那就两顿)……

上周六和周日两天,天气不好,两天都没出门,一直憋在家里看视频,睡觉。9、10月份到现在一直感觉特别累,我经常会焦虑。

从技术上,这个项目服务器主要是 Python+Django+MySQL+Redis 这一套。躺了很多坑:

  • 一、从 Python 上讲,四五月份吧,从 Python2 升级到 Python3 ,过程挺麻烦,但是编码问题至少彻底解决了;尽管接触 Python 三四年的时间了,没有正经的学过它,使用过程的也有很多问题,一些是自己确实不知道的特性,还有些这门语言自身设计上的问题,好多设计我觉得特矫情特傻逼;我从来没有喜欢过这门语言,上个项目做游戏主流语言还是 C/C++,万万没想到现在用上了 Python。
  • 二、Django 在上个项目里做 接入 服务器,我了解并不多。到这边以后也是赶鸭子上架,想快速上线,边学边用,最初的使用方法,到现在看起来有很多不妥,但是已经无能为力了,只能打补丁。比如在 API 的设计上、在 model 的使用上。框架能提供给我们的东西越来越少了,写了好多工具函数(在 Django 和 Python 上得感谢群里的几位兄弟)。
  • 三、计算机类大课:编程语言、数据结构和算法、操作系统 我底子都很好,唯独两块数据库和网络两块非常差。还好在热血的时候,整理了很多 MySQL 的命令,这边又没办法只能硬着头皮上,到现在在基本上使用上总算无压力(在 Linux 和 MySQL 上得感谢磊磊 和 Tanky了)。
  • 四、提到 Redis,我不得不喷一下阿里云了,性能太差了。在当初要选择一个 Key-Value 的 NoSQL 的时候,我几乎尝试了当下所有的流行的 NoSQL ,并测试了性能,在查阅资料和问人的基础上,最后在 Redis 和 Memcached 两个做选型,来回倒腾了好多次,最后选择了 Redis。 Django 是有 Redis 组件的,但是只能做 cache,而且接口提供的非常少。不得已,我自己写了一个 Redis 的 KV-store,把常用的接口都重新封装了一下,保证服务器有统一的访问入口。在本地测试的存取速率是完全可以满足当前的需求的,但是放到阿里云之后,本机搭建有 7K~8K 的速率,跨机器只有 3K 左右。阿里云提供了 Redis 服务,但是性能比 3K 更低,最后我都怀疑是我使用的问题。焦工和磊磊早就推荐过我使用 UCloud,由于公司这边一直用的是阿里云,备案和 DB 都在这边,迁移不方便,怕中断线上的服务加上对 UCloud 了解不多。还有阿里云 MySQL 不提供 Root 权限,添加数据库和用户非常麻烦,很难做自动化。还有阿里云出过几次宕机,上次去乌镇玩,凌晨宕机了,问了一下客服才知道,宿主机挂了!我艹,这也行?!有一次和陈东坡聊天谈到这个事情,他也推荐 UCloud 并给我介绍了一个客户经理(感谢东坡),在确定域名迁移不会影响线上服务和测试机器的性能可行的情况下,决定使用 UCloud。 其实这个过程我是有压力的,一方面我要说服我自己,另外一方面我要说服赵总,赵总一直用的阿里云,在这之前他可能都没听过 UCloud,UCloud 在价格上算下来比阿里云要贵一点,而且阿里云购买的服务器是不能退的。如果真的迁移过去,出现很多问题,不是啪啪啪的打脸么。记忆中那次迁移是从晚上8点一直搞到第二天凌晨1点,整整五个小时。可喜的是,UCloud 的性能比阿里云要强太多了,不管是云主机、云DB还是云内存存储,也一直没出过大问题。

Web前端这块用 Django-Template 做页面渲染,Bootstrap 做布局和样式,JQuery 加上茫茫多的 JS 组件,有段时间一直尝试前后端的分离,因为不做彻底分离的情况下,仅用 Ajax 做异步请求然后修改 DOM 内容 写起来非常的蛋疼,但是在多次调研的情况下还是放弃了。我以前没有做过前端,好在之前写过几个 WordPress 主题有一定的积累,从之前丑到爆炸的页面逐渐优化的还能看了;从之前全同步的页面,后来配合 Ajax 和类似 select2 的插件一些耗时操作都改成了异步。但是到现在 Web前端 依旧是个大问题,一方面是真的不会,有的东西搜都不知道怎么搜,一方面也没有那么多的时间去学习研究。

不管前端还是后端,每选择一个框架或者组件,我都非常的小心谨慎。几年时间里使用技术当我得出一个结论,看似美好的东西,背后一定有你不知道的问题,尤其是社区的盲目吹捧,你一定要小心。直到自己开始尝试做架构,尝试选择技术的时候,才逐渐明白为什么当时在热血广宇对每一项技术的使用上都特别的保守。架构的调整比技术的选择更加的犹豫,坦白说,技术上的缺陷,我并不那么明显,这方面我有自信;但是在性能上,我非常的心虚,比如说 DB 的存储速率有多快,Http请求的响应时间多快,这不是一个数值能给的答案,多快才算快?多慢才算慢?这些东西切身经历过才能心里有谱,别人给的建议和资料上的数值都是没用的。就好像之前测试过了之后才知道,Redis 4K~5K QPS 就可以满足我们的业务需求,那我只要保证 Redis 服务器的 QPS 可以是这个数值的两倍就足以,那么问题又来了,一条连接是这样,一百、一千、一万条连接如果每个都同时请求呢?我不知道会出现什么问题,我现在只能保证在程序上尽可能的降低 Redis 存取速率,当然,这可能这本身是无意义的。

这周从周一到今天一直被上个版本存在的问题打断,加上上周五一共四天了,很烦躁。解决问题本身我是不拒绝的,既然问题已经发生了,用户为主。为什么这个版本之后会有这么多的问题,没有办法归咎与某一个人,研发、测试、售后都有问题,也不好说什么。只是觉得有些无力,本来很简单的几个问题,只要描述清楚,生生的折腾了几天。

每当我过的不好的时候,就想写东西发泄一下,好像从无例外 ...,于是也就有了这篇文章,你们懂的。好久没写东西了,这篇主要针对产品和技术的,本来打算在写写技术之外的生活感受,太晚了,下一篇吧。