大话APP配置功能的设计和落地

在参与各种app业务开发的过程中,大部分都会遇到需要对某些功能/界面/数据可以灵活的管理后台控制,客户端根据配置变化而变化,不需要发版本就可以解决这些需求,大致功能需求就是需要提供一个后台功能,能够给产品/运营童鞋进行配置管理,然后通过服务端接口输出给客户端进行逻辑/渲染使用,这里针对这种场景,分享一个相对通用的解决方案

项目背景

当前项目中针对这种配置的需求,每次都需要开发人员重新开发后台表单,然后修改配置接口针对配置进行输出,因为这个功能的开发要归宿到很早以前,也不知道当初为啥要这么做,现在存在的问题就是不容易维护和拓展,以及重复开发的成本

整理需求
  • 配置管理后台
    • 支持版本控制
    • 支持客户端类型(安卓/IOS/所有)
    • 表单可配置
  • 配置输出接口
    • 增量下发
    • 保证高可用,高稳定,高性能
  • 客户端
    • 接口下发配置数据进行缓存
技术背景
  • 管理后台:php服务端+jquery+bootstrap
  • 接口项目:php服务端
技术过程
  • 前端技术选型:

    • vuejs
    • element ui
  • 核心问题,如何后台配置生成表单(开发人员来配置)?

初步计划是通过配置表单的JSON生成element ui的表单,进行了一些调研,也找到可以通过配置JSON生成element ui表单的js库,感觉灵活性差了些,而且当时还不支持富文本,感觉后续拓展也是大问题,所以弃用,后面尝试自己来实现,通过vuejs+element ui组件相对简单的方式实现了这个配置表单的功能,能够支持基本需求,具体看后面代码(简单粗暴)

  • 接口数据增量下发,以及客户端获取配置时机和缓存策略

客户端每次启动的时候去获取一次配置,缓存【配置数据】,新增配置添加到缓存,已经存在进行替换
接口输出【配置数据】的同时在响应头上【timestamp】= 带上当前请求的服务器时间戳
客户端获取数据,缓存【配置数据】&【timestamp】
客户端下次请求的头上带上【timestamp】= 缓存的时间戳,第一次请求可以不用
服务端接收到请求的时候获取客户端的【timestamp】,过滤配置的时候校验最后更新时间>=【timestamp】进行输出【配置数据】

  • 保障高可用,高稳定,高性能,容错

配置数据进行多级缓存,第一级缓存【redis】,第二级缓存【服务器内存】(php apcu)
接口优先从【服务器内存】中获取,如果不存在从【redis】 并同步到【服务器内存】,不存在从【mysql】 并同步到【redis】,正常后台编辑完就同步到redis,【服务器内存】就进行短暂性的缓存(3s),保障在高并发的情况下可以快速下发,弊端就是数据变化的时候会延迟N/s后更新

客户端在获取缓存配置的时候如果不存在需要自己有个默认配置,极端情况下无法获取配置的容错机制,保障功能的正常运行

解决方案

配置管理列表界面:

配置添加和表单JSON配置界面(开发人员操作):
[外链图片转存失败,源站可能有防盗]!链机制,建(http://blog.thankbabe.com/imgs/config_center_add.png)]

配置数据表单界面(产品/运营童鞋操作):
配置管理

前端框架/库:

主要的代码内容,如下:

表设计:

-- 配置中心表
CREATE TABLE `config_center` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增ID',
  `title` varchar(100) NOT NULL DEFAULT '' COMMENT '标题',
  `code` varchar(60) NOT NULL DEFAULT '' COMMENT '标识',
  `platform` tinyint(4) NOT NULL DEFAULT '0' COMMENT '0=所有,1=IOS,2=安卓',
  `template` tinyint(4) NOT NULL DEFAULT '1' COMMENT '模板标识',
  `form_json` text NOT NULL COMMENT '表单JSON',
  `form_data` text NOT NULL COMMENT '表单数据',
  `description` varchar(255) NOT NULL DEFAULT '' COMMENT '描述',
  `app_version` varchar(15) NOT NULL DEFAULT '' COMMENT 'app版本',
  `app_version_compare` varchar(10) NOT NULL DEFAULT '' COMMENT 'app版本比较符号',
  `operator` varchar(20) NOT NULL DEFAULT '' COMMENT '编辑人',
  `create_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
  `status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '状态,1=有效,-1=删除',
  PRIMARY KEY (`id`),
  KEY `index_code` (`code`),
  KEY `index_update_at_platform` (`update_at`,`platform`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

表单配置JOSN内容:

[
    {
   
        el: "input"
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
技术的变革,一定是思想先行,云原生是一种构建和运行应用程序的方法,是一套技术体系和方法论。云原生(CloudNative)是一个组合词,Cloud+Native。Cloud表示应用程序位于云中,而不是传统的数据中心;Native表示应用程序从设计之初即考虑到云的环境,原生为云而设计,在云上以最佳姿势运行,充分利用和发挥云平台的弹性+分布式优势。云原生概括为4个要点:DevOps+持续交付+微服务+容器。符合云原生架构的应用程序应该是:采用开源堆栈(K8S+Docker)进行容器化,基于微服务架构提高灵活性和可维护性,借助敏捷方法、DevOps支持持续迭代和运维自动化,利用云平台设施实现弹性伸缩、动态调度、优化资源利用率。要转向云原生应用需要以新的云原生方法开展工作,云原生包括很多方面:基础架构服务、虚拟化、容器化、容器编排、微服务。本课程凝聚老师多年经验,基于真实工业界电商业务讲解,涉及多种技术落地方案,涉及多语言的协调开发,让学员在实战中熟悉云原生开发的全流程,感受云原生带来的开发便利。目前对云原生的人才需求也非常的大,谁尽早掌握,谁就能抓住这个风口,实现收入的增长。 本课程将分为3个阶段: 第一阶段:会基于云原生实现电商系统的大部分核心服务,包括:用户服务,商品服务,商品类目服务,商品属性服务,品牌服务,订单服务,网关服务等等。 第二阶段:基于云原生完成整个项目的持续集成,持续交付、持续部署,完成整个项目的自动化上云等等。  第三阶段: 进一步完善和优化电商系统,加入大数据,智能AI等等。  本课程包含的技术: IDEA集成开发工具 SpringBootSpringCloud SpringCloud AlibabaDevops MavenJenkinsCI/CD 持续集成 持续交付GitDocker Kubertenes 分布式系统微服务注册中心与配置中心:Nacos分布式系统微服务流量防卫兵:Sentinel分布式系统微服务网关:Gateway分布式系统微服务负载均衡:Feign分布式系统微服务链路追踪:Sleuth,Zipkin分布式系统微服务端点监控:spring boot adminSpringSecurity和JWT(认证和授权)消息中间件解决方案(RabbitMQ)MySQL(数据库)  MyCat MySQL分布式集群解决方案 Lucene、Elasticsearch(搜索) Nginx(web服务器)多语言(Go语言 Python语言 Java语言)CORS实现跨域 Swagger2 文档生成工具 Quartz分布式任务调度 Zookeeper Ehcache Restful VUE+jQuery+Ajax+NodeJS VUE+Element-UIGo+Gin 、 TensorFlow、RNN 、LSTM、Django、Spark大数据相关技术等等 课程亮点: 1.与企业无缝对接、工业界真实业务场景 2.集后端+前台+测试+运维一体,全面掌握技术链 3.多语言Java+Go+Python协调开发,属于语言应用场景4.支持项目快速迭代和开发 5.使用微服务技术栈+前后端分离构建项目 6.云上的开发体系,打造新一代研发平台7.引入全新的设计理念  8.集成SpringCloud Alibaba实现统一整合方案 9 Kubernetes+Docker容器化部署和管理 10 Devops全自动化持续集成和持续交付、部署11.TensorFlow、RNN 、LSTM综合应用12.动态扩展,弹性自动伸缩13.高并发下的服务降级、限流实战 14.实现高并发请求和实现高可用架构解决方案 15.引入大数据技术16.引入人工智能技术17.全程代码实操,提供课程代码和资料
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值