一,图片体验的优化

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

1,减少图片的大小。在失真度和图片大小中做好折衷,尽量利用工具减少图片的size,也可以考虑利用不同的图片格式。

2,减少图片的请求数。可以考虑把多个图片利用类似css sprite的方式进行合并,这样可以加载一次即可;

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

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

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进行访问。

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

二,优化后台的架构

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

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

如果放在一起,慢的会拖住快的,这就像木桶原理一样,最终的速度是由最慢的决定的,如果处理不好,可能导致整个服务堵塞不可用。

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

3.做好外部依赖的管理。一个业务流程可能往往要调用到外部的系统,并且这些系统可能不是你们团队维护的,如果该系统是非关键路径还好,如果是关键路径,那么做好对外部依赖的管理就显得更加重要了,那么如何做好外部依赖的管理呢?

这里有几个小的tips:

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

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

APP系统架构设计初探的更多相关文章

  1. Java生鲜电商平台-App系统架构开发与设计

    Java生鲜电商平台-App系统架构开发与设计 说明:阅读此文,你可以学习到以下的技术分享 1.Java生鲜电商平台-App架构设计经验谈:接口的设计2.Java生鲜电商平台-App架构设计经验谈:技 ...

  2. [转]Android App整体架构设计的思考

    1. 架构设计的目的 对程序进行架构设计的原因,归根到底是为了提高生产力.通过设计使程序模块化,做到模块内部的高聚合和模块之间的低耦合.这样做的好处是使得程序在开发的过程中,开发人员只需要专注于一点, ...

  3. PetShop的系统架构设计

    <解剖PetShop>系列 一.PetShop的系统架构设计 http://www.cnblogs.com/wayfarer/archive/2007/03/23/375382.html ...

  4. Android App的架构设计:从VM、MVC、MVP到MVVM

    随着Android应用开发规模的扩大,客户端业务逻辑也越来越复杂,已然不是简单的数据展示了.如同后端开发遇到瓶颈时采用的组件拆分思想,客户端也需要进行架构设计,拆分视图和数据,解除模块之间的耦合,提高 ...

  5. petshop4.0 具体解释之中的一个(系统架构设计)

    前言:PetShop是一个范例,微软用它来展示.Net企业系统开发的能力.业界有很多.Net与J2EE之争,很多数据是从微软的PetShop和Sun的PetStore而来.这样的争论不可避免带有浓厚的 ...

  6. NET ERP系统架构设计

    解析大型.NET ERP系统架构设计 Framework+ Application 设计模式 我对大型系统的理解,从数量上面来讲,源代码超过百万行以上,系统有超过300个以上的功能,从质量上来讲系统应 ...

  7. 基于Struts2,Spring4,Hibernate4框架的系统架构设计与示例系统实现

    笔者在大学中迷迷糊糊地度过了四年的光景,心中有那么一点目标,但总感觉找不到发力的方向. 在四年间,尝试写过代码结构糟糕,没有意义的课程设计,尝试捣鼓过Android开发,尝试探索过软件工程在实际开发中 ...

  8. Unity3D手游开发日记(2) - 技能系统架构设计

    我想把技能做的比较牛逼,所以项目一开始我就在思考,是否需要一个灵活自由的技能系统架构设计,传统的技能设计,做法都是填excel表,技能需要什么,都填表里,很死板,比如有的技能只需要1个特效,有的要10 ...

  9. 图数据库 Nebula Graph 的数据模型和系统架构设计

    Nebula Graph:一个开源的分布式图数据库.作为唯一能够存储万亿个带属性的节点和边的在线图数据库,Nebula Graph 不仅能够在高并发场景下满足毫秒级的低时延查询要求,而且能够提供极高的 ...

随机推荐

  1. python3 提示No module named _sqlite3

    yum install sqlite-devel 下载python3.6.3  重新编译安装 ./configure --enable-loadable-sqlite-extensions & ...

  2. 浏览器禁用cookie后php如何保持session会话-use_trans_sid机制

    原文:浏览器禁用cookie后php如何保持session会话-use_trans_sid机制 为防止浏览器禁用cookie导致服务器会话无法保持,php开发了一个机制,该机制开启后,浏览器发起请求后 ...

  3. Mac App Store应用签名和pkg签名(必须签名后才能销售)

    App签名 只有用苹果颁发的证书签名的应用才能在App Store上进行销售,所以我们开发的应用必须打上签名. 签名有两种方式,一是使用Xcode,在配置里面设置签名,编译出来的app就有了签名:二是 ...

  4. Android之Log封装

    blog原文地址:http://yuxingxin.com/2015/10/26/AndroidLog/ Github:https://github.com/fallblank/CodeEssay

  5. eclipse 插件编写(二)

    上篇文章简单写了下怎么新建一个eclipse插件工程,这次写一下怎么在上次的工程中添加几个菜单,如菜单栏菜单.工具栏菜单.右键菜单等. 创建一个完成的菜单需要了解三个扩展点,即menus.comman ...

  6. 2015元旦第一弹——WP8.1应用程序栏(C#后台代码编写)

    //第一次写博文,以后还请各位道友互相关照哈.废话不多说,直接进入正题. 相信大家对于如何在XAML添加应用程序栏应该很清楚,不清楚的话,可以打开新建个Pviot应用 就有系统自带的菜单栏. 本文主要 ...

  7. CSS3 Generator提供了13个CSS3较为常用的属性代码生成工具,而且可以通过这款工具除了在线生成效果代码之外,还可以实时看到你修改的效果,以及浏览器的兼容性。

    CSS3 Generator提供了13个CSS3较为常用的属性代码生成工具,而且可以通过这款工具除了在线生成效果代码之外,还可以实时看到你修改的效果,以及浏览器的兼容性. CSS3 Generator ...

  8. Http请求的响应没有Content-Length,只有Transfer-Encoding→chunked

    如题:Http请求的响应没有Content-Length,只有Transfer-Encoding→chunked.如图 原因猜测:如果请求的响应返回是某个对象,则不会显示Content-Length, ...

  9. 第五章 .net core该怎么玩

    项目目标部署环境:CentOS 7+ 项目技术点:.netcore2.0 + Autofac +webAPI + NHibernate5.1 + mysql5.6 + nginx 开源地址:https ...

  10. ASP.NET Core[源码分析篇] - 认证

    追本溯源,从使用开始 首先看一下我们的通常是如何使用微软自带的认证,一般在Startup里面配置我们所需的依赖认证服务,这里通过JWT的认证方式讲解 public void ConfigureServ ...