戏说移动江湖--网络通信架构

大主线

细说移动开发中网络通信架构

前言

本文阅读需要6分钟。

你可能的收获:

  理解网络层架构和设计的基线和主线

  学会网络通信各方案各技术的细枝末叶

  希望能给读者开发项目有点启发和思索


正文

有江湖的地方就有爱恨情仇,有代码的地方就有风花雪月

我们一般谈网络层,也就是说的业务数据通信层,其主要链接客户端和服务端业务间的数据交互,因此其一般处于项目的核心地位,在架构层面来说虽然是处于底层架构那块,但其在项目开始阶段就深冰般存在,虽为上层提供服务看其像一个简简单单的接口方法,但是其地位还是起到承上启下的功效,从而保证各业务数据的安全和稳定。


分割线

虽说项目开始阶段网络层就存在,但是一般公司初期在人员不足和业务快速迭代情况基本都是简单引入第三方的网络库作为网络层快速提供服务,例如市面上的httpURLconnection,httpclient,okhttp,volley等第三方网络库简单提供一层薄薄的封装,完美支持当前业务和需求,皆大欢喜。随着业务量的爆发和,stop,停,请先讲讲市面上各个网络库的对比以及你的评价?说真的去google检索出一大堆,但从我的角度来对比评价看,可简单从三个维度来说:

第一个维度从基本性能和稳定这块来看市面上第三方库都处于同一个水平点;

第二个维度从好不好使的话,简单封装后都好使,所以这块也没有很大的高低之区分;

第三个维度若从新特性这块来看,因业务而异。

所以说项目初期你随便选个第三方库加上简单封装提供网络服务都是满足公司现状的。

分割线

但是随着公司业务的上升和市场快速推进,业务量的爆发和用户量的增加,网络层此刻肯定慢慢满足不了当前业务,例如高性能,高稳定,安全以及满足个性化需求支持。这个时候就有点吃力不讨好的状态,所以就需要对网络层进行一次架构,从而来满足高性能稳定以及高扩展性看齐。这个时候就需要全员一起梳理各个考虑点和需求点进行一次性架构;此时的网络架构基本能满足中小企业各个阶段的发展需求;(说白点网络层设计架构生命周期就是两三次大换血,其他时候不可能没事就去动一动,这是底层库弄不好都变成aar,修改说不定都需要申请公司权限了)。

因此大体归纳总结架构设计上至少满足:

1/提供简单易用的多线程并发访问(线程,队列等)

2/提供对业务层的访问代码保持不变(否则全组人员干死你的心都有)

3/提供自定义网络库或第三方网络库的切换和更新

4/提供网络层的日志统计,实现无缝对接服务端的日志系统

5/支持https以及签名证明等

6/提供业务层的自定义特色需求

7/提供高性能访问机制(DNS解析,长短链接以及重传机制等实现)

8/支持响应数据的缓存,根据缓存类型实现各种复杂的数据缓存

9/支持拦截器和过滤器功能

10/提供扩展性对外接口用于满足后续特殊业务需求

分割线

有人看到这些点外懵圈,怎么没看到和http协议本身的功能如实现http1和http2,GZIP以及keepAlive等特性的实现?不好意思,这些都是底层网络服务库的功能,你只需要通过条件3的方案去替换或者更新这块的底层http协议库即可。

回到刚上面归纳出的多个条件上来,其实这些条件都是从大局观上去思考总结,从业务需求层面上着手以及公司现状及未来发展上分析得来的。

其实细细分析,网络层如果从产品类型来区分,无外乎两个大类着手,社交通讯类(IM)和其他类;因为IM类的网络,其业务性质比较特殊,着重在信令认证,超时和重试机制以及数据可靠性安全性等要求极高,其设计架构上和侧重点肯定不一样,这块可以去看腾讯开源的mars库;其他大部分公司业务就是网络数据通信,大体就是满足各种奇葩业务需求和提供可控的性能和可靠的安全等等,所以对于此类网络因人而异进行设计和架构。中小企业开始改造网络层架构时,首先作为程序员通病,先看下是否有现成框架,根据以上条件丢进去google百度后啥都没有,哈,那肯定搜索不到,不过等我讲完本篇就有现成的库了哦,如果猴急就直接拉到最后可以看到myhttp的GitHub开源地址(觉得名字俗气可以评论反馈,不过我是不会修改的,俗才亲民,名字俗但是内容不俗即可,雅俗共赏)。


分割线

到了这里基本准备结尾,接下来就上面几个条件进行简单说明,其详细架构和使用说明请查看github的readme,作为程序员我还是推荐readthe fucking source code。

其一关于多线程并发访问支持,本库通过自己实现了一套满足业务线和经验值爆表的线程并发体系框架,经得起现网业务的考验和ISO标准,^_^。然后在此基础上自己添加了各种特色线程功能以及辅助服务如日志打桩以及统计等功能。作为一个完备的app,其线程池配套设施必须统一管理,所以本框架提供了线程池并发统一访问功能,通过自己实现一套简化的响应式编程方式访问线程,提供多种线程调度器如main线程调度器,IO线程调度器,http线程调度器以及立即线程调度器和后台线程调度器。基本满足极大部分用户;

其二网络库的切换本库可以实现无缝对接,不管是自己实现一套(如公司中后期就安全等问题通过c++实现一套网络层访问)还是市面上第三方网络库统统满足,切换起来非常简单对接也快捷。

其三提供一套极高扩展性的DNS解析器配合安卓网络特性,完美实现高性能访问等功能;可以扩展市面上所有的DNS库,例如腾讯的httpDNS+,阿里的DNS库等等。

其四关于网络超时重试机制目前只弄了初步的功能,后续根据微信终端跨平台组件 mars 系列的设计和方案进行编码和优化;具体可先参考腾讯微信关于这块的实验和设计。


分割线

当当当,下班了,若自己需要扩展其他功能,请download源码后自己改造,其源码分层明确易懂,代码注释详细,代码关系层统一。就这个问题不得不鄙视下那些牛逼框架的源码,基本不给人看的那种,要看也得去一头的头皮屑。hi man,fuck。

MyHttp(GitHub地址:https://github.com/wenzhonghu/myhttp), pls star it

有问题或者建议邮,[email protected]

你可能感兴趣的:(戏说移动江湖--网络通信架构)