APP系统架构设计初探

一,图片体验的优化css

    在手机上显示图片,速度是一个很是重要的体验点,试想,若是您打开一个网站,发现里面的图片一直显示失败或者是x,稍微作得好一点的,多是一个不消失的loading或者是菊花等等,但无论如何, 没能快速的拉取和展现图片对用户体验是一个极大的挑战。那么,手机上的图片体验如何作呢?这里笔者有些小总结:前端

    1,减小图片的大小。在失真度和图片大小中作好折衷,尽可能利用工具减小图片的size,也能够考虑利用不一样的图片格式。缓存

    2,减小图片的请求数。能够考虑把多个图片利用相似css sprite的方式进行合并,这样能够加载一次便可;服务器

    3,考虑缓存。对图片在客户端进行必定的缓存,设置好缓存时长和更新机制;架构

    4,考虑使用cdn进行加载图片,作到就近接入访问;app

    5,解决DSN劫持的问题。在手机业务上的经验告诉咱们,极可能某些地区,某些运营商把咱们的域名封掉或者劫持了,这样,图片的域名解释出来的IP却不是咱们提供图片服务的IP,而且这种状况很难发现,  由于,若是运营商经过抽样随机劫持,就很难发现。异步


解决办法有几个思路:工具

     .去掉dns,改为直接访问IP的方式,但须要解决根据用户的ip获取最近图片服务的ip地址,实现上:这里cgi在吐出访问图片的地址的时候,获取用户的来源网关IP,调用IP地址库判断来源IP所属地和运营商,而后下发对应的图片部署接入IP, 客户端使用IP直连图片服务器,快速的访问资源。问题是,有实现成本,得业务本身去实现相似一个dns解释的逻辑 ,特别是图片放到cdn的话,这样改造就没法使用cdn带来的加速服务能力。性能

  

     .作好dns劫持的监控,实际上图片dns解释到的vip list确定是在咱们的一个白名单内,若是不是,则确定属于dns劫持,客户端能够在某个时候拉取一下咱们的viplist,做为监控和判断是否dns劫持的问题,若是dns的ip地址 不在白名单内,则替换使用白名单内的ip进行访问。优化

  

     .考虑备用域名的方式,即若是一个域名拉取不到,改用备用域名进行访问,固然若是备用域名也被劫持,那就不行了。



二,优化后台的架构

     后台返回越快,前端的体验就越好,所以,也须要对后台服务的调用链进行梳理,避免循环调用,快慢混杂等问题,基本的原则比较简单,都是一些设计方面的原则

   一、轻重分离。服务中把访问量大,须要速度快的服务和访问量小,但业务逻辑复杂的流程从代码实现和物理部署上进行完全分离,如用的接入cgi(甚至不一样的域名),不一样的后台server,不一样的集群进行隔离。

      若是放在一块儿,慢的会拖住快的,这就像木桶原理同样,最终的速度是由最慢的决定的,若是处理很差,可能致使整个服务堵塞不可用。


     二、考虑异步化。异步化相比同步的实现来讲稍微复杂一些,或者说须要作的工做可能多些,但异步化的好处也会很是明显,特别是须要高性能的业务流程。常见的异步化实现策略是借助mq做为各个系统的缓冲, 生产者进程或者子系统把消息写入mq便可当即返回,而消费者进程或者子系统则定时从mq读取消息继续处理,而且把处理的结果经过回调通知或者写入返回mq给到生产者查询。固然,若是生产者是不关注结果的,那 就更加简单了,丢到MQ后便可,这里的问题是整个mq是整个业务流程的关键,须要确保服务的高度可用和性能。


3.作好外部依赖的管理。一个业务流程可能每每要调用到外部的系统,而且这些系统可能不是大家团队维护的,若是该系统是非关键路径还好,若是是关键路径,那么作好对外部依赖的管理就显得更加剧要了,那么如何作好外部依赖的管理呢?

      这里有几个小的tips:

     . 对外部调用的服务单独进行封装,如设计单独的proxy去调用外部的服务,这样的好处是方便集中监控和容灾逻辑等处理,在设计上把外部因素进行物理隔离的第一步,后续若是外部系统的协议或者ip地址得发生变化,则能够只修改该模块便可 快速修复;

     . 严重建议对外部接口进行错误和超时的监控,一旦出问题,提早预警并快速解决,这里是有血的教训的,某业务和某平台提供者双方在纠结是谁的问题上吵得不可开交,不知道是谁的问题,业务说本身没问题,平台方说本身的服务也很快,若是 你可以拿出你的监控数据,接口超时设置是 1s, 超时的记录有n条,时间是ns,错误的记录有m条,主要错误类型是xxx,那对快速定位是很是有帮助的。

相关文章
相关标签/搜索