產品要求的功能都都開發完了,但這並不是終結。怎麼樣做才能讓我們的服務具有更好的質量。
筆者結合自己的遇到的問題和工作中的經驗,並以提問的方式,給讀者一點點建議
2.1 如果伺服器重啟,服務是否能自動拉起?
建議加入/etc/init.d/local開機啟動
2.2 如果程式異常退出,服務是否能夠自動拉起?
建議用supervisor做守護。
2.3 如果程式異常退出,能夠自動拉起,那麼你怎麼知道服務是否發生了重啟?
建議用supervisor做監控、報警。
2.4 如果是web服務,qps是多少?每個url的qps是多少?
峰值是多少?一般在什麼時間點觸發?
每種url的請求量是否合理?
建議用efk收集日誌分析。
2.5 如果是web服務,每個請求的響應時間是多少?tp90?tp99分別是多少?
建議用efk收集日誌分析。
2.6 異常請求(比如http非200的比例是多少?)什麼樣的比例是合理的?為什麼?
建議用efk收集日誌分析。
2.7 如果是多例項部署,那麼整個系統的cpu、記憶體、併發qps承載極限是多少?如果達到了極限,瓶頸在哪兒(木桶原理中所謂的短板)
建議開啟profile, 壓力測試下。
2.8 服務都有哪些依賴項(微服務/資料庫/檔案系統)
其中哪些是無狀態的,哪些是弱狀態的,哪些是強狀態的。這些外部服務和系統,是否已經做到高可用?能否做到快速擴容?
2.9 服務消耗的頻寬多少?是否有可能達到頻寬上限。
2.10 服務在部署上,是否已經做到了二地三機房, 能否快速回滾,跨版本回滾?
1地為2個熱備,別一地為1個冷備或熱備。每個地區的網路線路,是否能做到2套或2套以上
(防止光纖被挖斷的情況)
2.11 dns/自動發現/配置中介服務是否能夠對後端服務進行探活,自動修改服務機的可用列表
建議用etcd/zookeeper/consul作服務發現。
2.12 部署是否實現了自動化,如果服務需要緊急擴容,該怎麼做?
基於docker/k8s的容器伸縮方案,擴容快,分鐘級別;
如果是ansible/jenkins/saltstack指令碼批量部署,擴容慢,可能是小時級別,對環境一致性要求嚴格。
2.13 文件是否完整,文件是否能與**保持一致
推薦用 gitlal readme或wiki.
2.14 如果是比較複雜的業務系統,是否有完整的自動化測試指令碼
推薦用gitlab或jenkins ci/cd。
2.15 如果使用了資料庫,比如用到了redis/mysql
可以池化,也即鏈結池,設定好最大的poolsize
2.16 如果使用了redis,每次redis操作的耗時是多少?tp90?tp99?
建議檢視mysql slowlog和程式打點tracing日誌, 並優化常見mysql事項,如索引。
2.17 如果使用了mysql,sql是否做過審核、有無慢查詢
建議檢視redis slowlog和程式打點tracing日誌。
2.18 如果使用了cache,cache的命中率是多少?
cache會不會與資料庫儲存不一致,不一致是否可以容許
2.19 如果使用了負載均衡,負載均衡與服務之間是長連線嗎?
如果服務和其它服務有互動,他們之間是長連線嗎?
2.20 服務所在機器cpu負載怎麼樣?連線數高嗎?
htop, iotop, 是否有大量的time_wait
和close_wait .
2.21 是否做了tracing
opentracing
2.22 是否記錄了access log
可能rsyslog收集nginx/ha 訪問日誌
2.23 服務是否能夠優雅退出?
不要用kill -9 ,而是kill -term 等通知程式,讓程式主動就緒後退出,可以延遲一定時間,比如5s。
2.24 服務如果是異常退出,是否會造成資料不一致?
如果有可能造成不一致,那麼如何發現這種不一致?有沒有對應修復的策略
比如在交易系統中的定期對賬
2.25 這個服務中,哪些部分是最核心的,是否能做熔斷降級處理
2.26 如果是api服務,有沒有對請求做超時處理
防止請求一直阻塞。
可能出錯的地方都埋點日誌,特別是io相關操作,並收集、上報打點日誌
2.28 資料庫有沒有定期備份?
如果已經做了備份,是否是備份在異構的資料庫中
2.29 如果是api服務,是否有請求頻率限制
可以是按照使用者維度,也可以按照ip維度來限制, 還可以按地域/業務型別等。
---完
讀《高質量程式設計指南》的一些心得
這本書的第一版很早就看過電子版的,當時看這本書完全是因為本書作者 林銳是我的校友。看過之後感覺寫的確實很好,尤其適合剛學完c語言的大學生來看,說實話,是這本書讓我了解到c語言原來還有這麼多需要規範的東西,這麼多可以提高效率的方法。自從看過這本書的原型之後,我就把它列印下來放在案頭,時常翻一翻來使自己...
整理了一些高質量的教程與大家分享
1.beginning.iphone.3.development,exploring.the.iphone.sdk apress,2009 7 2.iphone in action 3.iphone os 程式設計指南 4.iphone 開發基礎教程 5.learn objective c 6.mo...
「高質量」的手機號,讓電銷更高效
一款好的產品除了需要好的產品質量和特色的產品設計之外,好的銷售渠道和方式是這款產品能否火熱的關鍵因素。產品銷售方式的選擇也同樣需要根據產品的特色以及產品使用受眾的不同進行 因材施教 這樣才能真正達到銷售和推廣的目的。常見銷售方式包括以下幾種 1.實體銷售 有實際的經營場所和實際的經營商品的傳統銷售方...