加入收藏 | 设为首页 | 会员中心 | 我要投稿 济南站长网 (https://www.0531zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 动态 > 正文

阿里百川码力APP监控 来了!

发布时间:2016-11-05 04:52:01 所属栏目:动态 来源:阿里百川专区的网站
导读:副标题#e# 阿里百川码力APP监控来了! 这个APP监控 和手淘一起成长 历经千锤百炼 走过千BUG万坑 如今百川起产品 为了让你的APP更好 用户更爽! 在移动互联网时代,一款应用是否成功,用户体验是一个关键的因素。APM的发展使得用户体验越来越完善,本文通过9

使用Proxy来注入NSURLConnection、NSURLSession等对delegate的回调。具体来说,在delegate proxy收到消息时,如果不是目标协议方法,则通过消息转发机制,转发给原delegate;如果是目标协议方法,则直接调用proxy实现,在proxy实现中委托调用原delegate;此外,多数协议和协议方法都是可选的,因此,在proxy的实现中需要实现-conformsToProtocol:和-respondsToSelector:方法来声明proxy额外加入的协议和方法。这样,我们就能在不影响原有回调的同时,增加网络性能埋点逻辑。

阿里百川码力APP监控 来了!

第三种技术是fishhook。使用fishhook来替换动态链接库中的C函数实现,具体来说是CFNetwork和CoreFoundation中的相关函数。这里,以开车的模型来解释动态链接。设想一名新手司机开车从巴黎到罗马,因为他不知道路线,于是他先去咨询老司机;老司机告诉他正确的线路,这一次他可能还会绕点路,但下一次,他就会按照老司机的建议直接开到罗马。

相应的,在程序运行时,动态链接的C函数dynamic(...)地址记录在__DATA segment下的__la_symbol_ptr中;初始时,程序只知道dynamic函数的符号名而不知道函数的实现地址;首次调用时,程序通过__TEXT segment中的__stub_helper取得绑定信息,通过dyld_stub_binder来更新__la_symbol_ptr中的符号实现地址;这样,再次调用时,就可以通过__la_symbol_ptr直接找到dynamic函数的实现;如果我们需要替换dynamic函数的实现,只需要修改__la_symbol_ptr即可。具体的实现方式,可以参阅Facebook的开源框架fishhook。

加强可用性的优化手段

通过以上两种检测方式,基本能够大部分的性能和网络需求,使得开发者能够满足如今移动互联网下用户的苛刻的需求,那么,建立起来的度量体系后,了解的具体的问题后,我们应该如何去解决这些问题来提升可用性呢?

1、网络安全

运营商、DNS被劫持问题是应用开发时一类棘手的问题, 解决方案也比较多。51信用卡技术总监汪睿认为,51信用卡作为金融属性的产品,基于安全考虑会放在第一位。解决方案主要是基于全栈HTTPS的方案来处理,但会带来一些成本和性能上的损耗。甚至可以像FaceBook、google等一些解决方案,使用HTTP2.0方式,这取决于公司和开发者自身去评估实现的成本。汪睿还介绍了早起的一个过渡方案,那就是HTTP的DNS方式,通过获取一个IP表通过IP来直接连接,可以避免HTTP劫持的问题。

而网络是一个端到端的技术,阿里高级技术专家陈武认为,从电商的场景看,首先要保证服务端的稳定性,服务端可以有反刷,限流,单元化,异地容灾,服务降级等策略保证连接的稳定性。另外,客户端的角度主要看连接链路和数据量。链路里面资源可以做多CDN的备份,通过HTTP DNS或者HTTPS,HTTP2.0来反劫持。在链路稳定的基础上,接着去保证传输的效率,这里面可以通过就近接入,连接复用,提升压缩率,使用二进制协议等技术来减少包大小。当然,这里面最重要的是端到端的网络监控体系,这样在网络服务治理上会更有抓手。

2、系统降级

降级的解决方案,是系统性能保障的最后一道防线,从性能优化的角度上说,没有100%完善的设计,总会有一些意料突发的情况导致性能恶化。所以,在系统设计时,必须做好降级设计。

饿了么移动首席架构师王朝成认为,在饿了么517大促活动上,服务器端承受非常大的压力,这个时候会通过降级部分服务的方式,来确保大促秒杀这种场景得以正常运行。但是,在用户端上,以及APP,还在不断积极的发送用户请求和数据,反而增加服务器集群的压力。这个时候,王朝成表示,他们会考虑把一部分的SDK或者APP上的服务也进行降级,来减少服务端在分析数据上的压力。

降级分为手动降级和智能降级,在策略上分为流量降级、效果降级、功能性降级。流量降级主要表现在通过主动拒绝处理部分流量早餐部分用户服务不可用。而效果降级和功能性降级都表现为服务质量的降级,一个是通过在流量高峰时期用相对低质量、低延时的服务来保障所有用户的服务可用性,另外一个是通过减少功能的方式来提高用户的服务可用性。

3、网络性能

从数据结构上,需要根据不同的业务场景来选择合适的数据结构,在数据流量较少的情况可能客户端上表现不出什么区别,当在数据流量过大,且数据结构复杂的时候很可能就是直接影响到APP的性能。

类似餐饮领域“饿了么”这样的应用,数据发送的频率使得据量会非常大,对用户来说可能没有什么感知,但是商家接收大量的订单,数据量影响很大,感知比较明显。王朝成认为,可以考虑一些新的协议(Protobuf, Flatbuf)来优化数据量,比如HTTP2.0可以压缩http协议的header,使用encoder来减少需要传输的header大小,通过通讯双方各自cache一份header fields表,对于相同的数据不再通过每次请求和响应发送,又减少了需要传输的大小。再一个是采取二进制的协议,只认0和1的组合,通过把原来http1.x的header和body部分用frame重新封装,实现方便且健壮。通过内容压缩与并发传输机制,在低速、不稳定的无线条件下,较少其http body的发送大小,改善用户体验和资源效率。

阿里百川码力APP监控 来了!

▲ http1.x和http2.0协议关系

同时,阿里高级技术专家陈武也表示,如果在链路没有问题的情况下,那么必须在整个网络传输层要尽量快,不然很容易出现timeout。所以,第一要从协议层,在协议层里面通过http2.0来减少包头的压缩,同时支持服务端push消息,且通过双通通道,对通道复用更快。第二是从数据层,数据可以通过二进制压缩。在整个网络连通率较低的时候,将打包拆成小包,达到很好的传输效果。

4、动态热修复

(编辑:济南站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!