SPICE协议之ImageCache

来源:互联网 发布:网络名词233是什么意思 编辑:程序博客网 时间:2024/05/16 07:00

http://blog.csdn.net/haiq2006/article/details/50646563

SPICE协议的image cache本来是很简单的一个机制。首先驱动根据图片内容算出一个独特的ID,RedWorker在图形编码的时候拿这个ID查查看是否已经把这个图保存并发送给客户端了。如果存在这个ID,那后面就可以不用编码了,直接发送SPICE_IMAGE_TYPE_FROM_CACHE/LOSSLESS类型的图形,一个ID就解决了。如果ID不存在,再继续编码,通知客户端是否把这个图形保存到CACHE库中。

查找ID是否已经存在的算法使用带冲突链的HASH表。

算法中有个LRU链,命中的ID会挂到LRU最前面。CACHE库有一个大小限制,当CACHE库空间用完了,就把LRU链中最老的image移出CACHE。

本来这些算法很好懂,但是老版本的SPICE协议非要强调通用性,弄了个red_client_shared_cache.h文件来把算法抽象出来,其实整个文件就只有pixmap image cache在使用。这就是典型的过度设计,好在新版本中已经改过来了。

这里可以引申出两个广域网图形cache优化点。一个是模仿NX的算法在广域网进行加速,本质上就是把cache persist下来,扩大cache库尺寸并延长cache使用的时间。这个算法的特点是点对点的,比较安全。

另一个优化点就更为脑洞打开了,基于unique ID把图形存在memcached里,并通过CDN网络加速。编码的时候看看这个cache是否可以加速,如果可以加速就直接给一个URL让用户直接去最近的服务器加载。这么做有一个缺点就是数据安全,所以要用还得搞一套授权系统,规定这个image只能哪些人下载。这个算法的问题是编码实时性,memcached必须做到毫秒及响应,同时协议流量控制也要做好,否则会非常卡。



0 0
原创粉丝点击