说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

高性能微信公众平台开发

HTML文档下载 WORD文档下载 PDF文档下载
微信平台的月活跃数已达4.38亿,微信已被越来越多的商家为一大重点营销平台。微信的发展也带来了大量的数据存储及数据交互。那么,在进行微信开发时,面对用户较多的情况下,应如何确保瞬间并发的压力?

【编者按】目前,微信平台的月活跃数已达4.38亿,微信已被越来越多的商家为一大重点营销平台。面对如此庞大的用户群,商家迫切需要提供定制化的服务。那么,如何运营微信公众号成为企业亟需解决的问题,为此CSDN特别开设了 微信开发者社区供企业共同探讨、借鉴其他行业优秀的应用开发案例,为开发者带来一线“吃螃蟹”的经验得失。另外,企业/用户还可以借助微信项目对接平台,发布微信开发需求、寻找微信开发项目。

在进行微信开发时,面对用户较多的情况下,如何确保瞬间并发的压力?对于开发人员而言,一定要预估好自己的产品以后的用户量和数据量,保证产品稳定、有效地运行。  


微信基础交互

在谈更高性能的微信公众平台接口开发之前,我们先了解下微信开发的基础。微信公众平台官网的解释是:公众平台开发接口提供与用户进行消息交互、自定义菜单交互的能力。对于已接入的第三方接口,当用户发送消息时,微信会推送至第三方服务器。以上就是微信公众平台的开发流程,很多人因不明白而使开发受阻,如图1所示。


图1 微信公众平台开发流程

用户主动发送的消息分成普通消息、事件消息、语音识别结果。普通消息包含文本、图片、语音、视频、位置、链接等多维度消息,也是开发者们最常用的。事件消息包含关注、取消关注、扫描二维码参数、上报地理位置、自定义菜单(点击、跳转)监控等。整个消息按标准XML格式进行传递,所以开发人员可以用任何语言进行代码开发。在大型项目中会涉及转发处理。消息处理主要指的是被动接收,以及靠高级接口进行主动发送、高级群发等。针对这块,不久前微信已推出了模板消息功能。微信在消息处理上的形态已基本形成。

用户处理可以根据OpenID获取用户信息,通过Auth接口进行网页授权,只要在微信浏览器中即可获得用户信息,朋友圈分享的一些功能开发主要依赖此接口。消息对开发人员来说就是指令和关键词,程序主要用于处理各种指令,并返回对应的数据,该逻辑使微信开发更加简单,准入门槛更低。微信的发展也带来了大量的数据存储及数据交互,特别是对于拥有很多商户的开发商来说。

数据存储与快速查询

微信交互完全靠OpenID来进行用户识别,在标准XML中(FromUserName),建议开发者在数据库中建立一个与OpenID对应的表,该表只做关系处理,粉丝相关的数据则使用单独的表去存储。粉丝表的操作非常多,用户关注时要插入,取消关注时要删除。

在一些现场活动中遇到大量用户加入时,如果没有经过优化,服务器基本会崩溃,此时要用数据库分表解决方案。拿MySQL来说,一般建议一张表存储500万数据(多用户系统),否则高并发情况下数据库压力会非常大。另外,比较重要的就是微信交互数据,微信公众平台服务器只提供5天的用户交互信息供运营者查询。

微信在做架构时已意识到这一点,该项不能一直存储供用户查询,否则服务器架构扛不住。从我们公司的角度来看,一个公众号平均有1000个粉丝; 万个公众号,6000万粉丝,每天10%的用户会发送至少一条消息。也就是说,有600万的消息存储量,微信580万公众号的数据压力可想而知。即便如此,对于我们这样的商业公司来说,再大的数据量也要存储,因为我们需要更多的用户数据为商家的发展提供数据分析和数据模型。现阶段我们的处理方案是:近期数据实时查询 、历史数据异步查询 、数据库采用分布式。

  • 近期数据实时查询

将1~2个月的数据存储在实时数据库中,提供分布式解决方案,保证插入、查询的性能。

  • 历史数据异步查询

暂时将数据从热点数据库转移到专门的数据分析服务器,只用来提供查询服务,可借助一些搜索查询,利用数据分析软件进行提炼与大数据挖掘。

  • 数据库分布式

预估数据量比较大的内容,采用分布式存储,保证数据库的高性能服务。

实例解析

“分享有礼”是我们公司2014年七夕节上线的一个项目,上线两天,PV数就达到了200万,成功领取盒子的用户达20万人。该项目源于BMW的“分享至朋友圈,求助好友帮助领取奖品”的活动。技术评审时我们就意识到这是一个疯狂的项目。我们将面临Web、DB、带宽三项挑战,并且还要与微信服务器进行大量交互。

先说微信交互层面,朋友圈分享不需要用户进行关注,也不会产生用户信息交互,比较简单。但其业务逻辑中有个比较可怕的地方,即已领过盒子的用户,在第二次进入时要记录该用户已领取过盒子,同时用户打开朋友圈(朋友分享的链接),点击协助后也要对此进行记录。微信高级接口中有个Auth接口(Scope为snsapi_base),无须用户授权就可以获取用户OpenID。借此我们的解决方案是用户每打开一次,我们就去请求一次微信服务器。然而,这个解决方案带来的潜在风险很大。压力测试过程中,基本上2000并发压力就很大了,我们通过以下方法解决了该问题。

  • access_token进行了缓存存储,这可以减少一次服务器交互。
  • 用户OpenID存储在浏览器Cookie中。程序先判断浏览器Cookie,Cookie中有就不请求,这减少了用户二次打开时的请求量。
  • 用户数据存储的表加上了Memcached这种缓存中间件。

微信浏览器优化方案

在微信公众平台开发中,对微信浏览器的了解很重要。微信浏览器跟普通浏览器没什么区别,只是微信在其中做了一定的修改。当一个产品流量比较大时,上述架构会解决微信服务器交互的压力。所存在的带宽压力、Web压力还是需要靠Web开发技术来解决,手机浏览器每一个请求都要耗费流量。2G网络的用户也很多,所以该项是微信开发非常重要的一点。下面是一些优化小技巧。

  • 图片Sprite把常用的小图片合并成为一张大图,减轻多次请求造成的流量浪费。
  • CSS、JS合并压缩推荐Google的工具Minify。
  • 纯CSS、JS压缩推荐Apache自带的Gzip模块。

所以在进行微信开发时,用户较多的情况下,瞬间并发压力会比较大。不过作为开发人员,一定要预估好自己的产品以后的用户量和数据量。保证产品稳定、有效地运行。  

作者简介:张毅,前腾讯团购电商业务高级工程师,早期还担任过苏州同程旅游网技术经理,负责公司平台网站开发,涉足电商、在线旅游、政府信息化等多个行业。具有多年互联网技术经验,长期专注于LAMP技术应用与优化、技术架构,拥有丰富的大型项目规划和实施经验。


干货来袭,更多微信应用开发精彩案例,请查看 微信技术社区!

大众点评推出首个O2O开放者平台:高德、盛大加入 从APM角度上看:NoSQL和关系数据库并无不同 新浪微博商业化:大树底下真的好乘凉吗? 亲爱的GitHub,我们怎么访问不了你? 经典神作《魂斗罗》iOS版今日上线 专访最强夫妻店:“神庙逃亡2”开发背后的故事 我们做错了什么?3周了,一毛钱也没赚到! 开源产品系列:简单强大的模板语言JSON Template 十年历史的KDE bug修复 为什么函数式编程在Java中很危险? Android平台获X11协议支持,手机变身绘图板 Rackspace通过OpenStack和定制OCP服务器节省40%成本 美国人是如何利用大数据的应用来防止流感的蔓延 W3C北航总部成立:招兵买马增强中国标准声音 Mozilla推出开发者预览版Firefox OS智能手机 强强联合?传微软投30亿参与Dell私有化 微软发布Windows Phone 7.8 SDK更新 Amazon账号将支持内付费 道具可登畅销榜 裸照门:500px应用被苹果踢出App Store APP的魔法:三个杭州小伙做手游吸金千万 Facebook与Google,巨人们将在移动端决胜负 移动广告量起来了!2013年绩效营销将成主流 Fedora欲以MariaDB取代MySQL 将节能进行到底:Facebook为冷存储寻求廉价闪存 谷歌Q4财报净利润28.86亿美元 超分析师预期 社交媒体的力量:Wood Camera登上iOS付费榜首之谜 屏蔽GitHub是互联网时代的“闭关锁国”吗? 巧妙利用空白设计案例分享(多图) 用友发布2013/新三年业务策略 力推UAP/CSP云平台 AWS集群计算新增内存分析EC2实例 手游:鼓足力气,掰弯传统3D游戏大作 软件发布:凯蒂神卜2001 哪位高手作过网站建设?请帮忙!!! 软件发布:五子棋大战 光驱的问题 软件发布:扑克(版本:36.0,玩法的数量和版本号一样) 软件发布:鸿森万能证件打印系统 软件发布:密码盗窃器(超小版:30k) 软件发布:寝室多人共享上网计时计费器 软件发布:美萍安全卫士密码破解器 软件发布:整人蛀虫 SQL SERVER存储过程的问题!!!! 软件发布:词痴 软件发布:自动关机 软件发布:南易彩票选号系统 pfc基类庫是纯英字,谁有中文的。 软件发布:精灵英文输入法(写代码助手) 软件发布:QQSpy密码探测器98版 for 0425 高手请,为何在不同地方打开对话框会有不同的结果呢? 软件发布:《商务导航》 软件发布:amp player 豪华版 如何关闭XCOPY打开的窗口,详细一点 请援手:pfc程序如何再升级?(关于版本更新) 谁是高手,一个事务处理问题。 大家来聊聊:JBUILDER5比JUILDER4在那方面改进了!? 我们这个破烂小公司成天TMD瞎折腾! 根据用户名和密码登陆的问题! 大家来说一下,中程和高程证书在找工作时作用怎样 Dialog上放了一个group box,请问如何动态改变group box框框中的整个颜色?急呀! 用程序向表中插数据的问题? 怎样制作一个类似日历的控件?快快快! 做个调查:在上海delphi的前景如何?现在工资怎么样? 如何给graph控件的values赋值. c++Builder的悲哀历程,求助帮忙,各位大虾多指点 建议封杀e_lion,影响看贴情绪!杀无赦!!! 请教高手:我用vc6.0向导生成了一个Utility Project,不想用MFC AppWizard(exe)生成的基本类,可我无法编译我写的cpp(带winMain函数)文件,为何? 无任何理由,第一个进来者300分。当场结帐。 各位,是如何调试自己编写的servlet的,我使用jswdk每次,修改servlet后都要重启一次服务器,有没有什么好法子。 不看不知道。 在写servlet时,如果要输出一段文字的问题。 “瑞星2001病毒实时间控装载失败”? 既然看到了,不妨进来“坐坐”! (关于串口) 看看我的计划《程序员生活》, 数据库小问题 有谁用过Delphi6带的InstallShield Express - Borland Limited 请赐教:我只想建一个空工程,里面什么类也没有,只望往加我写的类(带winMain 函数),编译成exe文件,用vc6.0,怎么做呀 硬盘喀-啦,喀-啦连续的响是何原因 你们好,能告诉多表更新的时候UPDATE(true,false)中的true,false是什么意思吗? (菜菜鸟级问题)怎么给别人分数?自己的分数又是怎样积累的? 算法问题求解 怎样去看继承下来的方法的代码? 原来大把花钱的感觉真是爽!还是没有任何理由,第7个进来者300分! 一班植树占三个班总棵树的1/5,二班植树是三个班植树棵树的3/5,二班比一班多植树20棵,这三个班一共植树多少棵? 鸡兔同笼,有23个头,56条腿,鸡兔各几只【用方程做】 鸡兔共40只,兔子比鸡多16条腿,问鸡兔各多少只有x的方程 希望小学二、三年级共植树114棵,其中三年级的植树棵数是二年级的2倍,问二、三年级各植树多棵? 鸡兔同笼,共有21个头,56条腿.鸡、兔各有多少只?(方程解) 一只鸡有2条腿,兔子有4条腿,现在又鸡兔若干只,他们共有240条腿,鸡是兔子的2呗,求鸡兔各有多少只?第一个回答的给悬殊按 奥数题(鸡兔同笼)蜘蛛有8条腿,蝴蝶有6条腿和2对翅膀,禅有6条腿和1对翅膀.现在这三种小虫共21只共140条腿和23对翅膀.蜘蛛,蝴蝶,禅各几只? 鸡兔同笼20只,鸡和兔的腿共56条,鸡有()只,兔有()只 鸡兔同笼,共有30个头和84条腿,求鸡和兔各几只? 鸡兔同笼奥数题有2分、5分、1角的硬币20枚,共计1.20元,其中5分有几枚,1角有几枚? 鸡兔同笼共9只,腿26条,则鸡..只.兔..只.怎样求出的..本人只学过一元一次方程,请用 一元一次方程解答.. 鸡兔同笼,有25个头,有70条腿, 请问有几只兔子几只鸡?急用! 奥数题(鸡兔同笼)某农民养鸡兔若干只,已知鸡比兔多13只,鸡的脚比兔的脚多16只,鸡兔各多少只?(横式计算) 鸡兔同笼,腿200只,鸡的腿书比兔少56只,鸡兔各多少只? 鸡兔同笼,共有35个头,94条腿.求鸡和兔子各有多少只. T1.在括号里面分别填上两个相邻的自然数,使下式成立!( )<(一百零一分之一+一百零二分之一+一百零三分之一+.+一百五十分之一)*3<( )T2.自然数A和B的最小公倍数是140,最大公约数是5, 鸡兔同笼共九只,腿26条,则鸡和兔各有几只? 1.鸡兔同笼,共有8个头,20条腿,笼里有几只鸡?几只兔?(用方程和列举法.) 甲乙两个箱子所装水果的质量比是5:4,现在如果把甲水果的25%放进乙,再从乙拿出30千克,这时两个箱子的重量相等.求甲乙两箱原来各有多少千克水果? 鸡兔同笼 21个头 56条腿 鸡兔各几只? 鸡兔同笼,共有10个头,32条腿,鸡,兔各有几只?列表格 运输队要运一批货物,已经运走了20%,如果再运走4吨,那么运走的和剩下的比为3:7,这批货物共多少吨 如题,一项工程,甲单独做要36天,乙单独做要45天.如果开工时甲、乙两队合做,甲中途退出转做新的工程,乙队又做了18天才完成任务.问甲队做了多少天? 鸡兔同笼方程解笼子里有若干只鸡和兔,从上面数,有8个头,从下面数,有26只脚.鸡和兔各有几只?所有解的过程都写上写清楚,不能掉 某运输队计划在3天之内运完一批货物,第一天运走7.2吨,第二天运的比这货物的总吨数少70%,第二天的吨数的比试3:5,这批货物共有多少吨? 比例应用题 也要用算术方法解一次 急 1、一辆轿车从甲地开往乙地,每小时行驶72km,4小时到达,如果每小时行驶80km,几小时到达?2、一捆铁丝长212.5m,剪下5m长的一段重200g,这捆铁丝重多少克?3、 鸡兔同笼,鸡比兔多26只,足数共274只,问鸡兔各有几只?方程 计划在3天运完一批货第一天运走7.2吨第二天运的比这批货物的总吨数少70%,第二天与第三天运的吨数比是3:5 (用算术法算,不要用方程)谢谢各位配合!1.有一箱灯泡,先拿出168个,又拿出剩下的2/3,这时箱里剩下的灯泡恰好是这箱灯泡总数的1/7,这箱灯泡共有多少个?2.小华看一本书,第一天看了一些,第二 鸡兔同笼,兔比鸡少20只,脚数共262只,鸡兔各有多少只?(方程解答,并说出计算道理) 运输队计划在3天内运走一批货物第一天运走了48吨占这批货物的2/5第二天与第三天运走的比是3:5第三天比第二天多运多少吨急急ij 六年级数学题 要用算术解 不要方程篮球比赛中,3分线以外投中一球得3分,3分线内投中一球得2分.在一次篮球比赛中,球星易建联总共投中9个球,得20分,他投中的3分球和2分球各多少个? 笼子里有相同数量的鸡和兔,一共有48条腿,各有鸡和兔几只?(用方程解) 运输队计划在3天内运走一批货物第一天运走了48吨占这批货物的2/5第二天与第三天运走的比是3.看补充运输队计划在3天内运走一批货物第一天运走了48吨占这批货物的2/5第二天与第三天运走 [用算术方法解,不能用方程]某商店从外地购进360个玻璃制品,运输时损坏了40个,剩下的按进价的117%售出,商店可盈利百分之几? 鸡兔同笼 共有48条腿 已知兔比鸡多8条腿 鸡兔各有多少只? 运输队计划在3天内运走一批货物第一天运走了48吨占这批货物的2/5第二天与第三天运走的比是3:5第三天运多少 请列示解答或一元一次方程修一条水渠,如果每天多修8米,可以提前4天,若每天少修八米,将推迟八天完成,求水渠的长度. 鸡、兔共有100条腿,若鸡数和兔数互换,则共有86条腿,鸡兔各有多少只?请讲解本题 运输队计划3天内运完一批货物.第一天运了4.8吨,占这批货物的40%,第二天与第三天运的吨数比是3:5——用正比例的方式 六年级数学题(一元一次方程)0.3分之x-1-0.5分之x+2=1.2 鸡兔同笼,有8个头,20条腿,鸡和兔各有多少只?用算术方法怎么做 运输队计划在3天内运走一批货物第一天运走了4.8吨占这批货物的40%第二天与第三天运走的比是3:5第三天运了第三天运了多少吨?2.一辆汽车三小时行驶180千米,用这样的速度从甲地开到乙地,已 一元一次方程的应用已知六年级2班共有45人,男生人数于女生人数的比为4:5,求这个班男女生各有多少人? 鸡兔同笼,共有20个头,64条腿,鸡和兔各有多少只? 物流公司运送一批货物第一天运了总数的3分之1第二天运了9吨已运的与剩下的吨数比是7:5求这批货物一共多少吨 一道数学题(可用方程、算数法,方程用一元一次方程)求详细解答!六年级同学分成甲 乙两个组劳动,甲 乙两组人数比是7:3 ,后来因为劳动需要,从甲组派了30人到乙组,这样甲乙两组人数比变 鸡兔同笼,有8个头,20条腿,鸡和兔各有多少只?用方程 运送一批货,第一天运了总数的1/3,第二天运了9吨,这时已运的与剩下的吨数比是7:5,这批货物有多少吨? 要解设,并且是一元一次方程一家商店将某种型号的彩电按物价部门准核的原价提高30%,然后标出“大酬宾,八折优惠”,经顾客投诉,执法部门按非法收入的10倍处以每台1000元罚款,则每台彩电原 鸡兔同笼,有20个头,50条腿,鸡有()只,兔有()只,一个平行四边变成()形时面积最大, 五年级同学参加植树要植树五十六棵要求每行的棵数相同有几种不同的方法 用一元一次方程解,算术也行1、某商店经销一种商品,由于进货价格降低了百分之六点四,使得利润率提高了百分之八,求原来经销此种商品的利润率.2、一项工程,A单独做要四十天,B单独做要三 鸡兔同笼,有20个头,54条腿,鸡与兔各有多少只? 把下面各比化成前项是100的比.(1)实验小学今年植树的棵数与去年植树棵数的比是4:3.2 (2)一辆小汽车的速度与一架超音速飞机的速度之比是1:15. 要解题思路,最好用算术方法,或者一元一次方程.货车速度与轿车速度的比是3:8,两车分别从A、B两地同时出发,相向而行.八分之三小时相遇,如果两车从A、B两地同时出发同向而行,货车速度在前, 鸡兔同笼共有十八个头54条腿同笼中鸡和兔各有多少只? 一班植树的棵数占三个班的五分之一,二班与三班的比是3:5,二班比三班少植树40棵,这三个班各植树多少棵要方程 鸡兔同笼,有20个头,56条腿,鸡与兔各有多少只? 鸡兔同笼问题方程解 ,鸡和兔共有18只,共有72只脚,设有X只兔,那鸡有多少只打错了是56只脚不好意思
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn