很容易将单个项目的前后端分离,但如果n个项目在一起呢?如何在传统的前后端分离模式的基础上更高效地改进前后端分离模式如何提供PaaS能力?背景随着部门内前端业务线和平台越来越多,前端职责逐渐加重,各种问题和挑战也随之而来。目前前端团队31人,负责15+个业务/项目和平台。前端项目的总PV至少在2000万以上。因为是工具类应用,MAU(月活用户)也有1亿以上。面对如此庞大的用户量和业务压力,团队在开发和维护过程中逐渐遇到了各种问题。首先是基础设施问题。没有完整统一的标准规范和设施,导致每个项目的技术栈和实现思路不同,功能复用率不高。在会员推广方面,有这么多会员,如何让他们在技术和解决问题上都有所提升。除此之外,还有其他角色比较关注的效率提升问题,包括前端开发效率的整体提升和上下游协同效率的提升。最后是整体稳定性的保证。需要第一时间发现错误和经验相关的问题,这是另一个很重要的问题。解决思路面对以上问题,我们尝试从不同的角度和维度进行解决。第一个维度是从外到内,主要从流量入手,依次是前端、视图层、后端等,整体稳定性保障。第二个维度是从上游到下游,从项目的迭代过程开始,从UE/UI同学最初的交互和视觉设计,到FE同学的开发,再到下游QA同学的测试。优化协作流程和细节,提升整体协作效率。解决方案经过两个维度的拆解,我们大致提出了四种解决方案。其中,属于第一维度的有两个,即统一视图服务和自动化监控,属于第二维度的有前端组件库和素材中台。本文重点讲解统一视图服务,如何在基本的前后端分离模式的基础上更好的解决问题和提升性能。统一视图服务后台前端除了自身本质的工作外,还负责前后端之间的胶水层,也叫视图层,主要包括路由控制、视图渲染、数据处理/聚合、资源管理、CDN优化等。在维护视图层的过程中,发现大部分业务之间视图层使用的框架和实现方式都不一样,每个主要的业务方向都有自己独立的视图服务。这就导致前端渲染服务的开发和维护,学习和接入的成本非常高。然后是职责优化,彻底梳理前后端之间的模糊性,让前后端的职责更加清晰,着眼于提高各方的生产力。最后,在职责优化之后,整体架构可以和后端一起完全微服务化。针对上述问题的解决方案一是统一部门内不同的渲染服务(视图层)进行规范化管理,二是具备弹性扩容能力,实现不同项目的最小成本接入和扩容。三是同构支持,可以统一解决不同场景下的SEO、整体性能提升和用户体验等问题。最后是微服务架构,与后端微服务架构打通,让服务更加独立。第一个难点是性能需求,支持多种业务/服务的能力,聚合数据源的能力,应对千万级PV请求的压力。当然,最重要的是多产品线接入的成本,以及接入后的性能和维护问题。二是灵活/稳定的需求,提供平台支撑,保证服务之间的正交关系,整体平台化监控运维。性能需求性能需求保证,如下图:流量经过BGW和BFE后,会到达网盘微服务的网关,网关负责请求分发、用户鉴权、流分类等功能。网关主要将请求转发给统一视图服务或后端服务。统一视图服务集群中的容器,内部会有内部路由和渲染服务。Gateway将请求转发给viewservice后,首先被innerrouter接收,负责下游渲染服务的拓扑和流量处理,然后反向代理给渲染服务。如果渲染服务压力过大,它会通知内部路由器让其再次请求其他渲染服务实例,以保证可用性。渲染服务和后端服务的交互使用BNS和UFC实现,协议内部统一处理,包括IDC机房的优化。借助网盘微服务能力,性能需求得到保障。以上是视图层提供的最基本的能力,但是为了体现统一管理不同产品线的能力,我们还提供了一些PaaS能力,比如接入层配置,负责处理流量和网关和内部路由器上的拓扑。.一键式工具包,提供快速初始的基础框架和运行时,以及守护进程、监控、日志处理等功能。那么对接的业务方只需要增量上线业务代码即可。此外,渲染服务也分为部署级别,提供公共部署和私有化部署。公有部署针对内部平台服务,私有部署针对线上产品服务。灵活性和稳定性保证的稳定性和灵活性保证。借鉴微内核架构的思想,将通用的功能和机制抽取出来,封装到系统的核心中。它是服务实现的最小功能集。在核心之外增加相应的通用企业服务、IDC优化和跟踪机制、认证和数据聚合能力,并封装到一个通用的企业级框架中。除了企业级框架外,还增加了网盘中的常用功能,包括渲染机制、APP隔离、AB测试灰度发布,并封装成部门级通用框架。最后,在部门框架上运行业务和服务,包括商业化、内容商城、开放平台、网盘业务。通过这四层,应用程序可以在水平和垂直维度上任意缩放。提供非常强大的灵活扩展能力。整体架构整体架构从上到下分别是应用框架、部门框架、企业框架、基础服务和底层支撑。通过在每一层添加不同的能力,然后使用类似组合的操作来扩展基础服务。最终通过这样一系列的设计和操作,保证了整个视图服务的性能和对灵活性、稳定性和扩展性的要求。收入部门的前端项目/平台统一在统一的视图服务PaaS上,管理之前的场景实验和落地能力。产品性能大幅提升,硬件资源大大节省。目前产品线有几百台机器(全业务),统一管理后只需要20个1核CPU容器(视图渲染服务)。压测数据,20个容器支持2000万PV(926QPS),正常性能需求下可以支持1000QPS,也就是说每秒发送的1000笔交易中,95%的请求会在1s内处理并返回。而且,是上下游整体的测试数据上线,不是简单的测试nodejs,因为单纯测试nodejs是没有意义的,毕竟只有一个nodejs是不会实现线上服务的。服务吞吐量提升427%,并发下平率提升74.7%,非并发下提升47.7%。对于无法很好量化的收益,统一视图服务提供了PaaS能力,可以实现视图层的统一管理,节省资源,提高开发和访问效率。职责分离,专注于核心业务,为前端提供更多的可能性,用各种花来提高效率。
