大规模前端应用的分布式部署方案

目前我们前端开发的项目有三个特点:第一,采用了五个虚拟团队联合开发的模式,充分利用北京、哈尔滨、济南、西安、广州区域人才优势和信息优势,各个团队由5-10人的团队组成,技术栈统一为react+antd,使用脚手架生成框架代码,在框架约束下开发;第二,各个团队规模小,且以开发人员为主,没有专职的测试和运维团队,未来随着项目持续对外输出和对内推广,将面临不断优化迭代和潜在增长用户海量增长的情景;第三,为了缩短项目周期、降低成本和风险,引入战略合作伙伴,并行参与开发,在必要时集成合并成一个系统,统一管理。

目前,业界主流的前端大型应用开发方式为:在脚手架框架约束下,前端工程师们根据模块功能进行分工,采取集中办公的方式合力完成,然后开发团队和测试团队共同进行优化打磨,最后交付运维团队进行集中上线发布。

显然,这种主流的前端开发方式并不适合这种由小项目组联合形成的虚拟团队,因此,我们思考出了“一种基于ETCD的分布式前端实施方法”,以期能够达到降低虚拟团队沟通成本、解决代码冲突、提升编译速度、优化测试流程、能在生产直接测试验证同时不影响生产功能、实现不重启发版上线、上线后能根据用户数量进行动态扩容,并实时发现容器异常并告警的目的。

  1. 目前项目组前端工程技术栈限定为react,按照市场行情,招聘react技术栈,用人成本比其他技术栈高约30%-40%,而招聘其他技术栈开发人员入职,需要至少三个月时间切换到react技术栈,期间没有产出,沉没成本较高。
  2. 即使统一成一个技术栈,react+antd,但如果项目足够庞大,周期足够长,新旧功能也会因为技术栈版本更新问题无法兼容,如一些功能在react16与react18、在antd3.x和antd4.x环境下,表现并不一致。
  3. 虚拟团队联合开发,人员没有集中办公,导致会议多,沟通链条长,开发效率低,联调困难。同时开发人员要合并到一个分支上统一发版,造成代码冲突频繁。合作伙伴参与人员众多,流动性大,代码规范比较难管理,也增加了项目代码管理风险。
  4. 现有的前端框架路由表是静态的,在路由发生改变时需要重新发版,如果采用夜间停机发版,会造成服务短暂不可用,如果采用蓝绿发布,可能会导致瞬时负载压力过大,有崩溃风险,且夜间发版对开发人员身体健康不利。
  5. 代码越来越多,打包越来越慢,部署升级麻烦,代码“修改五分钟,打包半小时”的现象普遍,公共组件的修改升级需要考虑的更多,很容易牵一发而动全身。
  6. 在开发中,测试运维团队人员不足可能无法匹配开发进度,造成进度滞后;如果购买云服务,可以弥补人员不足问题,但云服务往往功能单一,仅能满足简单需求,如需深度定制,资金投入不菲,对团队成本管控是巨大挑战。
  7. 页面延迟、代码警告、服务异常等问题运维人员无法及时知晓,容易错过最佳诊断时机。

微前端的应用,可以使项目中的前端开发部署能够做到多技术栈、多版本、多代码规范共存,能够将项目拆解成众多小的项目集独立开发,能够有效减少团队内的联调、沟通和代码冲突频率、提升编译效率;分布式ETCD集群部署+动态路由表技术能够实现在生产环境验证功能,同时与生产环境隔离,不会对生产造成影响,等充分验证后,再通过修改ETCD路由链接即可实现发版,简单易操作,可以实现在工作时间验证调试,避免熬夜通宵跟进发版之苦;使用现成的阿里云和prometheus技术,能够大幅度提高运维效率,及时定位生产问题,降低设备和人员成本,同时可以借助云服务开放的原生接口实现深度定制,满足个性化运维需求。

所以基于此, 我们制定了一套基于qiankun + ETCD + CONFD

  1. qiankun:蚂蚁金服的一款开源微前端框架,提供样式隔离和代码沙箱,其技术核心为前端UMD标准
  2. ETCD:分布式KVStore,用于存储前端路由与该路由相对应的子应用地址
  3. CONFD:配置管理工具,用于同步docker镜像配置文件与ETCD中保存的数据。在ECTD配置被修改后,CONFD会通知阿里云重启容器
  4. jenkins:是CI/CD系统,可以实现代码扫描,集成测试、打包编译镜像、推送到云平台等功能
  5. 阿里云:是企业云服务,具备服务发现、弹性扩容、负载均衡等功能,内置k8s,mesos,marathon等编排调度工具,对外开放原生接口
  6. prometheus:是开源运维监控系统,能够监控主机、容器、服务的吞吐量、错误、延迟、并发量等信息,及时为运维人员推送告警

具体的实施步骤:

  1. 在代码设计时,将前端工程按照功能划分为众多子工程,每个子工程可以使用不同技术栈、不同版本、不同代码规范脚手架构建。由于前端各技术栈在babel编译后都会生成标准的ES5原生代码,所以各种风格的前端技术栈的代码在统一编译后是可以充分兼容的
  2. 选定一个工程为主工程,注入微前端主工程插件,令其担负动态路由功能,同时在构建时将confd和confd动态路由模板打包进nginx镜像中
  3. 将其他子工程注入微前端子工程插件,作为被主工程调度的子路由工程
  4. 在阿里云申请k8s集群,部署好ETCD集群,使用k8s启动主工程镜像,并在镜像中启动confd,使主工程连接到ETCD集群
  5. 在每个子工程按照1-4步继续拆分成粒度更细、可以由单人开发的功能模块,然后分配给各地虚拟团队的开发人员,开发打包上线,使用阿里云负载均衡地址在生产环境直接测试,因为此时没有使用ETCD与主应用产生关联,不会对生产造成影响,待测试通过后,修改ETCD路由链接配置,即可实现发版,可以在工作时间验证调试,避免熬夜通宵跟进发版之苦
  6. 为业务添加指标监控、异常告警等prometheus功能
流程图.png

前端组织示意图:讲一个工程按照功能拆分成多个模块,各个模块单独上线,测试通过后形成路由地址,配置进ETCD中,完成发版


image.png

这个方案的亮点在于单个模块的代码量小,技术栈无关,沟通成本低,修改代码风险性低,解决了原来系统复杂性高,需要集中联调,集中办公的问题,同时将各个模块使用nginx动态修改转发路由技术进行拼装,能在生产直接测试验证同时不影响生产功能,测试通过后通过ETCD动态修改主应用nginx的路由表,实现不重启发版上线,不需要进行停机测试和蓝绿发布,提升运维效率。关键点在于将微前端技术与使用ETCD集群动态修改主应用nginx路由表技术组合在一起,取长补短,构造出一种更稳定便捷快速的前端开发和实施方法。

当然,使用berial等微前端框架、使用redis等键值存储、使用jekins、k8s等编排工具、使用zookeeper、consul等服务发现工具、使用腾讯云等云平台搭建分布式动态路由前端实施方案,亦可达到同样的效果

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

推荐阅读更多精彩内容