高并发经常会发生在有大活跃用户量来访问网站的某个点,例如用户高聚集的业务场景中,如:抢购,促销等。为了让用户流畅的访问网站,来根据自己的业务设计适合系统的处理方案。

//对于APP网站首页数据,通常是有APP请求服务端数据在本机进行绘制。APP越少的请求服务端的,就会减少服务器压力:资源和带宽。

1.服务端给APP下发的数据越少,减少无用字段的下发。就是APP需要什么,服务端下发什么。

2.APP每次请求服务端数据,服务端下发最新数据和数据版本号,APP可以缓存到本地,每次接口请求数据的时候,上传当前缓存数据的版本号,服务端也计算出最新数据的版本号,进行对比,如果版本号相同不在下发数据,APP直接调取本地数据,反之,服务端下发最新数据和数据版本好给APP。

3.服务端架构方面的设计,不在由APP请求接口时被动redis 数据或者是不做缓存操作。 而是服务端主动调取mysql数据,刷入redis,APP请求接口只从redis 读取数据

下面是为Api->app调取数据设计的服务端的架构简图,也是目前我在项目中使用的。

逻辑方面:

有cron进行主动请求mysql数据,进行刷新redis数据,app通过api接口请求redis数据。

因为cron是定时任务脚本,所以主动请求时间不能太短,频繁请求mysql数据,这样就会给mysql资源造成压力。最好是在5-10分钟之内。但是这样就有一个问题数据不同步,如后端更新数据到mysql,cron要5-10分钟才能主动请求刷新redis.稳定和性能上都比较好些,所以重构的时候采取了这样的方案。

这样就设计的刷新缓存的策略的问题

1.主动刷新

  1)后台更新时,删除缓存,主动触发cron脚本,刷新缓存

    这样先删除缓存,再写入。在用户请求是会出现访问不到数据。会影响用户体验。

2)后台更新时,主动触发cron脚本,刷新缓存

对于这样,后台大量数据更新,可能会多次对一个key写入redis,会想redis刷入不确定的数据,影响数据显示的正确性

   3)后台更新时,主动触发cron脚本,生成数据版本号,版本号作为key保存数据,存入版本号栈,最上面是最新数据的版本号,最下面是原始数据的版本号,当APP请求时,app上传的版本号和原始数据版本号,如果相同不下发数据,不同的话,弹出栈顶层版本号,下发最新数据,删除旧版本号数据(会造成垃圾数据的积累),版本号栈留下最新版本号删除其他。(做一个页面分页时采用的)

4)由cron脚本主动请求数据库,刷新数据,频率不能太高。

数据有一定的延迟性

2.被动刷新

把刷新数据的任务交给app请求,如果app请求时redis内没有数据,则请求各个接口调取数据库数据,下发数据和版本号,刷新redis缓存。

当大量访问时,会产生并发的访问,造成阻塞。

app访问整体简图

网站的优化----首页优化---app调取服务端数据的更多相关文章

  1. 无框架完整搭建安卓app及其服务端(一)

    技术背景: 我的一个项目做的的是图片处理,用 python 实现图片处理的核心功能后,想部署到安卓app中,但是对于一个对安卓和服务器都一知半解的小白来说要现学的东西太多了. 而实际上,我们的项目要求 ...

  2. [SignalR]SignalR与WCF双工模式结合实现服务端数据直推浏览器端

    原文:[SignalR]SignalR与WCF双工模式结合实现服务端数据直推浏览器端 之前开发基于WinForm监控的软件,服务端基于Wcf实现,里面涉及双工模式,在客户端里面,采用心跳包机制保持与服 ...

  3. android菜鸟学习笔记24----与服务器端交互(一)使用HttpURLConnection和HttpClient请求服务端数据

    主要是基于HTTP协议与服务端进行交互. 涉及到的类和接口有:URL.HttpURLConnection.HttpClient等 URL: 使用一个String类型的url构造一个URL对象,如: U ...

  4. python的flex服务端数据接口开发

    python的flex服务端数据接口开发 python 如果给flex提供服务端,需要提供一个网关和一个可供客户端(flex)调用的类.这方面我更加推荐用twisted来写这个网关,因为twisted ...

  5. APP和服务端-架构设计(二)

    1. App架构设计经验谈:接口的设计 App与服务器的通信接口如何设计得好,需要考虑的地方挺多的,在此根据我的一些经验做一些总结分享,旨在抛砖引玉. 1.1 安全机制的设计 现在,大部分App的接口 ...

  6. 支付宝app支付服务端流程

    支付宝APP支付服务端详解 前面接了微信支付,相比微信支付,支付宝APP支付提供了支付封装类,下面将实现支付宝APP支付.订单查询.支付结果异步通知.APP支付申请参数说明,以及服务端返回APP端发起 ...

  7. APP和服务端-架构设计(一)

    架构因人而异,不同的架构师大多会有不同的看法:架构也因项目而异,不同的项目需求不同,相应的架构也会不同.然而,有些东西还是通用的,是所有架构师都需要考虑的,也是所有项目都会有的需求,比如API如何设计 ...

  8. android客户端app和服务端交互token的作用

    Android客户端和服务端如何使用Token和Session niceheart关注1人评论34644人阅读2014-09-16 16:38:44   对于初学者来说,对Token和Session的 ...

  9. pacejs进度条监控服务端数据加载是否完毕

    记得刚刚入职新公司的时候,公司在做app里面的h5页面.跟之前公司的流程不太一样.之前都是写完静态页面后通过ajax加载接口数据,这公司省事了,写完静态页面直接扔给服务端,他们来填数据,确实给前端省事 ...

随机推荐

  1. 移动端app测试

    对于手机项目(应用软件),主要是进行系统测试. 而针对手机应用软件的系统测试,我们通常从如下几个角度开展测试工作: 功能模块测试: 交叉事件测试: 性能测试: 安全测试: 容量测试: 兼容性测试: 接 ...

  2. 提取所有mtk机型的线刷包

    首先手机root且安装busybox和超级终端软件,这里不提供自己百度一大堆 一.制作scatter 示范 PRELOADER 0x0 { } MBR 0x600000 { } EBR1 0x6800 ...

  3. spark 监控--WebUi、Metrics System

    Spark 监控相关的部分有WebUi 及 Metrics System; WebUi用于展示Spark 资源状态.Metrics System 整合的指标信息. Ui相关流程 Spark集群启动之后 ...

  4. 转:CFile::Seek

    CFile::Seek virtual LONG Seek(LONG lOff,UINT nFrom);  throw(CFileException); 返回值:如果要求的位置合法,则Seek返回从文 ...

  5. Oracle 基本命令

    (1)查看所有表 >select * from tab; (2)查看表结构 >desc 表名; (3)将查询出来的字段显示为其他名称 >select empno as 员工编号 fr ...

  6. 四句话表明JSON格式定义

    (1):并列的数据之间使用逗号(",")分割: (2):键值对的映射用冒号(":")表示: (3):并列数据的集合(数组)用方括号("[]" ...

  7. 实现Rsync同步Nginx前端配置

    近期,由于我们的阿里前端服务器频频受到恶意的流量攻击,导致前端NGINX进入黑洞而无法正常访问公司网站. 按之前的预计方法,采用加速乐及备用全配置前端的作法,将恶意短时流量攻击的损失时间降到最短.现将 ...

  8. 调试单片机内部扩展RAM

    51单片机内部只有128字节的RAM(8051),而8052有256字节的RAM,低128字节RAM直接或间接寻址都可以,高128字节RAM与SRF特殊功能寄存器共用地址,SFR只能直接寻址,高128 ...

  9. 64位linux中使用inet_ntoa报错处理

    最近一直使用linux mint 15,我用的是64位操作系统,在进行网络编程的时候,发现一个问题,请看源码: /*get_ip_by_name.c*/ #include <stdio.h> ...

  10. HDU5125--magic balls(LIS)

    题意:求a数组的LIS,但是加了一个条件,为了LIS最大 b[i] a[i]可以交换.最多交换mci: 赤果果的dp啊,可是这个题用线段树的话却会TLE,,由于查询的只是1-x的最大值 因此我们可以用 ...