说实话,去一家小公司从 0 到 1 搭建后端架构,真难~

2023-06-02 0 803

说实话,去一家小公司从 0 到 1 搭建后端架构,真难~

说实话,去一家小公司从 0 到 1 搭建后端架构,真难~

源自:zhu327.github.io/2018/07/19/python后端构架重构/

来百度以后在前子公司做了3年的后端合作开发, 历经这款SaaS商品从0到10(还没到100, 呵呵)的操作过程, 3年间后端构架逐渐演进, 在微服务项目的课堂教学操作过程中碰到的难题也愈来愈多, 在这里归纳下.

商品是这款服务项目于老龄的SaaS新浪网服务项目, 面向全国HR有Web Android/iOS 小流程数个应用流程, 后端选用RESTful艺术风格API来提供服务项目. 主要就选用Python词汇, 方便快捷加速插值.构架的重构历经了4个大的期: 1. MVC 2. 服务项目分拆 3. 微服务项目构架 4. 应用领域驱动力在结构上.

1. MVC

项目刚开始的时候, 后端同僚不超过5个, 那个期主要就的工作是同时实现商品的蓝本, 没太少的考量构架, 选用Django来加速同时实现机能, DB的表结构在结构上好之后, 抽象化出机能View, 由于商品在结构上也很不健全, 后端须要很多的留出在结构上, 防止商品方法论的更改带来整座表结构的发生变动, 在那个期标识符上最重要的是确认适宜项目组的标识符规范化, 标识符检查和准则.

说实话,去一家小公司从 0 到 1 搭建后端架构,真难~总体上构架示意图, Nginx负责管理阻抗平衡, 递送网络流量到数个Django服务项目, Django处置方法论, 须要触发器各项任务就交予Celery, 然后信息量比较大的地方选用Redis做内存. 同时还有动态最新消息通告的须要选用了Nginx Push Module.难题与强化方式:Djangomammalian操控性差 选用uWSGI Master+Worker 相互配合 gevent 携程网全力支持高mammalianRedis通话量过多 选用redis-py便携式的相连池来同时实现相连复用MySQL通话量过多 选用djorm-ext-pool相连池复用相连Celery配置gevent全力支持mammalian各项任务随着合作开发的机能愈来愈多, Django下的app也愈来愈多, 这就带了发布上的不方便快捷, 每次发布版本都须要重启所有的Django服务项目, 如果发布碰到难题, 只能加班解决了. 而且单个Django工程下的标识符量也愈来愈多, 不好维护.

2. 服务项目分拆

随着后端项目组的壮大, 分给每个同僚的需求也愈来愈细, 如果继续在一个工程里面合作开发所有的标识符, 维护起来的代价太高, 而我们的上一个构架中在Django里面已经按模块划分了一个个app, app内高类聚, app之间低耦合, 这就为服务项目的分拆带来了便利. 分拆的操作过程没碰到太大的难题, 初期的分拆只是标识符的分离, 把公用的标识符抽离出来同时实现一个公用的Python库, 数据库, Redis还是共用, 随着阻抗的增加, 数据库也做了多实例.说实话,去一家小公司从 0 到 1 搭建后端架构,真难~示意图, 服务项目之间尽量防止相互调用, 须要交互的地方选用http请求的方式, 内网的调用选用hosts指向内网地址.难题与强化方式:Nginx Push Module由于长时间没维护, 长相连最大数量不够, 选用Tornado + ZeroMQ同时实现了tormq服务项目来支撑最新消息通告服务项目之间的调用选用http的方式, 并且要求有依赖的服务项目主机配置hosts指向被调用的地址, 这样带来的维护上的不方便快捷. 以及在调用链的操作过程中没重试, 错误处置, 限流等等的策略, 导致服务项目可用性差. 随着业务分拆, 继续选用Nginx维护配置非常麻烦, 经常因为修改Nginx的配置引发调用错误. 每一个服务项目都有一个完整的认证操作过程, 认证又依赖于用户中心的数据库, 修改认证时须要重新发布数个服务项目.

3. 微服务项目构架

说实话,去一家小公司从 0 到 1 搭建后端架构,真难~首先是在接入层引入了基于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的开箱即用以及插件合作开发比较容易. 操控性的考量倒不是最重要的, 为了支撑更多的mammalian, 还选用了云平台提供的LB服务项目递送网络流量到2台Kong服务项目器组成的集群. 集群之间自动同步配置.饿了么维护一个纯Python同时实现的thrift协议框架thriftpy, 并提供很多配套的工具, 如果项目组足够大, 这一套RPC方案其实是合适的, 但是我们的项目组人手不足, 水平参差不齐, 很难推广这一整套学习成本高昂的方案. 最终我们合作开发了类Duboo的RPC框架doge, 标识符主要就参考了weibo开源的motan.

4. 应用领域驱动力在结构上

说实话,去一家小公司从 0 到 1 搭建后端架构,真难~在这一构架中我们尝试从应用服务项目中抽离出数据服务层, 每一个数据服务项目包含一个或数个界限上下文, 界限上下文类只有一个聚合根来暴露出RPC调用的方法. 数据服务项目不依赖于应用服务项目, 应用服务项目可以依赖数个数据服务项目. 有了数据服务项目层, 应用就解耦了相互之间的依赖, 高层服务项目只依赖于底层服务项目.在我离职时应用领域驱动力在结构上还在学习在结构上期, 还没落地, 但是我相信前子公司的后端构架一定会往那个方向继续重构.

归纳

构架的在结构上, 技术的选型, 不能完全按照流行的技术走, 最终还是服务项目于商品, 服务项目于客户的需求. 在结构上操作过程中由于项目组, 人员的结构难题, 有很多的妥协之处, 如何在妥协中找到最优解才是最大的挑战。Service Mesh这种新一代的微服务项目构架正在成为

说实话,去一家小公司从 0 到 1 搭建后端架构,真难~

中国流程员 VS 印度流程员,太有味了…快手回应厕所装坑位计时器,这届打工人:再也不能愉快地带薪拉屎了?伟大&耀眼,C词汇发展史的点点滴滴中国流程员VS美国流程员,这也太形象了吧…研究主攻数据库和磁盘故障强化,曾经复读才考上三本,他如今让华为开出201万年薪DBA林工:OracleDG 环境主备业务数据不同步备库报 ORA-600 错误怎么整?有个流程员老公有多爽???为什么不建议把数据库部署在docker容器内?A里正在拆中台,你还在建中台吗?百度技术专家:解密小流程云合作开发数据库 | 干货微服务项目构架框架?这里为你汇总了15种阿里P8税后收入170万?P8、P9 及以上到底是什么水平?Matlab 被禁只是冰山一角!一个海外资深流程员聊被卡脖子……机房生存指南交易、账务系统去 Oracle 经验误执行了 rm -rf /*删库之后,除了跑路还能怎么整?!

说实话,去一家小公司从 0 到 1 搭建后端架构,真难~

DTCC中国数据库技术大会2010-2019SACC2019中国系统构架师大会PostgreSQL 2019中国技术大会点击上方文字可以直接进入小流程浏览,下载请在 DTCC、SACC、PG19即可直接收到完整版 PPT 下载链接~

说实话,去一家小公司从 0 到 1 搭建后端架构,真难~

「在看」吗?说实话,去一家小公司从 0 到 1 搭建后端架构,真难~

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务