負載均衡集群企業級應用實戰—LVS

来源:http://www.cnblogs.com/along21/archive/2017/11/04/7784394.html
-Advertisement-
Play Games

一、負載均衡集群介紹 1、集群 ① 集群(cluster)技術是一種較新的技術,通過集群技術,可以在付出較低成本的情況下獲得在性能、可靠性、靈活性方面的相對較高的收益,其任務調度則是集群系統中的核心技術。 ② 集群是一組相互獨立的、通過高速網路互聯的電腦,它們構成了一個組,並以單一系統的模式加以管 ...


一、負載均衡集群介紹

1、集群

① 集群(cluster)技術是一種較新的技術,通過集群技術,可以在付出較低成本的情況下獲得在性能、可靠性、靈活性方面的相對較高的收益,其任務調度則是集群系統中的核心技術。

② 集群是一組相互獨立的、通過高速網路互聯的電腦,它們構成了一個組,並以單一系統的模式加以管理。一個客戶與集群相互作用時,集群像是一個獨立的伺服器。

③ 集群組成後,可以利用多個電腦和組合進行海量請求處理(負載均衡),從而獲得很高的處理效率,也可以用多個電腦做備份(高可用),使得任何一個機器壞了整個系統還是能正常運行。集群在目前互聯網公司是必備的技術,極大提高互聯網業務的可用性和可縮放性。

 

2、負載均衡集群技術

① 負載均衡(Load Balance):負載均衡集群為企業需求提供了可解決容量問題的有效方案。負載均衡集群使負載可以在電腦集群中儘可能平均地分攤處理

② 負載通常包括應用程式處理負載和網路流量負載。這樣的系統非常適合向使用同一組應用程式的大量用戶提供服務。每個節點都可以承擔一定的處理負載,並且可以實現處理負載在節點之間的動態分配,以實現負載均衡。對於網路流量負載,當網路服務程式接受了高入網流量,以致無法迅速處理,這時,網路流量就會發送給在其它節點上運行的網路服務程式。也可根據伺服器的承載能力,進行服務請求的分發,從而使用戶的請求得到更快速的處理。

 

3、負載均衡集群技術的實現

負載均衡(Load Balance)

負載均衡技術類型:基於4層負載均衡技術和基於7層負載均衡技術

負載均衡實現方式:硬體負載均衡設備或者軟體負載均衡

硬體負載均衡產品:F5 BIG-IP 、Citrix Netscaler  、深信服 、Array 、Radware

軟體負載均衡產品: LVS(Linux Virtual Server)、 Haproxy、Nginx、Ats(apache traffic server)

 

4、圖示

 

 

二、lvs 的介紹

1、lvs

(1)LVS是Linux Virtual Server的簡稱,也就是Linux虛擬伺服器, 是一個由章文嵩博士發起的自由軟體項目,它的官方站點是www.linuxvirtualserver.org。現在LVS已經是 Linux標準內核的一部分,在Linux2.4內核以前,使用LVS時必須要重新編譯內核以支持LVS功能模塊,但是從Linux2.4內核以後,已經完全內置了LVS的各個功能模塊,無需給內核打任何補丁,可以直接使用LVS提供的各種功能。

(2)LVS自從1998年開始,發展到現在已經是一個比較成熟的技術項目了。可以利用LVS技術實現高可伸縮的、高可用的網路服務,例如WWW服務、Cache服務、DNS服務、FTP服務、MAIL服務、視頻/音頻點播服務等等,有許多比較著名網站和組織都在使用LVS架設的集群系統,例如:Linux的門戶網站(www.linux.com)、向RealPlayer提供音頻視頻服務而聞名的Real公司(www.real.com)、全球最大的開源網站(sourceforge.net)等。

(3)LVS軟體作用:通過LVS提供的負載均衡技術和Linux操作系統實現一個高性能、高可用的伺服器群集,它具有良好可靠性、可擴展性和可操作性。從而以低廉的成本實現最優的服務性能。

 

2、優缺點:

高併發連接:LVS基於內核網路層面工作,有超強的承載能力和併發處理能力。單台LVS負載均衡器,可支持上萬併發連接。

穩定性強:是工作在網路4層之上僅作分發之用,這個特點也決定了它在負載均衡軟體里的性能最強,穩定性最好,對記憶體和cpu資源消耗極低。

成本低廉:硬體負載均衡器少則十幾萬,多則幾十萬上百萬,LVS只需一臺伺服器和就能免費部署使用,性價比極高。

配置簡單:LVS配置非常簡單,僅需幾行命令即可完成配置,也可寫成腳本進行管理。

支持多種演算法:支持多種論調演算法,可根據業務場景靈活調配進行使用

支持多種工作模型:可根據業務場景,使用不同的工作模式來解決生產環境請求處理問題。

應用範圍廣:因為LVS工作在4層,所以它幾乎可以對所有應用做負載均衡,包括http、資料庫、DNS、ftp服務等等

缺點:工作在4層,不支持7層規則修改,機制過於龐大,不適合小規模應用。

 

3、LVS 核心組件和專業術語

(1)核心組件

LVS的管理工具和內核模塊ipvsadm/ipvs

ipvsadm:用戶空間的命令行工具,用於管理集群服務及集群服務上的RS等;

ipvs:工作於內核上的netfilter INPUT鉤子之上的程式,可根據用戶定義的集群實現請求轉發;

(2)專業術語

VS:Virtual Server   #虛擬服務

Director, Balancer    #負載均衡器、分發器

RS:Real Server   #後端請求處理伺服器 

CIP: Client IP    #用戶端IP

VIP:Director Virtual IP   #負載均衡器虛擬IP

DIP:Director IP   #負載均衡器IP

RIP:Real Server IP #後端請求處理伺服器IP

 

(3)圖解

4、LVS工作內核模型及工作模式

① 當客戶端的請求到達負載均衡器的內核空間時,首先會到達PREROUTING鏈。

② 當內核發現請求數據包的目的地址是本機時,將數據包送往INPUT鏈。

③ LVS由用戶空間的ipvsadm和內核空間的IPVS組成,ipvsadm用來定義規則,IPVS利用ipvsadm定義的規則工作,IPVS工作在INPUT鏈上,當數據包到達INPUT鏈時,首先會被IPVS檢查,如果數據包裡面的目的地址及埠沒有在規則裡面,那麼這條數據包將被放行至用戶空間。

④ 如果數據包裡面的目的地址及埠在規則裡面,那麼這條數據報文將被修改目的地址為事先定義好的後端伺服器,並送往POSTROUTING鏈。

⑤ 最後經由POSTROUTING鏈發往後端伺服器。

圖解

 

三、LVS負載均衡四種工作模式

1、NAT工作模式

(1)介紹

Virtual Server via NAT(VS-NAT):用地址翻譯實現虛擬伺服器。地址轉換器有能被外界訪問到的合法IP地址,它修改來自專有網路的流出包的地址。外界看起來包是來自地址轉換器本身,當外界包送到轉換器時,它能判斷出應該將包送到內部網的哪個節點。優點是節省IP 地址,能對內部進行偽裝;缺點是效率低,因為返回給請求方的流量經過轉換器。

 

(2)工作流程

(a). 當用戶請求到達Director Server,此時請求的數據報文會先到內核空間的PREROUTING鏈。 此時報文的源IP為CIP,目標IP為VIP

(b). PREROUTING檢查發現數據包的目標IP是本機,將數據包送至INPUT鏈

(c). IPVS比對數據包請求的服務是否為集群服務,若是,修改數據包的目標IP地址為後端伺服器IP,然後將數據包發至POSTROUTING鏈。 此時報文的源IP為CIP,目標IP為RIP

(d). POSTROUTING鏈通過選路,將數據包發送給Real Server

(e). Real Server比對發現目標為自己的IP,開始構建響應報文發回給Director Server。 此時報文的源IP為RIP,目標IP為CIP

(f). Director Server 把RS來到響應包,通過FORWORD 轉發給client 在響應客戶端前,此時會將源IP地址修改為自己的VIP地址,然後響應給客戶端。 此時報文的源IP為VIP,目標IP為CIP

 

(3)圖解

  

2、DR工作模式

(1)介紹

Virtual Server via Direct Routing(VS-DR):用直接路由技術實現虛擬伺服器。當參與集群的電腦和作為控制管理的電腦在同一個網段時可以用此方法,控制管理的電腦接收到請求包時直接送到參與集群的節點。直接路由模式比較特別,很難說和什麼方面相似,前種模式基本上都是工作在網路層上(三層),而直接路由模式則應該是工作在數據鏈路層上(二層)。

 

(2)工作原理 :

DR和REAL SERVER都使用同一個IP對外服務。但只有DR對ARP請求進行響應,所有REAL SERVER對本身這個IP的ARP請求保持靜默。也就是說,網關會把對這個服務IP的請求全部定向給DR,而DR收到數據包後根據調度演算法,找出對應的 REAL SERVER,把目的MAC地址改為REAL SERVER的MAC併發給這台REAL SERVER。這時REAL SERVER收到這個數據包,則等於直接從客戶端收到這個數據包無異,處理後直接返回給客戶端。由於DR要對二層包頭進行改換,所以DR和REAL SERVER之間必須在一個廣播域,也可以簡單的理解為在同一臺交換機上

 

(3)工作流程

(a) 當用戶請求到達Director Server,此時請求的數據報文會先到內核空間的PREROUTING鏈。 此時報文的源IP為CIP,目標IP為VIP

(b) PREROUTING檢查發現數據包的目標IP是本機,將數據包送至INPUT鏈

(c) IPVS比對數據包請求的服務是否為集群服務,若是,將請求報文中的源MAC地址修改為DIP的MAC地址,將目標MAC地址修改RIP的MAC地址,然後將數據包發至POSTROUTING鏈。 此時的源IP和目的IP均未修改,僅修改了源MAC地址為DIP的MAC地址,目標MAC地址為RIP的MAC地址

(d) 由於DS和RS在同一個網路中,所以是通過二層,數據鏈路層來傳輸。POSTROUTING鏈檢查目標MAC地址為RIP的MAC地址,那麼此時數據包將會發至Real Server。

(e) RS發現請求報文的MAC地址是自己的MAC地址,就接收此報文。處理完成之後,將響應報文通過lo介面傳送給eth0網卡然後向外發出。 此時的源IP地址為VIP,目標IP為CIP

(f) 響應報文最終送達至客戶端

 

(4)特點

① 保證前端路由將目標地址為VIP報文統統發給Director Server,而不是RS

② RS可以使用私有地址;也可以是公網地址,如果使用公網地址,此時可以通過互聯網對RIP進行直接訪問

RS跟Director Server必須在同一個物理網路中

④ 所有的請求報文經由Director Server,但響應報文必須不能進過Director Server

⑤ 不支持地址轉換,也不支持埠映射

⑥ RS可以是大多數常見的操作系統

RS的網關絕不允許指向DIP(因為我們不允許他經過director)

⑧ RS上的lo介面配置VIP的IP地址

 

(5)工作流程圖解

 

3、TUN工作模式

1、定義

IP隧道技術實現虛擬伺服器。這種方式是在集群的節點不在同一個網段時可用的轉發機制,是將IP包封裝在其他網路流量中的方法。為了安全的考慮,應該使用隧道技術中的VPN,也可使用租用專線。 集群所能提供的服務是基於TCP/IP的Web服務、Mail服務、News服務、DNS服務、Proxy伺服器等等.

TUN模式:採用NAT技術時,由於請求和響應報文都必須經過調度器地址重寫,當客戶請求越來越多時,調度器的處理能力將成為瓶頸。為瞭解決這個問題,調度器把請求報文通過IP隧道轉發至真實伺服器,而真實伺服器將響應直接返回給客戶,所以調度器只處理請求報文。由於一般網路服務應答比請求報文大許多,採用 VS/TUN技術後,集群系統的最大吞吐量可以提高10倍

 

2、工作流程

(a) 客戶端將請求發往前端的負載均衡器,請求報文源地址是CIP,目標地址為VIP。

(b) 負載均衡器收到報文後,發現請求的是在規則裡面存在的地址,那麼它將在客戶端請求報文的首部再封裝一層IP報文,將源地址改為DIP,目標地址改為RIP,並將此包發送給RS。

(c) RS收到請求報文後,會首先拆開第一層封裝,然後發現裡面還有一層IP首部的目標地址是自己lo介面上的VIP,所以會處理次請求報文,並將響應報文通過lo介面送給eth0網卡直接發送給客戶端。註意:需要設置lo介面的VIP不能在共網上出現

 

3、圖解

 

4、full-nat 工作模式

vlvs-fullnat(雙向轉換)

通過請求報文的源地址為DIP,目標為RIP來實現轉發:對於響應報文而言,修改源地址為VIP,目標地址為CIP來實現轉發:

          CIP --> DIP           VIP --> RIP

架構特點:這是一種對nat模型的改進,是一個擴展,使得RS與Director可以處於不同網路。

(1)RIP,DIP可以使用私有地址;

(2)RIP和DIP可以不再同一個網路中,且RIP的網關未必需要指向DIP;

(3)支持埠映射;

(4)RS的OS可以使用任意類型;

(5)請求報文經由Director,響應報文也經由Director

 

 

5、四者的區別

機器名稱

IP配置

服務角色

備註

lvs-server

VIP:172.16.100.1

DIP:192.168.100.1

負載均衡器

開啟路由功能

(VIP橋接、DIP僅主機)

rs01

RIP:192.168.100.2

後端伺服器

網關指向DIP(僅主機)

rs02

RIP:192.168.100.3

後端伺服器

網關指向DIP(僅主機)

 

rs03

RIP:192.168.100.4

後端伺服器

網關指向DIP(僅主機)

 


lvs-nat與lvs-fullnat:請求和響應報文都經由Director

     lvs-nat:RIP的網關要指向DIP

     lvs-fullnat:RIP和DIP未必在同一IP網路,但要能通信

lvs-dr與lvs-tun:請求報文要經由Director,但響應報文由RS直接發往Client

     lvs-dr:通過封裝新的MAC首部實現,通過MAC網路轉發

     lvs-tun:通過在原IP報文外封裝新IP頭實現轉發,支持遠距離通信

 

四、LVS ipvsadm 命令的使用

1、yum install ipvsadm -y #在LVS-server安裝lvs管理軟體

程式包:ipvsadm(LVS管理工具)

  Unit File: ipvsadm.service

  主程式:/usr/sbin/ipvsadm

  規則保存工具:/usr/sbin/ipvsadm-save

  規則重載工具:/usr/sbin/ipvsadm-restore

  配置文件:/etc/sysconfig/ipvsadm-config

 

2、選項

① -A --add-service 在伺服器列表中新添加一條新的虛擬伺服器記錄

-t 表示為tcp服務

-u 表示為udp服務

-s --scheduler 使用的調度演算法, rr | wrr | lc | wlc | lblb | lblcr | dh | sh | sed | nq 預設調度演算法是 wlc

例:ipvsadm -A -t 192.168.1.2:80 -s wrr

 

② -a --add-server 在伺服器表中添加一條新的真實主機記錄

-t --tcp-service 說明虛擬伺服器提供tcp服務

-u --udp-service 說明虛擬伺服器提供udp服務

-r --real-server 真實伺服器地址

-m --masquerading 指定LVS工作模式為NAT模式

-w --weight 真實伺服器的權值

-g --gatewaying 指定LVS工作模式為直接路由器模式(也是LVS預設的模式)

-i --ip 指定LVS的工作模式為隧道模式

-p 會話保持時間,定義流量唄轉到同一個realserver的會話存留時間

例:ipvsadm -a -t 192.168.1.2:80 -r 192.168.2.10:80 -m -w 1

 

③ -E -edit-service 編輯內核虛擬伺服器表中的一條虛擬伺服器記錄。

-D -delete-service 刪除內核虛擬伺服器表中的一條虛擬伺服器記錄。

-C -clear 清除內核虛擬伺服器表中的所有記錄。

-R -restore 恢復虛擬伺服器規則

-S -save 保存虛擬伺服器規則,輸出為-R 選項可讀的格式

-e -edit-server 編輯一條虛擬伺服器記錄中的某條真實伺服器記錄

-d -delete-server 刪除一條虛擬伺服器記錄中的某條真實伺服器記錄

-L|-l –list 顯示內核虛擬伺服器表

  --numeric, -n:以數字形式輸出地址和埠號

--exact:擴展信息,精確值 

--connection,-c:當前IPVS連接輸出

--stats:統計信息

--rate :輸出速率信息

參數也可以從/proc/net/ip_vs*映射文件中查看

-Z –zero 虛擬服務表計數器清零(清空當前的連接數量等)

 

五、實現LVS持久連接

1、定義

由於HTTP是一種無狀態協議,每次請求完畢之後就立即斷開了,當用戶瀏覽購物網站挑選商品的時候,看到一件商品加入購物車,此過程被重定向到了REALSERVER1上面來,當把第二件商品加入購物車又被重定向到了REALSERVER2上面,最後結賬的時候在REALSERVER2上面,只有一件商品,這顯然是用戶無法接受的,此時就需要一種持久連接機制,來把同一用戶的HTTP請求在超時時間內都重定向到同一臺REALSERVER,超時時間可以自己定義,比如說2個小時,在超時時間內伺服器會不斷追蹤用戶的訪問請求,把某一用戶的所有請求都轉發到同一臺REALSERVER上面

對於電子商務網站來說,用戶在挑選商品的時候使用的是80埠來瀏覽的,當付款的時候則是通過443的ssl加密的方式,當然當用戶挑選完商品付款的時候我們當然不希望https的443跳轉到另外一臺REALSERVER,很顯然應該是同一REALSERVER才對,這時候就要用到基於防火牆標記的持久連接,通過定義埠的姻親關係來實現

 

2、功能:

無論ipvs使用何種scheduler,其都能夠實現在指定時間範圍內始終將來自同一個ip地址的請求發往同一個RS;此功能是通過lvs持久連接模板實現,其與調度方法無關;

iptables -t mangle -A PREROUTING -d 172.16.100.100 -p tcp --dport 80 -j MARK --set-mark 99

#在iptables 打上標記,把80埠標記為99

 iptables -t mangle -A PREROUTING -d 172.16.100.100-p tcp --dport 443 -j MARK --set-mark 99

#在iptables打上標記,把443埠標記為99

ipvsadm -A -f 99 -s rr -p

#在lvs上建立基於99號標記的虛擬服務

ipvsadm -a -f 99 -r 172.16.100.2 -g

#設置後端服務地址

pvsadm -a -f 99 -r 172.16.100.3 -g

 

 

六、負載均衡集群企業級應用實戰-LVS

實現基於LVS負載均衡集群的電商網站架構

前景:隨著業務的發展,網站的訪問量越來越大,網站訪問量已經從原來的1000QPS,變為3000QPS,網站已經不堪重負,響應緩慢,面對此場景,單純靠單台LNMP的架構已經無法承載更多的用戶訪問,此時需要用負載均衡技術,對網站容量進行擴充,來解決承載的問題。scale out? scale up?

 

實驗前準備:

1、ipvsadm

yum install ipvsadm -y #在LVS-server安裝lvs管理軟體

2、grep -i -C 10 "ipvs" /boot/config-VERSION-RELEASE.x86_64 查看內核是否支持IPVS

3、iptables -F && setenforing 清空防火牆策略,關閉selinux

  

實戰一:LVS的NAT模式實現負載均衡

實戰架構圖:

1、環境準備:

機器名稱

IP配置

服務角色

備註

lvs-server

VIP:172.17.1.6

DIP:192.168.30.106

負載均衡器

開啟路由功能

(VIP橋接、DIP僅主機)

rs01

RIP:192.168.30.107

後端伺服器

網關指向DIP(僅主機)

rs02

RIP:192.168.30.7

後端伺服器

網關指向DIP(僅主機)

註意:確保rs 在一個網段,且只有一個網段

 

2、在directory 負載均衡器上

yum -y install ipvsadm

① 開啟一個基於80埠的虛擬服務vip,調度方式為wrr

ipvsadm -A -t 172.17.1.6:80 -s wrr

② 配置web服務後端real server  為nat工作方式  權重為1

ipvsadm -a -t 172.17.1.6:80 -r 192.168.30.107:80 -m -w 1

ipvsadm -a -t 172.17.1.6:80 -r 192.168.30.7:80 -m -w 1

③ 修改內核配置,開啟路由轉發

vim /etc/sysctl.conf 該一行

net.ipv4.ip_forward = 1

 

sysctl -p 讀一些,使其生效

 

3、在兩台real server 上設置

① 開啟實現準備好的web網頁服務

systemctl start nginx

systemctl start php-mysql

systemctl start mariadb

 

② 把網關指向directory

route add default gw 192.168.30.106

 

4、自己的windows 做客戶端,通過vip 172.17.1.6訪問web服務,調度成功

 

 

實戰二:LVS的DR 模式實現負載均衡

實戰架構圖:

1、環境準備

機器名稱

IP配置

服務角色

備註

lvs-server

VIP:172.17.100.100

負載均衡器

開啟路由功能

(VIP橋接)

rs01

RIP:172.17.1.7

後端伺服器

網關指向DIP(橋接)

rs02

RIP:172.17.22.22

後端伺服器

網關指向DIP(橋接)

註意:lvs-server 和rs 要在一個網段,rs只有一個網段

 

2、在lvs-server 上設置

① 配置VIP到本地網卡別名,廣播只自己響應

ifconfig eth0:0 172.17.100.100 broadcast 172.17.100.100 netmask 255.255.255.255 up

route add -host 172.17.100.100 dev eth0:0 給網卡別名指向網關

 

② ipvsadm 策略配置

開啟一個基於80埠的虛擬服務,調度方式為wrr

ipvsadm -A -t 172.17.100.100:80 -s wrr

配置web服務後端real server  為DR工作方式  權重為1

ipvsadm -a -t 172.17.100.100:80 -r 172.17.22.22:80 -g -w 1

ipvsadm -a -t 172.17.100.100:80 -r 172.17.1.6:80 -g -w 1

 

3、real server 上配置

配置VIP到本地迴環網卡lo上,並只廣播自己

ifconfig lo:0 172.17.100.100 broadcast 172.17.100.100 netmask 255.255.255.255 up

配置本地迴環網卡路由

route add -host 172.17.100.100 lo:0

 

② 使RS "閉嘴"

echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore

echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce

忽略ARP廣播

echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore

echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce

註意:關閉arp應答

1:僅在請求的目標IP配置在本地主機的接收到請求報文的介面上時,才給予響應

2:必須避免將介面信息向非本網路進行通告

 

③ 想永久生效,可以寫到配置文件中

vim /etc/sysctl.conf

net.ipv4.conf.lo.arp_ignore = 1

net.ipv4.conf.lo.arp_announce = 2

net.ipv4.conf.all.arp_ignore = 1

net.ipv4.conf.all.arp_announce = 2

 

sysctl -p 讀一下,使其生效

 

4、開啟實現準備好的web網頁服務

systemctl start nginx

systemctl start php-mysql

systemctl start mariadb

 

5、效果驗證

① 可分別在rs1和rs2建立2個不同內容,統一路徑的test.html測試文件,測試負載均衡功能

在RS01 上vim ../test.html

real server 1

在RS01 上vim ../test.html

real server 1

② 打開http://172.17.1.6/ ,併在director上用ipvsadm -L -n觀察訪問連接

③ 用另外一臺測試機,用ab壓力測試工具,測試經過負載均衡後的伺服器容量

 

 

實戰三:實現80、443埠都可訪問服務,且LVS實現持久連接

1、環境準備

機器名稱

IP配置

服務角色

備註

lvs-server

VIP:172.17.100.100

負載均衡器

開啟路由功能

(VIP橋接)

rs01

RIP:172.17.1.7

後端伺服器

網關指向DIP(橋接)

rs02

RIP:172.17.22.22

後端伺服器

網關指向DIP(橋接)

 

2、在vs 上設置:

① 在iptables 打上標記,把80埠標記為99

iptables -t mangle -A PREROUTING -d 172.17.100.100 -p tcp --dport 80 -j MARK --set-mark 99

在iptables打上標記,把443埠標記為99

iptables -t mangle -A PREROUTING -d 172.17.100.100-p tcp --dport 443 -j MARK --set-mark 99

 

② 在lvs上建立基於99號標記的虛擬服務

ipvsadm -A -f 99 -s rr -p

設置後端服務地址,用DR模式

ipvsadm -a -f 99 -r 172.17.1.7 -g

ipvsadm -a -f 99 -r 172.17.22.22 -g

解析:-p 就是持久連接

 

3、在rs 準備好了的web服務,開啟80、443埠

關於ssl 443 加密的設置

 

4、測試,自己windows 做客戶端,訪問 http://172.17.1.6/

訪問 http://172.17.1.6/

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.創建project 方法一:使用命令行創建項目。在D盤cmd執行如下命令: django-admin.py startproject myblog django-admin.py startproject myblog 方法二:使用pycharm創建項目。放置位置為D:\myblog 2.創建a ...
  • 無論何種語言,第一句代碼肯定是要寫“Hello World!”的 print ('Hello World!') 1>格式化輸出 運行截圖: 2>利用if,while語句寫的猜年齡游戲 3>調用getpass模塊,實現暗密碼登陸(這個getpass模塊在pycharm中不好使) ...
  • 項目簡介和code見《同步非同步和阻塞2-測試小項目》 1. 實現 1> 非同步線程IO處理 unsigned CAsyncIO::ThreadWork() { int nRet = IO(); //map is better than array at here, but it need STL un... ...
  • 題外話: Python版本:最新的3.6 安裝註意點:勾選添加路徑後自定義安裝到硬碟的一級目錄,例如本人的安裝路徑: F:\Python 原因:可以自動添加python環境變數,自動關聯.py文件,其餘的優點很多,例如學習selenium的,使用pip install selenium命令就可以安裝 ...
  • 轉載請註明原創出處,謝謝! 說在前面 人生的大道上默默地走,就必須要有一盞燈亮著為你引導方向!而這盞燈抑或只是一句話,一句鼓勵,一個贊美,一次承認,一次認可,一次相識一次交流…… 上篇文章: "阿裡JAVA開發手冊零度的思考理解(一) " 得到作者 孤盡 的肯定支持,那是一個小激動啊,我會繼續努力, ...
  • MVC
    MVC ...
  • 用例圖用於描述系統提供的系列功能。使用用例圖的主要目的是幫助開發團隊以一種可視化的方式理解系統的功能需求。用例圖對系統的實現不做任何說明,僅僅是系統功能的描述。 用例圖主要在需求分析階段使用,用於描述系統實現的功能,方便與客戶交流,保證系統需求的無二性。 用例圖有四部分用例,角色,系統邊界,關係。 ...
  • Spring註入 重點還是看實例吧 實例: 有一個InjectionDao的介面,然後InjectionDaoImpl實現了InjectionDao介面,相當於完成了資料庫的操作。 有一個InjectonServer的介面,然後InjectonServerImpl實現了InjectonServer接 ...
一周排行
    -Advertisement-
    Play Games
  • 一:背景 1. 講故事 前些天有位朋友找到我,說他們的程式會偶發性的卡死一段時間,然後又好了,讓我幫忙看下怎麼回事?窗體類的程式解決起來相對來說比較簡單,讓朋友用procdump自動抓一個卡死時的dump,拿到dump之後,上 windbg 說話。 二:WinDbg 分析 1. 主線程在做什麼 要想 ...
  • 功能說明 使用ListView時,希望可以在單元格顯示圖片或其他控制項,發現原生的ListView不支持,於是通過拓展,實現ListView可以顯示任意控制項的功能,效果如下: 實現方法 本來想著在單元格裡面實現控制項的自繪的,但是沒找到辦法,最後是通過在單元格的錶面顯示對應控制項的,浮於錶面達到目的。 實 ...
  • 由於.NET Framework 4.0 是比較古老的版本,只有New Relic 7.0以下的版本才會支持.NET Framework 4.0的引用程式。 Technical support for .NET Framework 4.0 or lower 你可以參考這個官方Install New ...
  • 前言 隨著 DEV24.1.3 的發佈,XAF Blazor 中的屬性編輯器(PropertyEditor)也進行了很大的改動,在使用體驗上也更接近 WinForm 了,由於進行了大量的封裝,理解上沒有 WinForm 直觀,所以本文通過對屬性編輯器的原理進行解析,並對比新舊版本中的變化,使大家能夠 ...
  • OPC基金會提供了OPC UA .NET標準庫以及示常式序,但官方文檔過於簡單,光看官方文檔和示常式序很難弄懂OPC UA .NET標準庫怎麼用,花了不少時間摸索才略微弄懂如何使用,以下記錄如何從一個控制台程式開發一個OPC UA伺服器。 安裝Nuget包 安裝OPCFoundation.NetSt ...
  • 今天在技術群里,石頭哥向大家提了個問題:"如何在一個以System身份運行的.NET程式(Windows Services)中,以其它活動的用戶身份啟動可互動式進程(桌面應用程式、控制台程式、等帶有UI和互動式體驗的程式)"? 我以前有過類似的需求,是在GitLab流水線中運行帶有UI的自動化測試程 ...
  • .Net 中提供了一系列的管理對象集合的類型,數組、可變列表、字典等。從類型安全上集合分為兩類,泛型集合 和 非泛型集合,傳統的非泛型集合存儲為Object,需要類型轉。而泛型集合提供了更好的性能、編譯時類型安全,推薦使用。 ...
  • 在以前我做程式的時候,一般在登錄視窗裡面顯示程式名稱,登錄視窗一般設置一張背景圖片,由於程式的名稱一般都是確定的,所以也不存在太大的問題,不過如果客戶定製不同的系統的時候,需要使用Photoshop修改下圖層的文字,再生成圖片,然後替換一下也可以了。不過本著減少客戶使用繁瑣性,也可以使用空白名稱的通... ...
  • 一:背景 1. 講故事 在dump分析的過程中經常會看到很多線程卡在Monitor.Wait方法上,曾經也有不少人問我為什麼用 !syncblk 看不到 Monitor.Wait 上的鎖信息,剛好昨天有時間我就來研究一下。 二:Monitor.Wait 底層怎麼玩的 1. 案例演示 為了方便講述,先 ...
  • 目錄前言學習參考過程總結: 前言 做個自由仔。 學習參考 ChatGpt; https://www.cnblogs.com/zhili/p/DesignPatternSummery.html(大佬的,看了好多次) 過程 原由: 一開始只是想查查鏈式調用原理,以為是要繼承什麼介面,實現什麼方法才可以實 ...