高磊
微软架构专家
读完需要
12
分钟速读仅需 4 分钟
高磊,一线架构师,具有多年架构和研发经验;曾就职于阿里、华为等公司,专注于云计算、微服务体系等领域。
1
无线缓存的定义、限制条件及影响
本章仅讨论运行在移动设备上的 App 所涉及的缓存。移动端缓存的作用是使 App 尽量少地通过网络通信访问应用服务器,以降低网络及服务器的负载,同时提高移动端的性能。
但是,由于移动端应用的宿主是移动设备,移动设备是属于内存受限型的,无法水平扩展,所以它不可能像服务器那样创造出分布式缓存一类的缓存类型,所以它无法缓存那么多内容,即使有缓存的内容,也不可能被存放太久(需要让出空间给其他需要缓存的内容)。移动端应用的缓存被禁锢在本机上,好处是其实现的复杂度大大小于在服务器上进行缓存。此外,移动设备处于整个系统的前端,其缓存体现出了前端缓存应该有的特点,它不仅仅缓存服务器返回的数据,还要缓存提交的请求及响应内容,或缓存类似图片这样的资源。
2
无线缓存要从全局考虑
2.1
服务器架构对无线缓存的影响
无论移动端与服务端通信的协议如何,移动端的网络层必须能够屏蔽其协议上的差异并能够将数据转换为统一的格式,这样做不仅简化了移动端的实现复杂性,更重要的是隔离了对缓存的影响,使缓存不必关心协议及数据格式的差异,比如网络层把数据全部转换成 Java 对象,这样缓存只需要保存 Java 对象即可,如图 19.1 所示。
图 19.1
但是我们要警惕服务器对移动端缓存的侵入。因为缓存组件缓存的是服务器上的内容, 一旦服务器发生变更就必须要有一种机制可以通知移动端对应的缓存项失效,否则会有数据不一致等情况发生。比如移动端上首页展示的商品价格在服务端有变动,如果不使原价格失效,那么极有可能使用户按原来的价格进行交易。另外,本地也有一些辅助的失效策略,比如超时、LRU 及主体相关性缓存失效策略等。
2.2
无线缓存对服务器架构的影响
服务器通知移动端缓存失效的办法一般是通知系统分离失效事件和失效推送,这是因为在移动端数量巨大的情况下,失效通知的发布是一项体量巨大的工作,不可能由应用服务器自己承担,所以应用服务器只是激发一个失效事件,将事件传递给一个有能力推动给移动端的大规模分布式系统,并由它负责推送给各个移动端,
图 19.2
如图 19.2 所示。在服务器集群中一般会部署无线网关服务,移动端的所有业务都将与其通信,要使移动端能够找到它,就需要网关的定位提供一种机制,在网络上提供一个给移动端访问的网关注册管理中心,为移动端提供透明化的位置服务和名字服务,移动端只需要知道服务名称而不需要知道具体的 IP 地址,当服务器上的服务迁移或者变更时也不会影响移动端对服务的可访问性。服务器要确保访问它的是合法的移动端(是自己组织开发的 App 或者经过自己组织认证可以接入的