在新版本的发布日,准备试用新ubuntu的小伙伴们,从他们那里,我们可以获取高达8000次/秒的下载请求!事实上,去年十月ubuntu13.10发布当天,在很长一段时间里,ubuntu.com官网在多次下载高峰,保持了良好的状态而没有崩溃,这要归功于付出巨大努力的“基建设施团队”。 Ubuntu.com一直运行在Drupal(官网浏览)上,如今我们已经逐渐将它转移到了定制更多的Django基础系统上。今年三月,为了Trusty Tahr的发布,我们及时开始了将网站关键的#下载部分#进行了迁移的工作。这成为了,为寻找缓减服务器压力方法,而得到的一个极佳的机会! 选择合适的镜像下载源(geolocated)对于网站应用来说是一件艰辛的工作 当有人从ubuntu.com页面(在一个感谢页哦)请求下载ubuntu的时候,事实上,ubuntu.com向其发送了大概300个左右的离他最近的镜像地址。 为了给用户选择一个合适的镜像下载源,它不得不做下面这样的事: 1. 确定客户端IP地址所显示的,用户所在的国家 2. 获取所在国家存在的可用镜像源列表 3. 随机为他们匹配能符合高带宽下载的镜像源 这个过程是目前整个网站中最密集的工作,而这却并不是因为这些任务本身是特别复杂的,只是因为这需要为每一个8000次/秒的潜在用户,在激烈下载的时候,预防网站因高强度请求可能导致崩溃时,而必须要做的! 为了能够有效应对网站的负载,我们为此需要使用超过40个虚拟机来均衡负载。 客户端真的什么都能做吗? 我们首先要做的就是,将完整的镜像列表加载到“感谢下载页”,并且调用用户浏览器中JS来选择出合适的镜像!这将大大减少对网站应用的负载压力,这是因为下载页面将像其他页面一样被有效的静态缓存! 为了能够可靠的获取用户所在的地理位置,唯一的办法就是通过客户端使用其中的地理定位API,这一功能,85%的用户浏览器都是支持的!另一个小问题是,只有用户给出一个下载请求的许可,才可以获得一个分配的镜像下载,可能浙江稍微对他们的体验造成一定的影响! 这个解决方案对用户的使用来说稍许有些不便利,因此,我们找到了新的“trade-off”: 融合解决方案——“Apache geolocation” Apache的mod_geoip2可以应用基于用户位置的服务器规则,而这要比网站应用层的地理定位要快的多!这就意味着,我们可以使用Apache向用户发送其特定国家的下载页(比如德国的下载页面),通过在URL后添加&country=GB来实现! 这些特定下载页包含了所在国家的可用下载的镜像源列表,现在它们没一个都可以被缓存到本地,这样就极大的缓减了服务器的压力。客户端通过JS随机选择镜像给用户(这样每一个镜像的下载源都应该是最合适的),随后启动下载,而此处却不需要客户端的地理定位! 很高兴,这个解决方案在Trusty Tahr发布前被成功实施了! ——(此文章同时被发表在了robinwinslow.co.uk)
|