清除或者读写多机房缓存

    xiaoxiao2022-06-23  25

    清除或者读写多机房缓存

    遇到一个问题(多机房,每个机房的缓存在不同的memcache服务器组):

    1 我们有几个机房,每个机房的mc都不一样,我想提前给接口预热(在用户访问前加上缓存),前端肯定用到了负载均衡。如果我从后端机器上直接请求接口的话,只会落到某个机房的一台服务器上去。其他机房的数据不会变化 2 我不想读mc的配置,因为这个接口可能的实现里面本身需要去处理一些逻辑,读写几个mc的key,mc的key本书设计的不合理还内嵌在代码里面,比较繁琐。

    我们可以使用http协议的特性。当然不限于php,其他语言也可以这么干。

    我的流程:

    1 通过ip访问接口 http://192.168.1.12/api http://111.123.13.12/api 2 在头部加上你需要反问的接口的域名 Host:i.api.com

    具体的代码

    function get($url, array $get = array(), array $options = array()) { $defaults = array( CURLOPT_URL => $url . (strpos($url, '?') === FALSE ? '?' : '') . http_build_query($get, '', '&'), CURLOPT_TIMEOUT => 20, CURLOPT_CONNECTTIMEOUT => 15, CURLOPT_HEADER => 0, CURLOPT_RETURNTRANSFER => TRUE, ); $ch = curl_init(); curl_setopt_array($ch, ($options + $defaults)); $result = curl_exec($ch); curl_close($ch); return $result; } $id = trim($argv[1]); $cleanFunction = "api"; $params = array("page_id"=>$id); $res2 = get('192.168.1.12/'.$cleanFunction,$params,array(CURLOPT_HTTPHEADER => array('Host:i.api.com')) ); $res3 = get('111.123.13.12/'.$cleanFunction,$params,array(CURLOPT_HTTPHEADER => array('Host:i.api.com')) );

    原理:

    我的请求会先打到这台服务器,在根据host访问对应的虚拟主机

    虚拟主机

    是在网络服务器上划分出一定的磁盘空间供用户放置站点、应用组件等,提供必要的站点功能与数据存放、传输功能。

    虚拟主机的实现原理

    虚拟主机是用同一个WEB服务器,为不同域名网站提供服务的技术。Apache、Tomcat等均可通过配置实现这个功能。 相关的HTTP消息头:Host。 例如:Host: www.baidu.com 客户端发送HTTP请求的时候,会携带Host头,Host头记录的是客户端输入的域名。 这样服务器可以根据Host头确认客户要访问的是哪一个域名。

    推荐一篇关于http的文字写得很清晰http详解

    转载请注明原文地址: https://ju.6miu.com/read-1123158.html

    最新回复(0)