91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP擴展Memcache分布式部署方法

發布時間:2021-09-01 21:20:59 來源:億速云 閱讀:129 作者:chen 欄目:開發技術

這篇文章主要介紹“PHP擴展Memcache分布式部署方法”,在日常操作中,相信很多人在PHP擴展Memcache分布式部署方法問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”PHP擴展Memcache分布式部署方法”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

基礎環境

其實基于PHP擴展的Memcache客戶端實際上早已經實現,而且非常穩定。先解釋一些名詞,Memcache是danga.com的一個開源項目,可以類比于MySQL這樣的服務,而PHP擴展的Memcache實際上是連接Memcache的方式。

首先,進行Memcache被安裝具體可查看博客里的其它幾篇文章;
其次,進行PHP擴展的安裝,官方地址是http://pecl.php.net/package/memcache
最后,啟動Memcache服務,比如這樣,通過不同端口啟動多個進程模擬分布式:

復制代碼 代碼如下:

/usr/local/bin/memcached -d -p 11211 -u root -m 10 -c 1024 -t 8 -P /tmp/memcached.pid
/usr/local/bin/memcached -d -p 11213 -u root -m 10 -c 1024 -t 8 -P /tmp/memcached.pid
/usr/local/bin/memcached -d -p 11214 -u root -m 10 -c 1024 -t 8 -P /tmp/memcached.pid


啟動三個只使用10M內存以方便測試。

參數說明:

-d選項是啟動一個守護進程,
-m 是分配給Memcache使用的內存數量,單位是MB,我這里是512MB,
-u是運行Memcache的用戶,我這里是root,
-l 是監聽的服務器IP地址,如果有多個地址的話,我這里指定了服務器的IP地址192.168.0.1,
-p是設置Memcache監聽的端口,我 這里設置了11211,最好是1024以上的端口,
-c選項是最大運行的并發連接數,默認是1024,我這里設置了512,按照你服務器的負載量 來設定,
-P是設置保存Memcache的pid文件,我這里是保存

分布式部署

PHP的PECL擴展中的memcache實際上在2.0.0的版本中就已經實現多服務器支持,現在都已經2.2.5了。請看如下代碼

$memcache = new Memcache;
$memcache->addServer('localhost', 11211);
$memcache->addServer('localhost', 11213);
$memcache->addServer('localhost', 11214);
$memStats = $memcache->getExtendedStats();
print_r($memStats);

通過上例就已經實現Memcache的分布式部署,是不是非常簡單。

分布式系統的良性運行

在Memcache的實際使用中,遇到的最嚴重的問題,就是在增減服務器的時候,會導致大范圍的緩存丟失,從而可能會引導數據庫的性能瓶頸。測試時可以通過關閉一個memcached進程,來測試數據是否存在,實例:

<?php
//第一次設置值后再作注釋

$memcache = new Memcache;
$memcache->addServer('localhost', 11211);

//$memcache->set("mykey", "這個值在11213添加前添加的");

$memcache->addServer('localhost', 11213);

if (!$memcache) echo "Connection to memcached failed";
  /*
  $memcache->set("str_key", "String to store in memcached");
  $memcache->set("num_key", 123);

  $object = new StdClass;
  $object->attribute = 'test';
  $memcache->set("obj_key", $object);

  $array = Array('assoc'=>123, 345, 567);
  $memcache->set("arr_key", $array);
  */

  var_dump($memcache->get('mykey'));
  var_dump($memcache->get('str_key'));
  var_dump($memcache->get('num_key'));
  var_dump($memcache->get('obj_key'));

$memStats = $memcache->getExtendedStats();
var_dump($memStats);
?>

測試時關閉其中一臺,可能會導致數據丟失:

string '這個值在11213添加前添加的' (length=35)
string 'String to store in memcached' (length=28)
boolean false
boolean false

為了避免出現這種情況,請先看Consistent hashing算法,中文的介紹可以參考memcached全面剖析--4. memcached的分布式算法,通過存取時選定服務器算法的改變,來實現。

memcached雖然稱為“分布式”緩存服務器,但服務器端并沒有“分布式”功能。

修改PHP的Memcache擴展memcache.c的源代碼中的

"memcache.hash_strategy" = standard

"memcache.hash_strategy" = consistent
重新編譯,這時候就是使用Consistent hashing算法來尋找服務器存取數據了。
有效測試數據表明,使用Consistent hashing可以極大的改善增刪Memcache時緩存大范圍丟失的情況。

NonConsistentHash: 92% of lookups changed after adding a target to the existing 10
NonConsistentHash: 90% of lookups changed after removing 1 of 10 targets
ConsistentHash: 6% of lookups changed after adding a target to the existing 10
ConsistentHash: 9% of lookups changed after removing 1 of 10 targets

安全配置

Memcache服務器端都是直接通過客戶端連接后直接操作,沒有任何的驗證過程,這樣如果服務器是直接暴露在互聯網上的話是比較危險,輕則數據泄露被其他無關人員查看,重則服務器被入侵,因為Mecache是以root權限運行的,況且里面可能存在一些我們未知的bug或者是緩沖區溢出的情況,這些都是我們未知的,所以危險性是可以預見的。

內網訪問

最好把兩臺服務器之間的訪問是內網形態的,一般是Web服務器跟Memcache服務器之間。普遍的服務器都是有兩塊網卡,一塊指向互聯網,一塊指向內網,那么就讓Web服務器通過內網的網卡來訪問Memcache服務器,我們Memcache的服務器上啟動的時候就監聽內網的IP地址和端口,內網間的訪問能夠有效阻止其他非法的訪問。

復制代碼 代碼如下:

# memcached -d -m 1024 -u root -l 192.168.0.200 -p 11211 -c 1024 -P /tmp/memcached.pid


Memcache服務器端設置監聽通過內網的192.168.0.200的ip的11211端口,占用1024MB內存,并且允許最大1024個并發連接

設置防火墻

防火墻是簡單有效的方式,如果卻是兩臺服務器都是掛在網的,并且需要通過外網IP來訪問Memcache的話,那么可以考慮使用防火墻或者代理程序來過濾非法訪問。 一般我們在Linux下可以使用iptables或者FreeBSD下的ipfw來指定一些規則防止一些非法的訪問,比如我們可以設置只允許我們的Web服務器來訪問我們Memcache服務器,同時阻止其他的訪問。

# iptables -F
# iptables -P INPUT DROP
# iptables -A INPUT -p tcp -s 192.168.0.2 --dport 11211 -j ACCEPT
# iptables -A INPUT -p udp -s 192.168.0.2 --dport 11211 -j ACCEPT


上面的iptables規則就是只允許192.168.0.2這臺Web服務器對Memcache服務器的訪問,能夠有效的阻止一些非法訪問,相應的也可以增加一些其他的規則來加強安全性,這個可以根據自己的需要來做。

到此,關于“PHP擴展Memcache分布式部署方法”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

辽宁省| 哈密市| 视频| 肇州县| 菏泽市| 云霄县| 大田县| 抚顺县| 什邡市| 敖汉旗| 定日县| 饶阳县| 丰城市| 平罗县| 克东县| 遂平县| 嘉鱼县| 南雄市| 许昌县| 太康县| 平顶山市| 云梦县| 滕州市| 竹溪县| 襄城县| 滦平县| 宝清县| 孟村| 萨嘎县| 焦作市| 辽中县| 正定县| 东兴市| 诏安县| 加查县| 启东市| 聂拉木县| 上蔡县| 桐梓县| 定南县| 江津市|