网易首页 > 网易号 > 正文 申请入驻

辞职腾讯去了小公司,从0到1搭建后端架构,工资就翻倍了

0
分享至

  来腾讯之前在前公司做了3年的后端开发,经历一款SaaS产品从0到10(还没有到100, 哈哈哈)的过程,3年间后端的架构逐步演变,在微服务的实践过程中遇到的问题也越来越多,在这里总结下。

  产品是一款服务于人力资源的SaaS在线服务,面向HR有Web Android/iOS 小程序多个客户端,后端采用RESTful风格API来提供服务。主要使用Python语言,方便快速迭代。

  架构的演进经历了4个大的阶段:

  一、MVC

  项目刚开始的时候,后端同事不超过5个,这个阶段主要的工作是实现产品的原型,没有太多的考虑架构,使用Django来快速实现功能,DB的表结构设计好之后,抽象出功能View,由于产品设计也很不完善,后端需要很多的预留设计,避免产品逻辑的变更带来整个表结构的变动,在这个阶段代码上最重要的是确定适合团队的代码规范,代码检查规则。

  

  整体上架构如上图,Nginx负责负载均衡,分发流量到多个Django服务,Django处理逻辑,需要异步任务就交给Celery,然后数据量比较大的地方使用Redis做缓存。同时还有实时消息通知的需要使用了Nginx Push Module。

  问题与优化方式:

  

  • Django并发性能差 使用uWSGI Master+Worker 配合 gevent 携程支持高并发
  • Redis连接数过多 使用redis-py自带的连接池来实现连接复用
  • MySQL连接数过多 使用djorm-ext- pool(https://github.com/djangonauts/djorm-ext-pool)连接池复用连接
  • Celery配置gevent支持并发任务

  随着开发的功能越来越多,Django下的app也越来越多,这就带了发布上的不方便,每次发布版本都需要重启所有的Django服务,如果发布遇到问题,只能加班解决了。而且单个Django工程下的代码量也越来越多,不好维护。

  二、服务拆分

  随着后端团队的壮大,分给每个同事的需求也越来越细,如果继续在一个工程里面开发所有的代码,维护起来的代价太高,而我们的上一个架构中在Django里面已经按模块划分了一个个app,app内高类聚,app之间低耦合,这就为服务的拆分带来了便利。

  拆分的过程没有遇到太大的问题,初期的拆分只是代码的分离,把公用的代码抽离出来实现一个公用的Python库,数据库,Redis还是共用,随着负载的增加,数据库也做了多实例。

  

  如上图,服务之间尽量避免相互调用,需要交互的地方采用http请求的方式,内网的调用使用hosts指向内网地址。

  问题与优化方式:

  Nginx Push Module由于长时间没有维护,长连接最大数量不够,使用Tornado + ZeroMQ实现了tormq(https://github.com/zhu327/tormq)服务来支撑消息通知

  服务之间的调用采用http的方式,并且要求有依赖的服务主机配置hosts指向被调用的地址,这样带来的维护上的不方便。以及在调用链的过程中没有重试,错误处理,限流等等的策略,导致服务可用性差。

  随着业务拆分,继续使用Nginx维护配置非常麻烦,经常因为修改Nginx的配置引发调用错误。每一个服务都有一个完整的认证过程,认证又依赖于用户中心的数据库,修改认证时需要重新发布多个服务。

  三、微服务架构

  首先是在接入层引入了基于OpenResty的Kong API Gateway,定制实现了认证,限流等插件。在接入层承接并剥离了应用层公共的认证,限流等功能。在发布新的服务时,发布脚本中调用Kong admin api注册服务地址到Kong,并加载api需要使用插件。

  为了解决相互调用的问题,维护了一个基于gevent+msgpack的RPC服务框架doge,借助于etcd做服务治理,并在rpc客户端实现了限流,高可用,负载均衡这些功能。

  在这个阶段最难的技术选型,开源的API网关大多用Golang与OpenResty(lua)实现,为了应对我们业务的需要还要做定制。前期花了1个月时间学习OpenResty与Golang,并使用OpenResty实现了一个短网址服务shorturl用在业务中。

  最终选择Kong是基于Lua发布的便利性,Kong的开箱即用以及插件开发比较容易。性能的考量倒不是最重要的,为了支撑更多的并发,还使用了云平台提供的LB服务分发流量到2台Kong服务器组成的集群。集群之间自动同步配置。

  饿了么维护一个纯Python实现的thrift协议框架thriftpy,并提供很多配套的工具, 如果团队足够大,这一套RPC方案其实是合适的,但是我们的团队人手不足,水平参差不齐,很难推广这一整套学习成本高昂的方案。最终我们开发了类Duboo的RPC框架doge,代码主要参考了weibo开源的motan。

  四、领域驱动设计

  在这一架构中我们尝试从应用服务中抽离出数据服务层,每一个数据服务包含一个或多个界限上下文,界限上下文类只有一个聚合根来暴露出RPC调用的方法。数据服务不依赖于应用服务,应用服务可以依赖多个数据服务。有了数据服务层,应用就解耦了相互之间的依赖,高层服务只依赖于底层服务。

  在我离职时领域驱动设计还在学习设计阶段,还没有落地,但是我相信前公司的后端架构一定会往这个方向继续演进。

  总结

  架构的设计,技术的选型,不能完全按照流行的技术走,最终还是服务于产品,服务于客户的需求。设计过程中由于团队,人员的结构问题,有很多的妥协之处,如何在妥协中找到最优解才是最大的挑战。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐

刚出生3天的婴儿为求纯母乳,被活活饿死,科学育儿该听谁的?

科学育婴手册
2021-02-27 10:16:50

歌手华晨宇爆和新欢同游日本,张碧晨想借女上位遭2亿打发!

麻辣烫娱记
2021-02-26 16:50:43

牺牲1800多个扶贫干部,值吗?

酷玩实验室
2021-02-26 13:54:28

孙越在德云社的地位有多超然?大花臂、开公司、还有自己的服装品牌

八姐论八卦
2021-02-25 22:38:27

马斯克被查,比特币暴跌!睡不着觉的投资者删软件了,疯狂捞金的交易所要上市了

中国证券报
2021-02-27 14:31:10

得癌症晚期的病人,信西医的,使用化疗,放射,手术的能活多久?

呼吸科大夫胡洋
2021-02-27 12:11:22

谢娜待产状态好,挺孕肚外出不用人搀扶,张杰岳母双手插兜没事做

小义了不休
2021-02-24 20:32:44

延迟退休要来了,2021年还有新提议?这些年龄段的人都赶上了

简易科技
2021-02-27 16:39:43

患难见真情!田启文透露吴孟达治疗费达七位数!周星驰愿提供帮助

饼干小公子
2021-02-26 22:35:32

苏宁被迫易主 供应商的钱能回来吗?

音乐美食人
2021-02-27 13:48:26

“快买台湾凤梨,急!@澳大利亚红酒”

环球时报评论
2021-02-27 14:05:45

中纪委建议“倒查20年”后,这里不到一年时间挽回经济损失338亿元

上观新闻
2021-02-27 06:11:36

化工市场已疯!万华一次性涨价7500!几十种化工原料集体“轰炸”!全疯了!

全国能源信息平台
2021-02-26 20:04:20

“你妈妈挣多少钱,别怪我瞧不起你”老师最新回应来了,能原谅吗

情感文化流
2021-02-26 20:16:46

她被称为“D版女神”,瑜伽裤这样穿,完美身材展现女性魅力

百灵动物
2021-02-27 10:42:24

歌手陈红老公出轨沈星,被警察带走后大喊:我为她花了一千多万

五美吟
2021-02-25 21:41:49

小 沈 阳 坠 落 之 谜

北戴河桃罐头厂电影修士会
2021-02-25 14:13:48

物理学家首次拍摄到了时间晶体的振荡

我们都是科技宅
2021-02-27 01:53:16

姚策养母:“偷换孩子明显是人为”,为何她必须“死磕”郭家人?

姬鹏
2021-02-26 00:07:57

豪门集体翻车!拜仁马竞巴黎输球,尤文欧冠被虐,利物浦巴萨丢分

开球咯
2021-02-27 00:44:13
2021-02-27 18:44:52
中陶文物的鉴定
中陶文物的鉴定
给您带来更多文化新闻
381文章数 21537关注度
往期回顾 全部

科技要闻

董明珠:希望工人上班8小时月薪上万

头条要闻

吴孟达生前留下的最后一条微博:“我是中国人”

头条要闻

吴孟达生前留下的最后一条微博:“我是中国人”

体育要闻

詹皇填满数据栏 施罗德回归湖人赢球

娱乐要闻

吴孟达去世 昔日照片都是开心大笑

财经要闻

汽车要闻

目前最快的硬派越野车 路虎卫士发布V8车型

态度原创

手机
本地
健康
公开课
军事航空

手机要闻

华为P50系列全系标配IMX800 5000万像素1英寸大底

本地新闻

拒绝当舔狗的年轻人,为啥都去舔猫了?

为什么阴道炎总是反反复复?

公开课

透支的中国年轻人:几千工资过着上万的生活

军事要闻

美军侦察机今日逼近广东海岸侦察