海阔天空的云

我们在自己的世界里独自狂欢

0%

一个互联网产品的技术栈

简单介绍

前面提到了我在过去的五个月内,一个人维护开发一个系统 ,也正是有了这样的经历,让我想要总结一下。

先简单介绍一下这个产品,产品是移动端商城。根据情况,可以放到微信里,也可以放到app壳子里。

技术栈

前端

我自己并没有参与当初项目的选型,但是后来,我主导了项目的前端工程化的升级改造。后来,我也写了很多篇博客来说相关事宜。

前端方面主要的技术栈

  • react
  • react-router
  • webback
  • sass
  • babel

商城采用前后端分离的技术架构,前端的框架为React, 配合上相应的一些工程化的工具,达到快速响应开发的目的。

后端

后端使用python语言进行程序编写,版本为2.7,这是由于当初移动端商城开发之前,已经有一版PC端商城,PC端商城就用到了python2.7 ,后端框架也是基于python2.7 自主研发的,因此并不想在整个大的项目中,只能继续使用python2.7编程。

  • python2.7
  • jinjia2
  • tasktiger
  • ELK(Elasticsearch, logstash, kibana)
  • git

在这里,用到了jinjia2作为PC端商城的渲染引擎。它有点像是Django的模板引擎,总体来说,使用起来比较简单。另外,使用tasktiger作为任务队列(消息队列)的处理引擎。使用ELK 进行日志监控和错误筛选。将项目部署到git私有服务器
,同时备份到github的私有仓库中,使用github的issue进行项目管理。

运维

自主研发的后端框架,支持运维的一系列工作。包括:

  • 两种部署方式
  • 容器
  • git

部署方式

一一说来,两种部署方式分为patch和deploy两种。patch顾名思义就是打补丁,全程停机时间非常短,简单来说,只是将代码上的改动放到服务器上,并不涉及到依赖包的注册或更新,而deploy的方式,是全量更新,这样的更新方式,由于是做一遍全量的检查,因此会特别慢,也因此停机时间会很长。因为非常影响用户体验,所以往往选择在夜里进行这样的部署操作。由于财力物力的限制,不能做成服务器集群。因此每次部署又会短暂地停机。如果是通过deploy的方式来部署,那么这个停机的时间就会更长。框架也没有考虑这些情况

原有的自研框架,是12年左右的时候,几个技术牛人开发的,后来就一直只是小修小改,但是其实站在19年来看已经无法满足当今的需求了。一个最明显可见的缺点是,它还在以python2.7 作为编程语言,而python官方已经明确提出,到了2020年,就会废弃python2.7,相应地,很多python2的第三方库也将不再对2.7版本进行支持。这样这个框架就显得十分落伍,相应地,性能上也无法跟上潮流。记得之前的老大曾经提到过,sanic异步框架。他还给我们科普了,如果以后上了python3,用上了sanic,去掉了tornado之后,整体的性能会有飞跃式的发展。然后,时隔近一年,他的想法也不会再在那个项目中得到施展了。

容器

并没有使用docker作为容器,而是使用了lxc这样的方式。从效果上看,lxc也有它的好处,但是还不够好。

但是框架还是提供了很强大的能力的,从一个裸机安装好ubuntu系统之后,通过框架,自动安装好所需的环境,全程不再需要运维做过多的工作,其实是能够将人从运维的工作中解脱出来的,只是说,由于这个自研框架也没有一个完善的文档,导致一旦框架本身不符合要求,出了问题,就不得不去看源码,尝试修改框架源码,而框架源码又往往更加抽象,这时候,也就到了提高自己能力的时候。比如,我曾经就因为一个误操作,搞坏了测试环境的服务器,没办法,只能给这个机器重新安装环境,结果又出现了一些曲折,最后终于算是搞定了。但这个过程,需要对这个框架的源码深入了解。

git

据我了解,有些公司的项目,代码托管方式是,整一台自己的git服务器,然后安装上gitlab,gitlab实现了一个可视化的界面,也能够进行issue管理,项目管理等常规的项目操作。不过也由于历史原因,当时我们的项目,采用了git服务器+github的方式,即项目的真实git源是在自有的git服务器上,但会将代码备份到github上,也就使用了github 的项目管理操作。

感想

可以看出来,很多时候,一个项目开发好,只是它的初生。之后,如果这个项目不死亡,就需要不断地对它进行更新,变革,这样才能跟得上时代。但是往往,这种变革伴随着疼痛,也伴随着可能的力不从心。比如,给一个以万行代码计的项目从2.7升级到3.5,是一个巨大的工作量,如果又没有更高层领导的推动,如果更高层领导又对代码一所我所知,这就是一件很吃力不讨好的事情了。所以有时候,可能将一个项目放弃,推倒重来,或许是更好的选择。

我在那家公司做了两年,其实经过这么一个过程,我看着一个产品生长,壮大,又慢慢半死不活。我看着这个庞大的项目,怎样发展,对我也是一种成长。我有一种欲望,把那段经历记录下来,总结自己的知识,所以也就有了这篇文了。

也许再过几年,回过头来看这篇文,我会感念,现在的自己视野还蛮开阔的。因为我是一个全栈工程师,只要我想学,我就能够胜任计算机相关的任何工作,就能解决遇到的问题。