移动互联网系统架构十大陷阱

http://ju.outofmemory.cn/entry/53111


以下内容由[五四陈科学院]提供

移动互联网十宗罪

过去的三年,54chen一直奋斗在中国移动互联网一线,历经各种坑爹的情况。以下特做记录。

Top 1.时不我待 连通性
cmwap cmnet这样的词语以后应该都会消失在人世间。三年前,经常性地有移不动联不通手机连不上服务器机房的情况。两年前,这种情况要好了一些。一年前,改善很多。现在还存在。相信未来会越来越好,时代在召唤!解法,花钱找有“背景”的机房。

Top 2.生不逢时 HTML5
在去年的网络情况下,HTML5依旧不适合用来做优秀的app。前几年的时候,网速各种烂的情况下,2G下的html5应用基本上完全不能用。现在好一点,开始有闲人把html5全部封装好native的调用,使其只做view的显示部分,但是,性能也是个大问题。当然了,同样地,相信未来会越来越好,同样是时代在召唤!解法,过几年再用。

Top 3.环境恶劣 DNS
DNS解析也有失败的情况下,app做得再漂亮,请求也不可达。IP要比域名靠谱一些,却有别的问题。解法就是在客户端多留下点域名和ip,一个不能用换下一个。

Top 4.车匪路霸 http拦截
天朝运营商,可以干得出你想不到的事情。各种小广告帖你家防盗门上。所以你最好还是在header里声明好了:畜生,这个不是html,这是json,不要加广告!

Top 5.五花八门 app添加按钮一定要克制
特别是android app,完全没有限制,或者统一标准,什么样的App都有,做一个大气的App,最重要的一点,看看能不能打开就是主要功能,手指点一下就能到重要功能。

Top 6.逆流而上 完全不要在传统web上有所期待
除了新浪微博、QQ空间这种从传统web上推出的App之外,几乎不可能在完成一个App之后,能够让用户按你的引导打开一个网站。其难度不低于当年在传统广告商打完广告,等用户来访问网站一样。

Top 7.天下大同 App上的sqlite与服务器的mysql数据同步,是个大麻烦
当App也有一个db在保存数据的时候,就会接二连三地出现数据不一致的问题。最好的解法,公司有个统一的同步机制,最好是固定的框架代码,让业务逻辑隔离开这个同步过程。当然,实际工作过程中,我们甚至还想把所有的云端数据只当成备份,干脆全部交给客户端工程师来完成逻辑,我们让cluster更加可靠和可扩展。

Top 8.通则不痛 下载渠道要通畅
动则几M的包,下载不通畅,基本上分分钟新增用户就归零了。而且,要上CDN。这里有个坑,有些个CDN厂商的代理服务器可能会出现缓存有限的情况,文件太大会出现前半部分下载挺快,后面越下越慢,请谨慎使用。

Top 9.兵贵中速 移动网络更新太快不是好事,太慢也不是好事
你看看哪个App天天在更新,已经不是web2.0时代了,亲! 同时,不要慢速运转,你的伙伴们会养成拖拉的习惯。最好的办法,内部天天更新,外部月更新甚至是季更新。

Top 10.未雨绸缪 一定要提前准备全体用户可以看到的公告条,以备不时之需
web2.0时代,我们要维护系统,在全部页面顶部加一个黄条:今天xx点全站维护。移动时代,这不太可能了,于是你会看到各种微博公告、微信公告、xx公告,反正就是不在自己家公告,因为自己家坏了要维护。



当愤怒的用户,张牙舞爪地告诉你他遇到问题的时候,往往已经病入膏肓。--题记

作者同全国各地愤怒的用户亲密接触了很长的时间之后,做出了以下总结,希望对后来的人们能够有一点启发。

一、用户IP是个不可靠的东西

  • 在实际的案例中,使用用户的IP地址去IP库里找用户属于哪个地域哪个运营商。
  • 不幸的是,IP库有可能不准。
  • 更不幸的是,连IP地址都可能是错的。实际案例中,我们遇到了运营商级别的流量劫持,用户本来是浙江移动,在某些服务器取得的IP居然是江苏电信。
  • 解决的办法:尽量不依赖IP,用smartDNS。或者多渠道纠正IP地址,使用本地客户端的运营商识别能力+电话号码地域识别。

二、用户不是傻子,他其实都知道自己网络是好是坏

  • 许多案例,用户都会告诉你,他的QQ是好的、微信是好的,为什么你不行?你不行!
  • 看用户日志,感觉用户在撒谎。
  • 然而这并没有什么卵用。
  • 知道真相眼泪掉下来:用户在坏网络下时并不会反馈,而从坏网络->好网络时,你如果还在原来的状态下,你不行,用户就愤怒了。
  • 解决的办法:维护好socket的connect init->connecting->connected状态,任何用户的手动操作,1)天线没变,除了connected状态外,都要转圈; 2)天线变了,除了connected状态外,都要重新开始。

三、用户的愤怒,还因为反应慢

  • 当socket正在创建时,用户手动重发一个数据,往往是采取转菊花和感叹号两个办法。
  • 对用户的行为硬碰硬(立即感叹号),会立即引发用户的愤怒。
  • 对用户的行为超过一定时间的转对抗(菊花),超过10秒即会引发用户的愤怒。
  • 解决的办法:设置合适的timeout值。wifi下:connect timeout 1s,send data timeout 1s(明显的大数据包要区别对待)。4g/3g/2g下:connect timeout 1s,send data timeout 10s(明显的大数据包要区别对待)
  • connect timeout的情况处理:重新发起connect。换IP。
  • send data timeout的情况处理:重新发数据2次。reconnect new ip。

四、遇到了localDNS问题-不解析、乱解析

  • dns问题最好的办法:方案中不用dns。退而选之,少用dns。

五、遇到了运营商加广告

  • 一般运营商只对http加广告
  • 二逼运营商还对tcp加广告
  • 解决的办法:parse数据失败时,reconnect新的地方。

六、遇到了协议、端口拦截

  • 常见问题
  • 一个协议不行,换另一个。tcp|udp->http->websocket
  • 一个端口不行,换另一个。80->443->8080->14000

七、遇到了EPIPE\ECONNRESET

  • 与服务器的连接中断后,send一次数据过去,如果能够到服务器,且服务器已经关了,会回一个RST,RST到了客户端,客户端此时read数据,将遇到ECONNRESET。
  • 与服务器的连接中断后,send数据时时如果已经通过RST得到对方关了,返回EPIPE。
  • 以功夫网为例,ECONNRESET的原因,是海外势力被发现后根本收不到数据或者数据乱了,就从server上关掉了socket,再过去的包就会回RST,我们再读就会显示ECONNRESET。
  • 解决办法:只有timeout值得重试,其他都reconnect吧。

八、总结

  • 要想用户不愤怒,网坏时可坏,但网好要他也好。(迅速恢复)
  • 客户端各种适应环境。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
提供的源码资源涵盖了小程序应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值