發表文章

目前顯示的是 10月, 2019的文章

Markdown

[心得]一些工作經驗回顧

圖片
第一份工作持續了兩年多,雖然所在的單位系統已經上線 N 年了,非常穩定,剩餘的工作都是維護居多。 但因為人數持續增長,也陸續面臨了各種奇怪的挑戰,常常要翻 LOG 查問題跟上面的人報告可以有哪些解法。 在找這些問題學到了不少,加上常常需要跟 DBA 還有 DC 打交道,多少增廣見聞。 礙於全部的筆記跟資料都留在公司電腦了,趁著休息的這段時間, 剛好慢慢回顧一下兩年來的一些心得,並陸續整理在這篇文章。 一些工作經驗回顧 機器選擇 Q: 如何評估新服務機器量 A: 估當前需求,評估使用次數,讀得多,寫得多,呼叫頻率為何?是否離峰時段跟尖峰差距很大。 再評估未來一到兩年需求可能會增長的量,各別壓測WEB與DB,看是否會遇到瓶頸,決定好後把服務簡單搭起來完整壓測 WEB+DB 再次評估。 單台 WEB 機器+單台 DB 機器,WEB 遇到瓶頸: 解決方案: 1.加 WEB 機器,導入利用 nginx 做 loadbalance 優點: 簡單、便宜 缺點: 未來瓶頸變成 MYSQL、擴展性低、可用性低 2.拆服務、拆機器 優點: 性能高、擴展性高,未來可以依功能拆服務依服務加機器、可用性高 缺點: 須對服務本身拆分難度高、WEB 機與 DB 數量需要較多,較昂貴 機器的 loadbalance: 有錢: 利用機器例如 F5 在Layer4(連線層)、Layer7(應用層)做掉 沒錢: Nginx NGINX 方式有幾種算法 1.round-robin(default) 2.least connected load balancing 3.weighted load balancing 4.ip_hash 其中1~3方法無法保證同個使用者用到同一台。 另外曾經遇到使用最少連線時未設定上限, 導致瞬間大流量全部灌到同一台上掛掉,故設定上要小心。 http://mysql.taobao.org/monthly/ http://nginx.org/en/docs/http/load_balancing.html https://www.ithome.com.tw/node/65773 其他: worker_connections 、 client_max_body_...

[MySQL] Effective SQL 筆記

https://hackmd.io/GsfjtXfcTh64DMlRmvvrZg?both Effective SQL 資料庫模型設計 確定所有資料表都有主鍵 Customer Column 2 Column 3 John A. Smith Text Text Smith, John A. -------- -------- John Smith -------- -------- John A Smith -------- -------- Smith, John -------- -------- 上表中不一致的資料,雖然對電腦來說每筆都是獨特的,但其實可能是重複的, 而這種重複沒有程式來判斷行不通,就算將Customer訂為主鍵,符合了唯一需求,仍不是個好的主鍵。 主鍵特性: 儲存獨特值 不能為空 穩定(不會改變) 盡可能簡單(整數型態、非浮點數、字元,單一欄位而非多欄位) 常見手段,使用自動產生的無意義值作為主鍵,名稱由RMDBS軟體所訂, 例如IBM DB2、MSSQL、 Oracel 12c 的 IDENTITY,MS Access 的 AutoNumber、 MySQL 的 AUTO_INCREMENT,PostgreSQL 的 serial。 (搭配 redis 產生 sequence) 資料參考完整性(Referential Integrity) RI 在 RMDBS 中是一個非常重要的觀念。 強制 RI 表示具有非空的外來鍵的子資料表中的每個列必須在父資料表中有相對應的紀錄。 消除重複儲存資料 減少不一致資料與處理資雲 消除重複群組 欄代價高,列代價低 每個欄位只存一個屬性 通常不會儲存計算出的資料 定義FK保護參考完整性 確保資料表關係的合理 不是任何關聯都應該被建立 3NF以上正規化 對資訊倉儲使用反正規化 大量讀取少量寫入時,帶有全部所需資料的表索引應用更有效率,可以加快速度。

[bash]bash 筆記

Shell https://hackmd.io/GjVsVinmSjqk6ZrhRi778Q?both #!/bin/bash # :<<BLOCK BLOCK #!/usr/bin/ruby :<<BLOCK REGEX \ 跳脫字元 ^ $ *等價於{0,} 匹配前面的紫表達式任意次 zo* z zo zoo + 匹配>=1次 zo+ zo zoo 等價 {1,} ? 匹配0次或1次 do (es)? do does 等價{0,1} {n} 匹配n次 o{2} food {n,} 至少匹配n次 {n,m} 匹配最少n次最多m次 ? 非貪婪 . 匹配除 "\r\n" 之外的所有字符, 若要匹配包含 "\r\n" 在內的所有字符,請用 "[\s\S]" () x|y z|food z,food,zood; (z|f)ood zood,food BLOCK Shell 特殊符號 " => 用來使 shell 無法辨識出字符 $ ` \ 以外的任何字符或字串,又稱為弱引用 ’ => 用來使 shell 無法辨識出所有特殊字符,也稱之為強引用 ` => 將當前命令優先執行 ; => 允許在一行上放多個命令 & => 背景執行,通常會加上 nohup {} => 建立命令區塊 <>& => 重新定向 *? []! 模式匹配 $ 變數開頭 # 表示注釋(第一行除外) 變數與運算符號 變數名稱="變數" readonly 變數名稱=“變數” 不能被改變 echo $變數名稱 set 顯示本地所有變數 unset 變數名稱清除變數值 readonly 顯示當前 shell 下唯讀變數 變數設定在 $HOME/.bash_porfile(/etc/porfile) 設定環境變數 export test=“123” 查看 env、export # !/bin/bash # shell 支援的位置變數有10個,超過要用其他方法表示 echo "第一個變數: $0...