`
aiyan2001
  • 浏览: 74728 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

APP的服务端

    博客分类:
  • app
 
阅读更多

随着智能设备普及和移动互联网发展,移动端应用逐渐成为用户新入口,重要性越来越突出。但企业一般是先有PC端应用,再推APP,APP 1.0版的功能大多从现有PC应用平移过来,没有针对移动自身特点考虑APP的架构。随着APP越来越复杂,功能和非功能要求越来越高,架构的先天不足逐渐成为大型APP升级的瓶颈。

本文作者结合大型移动应用的落地实践,从服务端架构设计角度,阐述如何进行升级优化,为后续APP做大做强奠定架构基础,供大家参考。

本文主要内容包括:

  • V1架构
  • 问题分析
  • V2架构
  • 智能升降级
  • 总结

V1架构

APP分手机端和服务端,手机端负责UI,相对简单,服务端负责提供数据和业务逻辑,相对更为关键。APP1.0版的服务端架构比较简单,一般在原有PC端Web应用的基础上增加无线接口,供APP调用,如图一所示。

图片描述

服务端系统一方面以Web应用的方式提供给PC端浏览器访问,另一方面为支持移动,在Web应用基础上增加一些REST接口直接供APP访问,相应地,无线接口和Web应用作为同一工程开发,作为同一个应用部署,这种设计思路是很直接和自然的,可以快速把PC端功能复制到APP。

问题分析

上述设计是在现有Web应用上打补丁,体现的是PC思维无线化,把APP简单作为PC端应用的翻版,并把两者物理上捆绑在一起,带来一系列的问题:

1. 紧密耦合

无线接口和Web应用紧耦合,Web端的修改会影响无线接口,Web端的发布导致无线接口被动连带发布,Web端的bug影响无线接口的可用性,反过来也一样,无线接口的任何变化会影响Web应用。

2. 重复开发

无线接口除了给APP提供业务数据,还需要考虑一系列非功能性因素,如通讯协议和数据格式封装、安全控制、日志记录,性能监控等,这些对每个无线接口都适用。如果APP和后端系统直连,意味着每个后端系统都需要支持这些通用功能,导致重复开发。一旦这些通用需求有变化(如对数据传输进行加密增强),所有后端系统都要强制同步修改和上线,给项目管理带来很大挑战。

3. 稳定性

APP和多个后端系统直连,只要一个系统出问题,就会影响APP的可用性,缺乏故障隔离机制,导致APP非常脆弱。

这些问题本质上是因为没有把Web应用和APP做清晰隔离,导致相互影响,一损俱损。

那么如何实现有效隔离呢?首先两者共享核心的业务逻辑,所以核心业务逻辑要独立出来,以一致的方式供APP和Web调用;同时,无线接口服务于APP,和Web前端没有任何关系,需要进一步对它们进行剥离,单独维护和部署,经过拆分后架构如图二所示。

图片描述

 

图二 系统拆分示意

 

V2 架构

除了APP和Web应用拆分,架构改造还必须考虑APP自身的特点。APP一方面需要从服务端各个系统获取数据,这个是个性的,面向业务;另一方面所有调用需要非功能性的通用处理,这个是共性的,并且和业务无关。架构上需要做到统分结合,共性统一处理,个性分散处理。

最后,结合APP/Web拆分需求和APP自身特点,新的APP架构方案如图三所示。

图片描述

 

图三 APP 2.0 架构

 

1. 对等隔离

APP实际上和PC端浏览器是对等的,PC端应用有服务端,APP也需要自己独立的服务端,两个服务端都需要针对自身的特点,独立开发,独立部署,同时实现逻辑和物理层面的解耦,从架构层面彻底摆脱PC思维无线化。

2. 统一服务

核心逻辑从Web应用剥离出来,进行服务化改造,服务实现时不区分PC和无线,APP和Web应用都依赖于这些服务,一套接口,多方调用。

3. 统一网关入口 
提供统一的无线网关,所有APP调用指向此网关,网关包括通用层、接口路由层、适配层。

  • 通用层 
    通讯协议适配、数据封装、安全、监控、日志这些系统级功能,每个接口调用都需要同样逻辑,这些功能统一由网关前置处理,避免重复开发。具体实现时,每个通用处理逻辑封装成拦截器,遵循统一的过滤接口,并且做到可配置,网关依次调用这些拦截器,这样可以支持通用逻辑的灵活扩展。 
    拦截器接口定义如下:

    Object filter(Object input) throws Exception

  • 接口路由 
    经过通用逻辑预处理后,无线接口请求将进一步分发给后端处理(各个Adapter)。URL和Adapter在配置文件里做映射,分发逻辑根据请求中的URL信息,找到对应的Adapter,然后把请求交给Adapter处理。 
    配置例子如下:

    www.Website.com/search SearchAdapter 
    www.Website.com/detail DetailAdapter

  • 服务适配 
    外部无线接口和内部SOA接口的输入输出格式以及通信协议很可能不一样,比如前者经常是HTTP+JSON格式,后者可能是Hessian+二进制格式,Adapter首先用于无线接口和内部SOA接口的适配,除此之外,Adapter还可能对多个SOA服务做聚合,对APP提供粗粒度的数据,以减少远程网络调用次数。实现上一般每个业务系统有一个Adapter,负责本系统无线接口的调用适配。 
    Adapter接口定义如下:

    Object adapter(Object input) throws Exception

Adapter物理上是jar包,由各个业务线研发团队提供,作为相应SOA服务的前置,最终所有Adapter集中部署在网关,网关本身支持水平扩展。

智能升降级

网关支持集中管控的同时,也带来单点问题。假设后台某个服务接口,由于某种原因,性能有严重问题,对应Adapter处理很慢,那么网关所在服务器的线程很快被耗尽,导致单个接口拖垮整个系统。这种问题,单纯通过加机器,水平扩展网关数量是解决不了的,实践中,我们引入智能升降级机制快速隔离单个接口的影响,如图四所示:

图片描述

 

图四 智能升降级

 

针对特定一个接口,如果在一定时间间隔内(比如5秒钟),它的超时失败率到了一定比例(比如2%),网关会对该接口做降级处理,随机抛弃部分流量,比如只允许50%流量通过。下一个5秒再评估,如果失败率还没有改善,允许通过的流量降到25%,以此类推。

如果成功率好转,网关对该接口做升级处理,提升通过的流量比例,为了快速恢复,一般提升到原流量4倍,然后在下一个时间段再评估是否触发升降级。

整个过程全自动智能处理(为防止误判,可支持人工干预),这样单个接口出问题,不会影响整个网关的处理能力。

总结

APP服务端架构通过一系列的拆分和整合,既优化了公司整体应用架构,又为APP做大做强奠定良好基础,其带来的好处是全方面的:

1. 实现PC端应用和移动端应用分离,使两者彻底解耦,各自独立发展,APP从寄生藤变成并蒂莲。

2. 底层核心的SOA服务基于统一业务规则提供逻辑和数据,接口不区分PC、无线或其他渠道(如Open API),避免重复开发,避免业务逻辑被污染。所有前端一母同胞,本是同根生。

3. 根据无线本身的特点,支持系统层面的集中处理和业务层面的分散处理。通用逻辑支持插件化扩展,可以根据需要逐步补充;Adapter实现内外部接口的无缝转换,可以针对无线场景,做逻辑增强(如服务聚合)。前面师傅领进门,后面修行靠各妈。

4. 移动研发团队和各业务线研发团队各司其职,每个团队专注于自己擅长部分,移动团队负责APP客户端和网关通用逻辑处理,各业务线研发团队负责底层SOA服务及前端Adapter适配。上帝的归上帝,凯撒的归凯撒。

如果用一个字描述APP架构,V1是“爪”,年幼依托各家;V2是“丫”,长大独立成家。

新架构,大型APP的成年礼,你“Y”准备好了吗?

分享到:
评论

相关推荐

    智能时代的生产力变革:AIGC产业应用实践.pdf

    人工智能、大语言模型相关学习资料

    (源码)基于WebAssembly Micro Runtime的嵌入式应用框架.zip

    # 基于WebAssembly Micro Runtime的嵌入式应用框架 ## 项目简介 本项目基于WebAssembly Micro Runtime (WAMR),提供了一个轻量级的WebAssembly运行时环境,适用于嵌入式设备和物联网(IoT)应用。WAMR支持WebAssembly解释器、提前编译(AoT)和即时编译(JIT),并提供了丰富的应用框架和API,支持多种平台和架构。 ## 项目的主要特性和功能 iwasm VM核心 100符合W3C WebAssembly MVP标准。 小巧的运行时二进制大小(解释器85K,AoT 50K)和低内存占用。 通过AoT实现接近原生速度的执行效率。 自实现的模块加载器支持跨Linux、SGX和MCU系统运行。 支持内置libc子集或WASI标准libc。 可嵌入的C API支持。 支持将原生API导出到WebAssembly应用。 应用框架

    芋道 yudao ruoyi-vue-pro crm sql , 更新时间 2024-09-30 ,可对应yudao版本2.4.1

    芋道 yudao ruoyi-vue-pro crm sql , 更新时间 2024-09-30 ,可对应yudao版本2.4.1

    微教育多校版小程序源码 开源版V3.12.75 大数据+营销插件+前端.zip

    微教育多校版小程序源码 开源版V3.12.75 大数据+营销插件+前端 版本号:3.12.75 – 全能版 修复部分用户统计图表不显示的问题 版本号:3.12.74 – 全能版 调整校园首页培训模式下 课程签到柱形图只统计线下课

    AIGC大时代,光模块产业迎风启航-浙商证券-2023.4.14-41页.pdf

    人工智能、大语言模型相关学习资料

    移动端项目-基于Android的随手记APP代码

    移动端项目-基于Android的随手记APP代码

    这是一个pytorch repository的YOLOv4细心的YOLOv4和mobilenet YOLOv4与PAS.zip

    python、yolo、pytorch

    代码目录,traceId 关联,日志,网关

    代码目录,traceId 关联,日志,网关

    systemd-devel-219-78.el7-9.9.x64-86.rpm.tar.gz

    1、文件内容:systemd-devel-219-78.el7_9.9.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/systemd-devel-219-78.el7_9.9.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、更多资源/技术支持:公众号禅静编程坊

    OpenCV车牌识别.zip

    车牌识别项目

    YOLOv9 YOLOv7 YOLOv7的MIT许可证.zip

    python、yolo、pytorch

    java-springboot+vue厨艺交流平台的设计与实现源码(项目源码-说明文档).zip

    系统选用B/S模式,后端应用springboot框架,前端应用vue框架, MySQL为后台数据库。 本系统基于java设计的各项功能,数据库服务器端采用了Mysql作为后台数据库,使Web与数据库紧密联系起来。 在设计过程中,充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护、操作方便以及页面简洁等特点。

    PyTorch张量与自动微分实战指南:从基础到高级

    内容概要:本文详细介绍了PyTorch的张量和自动微分两大核心技术。首先,全面概述了PyTorch的特点及其在深度学习领域的优势,并讲解了PyTorch的安装和配置方法。接着,针对张量这一核心数据结构,阐述了张量的创建方式、常用的操作以及重要属性。再深入到自动微分子系统,解释了自动微分的概念及其工作机制,展示了如何利用计算图和反向传播算法来简化梯度计算。进一步地,在实战案例中演示了构建线性回归模型的全过程,从数据准备、模型定义、损失函数的选择直到训练模型。最后,介绍了一些高级进阶技巧,例如张量广播、拼接、切片和高阶导数的计算,为用户处理复杂任务提供了宝贵经验。 适合人群:有一定编程基础并希望深入理解和运用PyTorch进行深度学习项目的开发者、研究人员以及学生。 使用场景及目标:① 学习并掌握PyTorch框架,尤其是张量和自动微分模块的基础知识;② 结合具体示例理解和实施线性回归模型;③ 提升处理复杂深度学习任务的能力,比如通过高级张量操作优化性能、提高效率。 其他说明:本文不仅涵盖了理论知识还提供了大量的实践范例,能够帮助读者更快地上手和应用所学内容,适用于新手入门到中级水平用户的

    安徽19种土壤类型空间分布-mxd可编辑文件+标准shape文件+标准成图TIF

    本资源为安徽省土壤类型空间分布数据(共19类)。 编图所采用的制图单元有土类、亚类、土属、土种等,对照联合国粮农组织(FAO)土壤分类体系。 数据类型为标准shape格式。 可通过查阅“土壤分类体系”excel文件中的“土壤分类编码表”区分土壤类型。 属性表中的“SOIL_ID”与编码表中的“亚类”是一一对应的。 资源中还包含可编辑mxd文件,方便用户任意操作,同时包含标准TIF格式图片,可直接使用,还包含显示样式修改示意图,可自由选择自己喜欢的配色方案。

    嘉立创EDA专业版安装包

    开发工具,可方便画原理图时,下载原理图及PCB 封装库

    YOLO v3 物体检测算法.zip

    python、yolo、pytorch

    p-07导入CSV文件.py

    p-07导入CSV文件.py

    (源码)基于Arduino的RFID门禁系统.zip

    # 基于Arduino的RFID门禁系统 ## 项目简介 本项目是一个基于Arduino的全面RFID门禁系统,旨在实现安全的访问控制。系统使用MFRC522 RFID读取模块、用于控制门锁机制的伺服电机,以及LED和蜂鸣器为用户提供反馈,确保可靠且便捷的访问管理。 ## 项目的主要特性和功能 1. RFID认证系统读取RFID卡的唯一标识符(UID),并与预定义的授权ID列表进行验证。 2. 伺服电机控制伺服电机控制门的物理锁定机制,根据访问授权进行锁定或解锁操作。 3. 视觉和听觉反馈LED和蜂鸣器提供清晰的视觉和听觉指示,表明访问状态,提升用户体验。 4. 模块化和可定制性代码和硬件设置易于修改或扩展,可添加如键盘或生物识别传感器等额外功能。 ## 安装使用步骤 ### 步骤1收集组件 Arduino开发板(如Arduino Uno) MFRC522 RFID读取模块 伺服电机 LED和电阻 无源蜂鸣器 跳线

    2024中国移动数字政府白皮书.pdf

    2024中国移动数字政府白皮书.pdf

Global site tag (gtag.js) - Google Analytics