當前位置:首頁 » 操作系統 » memcached源碼安裝

memcached源碼安裝

發布時間: 2023-06-03 12:36:14

A. 黑馬程序員linux運維培訓怎麼樣

1、什麼是運維工程師?

運維工程師,伺服器與系統安全穩定的掌舵者!當一個產品(如Web網站、APP軟體、網路游戲等)正式上線後,產品、開發、測試類的工作就正式結束了,接下來的維護和管理工作就會全部移交給運維工程師。

運維工程師的主要工作職責就是負責伺服器的架構設計以及雲計算平台管理,保障軟體的穩定運行。沒有開發以及測試類工作復雜且工作解決方案相對固定。更重要的是沒有年齡以及學歷的限制,隨著工作年限和工作經驗地增長,也會越老越吃香。

2、運維工程師工作場景

運維學科2019全年所有班級就業率93.5%,平均薪資8.7k起,最高薪資25k* 14薪

三、運維課程

1、第一階段:Linux運維基礎功

運維基礎:運維發展史、計算機概述、計算機組成、操作系統學完此階段可掌握的核心能力:熟練掌握Linux操作系統的安裝(CentOS7.6)、配置、基礎命令、VIM編輯器、用戶管理、許可權管理、自有服務、進程檢測與控制、阿里雲平台管理、開源CMS項目上線部署實戰。

Linux操作系統:Linux系統概述、虛擬機、CentOS7.6系統安裝,Linux基礎命令

Linux下文件管理(上):文件命名規則、目錄管理、文件管理、文件復制與剪切、重命名、Linux文件打包與壓縮、文件處理命令

Linux下文件管理(下):VIM編輯器介紹、VI與VIM的區別、VIM安裝與配置、四種工作模式(命令模式,編輯模式,末行模式,可視化模式)、相關VIM指令、VIM擴展功能、VIM總結

Linux下用戶管理:用戶和組的相關概念、用戶組管理、用戶管理、用戶密碼設置、切換用戶、Linux用戶管理實戰

Linux下許可權管理:許可權的基本概念、許可權在生產環境中的作用、Linux許可權類別(rwx)、Linux文件所有者類別(ugo)、普通許可權設置(字母+數字)、文件屬主與屬組設置、高級許可權、ACL許可權控制、umask

Linux下自有服務+軟體包管理:自由服務概述、systemctl管理服務命令、ntp時間同步服務、firewalld防火牆、crond計劃任務、設備掛載與解掛、rpm包管理工具

Linux進程檢測與控制:進程與程序的概念、進程管理命令(top命令,free命令,df命令,ps命令,netstat命令,kill命令與killall命令)、進程優先順序設置

阿里雲平台管理與開發CMS項目上線部署實戰:雲計算平台概述、阿里雲平台注冊、登錄與管理、項目背景、LAMP環境概述、YUM指令、LAMP環境搭建、開源CMS項目上線部署實戰

學完此階段可解決的現實問題:能夠根據企業實際項目需求實現伺服器部署與架構。

學完此階段可擁有的市場價值:熟練掌握之後,可以滿足市場對初級運維工程師的需求,但是市場就業工資相對較低,還是建議繼續學習就業班課程。

2、第二階段:Linux系統服務篇

Linux高級指令:基礎命令回顧、find命令之高級搜索、tree命令、scp文件上傳與下載、計劃任務crontab + tar實現定時備份、用戶管理高級、文件許可權管理高級

Linux下軟體包管理:軟體包管理任務背景、Linux下軟體包概述、RPM包管理工具、YUM包管理工具、YUM源配置(公網YUM源,本地YUM源、自建YUM源倉庫)、源碼安裝概述、源碼安裝三步走、源碼安裝實戰

Linux遠程管理服務SSH:SSH任務背景、SSH服務概述,yum源配置,SSH服務安裝與配置實戰,公私鑰概念,SSH免密碼登錄

Linux數據同步RSYNC:RSYNC任務背景、RSYNC介紹、RSYNC基本語法、本機同步與遠程同步、把RSYNC作為系統服務、RSYNC結合INOTIFY實現實時同步、RSYNC託管XINETD

Linux下文件共享服務ftp、NFS、SAMBA:文件共享任務背景、FTP服務介紹、FTP工作模式(主動模式+被動模式)、FTP服務搭建、客戶端工具(ftp、lftp使用)、FTP訪問控制、NFS服務介紹、NFS服務搭建、配置文件詳解、NFS任務背景及解決方案、SAMBA服務介紹、SAMBA服務搭建、配置文件詳解、文件共享服務總結

DNS域名管理服務:DNS服務介紹、DNS的作用、DNS服務搭建、正向解析、反向解析、多域搭建、NTP時間伺服器、主從DNS架構

源碼構建LAMP環境及部署業務應用:LAMP任務背景、Web伺服器環境准備、軟體編譯回顧、編譯安裝Mysql、編譯安裝Apache、編譯安裝php、後期配置、Web應用系統部署實戰

Linux下日誌管理服務RSYSLOG:日誌管理任務背景、查看日誌、日誌管理服務(RSYSLOG概述,日誌列表,日誌級別,相關符號,配置文件)、RSYSLOG本地日誌管理、RSYSLOG遠程日誌管理、日誌管理應用實踐

Linux 磁碟管理:磁碟管理任務背景、磁碟管理概述、fdisk命令詳解、Linux分區概述、Linux分區實戰、邏輯卷介紹、邏輯卷基本概念(PV、VG、PE、LV)、邏輯卷LVM應用操作實戰、RAID介紹、RAID常見級別、軟硬RAID、軟RAID應用實踐

Shell腳本編程Shell概述、變數、Shell流程式控制制、Shell數組、Shell函數、Shell特殊用法、正則表達式、Shell編程實戰

資料庫DBA:MySQL概述,MySQL5.7安裝,MySQL配置,MySQL基本操作、SQL語句詳解、MySQL索引、MySQL備份與還原、MySQL主從復制、MHA高可用架構、MySQL企業級應用實戰

學完此階段課掌握的核心能力:

1、了解Linux系統運行原理,實現Linux伺服器的維護與管理;

2、了解Linux系統相關服務,能根據企業需求實現企業運維工作。

學完此階段可解決的現實問題:能實現企業Linux伺服器的日常維護與管理,搭建SSH、文件共享、DNS、Apache等服務、能獨立完成系統日誌分析、Shell腳本編程、資料庫DBA等相關工作。

學完此階段可擁有的市場價值:熟練學習和掌握後,可滿足企業運維的初中級需求。

3、第三階段:千萬級商城系統架構設計

源碼構建企業級LNMP架構及電商系統上線部署:千萬級商城系統架構設計任務背景、Web項目開發流程、Linux伺服器環境准備、LNMP環境概述、MySQL資料庫服務搭建、Nginx軟體服務搭建、PHP軟體服務搭建、Web商城項目部署上線

大型WEB服務軟體Nginx部署介紹使用:Nginx軟體概述、Nginx平滑升級、nginx.conf配置文件詳解、虛擬主機配置、Nginx默認官方模塊詳解(GZIP壓縮,客戶端緩存,反向代理,基於IP/用戶的訪問控制,目錄顯示)、日誌管理、日誌輪轉、第三方日誌管理軟體GoAccess、Location區塊、URL重寫、第三方模塊安裝與配置、Nginx安全管理、Nginx其他衍生版本(Tengine,OpenResty)

WEB高可用集群架構設計及實現(keepalived):WEB高可用集群架構設計任務背景、單點資料庫遷移、HA高可用集群概述、Keepalived軟體介紹、Keepalived組成和原理、VRRP協議、安裝與配置Keepalived、Nginx服務高可用實踐、Keepalived擴展內容(非搶占模式、VIP腦裂、單播模式)

WEB負載均衡伺服器集群架構設計及實現LB(Nginx/LVS/HAProxy):WEB負載均衡伺服器集群架構設計任務背景、為什麼需要LB負載均衡技術、LB負載均衡架構圖、負載均衡分類、常見負載均衡實現方式、LB負載均衡環境准備、Nginx負載均衡實現、負載均衡演算法、Session共享解決方案、高可用負載實踐; LVS概述、LVS工作原理、LVS核心組件、LVS三種工作模式(NAT模式、DR模式、TUN隧道模式)、LVS/NAT原理和特點、LVS/DR原理和特點、LVS/TUN原理和特點、LVS的十種調度演算法、LVS/NAT模式部署實踐、LVS/DR模式部署實踐; HAProxy概述、HAProxy安裝與部署、haproxy.cfg配置文件詳解、常見問題分析、HAProxy調度演算法、HAProxy負載均衡應用實踐

MyCAT讀寫分離:MySQL讀寫分離任務背景、讀寫分離的目的、讀寫分離常見的實現方式、搭建M-S主從復制、代碼實現讀寫分離、MyCAT實現讀寫分離實戰(JDK配置、MyCAT配置文件詳解、讀寫分離實踐、高可用實踐、分庫分表、MyCAT企業級案例實踐)

非關系型資料庫NoSQL(Memcache/Redis/MongoDB):非關系型資料庫任務背景、Web項目訪問流程、優化方案、緩存技術引入、memcached介紹、memcached安裝與部署、telnet客戶端使用、memcached指令詳解、memcached tools工具使用、LRU失效機制、PHP memcached擴展安裝、Session入memcached、緩存項目的熱點數據; Redis介紹、Redis應用場景、Redis源碼安裝、客戶端工具使用、Redis數據結構詳解、數據持久化操作(快照+AOF)、企業級案例(主從,安全限制,PHP Redis擴展,Session入Redis);MongoDB任務背景、MongoDB安裝和配置、數據結構類型操作CURD、MongoDB安全設置、PHP擴展、桌面管理軟體、企業級日誌統計實踐

JAVA項目架構設計實戰(LNTM架構):Java項目任務背景、Tomcat概述、Tomcat安裝與部署、Tomcat企業級管理、Host虛擬主機配置、Server Status伺服器狀態、應用管理、Nginx動靜分離、Nginx+Tomcat負載均衡、Maven概述、Maven項目打包、Maven項目部署

存儲(NAS/SAN/GlusterFS/Ceph):存儲概述、Linux存儲分層、存儲的分類(DAS,NAS,SAN)、存儲類型的分類(文件存儲、塊存儲、對象存儲)、SAN的分類、IP-SAN之iscsi實現; 分布式存儲、Glusterfs介紹、raid級別回顧、常見卷的模式、Glusterfs集群、環境准備、集群部署、創建glusterfs存儲卷、客戶端使用、卷的刪除、常見卷類型(stripe模式、distributed模式、distributed-replica模式、dispersed模式、distributed-dispersed模式)、其它卷類型、glusterfs分部署存儲應用實戰; 認識Ceph、Ceph架構原理圖、Ceph集群、Ceph集群組件、Ceph集群環境准備、Ceph集群部署實踐、RADOS原生數據存取、Ceph文件存儲、Ceph塊存儲、Ceph對象存儲、Ceph對象存儲+owncloud打造雲盤系統、Ceph Dashboard(拓展)

配置自動化(Ansible/SaltStack):自動化運維任務背景、認識ansible、ansible安裝與配置、伺服器分組、ansible模塊(hostname模塊,file模塊,模塊,yum模塊,service模塊,command和shell模塊,scriYAML格式pt模塊)、playbook介紹、playbook實例、playbook編排應用、roles介紹、roles的目錄結構、roles應用案例; saltstack介紹、saltstack安裝與配置、saltstack遠程執行命令、grains、pillar、配置管理文件、配置管理目錄、配置管理命令、配置管理計劃任務、其他命令、salt-ssh使用

企業級監控平台(Zabbix/Prometheus):企業級監控任務背景、監控的目的、主流的開源監控平台、Zabbix概述、Zabbix伺服器安裝、Zabbix監控本機與遠程主機、模板、監控項與應用集、圖形、觸發器、報警、Zabbix代理、主動監控與被動監控、Zabbix應用部署實戰; 認識Prometheus、Prometheus原理架構圖、Prometheus監控安裝部署、Prometheus監控遠程主機、遠程MySQL、Grafana介紹、Grafana安裝與登錄、Prometheus結合Grafana實現Linux系統監控、CPU監控、MySQL監控等等、Grafana報警系統實踐

企業級日誌分析(ELK/Kafka):ELK任務背景、ELK概述、elasticsearch部署、elasticsearch基礎概念、elaticsearch基礎API操作、ES查詢語句、elasticsearch-head、logstash簡介、logstash部署、日誌採集、採集messages日誌、採集多日誌源、kibana介紹、kibana部署、kibana漢化、通過kibana查看集群信息、通過kibana查看logstash收集的日誌索引、通過kibana做可視化圖形、filebeat介紹、filebeat收集日誌、filebeat傳輸給logstash、filebeat收集nginx日誌、filebeat日誌過濾

CI/CD(Git、Gitlab、Jenkins):CI/CD任務背景、版本控制概念、Git安裝、Git身份設置、Git創建本地倉庫、Git暫存區、Git版本控制、Git分支管理、擴展:Windows版Git; Github概述、GitHub注冊、創建項目、遠程倉庫、免密push、分支、多人協作; GitLab介紹、GitLab下載、安裝與配置、GitLab配置、倉庫管理、持續集成(CI)、持續交付(CD)、藍綠部署、滾動更新、灰度發布

運維安全(SSL與CA認證/防火牆/ VPN/JumpServer與Teleport跳板機):運維安全任務背景、運維安全概述、硬碟分區加密(擴展)、對稱加密、非對稱加密、數字簽名、SSL與CA認證、SSL介紹、CA認證介紹、https應用實踐; 防火牆概述、iptables的應用、iptables防火牆結構、iptables基本語法、iptables四表五鏈、企業級防火牆規則設置、firewalld包過濾、firewalld與iptables的區別、firewalld防火牆規則設置、firewall-config圖形模式; VPN任務背景、隧道介紹、net-to-net隧道通訊、VPN介紹、IPSec協議、libreswan實現net-to-netVPN、三網路VPN互聯、roadwarrior VPN(libreswan實現點對網VPN,openvpn實現點對網vpn,使用pptpd實現VPN),PAM認證,LDAP,開源堡壘機jumpserver,輕量級開源堡壘機teleport(拓展)

學完此階段可掌握的核心能力:

1、 具備Linux伺服器架構設計能力,保證應用架構合理可控;

2、具備監控檢查系統軟硬體運行狀態,保證系統安全穩定運行的能力;

3、具備CI/CD持續集成/持續支付能力;

4、具備配置自動化以及日誌分析能力;

5、具備解決復雜問題和技術難點的能力。

學完此階段可解決的現實問題:

1、掌握Java、PHP伺服器架構能力;

2、能夠獨立搭建企業級高可用伺服器(集群、高可用、負載均衡、緩存、存儲);

3、掌握阿里雲/華為雲產品實戰;

4、能使用Zabbix/Prometheus搭建企業級監控;

5、能夠熟練掌握CI/CD持續集成/持續支付工具;

6、能夠使用Ansible/SaltStack實現運維自動化;

7、能使用ELK實現企業級日誌分析;

8、能夠掌握常見運維安全防護手段。

學完此階段可擁有的市場價值:熟練掌握和學習後,可滿足Linux運維行業中高級需求。

4、第四階段:Linux雲計算運維

KVM虛擬化:KVM任務背景、計算機工作原理、虛擬化概述與分類、KVM環境准備、KVM安裝、使用KVM安裝虛擬機、KVM基礎管理命令、KVM配置文件、KVM克隆、KVM網路管理、快照、設備管理、存儲池管理、磁碟鏡像管理、虛擬機快速創建腳本

公有雲運維(阿里雲[ECS/RDS/SLB/CDN/OSS/NFS]):公有雲任務背景、阿里雲概述、VPC專有網路、阿里雲安全組、雲伺服器ECS、自定義鏡像、阿里雲SLB、阿里雲RDS、阿里雲存儲(NAS與OSS)、CDN、域名與域名解析、SSL證書、數據傳輸DTS、雲監控、DDOS高防、容器服務、公有雲企業級案例應用實踐

私有雲運維之OpenStack平台:私有雲任務背景、OpenStack概述、OpenStack組件及其作用(Compute 計算服務、Networking 網路服務、Object Storage 對象存儲、Block Storage 塊存儲服務、Identity 身份認證、Image Service 鏡像服務、Dashboard UI頁面、Metering 測量服務、Orchestration 編排部署、Database Service 雲資料庫)、OpenStack自動部署、OpenStack手工部署、OpenStack雲平台應用實踐

Docker容器技術:Docker容器技術任務背景、PAAS平台介紹、認識容器、Docker介紹、Docker內核技術(NameSpace,Control Group,LXC與docker區別)、Docker環境准備、Docker軟體安裝、Docker Daemon管理、鏡像、容器、倉庫、Docker存儲驅動、Docker應用實踐、Dockerfile概述、使用Dockerfile構建鏡像、單宿主機容器互聯方式、Docker網路、Docker的Web管理平台、Docker三劍客(Docker machine、Docker compose、Docker swarm)、Docker容器應用部署實踐

Kubernetes(K8S)容器編排工具:Kubernetes(K8S)容器編排任務背景、認識容器編排、Kubernetes概述、Kubernetes架構、集群部署方式、Kubeadm部署Kubernetes集群、集群與節點信息、節點標簽、namespace命名空間、工作負載(workloads)、pod概述、pod分類、pod的YAML格式、pod資源限制、pod調度、pod生命周期、pod控制器、service、ingress controller、kubernetes存儲卷、ceph集群部署、ConfigMap、Secret、PV與PVC、API網關 kong、包管理方案 helm2、存儲解決方案 GlusterFS、服務網格 istio、監控解決方案 heapster、應用實踐 gitlab-ce、應用實踐 jenkins、應用實踐 kafka、應用實踐 zookeeper應用實踐 配置中心Apollo

綜合案例:Docker+K8S企業級項目應用實踐

學完此階段可掌握的核心能力:

1、熟練掌握虛擬化技術;

2、掌握公有雲與私有雲架構實戰;

3、熟練使用容器與容器編排工具;

4、熟練掌握企業級雲計算技術應用實踐。

學完此階段可解決的現實問題:

1、能夠使用KVM實現虛擬化;

2、能夠掌握公有雲與私有雲伺服器架構實戰;

3、能夠熟練使用Docker容器;

4、能夠熟練使用Kubernetes(K8S)容器編排工具;

5、能夠熟練掌握Docker+Kubernetes(K8S)項目架構設計

學完此階段可擁有的市場價值:熟練掌握和學習後,可滿足Linux雲計算架構工程師的高級需求。

5、第五階段:python CMDB運維開發(DevOps)

HTML5:HTML簡介、HTML標簽詳解、字元編碼的奧秘、HTML5新特性與常用標簽

CSS3:CSS簡介、CSS的引入方式、CSS基本選擇器、CSS屬性、盒子模型、CSS浮動、CSS3新特性與常用屬性、CSS應用案例

Bootstrap:Bootstrap環境搭建、全局樣式、網頁排版、表單、圖片及輔助類、網頁布局、Bootstrap組件、CMDB後檯布局實戰

JavaScript/Ajax/jQuery:JavaScript簡介、Javascipt語法基礎、BOM模型、DOM模型、Ajax概述、Ajax中的get與post請求、Ajax案例、jQuery框架概述、jQuery選擇器、jQuery事件、jQuery與Ajax、JavaScript應用實踐

Python基礎:Python概述、Python環境部署、變數、標識符和關鍵字、輸入和輸出、數據類型轉換、條件控制語句和循環語句、容器類型、函數、文件操作

Python高級:面向對象、異常處理、模塊和包、Python與MySQL應用實踐

Django框架:Django框架介紹、Django模型、ORM及資料庫操作、視圖及模板、Django中間件

綜合項目:Python+Django實現CMDB企業自動化運維平台

學完此階段可掌握的核心能力:

1、掌握Web前端開發相關技術如HTML5/CSS3/JavaScript;

2、掌握Python運維相關模塊;

3、掌握Python Django框架;

4、具備一定的Python運維開發能力。

學完此階段可解決的現實問題:

1、具備一定的編程思維,為未來系統架構師鋪路搭橋;

2、能夠熟練掌握Python運維相關模塊實現運維管理;

3、能夠使用Python+Django開發企業自動化運維平台。

學完此階段可擁有的市場價值:熟練掌握和學習後,可滿足Linux運維行業的高級需求。

B. php 怎麼配置memcached

分為linux和windows系統下:

windows下:

1、首先下載memcache的windows版本,將下載下來的文件解壓出來後會看見一個名為memcached.exe的可執行程序

2、將該文件放到指定目錄,如D盤

3、安裝:

開始->運行->cmd打開命令窗口

進入D盤:cd d:

安裝memcache服務:

在命令窗口輸入:

memacahed.exe -d install

等待命令執行完成後,就可以在服務列表中看到memcached服務

4、啟動memcache服務:

memcached.exe -d start

5、可以通過以下命令來查看memcache服務是否啟動成功:

wmic process get description, executablepath | findstr memcached.exe

可以將memcached.exe的路徑放入到系統環境變數中,方便使用。

查看memcache運行狀態:

在命令窗口輸入:

telnet 127.0.0.1 11211

鏈接到memcache上,輸入stats就可以查看到當前memcache的狀態了;

linux下:

1.下載memcache源碼

http://www.memcached.org/

2.解壓並進入目錄

./configure --prefix=/usr/local/memcache
make
make test
sudo make install

3.啟動memcache

memcache -d start -u root

驗證memcache是否正確安裝並啟動

netstat -tap | grep memcached

4.安裝memcache擴展庫

下載memcache擴展

進入到memcache擴展文件

./configure --enable-memcache --with-php-config=/usr/local/php/bin/php-config
make
make install

修改php.ini文件 增加

extension=memcache.so

安裝memcached擴展庫

下載memcached擴展

memcached擴展需要libMemcached庫的支持,所有在安裝memcached擴展庫之前要確認系統已經安裝了libmemcached

安裝libmemcached

./configure --prefix=/usr/local/memcache
make
make install

libmemcached安裝完成後,就可以安裝memcached擴展庫

./configure --with-libmemcached-dir=/usr/local/memcached/ --with-php-config=/usr/local/php/bin/php-config
make
make install

同樣修改php.ini配置文件,增加

extension=memcached.so

C. 如何引用第三方 resty 庫

和大部分知名開源軟體誕生在歐美國家不同,OpenResty自身和依賴的主要組件都是金磚國家的開發者發明的,這點還挺有意思。

Nginx是俄羅斯人發明的,Lua是巴西幾個教授發明的,中國人章亦春把LuaJITVM嵌入到Nginx中,實現了OpenResty這個高性能服務端解決方案。

通過OpenResty,你可以把nginx的各種功能進行自由拼接,更重要的是,開發門檻並不高,這一切都是用強大輕巧的Lua語言來操控。

它主要的使用場景主要是:

在Lua中揉和和處理各種不同的nginx上游輸出(Proxy,Postgres,Redis,Memcached等)
在請求真正到達上游服務之前,Lua可以隨心所欲的做復雜的訪問控制和安全檢測
隨心所欲的操控響應頭裡面的信息
從外部存儲服務(比如Redis,Memcached,MySQL,Postgres)中獲取後端信息,並用這些信息來實時選擇哪一個後端來完成業務訪問
在內容handler中隨意編寫復雜的Web應用,使用同步但依然非阻塞的方式,訪問後端資料庫和其他存儲
在rewrite階段,通過Lua完成非常復雜的URLdispatch
用Lua可以為nginx子請求和任意location,實現高級緩存機制

組織OpenResty技術大會之前,我一直認為自己是一個孤獨的OpenResty使用者,覺得自己在使用一個冷門的技術。

雖然大家都聽說過OpenResty或者ngx_lua,但感覺用在生產環境中使用的卻少之又少,除了幾個CDN公司外,好像沒有聽說過哪家知名互聯網公司在使用。而CDN行業之所以使用,很多是受到cloudflare技術棧的影響,OpenResty的作者也在國外這家CDN公司。

但辦完這個大會,我發現使用者真的挺多,奇虎360的所有服務端團隊都在使用,京東、網路、魅族、知乎、優酷、新浪這些互聯網公司都在使用。有用來寫WAF、有做CDN調度、有做廣告系統、消息推送系統,還有像我們部門一樣,用作APIserver的。有些還用在非常關鍵的業務上,比如開濤在高可用架構分享的京東商品詳情頁,是我知道的ngx_lua最大規模的應用。

2.奇虎企業安全服務端技術選型的標准

先說下3年多前做架構選型的時候,我為什麼會選擇OpenResty?

其實架構如何設計並不重要,因為每家公司,每個團隊,他們的公司文化和技術背景各不相同,生搬硬套會適得其反。重要的是當初為什麼這么選擇,中途為什麼調整。

我們的產品要求單機上面,服務端提供高性能的API介面,QPS至少過萬,未來需要支撐到10萬。我們並沒有急於去使用PHP、Python或者其他的語言來實現功能,而是先勾勒出一個理想化的技術模型。

這個模型應該具備:

非阻塞的訪問網路IO。在連接MySQL、Redis和發起HTTP請求時,工作進程不能傻傻的等待網路IO的返回,而是需要支持事件驅動,用協程的方式讓CPU資源更有效的去處理其他請求。很多語言並不具備這樣的能力和周邊庫。

有完備的緩存機制。不僅需要支持Redis、Memcached等外部緩存,也應該在自己的進程內有緩存系統。我們希望大部分的請求都能在一個進程中得到數據並返回,這樣是最高效的方法,一旦有了網路IO和進程間的交互,性能就會受到很大影響。

同步的寫代碼邏輯,不要讓開發者感知到回調和非同步。這個也很重要,程序員也是人,代碼應該更符合人的思維習慣,顯式的回調和非同步關鍵字,會打斷思路,也給調試帶來困難。

最好是站在巨人肩上,基於成熟的技術上搭建。採用一門全新誕生的語言和技術,需要經歷語言自身發展期頻繁調整的陣痛,還可能站錯隊。

不僅支持Linux平台,還需要支持Windows平台,這個是我們產品很特別的需求,很多中小企業用戶還是習慣Windows的操作,不具備Linux的維護能力。

基於以上幾點的考慮,考察了當時的一些方案,選擇了OpenResty。

首先,它最大的特點就是用同步的代碼邏輯實現非阻塞的調用,其次它有單進程內的LRUcache和進程間的shareDICTcache,而且它是揉合nginx和LuaJIT而產生的。而且nginx有Windows版本,雖然有非常多的限制,但這些限制都是可以解決的,nginx官方Windows版本中不支持的特性,我們開源出來的版本都解決了。

第一次看到這樣的方案,我覺得它肯定會顛覆高性能服務端的開發。為什麼呢?在我之前的公司里,每天會有近百億次的查詢請求,而伺服器只用了十台。

我們採用了nginxC模塊+內置在nginx中的K-V資料庫(自己開發的),來實現所有的業務邏輯,達到這個目標。聽上去很簡單,但是過程非常艱辛,兩三個十幾年工作經驗的大牛做了一年多才穩定下來。絕大部分開發能力不足,只能望塵莫及。而且後續的調試和維護,也會花費不少精力。

但是OpenResty的出現改變了這一切,OpenResty非常的pythonic,適合人類的正常思維。新手經過一兩個月的學習,做出來的API,就可以達到nginxC模塊的性能,而且代碼量大大減少,也方便調試。

3.以奇虎和新浪為例,如何在項目中引入新技術

技術選型只是第一步,如何才能在一個產品或者項目中引入OpenResty這個新的技術呢?我拿奇虎企業安全和新浪移動這兩家公司真實發生的案例給大家看看。我和新浪移動的周晶,都是在一個有成熟產品的部門,用一兩個人的力量,把一個新技術,替換掉了原有的技術架構。但由於企業產品和個人產品的不同,方法有很大的不一樣。

先說我所在奇虎企業安全。我在2012年初加入這個部門,當時產品主打免費,目標用戶是小企業。所以架構設計上面,只考慮了幾十點、幾百點的終端請求,使用了非常強綁定的Windows平台技術,而且傾向於不用開源軟體,自己新做一個更適合自己的框架。包括自己用C++開發的Webserver,自己寫的PHP路由和框架,數據存儲在sqlite裡面。

我幫忙修改了兩個月PHP的bug,看明白了技術架構的思路之後,就去新開的一個產品線了。這是一個實驗性的產品,主要面對央企和專用網,一個網路中有上百萬的終端。

剛開始沒有什麼人關注,我就直接採用了Linux+OpenResty+Redis+Postgres的開源組件,性能測試甩之前的N條街。後面這個實驗性的產品,和之前的產品,合並為一個產品,技術上面就割裂為兩套架構。老功能用老架構,新功能用新架構。

隨著越來越多大用戶的增加,原有的技術架構開始捉襟見肘,技術債務越積壓越多。隨著用戶的抱怨,sqlite被拋棄,全面換成Postgres。但對於自己開發的框架還是有些敝帚自珍。

期間通過對比測試、OpenResty培訓還有多次用戶性能問題排查,讓開發同學們都知道這門技術的優勢。快被加班壓垮的開發同學,逐漸開始選擇使用OpenResty而不是自研的框架,來進行新功能的開發,以及舊功能的遷移,來避免加班。

在產品重構的時候,之前自研的服務端框架被完全拋棄,服務端開發的同學從8、9個人減少到3個人。在新技術的引入過程中,我們沒有採用強制的舉措,因為企業產品需要穩定,用戶處部署的版本更新很慢。

而新浪移動周晶的實踐,對大家更有參考意義。新浪移動最開始是基於Apache,用PHP來處理用戶請求。Apache是同步多進程模型,在並發請求不多的情況下沒有問題。

但是總是會有突發新聞,比如馬航失聯、文章出軌等,突發的高流量把後台壓垮了幾次。而且可以預見世界盃的流量也會很大,所以周晶花幾個月時間,用nginx替換了Apache,使用nginx的fast_cgi_cache,QPS提升了一個數量級。

新浪移動後台的介面都是使用PHP來實現的,在高並發下有些力不從心。而nginx簡單的緩存雖然能滿足性能,但不能滿足業務精細化和數據一致性的要求,需要找PHP之外的解決方案,前提是讓PHP的開發能夠舒適的使用。node.js的回調地獄、Go的調試不方便,都是一個阻礙。

他們最後選擇了OpenResty,而且基於OpenResty開源了一個Web框架Vanilla(香草),模仿了Yaf的使用習慣,讓PHP的開發更容易接受和上手。Vanilla已經在新浪移動開始使用,一些核心業務,比如高清圖和體育直播,正在向這個框架遷移中。

4.入門痛點,以及學習的正確方法

我和周晶的入門,都是自己摸著石頭過河。當時除了Python社區「大媽」的那篇使用文章外,找不到其他的資料。

奇虎和新浪都用OpenResty成功替換了之前的技術,但問題還是挺明顯,就是大家都認為自己是孤獨的使用者,同事中基本沒有人認同。在關鍵和支撐業務上,使用OpenResty有些不放心,都會在邊緣業務上先做嘗試和驗證。

雖然OpenResty的性能做的很棒,比肩或者超過其他所有的高性能解決方案,但是擔心沒有學習資料、擔心招不到人、擔心沒人交流,可能還擔心作者章亦春哪天撂挑子不幹了,這個項目就黃了。

高可用架構群里的各位都是架構師,是技術決策者,在引入一門新技術的時候,肯定會考慮到這些風險。比如小米科技馬利超在高可用架構的分享,他們在搶購系統中曾經使用過ngx_lua,雖然性能滿足需求,但是團隊裡面熟悉的人少,最後還是改成了Go語言實現。

如何解決這些擔憂?社區是有過思考和討論的,我們放在分享最後講。先從一個嘗試使用這門技術的開發者的角度看,OpenResty不少基礎工作沒有完善,友好程度不夠:

只能從源碼安裝,沒有apt-get、brew等軟體倉庫安裝方法;安裝第三方庫沒有PIP、NPM之類的包管理工具,需要去先谷歌,然後拷貝代碼文件到指定的目錄下,才能require使用。

代碼編寫需要修改nginx.conf和對應的lua代碼,即使是helloworld也是如此。當然你可以把代碼寫在nginx的配置文件裡面,但是生產環境肯定是要分離的。這種編寫代碼的方式,不像是一個編程語言,和常規的編程方式不同。

有獨特的執行階段概念,因為OpenResty是基於nginx的,所以也繼承它的這種概念。你的代碼邏輯,可能需要放在不同的階段裡面運行,才能獲取你想要的預期。而這些階段間信息如何傳遞,以及哪些API不能在某些階段使用,就會經常攔住新手。

遇到問題只有郵件列表這一種方式來溝通,而郵件列表是被牆的。文檔也只有英文版本,導致很多新手的問題無法被解決。

沒有系統學習OpenResty的手段,大都是業務需要實現什麼功能,就去文檔和API裡面去找。至於方式對不對,能不能優化,就不知道了。

D. libevent 支持udp嗎

1、下載libevent源碼。
2、用VC編譯,一般編譯成靜態的。
3、在項目中配置libevent庫。
4、引用。 你可以按著以上步驟來。應該沒問題。

E. CentOS7下FreeSwitch1.8源碼安裝過程完整記錄

1、yum 安裝相關的依賴包

yum install -y git gcc-c++ wget alsa-lib-devel autoconf automake bison broadvoice-devel bzip2 curl-devel db-devel e2fsprogs-devel flite-devel g722_1-devel gdbm-devel gnutls-devel ilbc2-devel ldns-devel libcodec2-devel libcurl-devel libedit-devel libidn-devel libjpeg-devel libmemcached-devel libogg-devel libsilk-devel libsndfile-devel libtiff-devel libtheora-devel libtool libvorbis-devel libxml2-devel lua-devel lzo-devel mongo-c-driver-devel ncurses-devel net-snmp-devel openssl-devel opus-devel pcre-devel perl perl-ExtUtils-Embed pkgconfig portaudio-devel postgresql-devel python26-devel python-devel soundtouch-devel speex-devel sqlite-devel unbound-devel unixODBC-devel libuuid-devel which yasm zlib-devel

2、安裝 mod_shout 模塊以支持 mp3 格式

yum install -y libshout-devel lame-devel libmpg123-devel

wget http://downloads.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz

tar -zxvf lame-3.99.5.tar.gz

cd lame-3.99.5

./configure --enable-static --enable-shared

make

make install

vi /etc/ld.so.conf

#換行加入:/usr/local/lib

#保存退出 :wq

ldconfig

3、安裝 cmake

yum remove cmake

wget https://cmake.org/files/v3.14/cmake-3.14.0.tar.gz

tar vzxf cmake-3.14.0.tar.gz

cd cmake-3.14.0

./configure

make

make install

4、 安裝 libks

yum install libatomic

git clone https://github.com/signalwire/libks.git

cd libks

cmake .

make

make install

5、安裝 signalwire-c

git clone https://github.com/signalwire/signalwire-c.git

cd signalwire-c/

cmake .

make

make install

ln -sf

/usr/local/lib64/pkgconfig/signalwire_client.pc

/usr/lib64/pkgconfig/signalwire_client.pc

6、下載並安裝 freeswitch1.8

如下 git 為國內址,速度較快,也可以從官方下載源碼

git clone -b v1.8 https://git.oschina.net/nwaycn/freeswitch.git

./bootstrap.sh -j

./configure --enable-portable-binary

--prefix=/usr/local/freeswitch

--with-gnu-ld --with-python --with-openssl

--enable-core-odbc-support --enable-zrtp

--enable-libmp3lame

make

make -j install

如下安裝語音文件,用時會較長

make -j cd-sounds-install

make -j cd-moh-install

7、安裝後的一些操作

設置全局命令軟連接

ln -sf /usr/local/freeswitch/bin/freeswitch /usr/bin/

ln -sf /usr/local/freeswitch/bin/fs_cli /usr/bin/

禁用 freeswitch 上 ipv6

mv external-ipv6.xml external-ipv6.xml.inactive

mv internal-ipv6.xml internal-ipv6.xml.inactive

8、啟動 freeswitch

freeswitch -nc #後台啟動

freeswitch 常用命令

#列出 internal SIP Profile 的狀態

sofia status profile internal

#列出某個 Profile 上所有已注冊用戶

sofia status profile internal reg

#過濾某些符合條件

sofia status profile internal reg 1000

sofia status profile internal user 1000

#列出網關狀態

sofia status gateway gw1

#以上命令都可以將 status 用 xmlstatus 來代替,以列出 XML 格式的狀態,這樣比較容易用

於其他程序解析

#啟動、停止、重啟某個 Profile 的命令

sofia profile internal start #啟動

sofia profile internal stop #停止

sofia profile internal restart #重啟

#有時候修改了某個 Profile 的某個參數,不需要重啟(重啟是影響通話的),可以使用下列

命令讓 FreeSWITCH 重讀 sofia 的配置

#注意並不是所有的參數都能生效

sofia profile internal rescan

#添加了一個新的 gateway 以後,也可以使用 rescan 指令讀取

sofia profile external rescan

#如果是修改了一個網關,則可以先刪除該網關,再 rescan

sofia profile external killgw gw1

sofia profile external rescan

#下列命令可以指定某個網關立即向外注冊或注銷

sofia profile external register gw1

sofia profile external unregister

#開啟該 Profile 的 SIP 跟蹤功能抓 SIP 包

sofia profile internal siptrace on

#有時候,希望將已經注冊的用戶清理掉,可以使用如下命令,注意此命令只是臨時清理,

客戶端重新注冊的話還是可以注冊成功的

sofia profile internal flush_inbound_reg [email protected]

#也可以根據 call-id 來清理

sofia profile internal reg 1000 #通過此命令查找到 call-id 的值

sofia profile flush_inbound_reg zsfsdfhdfgdfsdfsdfsdfsdf #清除 call-id=zsfsdfhdfgdfsdfsdfsdfsdf 的用戶

熱點內容
騰訊雲伺服器1mb老掉線 發布:2024-03-29 01:56:11 瀏覽:213
執行sql語句的存儲過程 發布:2024-03-29 01:52:37 瀏覽:695
婚紗攝影腳本 發布:2024-03-29 01:47:40 瀏覽:899
我的世界伺服器咋開外掛 發布:2024-03-29 01:07:45 瀏覽:455
sql寫報表 發布:2024-03-29 01:03:23 瀏覽:305
家用伺服器怎麼選 發布:2024-03-29 00:49:18 瀏覽:401
Ap6510dn如何配置 發布:2024-03-29 00:38:47 瀏覽:333
安卓和蘋果哪個更佔用內存 發布:2024-03-29 00:37:02 瀏覽:424
編譯錯誤算bug嗎 發布:2024-03-29 00:23:03 瀏覽:34
c語言干什麼 發布:2024-03-29 00:05:35 瀏覽:314