主頁 > 軟體設計 > 七層負載均衡HAproxy生產環境LVS+Keepalived+HAproxy(三)

七層負載均衡HAproxy生產環境LVS+Keepalived+HAproxy(三)

2021-12-22 08:03:01 軟體設計

LB-Haproxy/Nginx

💯 決議:七層負載均衡器,為與七層模型上的應用層,通過URL地址(應用層)進行負載均衡,

優點:詳細地址,資料精準定位

缺點:地址長、范圍廣

一、HAproxy

在這里插入圖片描述

原理決議

別名:七層負載均衡、應用程式負載、URL負載、動靜分離技術 用80埠
簡介: 免費、快速可靠、高性能的負載均衡軟體
親緣性:

  • 后方有三臺Web服務器,用戶進行資料請求,當用戶訪問Web1時(一些特定的敏感話題會進行認證)
  • 當我們的用戶再次訪問時,請求分發到我們的Web2上,又要進行認證,
  • 所有我們通過用戶訪問得特性讓用戶訪問到固定的服務器(IP port seesion cookie…),解決了身份再次驗證導致的用戶體驗感,

seesion(會話視窗 服務器): 用戶進行身份認證,保存資訊 ==> 用戶訪問淘寶,加購物車,第一次要進行身份認證,后面無需認證
cookie(快取 瀏覽器): 保存用戶身份認證資訊,通常由瀏覽器存盤,windows端

TCP連接(秒表)

  • User <==> Web

    • 當User向Web請求資料時,會有一個計時器,當在一定的時間沒回應,直接返還給用戶,資料未找到,

    • 當三次握手完成之后,向Web請求資料,服務器沒反應,開啟秒表,將資料進行重傳遞

  • User <=> HA <=> Web

    • 多了中間人(HAproxy)作為代理,用戶訪問HA,HA在分發給Web,HA的兩邊都是互相無感知的

    • 會出現問題,當User在請求資料后直接關機,請求到達HA,HA不將資料發送給Web,
      如果Web服務出現問題,HA將User的請求分發給其他的Web(這時,秒表計時器有很大的體現),

1、環境準備

1、HAproxy:192.168.178.60
2、Web1:192.168.178.7
3、Web2:192.168.178.16

# systemctl --now disable firewalld
# sed -i '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config
# setenforce 0

2、Web

1、安裝httpd:
# yum -y install httpd
2、Web1 添加內容:
# echo "Web1" > /var/www/html/index.html
3、Web2 添加內容
# echo "Web2" > /var/www/html/index.html

3、HAproxy

3.1、安裝軟體

# yum -y install epel-release haproxy

3.2、撰寫組態檔

# cd /etc/haproxy/
# cp -r haproxy.cfg haproxy.cfg.bak
# vim haproxy.cfg
global				#全域配置
   log 127.0.0.1 local3 info	#日志配置
   maxconn 4096					#最大連接數
   uid   99						#用戶
   gid   99						#用戶組
   daemon						#行程守護
   nbproc   1					#HAproxy的行程數,該值與服務器的CPU核心數一致,比如2顆8核心的,這是設定值為16
   pidfile  /run/haproxy.pid	#行程ID存盤位置
#----------------------------------------------------------------
defaults			#系統默認配置
   log   global		#日志使用上方的全域配置
   mode  http		#模式為7層LB
   maxconn  2048	#最大連接數
   retries  3		#健康檢測,3次連接失敗認為服務器不可用
   option   redispatch		# 服務器不可用,重定向到其他服務器,進行服務器之間的故障轉移
   timeout connect 50000	# HAproxy 將 用戶請求 轉至 后端的超時時長
   timeout client 50000		# HAproxy作為客戶端,與后端空閑的互動超時時長
   timeout server 50000		# HAproxy作為服務端,與用戶之間空閑互動的超時時長

   option   abortonclose	# 當服務端負載較高時,自動結束當前佇列比較久的鏈接
   stats uri /admin?stats	# 監控頁面的URL IP:/admin?stats
   stats auth Private land	# 登入監控頁面提示的內容
   stats auth admin:admin	# 登入頁面使用的 用戶與密碼  用戶:密碼
   stats hide-version		# 隱藏監控頁面的 HAproxy版本號,
#----------------------------------------------------------------
frontend httpd-in			# 前端配置,面向與用戶			
      bind 0.0.0.0:80		# HAproxy 的監聽埠,用戶通過 IP+埠訪問
      mode  http			# 模式為 七層的 http請求
      log   global			# 使用上方的全域Log
      option   httplog		# 日志格式變得更豐富,獲取更詳細的資訊
      option   httpclose	# 每次請求后,關閉 http 通道

   acl html url_reg -i \.html$		# (html自定義名,方便下方的呼叫) 如果用戶訪問以 .html 結尾的頁面
   use_backend html-server if html	# 如果命中上方的 html 定義的策略,分發到 html-server 后端
   default_backend html-server		# 默認用戶請求的 后端
#-----------------------------------------------------------------
backend html-server					# 定義 后端的服務器
      mode http						# 模式為 七層 http請求
      balance roundrobin			# 負載演算法 為 輪詢
      option httpchk GET /index.html			# 允許 HAproxy 進行 HTTP-GET Web服務的 /index.html,進行健康檢查
      cookie SERVERID insert indirect nocache	# 增加親緣性,Web服務回傳給用戶帶有Cookie的資料,用戶可以訪問到相同的服務器
      server Web1 192.168.178.7:80 weight 1 cookie 3 check inter 2000 rise 2 fall 5
      server Web2 192.168.178.16:80 weight 1 cookie 4 check inter 2000 rise 1 fall 3
  #  server1 服務器ID 真實Web-IP埠 權重 cookie值 進行檢測 檢測5次,其中連續有2次成功,代表該Web服務器健康,反之Web服務器故障

3.3、啟動HAproxy

1、啟動服務:
# systemctl start haproxy
2、查看是否有報錯資訊:
# vim /var/log/messages
3、查看服務啟動成功:
# ss -anpt | grep 80

3.4、進行測驗

# curl 192.168.178.60
web2
# curl 192.168.178.60
web1

3.5、登入 Web 監控頁面

在這里插入圖片描述在這里插入圖片描述

二、實戰一 動靜分離技術+Keepalived

在這里插入圖片描述

動靜分離技術
簡介:

  • 用戶請求資料時,訪問的是圖片,到達后方的圖片服務器
  • 訪問的是視頻,到達后方的視頻服務器
  • 訪問的文本服務器,到達文字服務器

1、環境準備

1、HAproxy1-keepalived1:192.168.178.60
2、HAproxy2-keepalived2:192.168.178.61
3、keepalived-VIP:192.168.178.200
2、Web1-html靜:192.168.178.7
3、Web2-php動:192.168.178.16

# systemctl --now disable firewalld
# sed -i '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config
# setenforce 0

2、Web

2.1、Web1-html靜

# yum -y install httpd
# echo 'Web1-html' > /var/www/html/index.html
# systemctl --now enable httpd
# curl  localhost
Web1-html

2.2、Web2-php動

a、安裝軟體
# yum -y install epel-release && yum -y install php php-fpm nginx
b、配置nginx 連接PHP
# vim /etc/nginx/nginx.conf
#在Server 中進行添加
server {
.........
location / {
                html    index.php index.html index.htm;
        }
         location ~ \.php$ {       #連接PHP服務器
            root /usr/share/nginx/html;   #php存放檔案的目錄
            fastcgi_pass 127.0.0.1:9000;   #PHP服務器的地址:埠 !!!!!!
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
       }
.........
	}

因為Nginx 與 PHP 部署在一臺機器上,不許要修改PHP 配置,直接啟動
c、 啟動服務
1、重啟nginx 與 啟動 php-fpm:
# systemctl restart nginx
# systemctl start php-fpm

2、查看服務是否啟動成功:
# ss -anpt | egrep '(80|9000)'
d、撰寫index.php,訪問
# echo '<?php phpinfo() ?>' > /usr/share/nginx/html/index.php

在這里插入圖片描述


2、HAproxy

兩臺主機同時進行

2.1、安裝軟體

# yum -y install epel-release && yum -y install haproxy keepalived

2.2、撰寫haproxy配置

# cd /etc/haproxy/
# cp -r haproxy.cfg haproxy.cfg.bak
# vim haproxy.cfg
global
   log 127.0.0.1 local3 info
   maxconn 4096
   uid   99
   gid   99
   daemon
   nbproc   1
   pidfile  /run/haproxy.pid
#--------------------------------------

defaults
   log   global
   mode  http
   maxconn  2048
   retries  3
   option   redispatch
   timeout connect 50000
   timeout client 50000
   timeout server 50000

   option   abortonclose
   stats uri /admin?stats
   stats auth Private land
   stats auth admin:admin
   stats hide-version
#--------------------------------------

frontend httpd-in
      bind 0.0.0.0:80			# 監聽埠
      mode  http
      log   global
      option   httplog
      option   httpclose

   acl php url_reg -i \.php$		#匹配 .php 結尾
   acl html url_reg -i \.html$		#匹配 .html 結尾

   use_backend php-server if php	#上方匹配成功后對應的后端
   use_backend html-server if html

   default_backend php-server
#--------------------------------------

backend php-server			#匹配 .php 對應的后端服務器,可以有多個,自定義
      mode http
      balance roundrobin
      option httpchk GET /index.php
      cookie SERVERID insert indirect nocache
      server Php1 192.168.178.16:80 weight 1 cookie 3 check inter 2000 rise 2 fall 5

backend html-server			#匹配 .html 對應的后端服務器
      mode http
      balance roundrobin
      option httpchk GET /index.html
      cookie SERVERID insert indirect nocache
      server Web1 192.168.178.7:80 weight 1 cookie 4 check inter 2000 rise 2 fall 5

2.3、啟動服務

1、啟動服務:
# systemctl start haproxy
2、查看日志:
# vim /var/log/messages 
3、查看服務啟動:
# ss -anpt | grep 80

2.4、測驗效果

1、訪問 HAproxy1:
# curl 192.168.178.60/index.html
Web1-html

2、訪問 HAproxy2:
# curl 192.168.178.61/index.html
Web1-html

在這里插入圖片描述
在這里插入圖片描述

3、Keepalived

3.1、Keepalived1

a、修改配置
# cd /etc/keepalived/
# cp -r keepalived.conf keepalived.conf.bak
# vim keepalived.conf
! Configuration File for keepalived
global_defs {                          #全域配置
 router_id HA1                        #設備在組中的標識,設定不一樣即可
 }

vrrp_script chk_haproxy {                #健康檢查
 script "/etc/keepalived/ck_HA.sh"     #檢查腳本
 interval 6                            #檢查頻率.秒(每隔6秒去執行腳本)
 weight -5                             #priority減5
 fall 3                                #失敗三次(嘗試三次,每隔兩秒去執行腳本,如果腳本失敗,就記下來,等檢查三次后,將優先級減5)
 }

vrrp_instance VI_1 {               #VI_1(組號),實體名兩臺路由器相同,
    state MASTER                        #主或者從狀態
    interface ens33                     #監控網卡(心跳網卡)
    mcast_src_ip 192.168.178.60         #心跳源IP
    virtual_router_id 55                #虛擬路由編號(組編號),主備要一致,
    priority 100                        #優先級 (主要應用與1主多從)
    advert_int 1                        #心跳間隔S (對方主機運行狀態的監控)/可以為毫秒級監控

    authentication {                    #秘鑰認證(1-8位)
        auth_type PASS                  #密碼認證型別
        auth_pass 123456                #密碼
    }

    virtual_ipaddress {                 #VIP
    192.168.178.200/24
        }

  track_script {                       #參考腳本,監控腳本
       chk_haproxy
    }

}
b、撰寫監控腳本

🔺決議:因為是與HAproxy部署在同一臺機器上,所以對HAproxy的高可用進行監控,HAproxy會對后方的Web服務進行監控,

# vim ck_hA.sh
#!/bin/bash
         #檢查HAproxy行程是否存在
       counter=$(ps -C haproxy --no-heading|wc -l)
       if [ "${counter}" = "0" ]; then
             systemctl restart haproxy
             sleep 5                  #嘗試啟動一次HAproxy,停止5秒后再次檢測
          counter=$(ps -C haproxy --no-heading|wc -l)
          if [ "${counter}" = "0" ]; then
                  systemctl stop keepalived    #如果啟動沒成功,就殺掉keepalive觸發主備切換
          fi
       fi
       
# chmod +x ck_HA.sh
c、拷貝檔案至 Keepalived2
# scp -r keepalived.conf 192.168.178.61:/etc/keepalived/
# scp -r ck_HA.sh 192.168.178.61:/etc/keepalived/

3.2、Keepalived2

1、修改配置:
# vim keepalived.conf
#找到進行修改
router_id  hA2
state  BACKUP
mcast_src_ip  192.168.178.61
priority  99

2、啟動 keepalived:
#systemctl start keepalived

3.3、所有Keepalived啟動

# systemctl --now enable  keepalived
# ip a

3.4、訪問測驗

# curl 192.168.178.200/index.html
Web1-html

在這里插入圖片描述

3.5、故障模擬

決議:將HAproxy1的組態檔移除,致使HAproxy起不來,實作VIP的轉移

1、移動 HAproxy1 的組態檔:
# mv  /etc/haproxy/haproxy.cfg  /opt/
# systemctl stop haproxy

2、查看 HAproxy2 上的IP,IP進行轉移:
# ip a

3、再次訪問服務,訪問成功:
# curl 192.168.178.200/index.html
Web1-html
# curl -I 192.168.178.200/index.php
HTTP/1.1 200 OK
Server: nginx/1.20.1
Date: Sat, 20 Nov 2021 04:49:01 GMT
Content-Type: text/html
Connection: close
X-Powered-By: PHP/5.4.16
Set-Cookie: SERVERID=3; path=/		# cookie ID
Cache-control: private

三、實戰二 生產環境

在這里插入圖片描述

決議:這也是企業中常用的一種架構,在生產環境中,haproxy與LVS等負載均衡設備往往不是單種存在的,主要是每一個設備都有自身的優點與缺點,把四層與七層組合起來使用,進行互補,既有四層的吞吐量,又有七層的精準定位與動靜分離等,這是再好不過了,

1、環境準備

LVS-VIP:192.168.178.100
LVS1-keepalived:192.168.178.60
LVS2-keepalived:192.168.178.61

HAproxy1:192.168.178.62
HAproxy2:192.168.178.63

Web1:192.168.178.7
Web2:192.168.178.16

1、關閉防火墻:
# systemctl --now disable firewalld
# sed -i '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config
# setenforce 0

2、修改主機名:
# hostnamectl set-hostname lvs1/lvs2/ha1/ha2/web1/web2

3、時間同步:
# yum -y install ntpdate
# ntpdate ntp1.aliyun.com

4、計劃任務,時間同步
# systemctl --now enable crond
# crontab -e
*/5 * * * *  /usr/sbin/ntpdate  ntp1.aliyun.com

2、Web 配置

2.1、Web1-html靜

# yum -y install httpd
# echo 'Web1-html' > /var/www/html/index.html
# systemctl --now enable httpd
# curl  localhost
Web1-html

2.2、Web2-php動

a、安裝軟體
# yum -y install epel-release && yum -y install php php-fpm nginx
b、配置nginx 連接PHP
# vim /etc/nginx/nginx.conf
#在Server 中進行添加
server {
.........
location / {
                html    index.php index.html index.htm;
        }
         location ~ \.php$ {       #連接PHP服務器
            root /usr/share/nginx/html;   #php存放檔案的目錄
            fastcgi_pass 127.0.0.1:9000;   #PHP服務器的地址:埠 !!!!!!
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
       }
.........
	}

因為Nginx 與 PHP 部署在一臺機器上,不許要修改PHP 配置,直接啟動
c、 啟動服務
1、重啟nginx 與 啟動 php-fpm:
# systemctl restart nginx
# systemctl start php-fpm

2、查看服務是否啟動成功:
# ss -anpt | egrep '(80|9000)'
d、撰寫index.php,訪問
# echo '<?php phpinfo() ?>' > /usr/share/nginx/html/index.php

在這里插入圖片描述

3、HAproxy 配置

兩臺主機同時進行

3.1、安裝軟體

# yum -y install epel-release && yum -y install haproxy keepalived

3.2、撰寫haproxy配置

# cd /etc/haproxy/
# cp -r haproxy.cfg haproxy.cfg.bak
# vim haproxy.cfg
global
   log 127.0.0.1 local3 info
   maxconn 4096
   uid   99
   gid   99
   daemon
   nbproc   1
   pidfile  /run/haproxy.pid
#--------------------------------------

defaults
   log   global
   mode  http
   maxconn  2048
   retries  3
   option   redispatch
   timeout connect 50000
   timeout client 50000
   timeout server 50000

   option   abortonclose
   stats uri /admin?stats
   stats auth Private land
   stats auth admin:admin
   stats hide-version
#--------------------------------------

frontend httpd-in
      bind 0.0.0.0:80			# 監聽埠
      mode  http
      log   global
      option   httplog
      option   httpclose

   acl php url_reg -i \.php$		#匹配 .php 結尾
   acl html url_reg -i \.html$		#匹配 .html 結尾

   use_backend php-server if php	#上方匹配成功后對應的后端
   use_backend html-server if html

   default_backend php-server
#--------------------------------------

backend php-server			#匹配 .php 對應的后端服務器,可以有多個,自定義
      mode http
      balance roundrobin
      option httpchk GET /index.php
      cookie SERVERID insert indirect nocache
      server Php1 192.168.178.16:80 weight 1 cookie 3 check inter 2000 rise 2 fall 5

backend html-server			#匹配 .html 對應的后端服務器
      mode http
      balance roundrobin
      option httpchk GET /index.html
      cookie SERVERID insert indirect nocache
      server Web1 192.168.178.7:80 weight 1 cookie 4 check inter 2000 rise 2 fall 5

3.3、啟動服務

1、啟動服務:
# systemctl --now enable haproxy
2、查看日志:
# vim /var/log/messages 
3、查看服務啟動:
# ss -anpt | grep 80

3.4、測驗效果

1、訪問 HAproxy1:
# curl 192.168.178.62/index.html
Web1-html

2、訪問 HAproxy2:
# curl 192.168.178.63/index.html
Web1-html

在這里插入圖片描述在這里插入圖片描述

4、LVS 配置

4.1、安裝軟體

LVS1:
# yum -y install ipvsadm keepalived
LVS2:
# yum -y install keepalived

4.2、LVS1配置

a、修改組態檔
# cd /etc/keepalived/
# cp -r keepalived.conf keepalived.conf.bak
# vim keepalived.conf
! Configuration File for keepalived
global_defs {
        router_id LVS1    #名稱,自定義
        }

vrrp_instance VI_1 {                            
        state MASTER                            #另外一臺機器是BACKUP
        interface ens33                         #心跳網卡
        virtual_router_id 51                    #虛擬路由編號,主備要一致
        priority 150                            #優先級
        advert_int 1                            #檢查間隔,單位秒
        authentication {
                auth_type PASS
                auth_pass 1111
                }
        virtual_ipaddress {
                192.168.178.100/24 dev ens33    #VIP和作業介面
                }
        }

virtual_server 192.168.178.100 80 {              #LVS 配置,VIP
        delay_loop 3                            #服務論詢的時間間隔,#每隔3秒檢查一次real_server狀態
        lb_algo rr                              #LVS 調度演算法
        lb_kind DR                              #LVS 集群模式
        protocol TCP
        real_server 192.168.178.62 80 {          #HAproxy1服務器
                weight 1
                TCP_CHECK {
                        connect_timeout 3       #健康檢查方式,連接超時時間 (每隔三秒去連接Web,如果超時,就認為Web服務down機)
                        }
                }
        real_server 192.168.178.63 80 {       	#HAproxy2服務器
                weight 1
                TCP_CHECK {
                        connect_timeout 3
                        }
                }
}
b、啟動服務,重啟
# scp -r keepalived.conf 192.168.178.61:/etc/keepalived/
# systemctl --now enable keepalived
# reboot

4.3、LVS2配置

a、修改配置
# vim /etc/keepalived/keepalived.conf
#找到進行修改
router_id  LVS2
state  BACKUP
priority  145
b、自啟動服務與重啟
# systemctl --now enable keepalived
# reboot

5、再次配置HAproxy lo:0虛擬介面

兩臺機器同時操作

5.1、配置虛擬IP -> lo:0

# cd /etc/sysconfig/network-scripts/
# cp -r ifcfg-lo ifcfg-lo:0
# vim ifcfg-lo:0
DEVICE=lo:0			#介面名
IPADDR=192.168.178.100		#LVS的虛擬IP
NETMASK=255.255.255.255		#地址唯一性
ONBOOT=yes		#自啟
#其他的注釋

5.2、配置路由

# vim /etc/rc.local
#添加
# 開機生效   確保如果請求的目標IP是$VIP,那么讓出去的資料包的源地址也顯示為$VIP
/sbin/route add -host 192.168.178.100 dev lo:0

5.3、配置ARP

1、忽略arp請求,可以回復
# vim /etc/sysctl.conf  
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2

5.4、重啟生效

# reboot

6、故障測驗

6.1、訪問服務

# curl 192.168.178.100/index.html
Web1-html
# curl -I 192.168.178.100/index.php
HTTP/1.1 200 OK
Server: nginx/1.20.1
Date: Sat, 20 Nov 2021 11:00:33 GMT
Content-Type: text/html
Connection: close
X-Powered-By: PHP/5.4.16
Set-Cookie: SERVERID=3; path=/
Cache-control: private

6.2、停止LVS1的keepalived,再次訪問服務

# systemctl stop keepalived
# curl 192.168.178.100/index.html
Web1-html
# curl -I 192.168.178.100/index.php
HTTP/1.1 200 OK
Server: nginx/1.20.1
Date: Sat, 20 Nov 2021 11:02:57 GMT
Content-Type: text/html
Connection: close
X-Powered-By: PHP/5.4.16
Set-Cookie: SERVERID=3; path=/
Cache-control: private

6.3、停止 HAproxy1服務,再次訪問服務

# systemctl stop haproxy
# curl 192.168.178.100/index.html
Web1-html
# curl -I 192.168.178.100/index.php
HTTP/1.1 200 OK
Server: nginx/1.20.1
Date: Sat, 20 Nov 2021 11:04:46 GMT
Content-Type: text/html
Connection: close
X-Powered-By: PHP/5.4.16
Set-Cookie: SERVERID=3; path=/
Cache-control: private

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/389118.html

標籤:其他

上一篇:數通技術-網路參考模型

下一篇:架構整潔之道:設計模式

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more