前言随着时代的发展,网络通信已经成为人们日常生活中不可或缺的一部分。在5G时代背景下,传统的网络通信已经不能满足工业端和企业对强应用通信的需求。由于对安全性和稳定性的要求,专有网络通信逐渐成为通信市场的重要力量。作为通信运营商,我们应该在专网通信领域展现自己的通信优势。除了通信技术的发展,对应CT通信技术的发展需求,Web前端作为IT端的发展也需要顺应时代发展,构建符合业务和需求的架构模型。产业模型,为ICT融合提供技术方案支持。本文旨在通过专网通信领域的业务实践,从系统性、结构性、健壮性等几个不同维度阐述前端架构设计过程中的考虑和分析。系统化系统设计作为整个软件工程项目的顶层设计,是根据系统分析的结果,运用系统的思想和方法,设计出最大限度满足要求目标的新系统的过程。科学。在整个软件架构中,系统性作为整个项目的先导和先导,需要能够贯穿整个项目周期。本章将从设计理念、设计方法、设计模型、设计原则四个方面阐述系统性思考。设计理念作为整个系统架构的指南,设计理念是整个系统架构的核心理念和设计理念。在专网通信领域,结合软件工程中的业务需求和设计方法,总体设计理念为:简单、有效、解构、可控、扩展。最不复杂。它便于开发和验证,提供了简单的设计模式,便于系统中所有人员的同意,为有效和高效的组织提供了可能。有效:将问题划分合适的粒度,不要过度设计,避免给系统引入不必要的复杂性;不要设计不足以避免冗余。在精益中提高软件质量,以最具成本效益的方式解决问题,避免任何形式的冗余。解构:确定粒度与粒度之间的权责,边界清晰,在该粒度内部整合;在这个粒度之外,需要暴露的对外共享,不需要暴露的隔离封闭。可控:以可靠的观察方法输入,以相同的结果输出,可观察;出现问题时,位置一目了然,可追溯;临时变化,及时响应,容错。扩展性:提供渐进的解决方案,提供完整的生态系统,兼容包容,按需定制,可扩展,可插拔。设计方法设计方法是按照架构领域的发展时序排列的一套方法理论,是对复杂的业务需求进行梳理后的综合方法总结。在前端开发过程中,结合相应的共异架构分类,对不同层次的各个子集进行相应的方法论总结。业务架构业务架构定义了满足业务输出的相应能力或功能矩阵,并定义了业务流程。对应前端工程,需要实现业务定时、角色分配、权限认证等。数据架构数据架构描述了一个组织的物理和逻辑数据资产,以及其数据资源的结构。在前端工程中,对应的是初始数据结构的设计。从方法论的角度来看,数据库模式的设计和访问可以参考不同的数据集。应用程序架构应用程序架构提供了一个蓝图,涉及各个应用程序部署、它们的交互和它们的链接、组织的核心业务流程等。对于前端领域,是针对不同应用之间的聚合、统一和隔离展现,包括但不限于跨设备展现和上下游逻辑连接。技术架构技术架构描述了支持业务、数据和应用服务部署所需的逻辑软硬件能力;包括IT基础设施、中间件、网络等。对于前端,包括各种框架体系和相应的生态扩展,筛选出更符合业务场景的技术方案。设计模型软件设计使用不同的视角设计抽象的软件系统,分析需求生成概念模型。常见的设计模型包括:面向对象模型(OOP)、面向领域模型(DDD)、六边形模型(HexagonalArchitecture)、洋葱模型(OnionArchitecture)等。软件设计最重要的过程是抽象,也就是将对业务和领域进行建模,通过抽象提取共性和元信息,通过不同的组合方式构建自身业务和系统的模型。提取设计模型是一个高度浓缩和提取的过程,需要考虑很多因素。抽象设计模型既需要顶层设计,也需要底层设计。视觉要从上到下,拆解要从下到上。设计原则软件设计过程必须符合软件开发的特点。一般来说,需要满足以下原则:单一职责原则单一职责原则是指每个粒度只关注一件事,从而降低单一粒度。复杂性,简化逻辑,简单职责,提高可读性和系统可维护性。在修改和变更的过程中,可以减少对其他粒度的功能影响。开闭原则开闭原则是指对扩展开放,对修改关闭的原则,意思是当需求发生变化时,对代码变更的修改应该基于扩展,而不是修改之前的代码,这要求在度过程中保留设计粒度扩展项以适应变化。软件需求总是在变化,因此可以在不修改原有系统的情况下,根据不同的设计模型构建不同的系统扩展。Liskov替换原则Liskov替换原则是指具体粒度可以替代抽象粒度,即抽象粒度的元信息完全从具体内容中抽象出来,这也是开源的重要验证方法之一。关闭原则。满足里氏代换原则说明其开闭性是可以保证的。在不同的设计模型中,可以采用不同的方法来实现抽象粒度与具体粒度之间的联系关系。接口隔离原则接口隔离原则是指粒度上应该对外提供尽可能细化的接口,而不是提供宏观的接口。暴露在外界的行为越少越好,越具体越好,以保证对外的影响和对内的侵害。尽量减少界面。通过分散和定义多个接口,可以防止外部变更的扩散,提高系统的灵活性和可维护性,在与外界隔离边界的过程中也可以明确和建立边界。依赖倒置原则依赖倒置原则是指实现尽可能依赖于抽象,而不是具体的实现。具体依赖于抽象,上层依赖于下层,可以减少粒度之间的耦合,提高系统的稳定性,降低并行开发带来的风险,提高代码的可读性和可维护性。称为最少知识原则,软件体系结构实体应尽可能少地与其他实体交互。粒度与粒度之间的关系越紧密,耦合度就越大。只有尽可能地降低粒度与粒度之间的耦合,才能符合软件设计的模式。一种粒度引用另一种粒度或尽量少用,避免发生变化时相互之间产生关联反应,如果必须进行相关关联操作,可通过第三方相互连接,后续upChanges只需要在第三方进行相关操作,方便维护。组合/聚合复用原则组合/聚合复用原则是指尽可能多的应该被复用而不是复制,并且通过单一职责的粒度构建,尽可能多的相关粒度可以在其他业务中复用组合,这样当发生变化,内部只需要修改相应的粒度内容,对外隔离接口,不影响外界的使用。结构软件系统作为一个有机的整体,由几个不同的部分组成。Structural主要是从软件组织结构的角度来衡量的,它包含或关联了一些不同层次的信息。从最早的单体架构,到面向服务的SOA架构,再到后来的微服务架构,不同软件架构的演进体现了结构的重要性。对于前端工程来说,通用的分层设计是实现软件系统结构化的有效途径。本章将从网关层、应用层、基础层三个层次阐述专网项目的结构设计。特征。在传统的网关层软件开发过程中,不同的业务类型以不同的方式对外暴露。在网络通信中,我们经常使用网关作为内部网络与外部网络之间的通信传输连接。在软件开发的过程中,我们也可以借鉴这种思想来设计和处理我们的软件系统。对于专网领域的前端来说,各种应用的汇聚和聚合已经成为一个重要的对外暴露层面。网关层的出现打破了框架和业务栈的束缚:对于内部应用,可以提供服务注册机制,用于各种应用的聚合和收集;对于外部用户,可以提供统一的服务地址,隔离用户内部应用变更带来的碎片感。应用层应用层作为各种业务的不同表现形式,实际上是属于各种业务形态的子形态。在外部。各个应用之间的关联和处理,可以通过网关层进行分布式上拉;在内部,可以选择相应的框架形式更好地处理所需的业务,从而实现高内聚、低耦合的软件系统关联和隔离。对于专网业务形态,需要提供专业的业务处理服务,即广义的中端产品服务;同时,还需要提供相应的可视化产品服务,更好的展现业务数据信息,让CT端的业务内容在IT中展现。应用层可以根据不同的业务需求扩展不同的形态,也可以通过插件的形式注入跨端、交互等新的业务形态,开放扩展,共同构建生态。基础层基础层为所有业务提供通用的基础技术服务,避免个别业务应用相互争斗,形成各自独立的技术烟囱;同时也为业务技术积累的积累提供更多业务形态的技术支持,实现技术能力的抽象概括。针对专网业务形态,其基础层主要为整个产研环节提供基础服务支撑,便于产品、设计、前端、后端、测试、运维的全链路路径对接同学们,一站式解决整体前端上下游沟通障碍,打造高效简单的产研一体化解决方案。在产品方面,它提供了对wiki文档的支持;在设计方面,提供对图床、设计素材、设计构件库的支持;前端提供脚手架、监控等开发模板工具;后端提供静态转发、BFF转换、接口联调配置等技术设置;测试端,提供通用测试套件,方便测试用例的设计和验证;在运维端,提供高效的CICD流水线处理,提供故事板。和其他功能解决方案。健壮性健壮性是指软件系统在某些参数的扰动下保持正常的特性。根据不同系统层次的需求,软件架构系统在设计过程中通常需要考虑不同的健壮性需求。本章将通过高可用、高性能、高安全、高扩展来说明系统的健壮性。高可用性高可用性的主要目的是为了保证业务的连续性,即在用户眼中,业务会一直正常对外提供服务。要保证架构的高可用,就需要保证架构中所有的粒度以及对外暴露的服务都能够尽可能的高。对于前端来说,在服务拉起的过程中通常需要保证高可用,因此可以采用冗余、自动故障转移等方式来应对。对于专网业务,在基础层提供云相关的基础操作,通过一些高可用的云多副本实现服务可达。策略差异化,更好地为业务和用户数据采集等产品需求提供技术和理论支持,打通全链路。高性能高性能是指资源利用率最高,可以最大限度地发挥软件和硬件的优势。为保证架构的高性能,通常需要针对不同业务形态的不同性能瓶颈进行相应的优化改造。对于前端来说,由于更接近用户端,其高性能通常包括网络、渲染、用户体验等几个方面。在专网业务中,由于网络层特殊的传输特性,其对网络的优化通常是基于云原生的网络侧优化,而对于渲染侧的压力,则可以根据不同的业务客户端渲染等形式。(CSR)、服务端渲染(SSR)、原生渲染(NSR)、边缘渲染(ESR)等不同渲染模式或混合渲染模式。高安全性高安全性是指有效防范系统攻击,及时排除隐患。要保证架构的高安全性,除了应对常见的攻击手段外,还需要对系统本身进行监控和控制。对于前端来说,由于离用户较近,用户的操作最有可能对自身系统的安全造成攻击,所以做好XSS、CSRF、等同时,还需要对风险进行评估和监控。在专网业务中,在基础层,实现对不同应用层应用的前端监控,性能、错误等数据的采集和处理,密钥和密码设置的高级别保护,网络通信采用加密传输等保护手段,同时对中间访问实现不同级别的拦截和鉴权验证。高扩展高扩展是指在不改变系统整体核心架构的情况下,保证系统的快速响应,以支持不断增长的需求。为保证架构的高可扩展性,通常需要充分考虑核的形态,明确可变与不可变的界限。对于前端,通常需要考虑不同的产品需求变化,尽可能提取可拆卸的部分。针对不同的编程范式,采用符合业务方法的编程方案。例如:在使用面向对象编程的过程中,尽可能使用设计模式等来处理业务需求和适当的编码等。针对专网业务,高扩展利用前端网关的服务发现和注册机制,拉起相应的微应用,实现前端的微服务化。对于单个应用程序,它可以进一步拆分。页面表单、类iframe表单、类web组件表单、类容器表单等微前端解决方案,实现整体的高扩展和兼容处理。总结相对于后端开发流程,前端开发流程经历了以下变化:古时候,浏览器诞生,第一次浏览器大战,前端专注于静态页面的构建;时代,ajax技术的出现,前端工作涉及到一部分数据交互工作,同时也是二代浏览器大战;而在农业时代,面对不同浏览器提供的各自API的兼容性需求,前端首次出现了基于库的开发模式,并出现了jQuery、YUI、ExtJS应运而生;然后随着工业时代的到来,前端也承担了更多的数据交互工作。服务端的服务端渲染页面已经切换到浏览器客户端渲染页面的时代,前端框架的概念也在这个时代出现;在最近的信息时代,随着不同终端的出现,各种跨终端的体验一致性要求,从而带来不同的渲染模式解决方案;在当前的云边端时代,基于不同的业务形态和业务方向,前端呈现出更加多样化和复杂的形态,借助于其他软件领域的发展,前端形态更加丰富多样化和普遍化。针对不断涌现的业务形态和需求,前端已经从简单的页面切入,逐渐演变为对软件整体架构的治理。在软件工程领域,所有的业务形态都可以通过不同的抽象组合架构拼接完成,但一个合理优雅的架构方式不仅要考虑全局调度和共生,还需要兼顾局部优化和权衡-关闭。道之于方向,法之于本,术之于谋,力之于人,器之于物。参考全面理解高并发:高性能、高可用、高扩展性《软件架构》高扩展性架构Freewheel总工程师:我对软件分层设计的思考软件设计七大原则
