文档介绍:淘客网站架构参考(本方案由开发者 roynal 提供) 做一个淘宝客网站所需要的 API , TOP 几乎没有任何权限限制, 唯一困扰各位淘客的应该就是流量了。以下详细讲解了四个案例,循序渐进,最终提供一个给各位淘客参考的网站架构,来解决这个流量超限的问题。本文仅针对淘宝客网站初学者参考,适合对淘宝客网站开发有一定了解的人。案例一:无缓存实时架构这是一个最简单的模型。用户在访问网站的时候,程序接受用户访问请求后直接通过 API 获取数据,再显示在网页上。优点: 数据的实时获取缺点: 1. 网站页面加载的速度慢 2. 网站访问量大的时候造成 API 次数超过限制,导致网站挂掉 3. 淘宝 API 服务器发生故障或维护,导致网站挂掉案例二: 文件缓存这个案例中以文件的形式作为缓存,通过 API 取到数据序列化后并将序列化之后的数据存入文件中,一般以 json 的方式存储,也有的 php 程序中采用数组来存储。优点: 淘宝 API 服务器发生故障或维护时,保证了网站的正常使用缺点: 1. 页面显示速度慢,主要是在用户访问页面的时候触发 API 请求的 2. 网站访问量大的时候造成 API 次数超过限制,导致网站挂掉案例三:使用 memcached 作为缓存这个方案中加入了缓存判断, 程序首先从 memcached 取缓存中的数据, 如果数据失效或者过期的话, 即没有命中,那么程序就通过 API 去请求数据,取到数据后更新缓存,同时返回数据。如果数据存在且在有效期内的话,那么将直接返回缓存中的数据,这比用文件缓存速度快得多。硬盘快不过内存就是这个道理。优点: 页面显示速度快,在 API 服务器正常的时候还能自动更新缓存数据缺点: 1. 缓存命中率的提高有难度,有过 mm 集群开发经验的同学应该感受到了 2. 网站访问量大的时候造成 API 次数超过限制网站挂掉 3. 服务器重启后缓存数据全部丢失(单机的情况下) 案例四:缓存+ 持久层结合架构在案例三的基础上引入一个持久存储层 MySQL ,这样子可以避免重启,淘宝 API 服务器异常的情况。优点: 有持久层存储,数据不丢失。服务器重启,淘宝 API 服务器维护等各种伤不起都是浮云。缺点: 1. 用不多久,你会看着数据库中那高达几十 GB 的表而疯掉 2. 网站访问量大的时候造成 API 次数超过限制,导致网站挂掉 3. 数据迅速递增,查询相当缓慢综合上面几个典型的案例,我们不难看出淘宝客网站在架构方面或多或少存在的问题: 1. 数据实时性问题 2. 读取数据的速度问题(网站页面显示速度) 3. 缓存失效问题 4. API 次数超过限制问题在以上 4 个问题中,尤其以 API 次数超过限制问题为主,如何解决呢?看下图架构: 该架构中,引入开源 nosql 产品 redis 。在数据每秒都发生变化的时候,关系性数据库 mysql 等扛不住递增的海量新数据,而 redis 等可以,为什么? Key! 大多的时候我们不用缓存淘宝的所有数据,一个好的 key 设计比什么都强。在大多数应用中可以使用提交的参数 md5 的值为 key 。获取 key 的方法详解: 如调用 接口, 所有入参有 method= , session=xxx , timestamp=