為應付龐大流量時後端可能不是只有一個伺服器,Nginx作為中間代理,能解析用戶端來的請求的路徑,做派發到特定後端伺服器處理,當中也可做些負載平衡的設定,讓流量分散到各伺服器,防止只有單一伺服器繁忙的狀況
2021年12月9日 星期四
Nginx學習筆記 (3) - Location 路由匹配
config 檔裡的 location 可用來定義請求 path 對應的回應
以下說明匹配規則
首先,要記住這幾個符號代表的意思:
1. = /uri:精準匹配,如果有對到搜尋會到此為止
2. ^~ /uri:前綴匹配,如果有對到搜尋會到此為止
3. ~ pattern:正規表達式匹配,區分大小寫
4. ~* pattern:正規表達式匹配,不區分大小寫
5. /uri:前綴匹配
6. /:通用匹配,所有的路徑一定會匹配到這個
採用的順序是:
1. = 精準匹配最優先
2. ^~ 前綴匹配,對到即使用
3. ~pattern, ~* pattern 正則匹配
4. 沒帶修飾的前綴匹配
5. 通用匹配
多個正則匹配的狀況,會選擇設定寫在上面的那個匹配
多個前綴匹配成功的狀況,會選擇匹配最長的那個
Nginx學習筆記 (2) - 配置設定與指令
Config 檔案
Nginx的config配置檔案
- /etc/nginx/nginx.conf (主配置)
- /etc/nginx/conf.d/default.conf (預設會被加載的配置檔)
Nginx學習筆記 (1) - 利用Docker建立測試環境
為了之後學習與測試方便,我們先利用Docker來建立一個Nginx測試環境吧!
檔案結構:
docker-compose.yaml
nginx/
├─ log/
├─ html/
│ ├─ index.html
├─ default.conf
2021年12月8日 星期三
[PostgreSQL] 資料庫的Race Condition問題與交易隔離等級
資料庫的操作會併發處理,因此也會遇到Race Condition問題
此篇文章會說明各種問題情境與解法
這裡主要是考慮使用的是 PostgreSQL 資料庫的狀況,不一樣的資料庫可能會有不同結果
- 髒寫 (Dirty Write)
在前一個寫入還沒commit前,後面的寫入覆蓋前面的值,就是 Dirty Write
範例:
DB: X = 0
Transaction A:寫入 X = 10
Transaction B:寫入 X = 5
Transaction A:COMMIT
Transaction B:COMMIT
最後 X = 5,Transaction A 的寫入被蓋掉了
2021年11月28日 星期日
[Python] asycio工作原理淺談
什麼是 asyncio
asyncio 是 Python 內建的module,在 Python 3.4 時加入
是一種單 thread 的設計,它靠著 cooperative multitasking (協同運作式多工) 讓我們能多個工作併發處理 (concurrent)
協同運作式多工相對於搶佔式多工(Preemptive multitasking),協作式多工要求每一個運行中的程式,定時放棄自己的執行權利,告知作業系統可讓下一個程式執行
多線程採用的是搶佔式多工,多線程是由作業系統做排程,線程執行任務途中會被外力(作業系統)中斷改排其他線程執行,而協同運作式多工不由作業系統排程,在任務執行時遇到需要等待回應的狀況,會放棄執行權,改執行別的任務,而原任務在等到回應後再繼續執行
這篇文章主要是大概介紹 asyncio是如何做到 cooperative multitasking
在介紹 asyncio 是怎麼做到 cooperative multitasking,首先需要知道什麼是Coroutine與Event Loop
2021年11月25日 星期四
[PostgreSQL] 常用SQL指令集
- 查詢Table的某筆資料
select "欄位名" from "表格名" where "條件"
範例:
select * from tb_customer where customer_id='xxxxxx';
select name from tb_customer where customer_id='xxxxxx' order by age asc; (order by "欄位名" [desc, asc])