1. 程式人生 > >後臺開發小筆記

後臺開發小筆記

單例模式

在應用這個模式時,單例物件的類必須保證只有一個例項存在。

服務程序中的其他物件再通過這個單例物件獲取這些配置資訊。這種方式簡化了在複雜環境下的配置管理。

  1. __new__實現
  2. 用裝飾器實現單例模式

普通、靜態方法、類方法

普通方法傳入的第一個引數必須是self(當然也可以不用self,官方要求儘量用self),self是指例項物件本身;

靜態方法無需傳參;

類方法傳入的第一個引數必須是class,是指類本身。

併發

Python的記憶體利用率

使用多執行緒:單核100% 雙核不到50% 四核不到30%,涉及到叫GIL(全域性直譯器鎖)的東西

但是多執行緒還是很有用的,比如網路爬蟲、文字處理等等。這時候由於網路情況和I/O的效能的限制,

Python直譯器會等待讀寫資料的函式呼叫返回,這個時候就可以利用多執行緒庫提高併發效率了。

需要使用多程序;

Java使用多執行緒則可以達到100%利用率

生產者-消費者模式

通過一個容器來解決生產者和消費者的強耦合問題。生產者和消費者彼此之間不直接通訊,而通過阻塞佇列來進行通訊

佇列在併發開發中最常用的。

我們藉助「生產者/消費者」模式來理解:生產者把生產的「訊息」放入佇列,消費者從這個佇列中對去對應的訊息執行。

事務:select @@tx_isolation

概念:應用程式中一系列操作,所有操作必須成功完成,否則每個操作中所作的所有更改都會被撤消。

結束條件

1.事務中步驟全部成功執行,事務提交

2.如果其中一個步驟失敗,傳送回滾操作,前面步驟取消

四個特徵

原子性:資料庫邏輯單位,要麼各操作都做,要麼都不做

一致性:資料庫只包含成功事務提交的結果

隔離性:一個事務的執行不能被其他事務干擾

持續性:一個事務一旦提交,他對資料庫中的資料改變就是永久性的

四種隔離級別

SQL標準定義了4類隔離模式,用來限定事務內外的哪些改變是可見的,哪些是不可見的。

  • read uncommit讀取未提交內容:所有事務都能看到其他未提交事務的執行結果。
  • read commit讀取提交內容:(大多資料庫系統的預設級別,非mysql),一個事務只能看見已經提交事務所作的改變。
  • repeatable read可重讀:(Mysql預設),他確保同一事務的多個例項在併發讀取資料時看到同樣的資料行。
  • serializable可序列化:最高的隔離級別,強制事務排序,使之不能相互衝突,在每個讀的資料行上加上共享鎖。

Redis

nosql 開源,C語言編寫的、Key-Value記憶體告訴資料庫,

儲存型別string、list、set、set、hash ,單個value的最大限制是1GB,

佇列技術,序列訪問,單程序單執行緒

資料淘汰策略:

1.從已設定過期時間的資料集中挑選最近最少使用的資料淘汰
2.從已設定過期時間的資料集中挑選要過期的資料淘汰
3.從已設定過期時間的資料集中任意選擇資料淘汰

伺服器

1.買一個雲伺服器,得到公網ip

2.linux用SSL開啟伺服器,windows使用putty開啟伺服器

3.執行的時候建立虛擬環境

4.傳輸python專案檔案(FileZilla)

4.安裝一個screen(python)將程式在後頭執行

web伺服器

B/S架構,Apache:socker監聽,工作佇列。

客戶端傳送請求,伺服器解析請求,讀取其他資訊,完成請求動作,關閉檔案和網路連線

如何在雲伺服器執行多個python指令碼

  1. 多終端執行:開sshd服務,安裝xshell,多開些會話
  2. 後臺執行:nohup xx.py;
  3. 守護程序方式:uwsgi/gunicorn/supervisor;
  4. docker方式:docker映象,執行container

python事件驅動模型(IO模型)

事件驅動程式設計是一種程式設計正規化,這裡程式的執行流由外部事件來決定。

它的特點是包含一個事件迴圈,當外部事件發生時使用回撥機制來觸發相應的處理。

Linux

io模式

  1. 阻塞 I/O(blocking IO)
  2. 非阻塞 I/O(nonblocking IO)
  3. I/O 多路複用( IO multiplexing)
  4. 訊號驅動 I/O( signal driven IO)
  5. 非同步 I/O(asynchronous IO)

通訊

  • 管道:程序間通訊
  • 訊息佇列:訊息的連結串列存放在核心中
  • SOCKET:它可用於不同機器間的程序通訊

負載均衡

主要作用是將大量作業合理地分攤到多個操作單元上進行執行,用於解決網際網路架構中的高併發和高可用的問題

DNS伺服器裡可以內部負載均衡和全域性負載均衡

快取儲存靜態內容、根域名伺服器、頂級域名、權威域名