Slide 1

Slide 1 text

以 PYTHON 應用 來推進 餐飲雲端 POS 系統 一個後端開發者 實戰分享 Keith Yang

Slide 2

Slide 2 text

大綱 第一章:笑說 路上的挑戰 第二章:最佳實踐 Q&A 2024 talk in PyCon TW

Slide 3

Slide 3 text

Web DEV Infra SRE 「我知道有一個 AI 可以做這個

Slide 4

Slide 4 text

Keith Yang 主任後端工程師 不時出沒在 PyCon 的人

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

iOS: Native 前端:React 設計:Figma iOS: Native 前端:React 設計:Figma

Slide 7

Slide 7 text

一路上的挑戰 第一章 10+ 年

Slide 8

Slide 8 text

技術架構回顧

Slide 9

Slide 9 text

Web Framework 每次的轉換與時機 為何升級或使用新 DB Python 2 -> 3 技術架構回顧

Slide 10

Slide 10 text

2012 Web2Py 2024

Slide 11

Slide 11 text

在 2012 時 全功能框架 簡單易用 快速開發 一個全端工程師:前後端、iOS Web2Py 創辦人之一

Slide 12

Slide 12 text

1.7 django 5.1.1 2014 2024

Slide 13

Slide 13 text

團隊喜好、知識分享 社群規模:更容易找人 強大的 ORM、第三方資源 django

Slide 14

Slide 14 text

2012 2024 2.7.3 3.3.0 Python 3.12.5 3.10 -> 3.11

Slide 15

Slide 15 text

開源社群的成長 國際趨勢 適合快速開發原型 科學計算和數據分析 Python 在 2012 時

Slide 16

Slide 16 text

Pyramid (用過) Flask (內部小服務) FastAPI (等待機會中) Django REST Framework (Legacy) Graphene GraphQL for Python 其它也是有(想)用(過)    Django Ninja (?)

Slide 17

Slide 17 text

django 整合型服務 vs 微服務 Monolithic VS Micro Services Gateway AWS Lambda Pyramid

Slide 18

Slide 18 text

django 整合型服務 vs 微服務 Monolithic VS Micro Services Gateway AWS Lambda Pyramid 強勢被回歸,在一起 還是比較好開發、好維護

Slide 19

Slide 19 text

資料庫 演進 MySQL MongoDB MySQL PostgreSQL MongoDB Redis SQL NoSQL

Slide 20

Slide 20 text

什麼 DB 什麼 DB 最好? 最好?

Slide 21

Slide 21 text

只有更好,沒有最好 當然也有更多問題

Slide 22

Slide 22 text

AWS RDS 上的 5.7 -> 8.0 無痛升級 研究、測試、觀察,演練再演練 MySQL 8.0 Instant DDL:許多 ALTER TABLE 的操作, 現在可以立即完成 Metadata 更改 更嚴格的 Metadata Locking,也可能造成 Django migration 時的鎖表 MySQL 5.7 -> 8.0

Slide 23

Slide 23 text

以為半夜三點升級安全 沒人想到 三點正好會跑一個例行的 scirpt 直接用 mysqlclient 開連線 select 完,沒有 commit 也沒有 rollback 就繼續執行其它要跑很久的任務 當然也沒有設定 autocommit

Slide 24

Slide 24 text

支援 GENERATED AS 各種性能改善: 大幅提升了 JSON 處理能力 平行查詢的進一步優化 B-tree 索引 partition 表改進 TOAST 優化 Vacuum 操作優化 ... Postgres 9.6 -> 12

Slide 25

Slide 25 text

以為建新的 DB 再切過去總沒事了吧 沒想到 建出來的新 DB 的 table 還沒熱起來 index 所需的統計資料不足 一些高頻率的 query 變超級慢 趕快幫它下 ANALYZE 現在你可能可以多問一下 AI Retro

Slide 26

Slide 26 text

2020 時,EC2 快要爆 EBS 硬碟容量上限 16 TB 兵分三路 上路:Code 中路:升級 下路:換掉 MongoDB 2.8

Slide 27

Slide 27 text

2021 年 AWS EBS 最大容量 從 16 TB 增加到 64 TB …

Slide 28

Slide 28 text

多用來做 Cache 沒有什麼特別關鍵的使用 沒有什麼特別的問題 2024 年:有一個認真用 Redis 來做的專案 Redis | Valkey

Slide 29

Slide 29 text

與第三方廠商團隊的對話: 「對啊去年有一次海纜斷掉,也是人仰馬翻 「喔~可能我們有用 GA,都沒發現 而 2025 的話,也許要看 AWS Taiwan Region 😉 AWS GA

Slide 30

Slide 30 text

AWS: WAF 被自己 DDoS 時的好幫手 從 v1 到 v2 a. 把常用的急救 rules 刪掉省錢 b. 忽然需要時找不到 c. 有些錢還是不能省 d. 防火牆 能出什麼事呢

Slide 31

Slide 31 text

擴展 vs 團隊 AWS: ECS 相比於 K8S,一兩個後端或 SRE 能掌握的佈屬環境 B2B vs B2B2C Business . Business . Consumer 線上點餐、訂位 從只有對餐廳到面對消費者

Slide 32

Slide 32 text

自動化 只收 Email 裡的 Excel 人工處理 廠商: 「我們公司只有人工團隊處理退件」 怎麼辦?

Slide 33

Slide 33 text

設定每天跑 Python script 寫一個 class query 失敗的交易 寫入 Excel 寄給廠商那邊的收件者 自動化 只收 Email 裡的 Excel 人工處理 SPEC!有先問廠商 「產出這樣的 Excel 可以嗎 現在可以想像 寫出步驟後 請 AI 完成一半的 code

Slide 34

Slide 34 text

Best Practice 第二章

Slide 35

Slide 35 text

CI/CD 單元 測試 監控 警示 備份  SRE 資安 AI

Slide 36

Slide 36 text

CD CI 持續整合 持續交付

Slide 37

Slide 37 text

CD CI 2018 2024 還在戰… ⬇️ ⬇️ ⬇️ 持續整合 持續交付 2000+ tests 11000+ tests Medium blog

Slide 38

Slide 38 text

CI in Pull-Request Jenkins GitHub Actions pre-commit flake8, ruff, black, isort 持續改善 持續檢查

Slide 39

Slide 39 text

UNIT TEST UNIT TEST 單元 測試

Slide 40

Slide 40 text

好改 比不好改好 好寫好讀 比不好寫不好讀好 好懂 比不好懂好 FUNCTIONAL FUNCTIONAL TEST TEST UNIT TEST UNIT TEST 容易重用! 容易重構!

Slide 41

Slide 41 text

好改 比不好改好 好寫好讀 比不好寫不好讀好 好懂 比不好懂好 好人 好人 一生平安 一生平安 好重用! 好重構!

Slide 42

Slide 42 text

監控

Slide 43

Slide 43 text

監控什麼 Logging, Errors RDS Database Performance Insights SQL Transaction n + 1, slow query CPU, Memory, Disk, ...

Slide 44

Slide 44 text

Sentry & APM on SLACK

Slide 45

Slide 45 text

Alarm 就警示什麼 Logging, Errors RDS Database Performance Insights SQL Transaction n + 1, slow query CPU, Memory, Disk, ...

Slide 46

Slide 46 text

不那麼容易: 平常發票少 應該要警示 過年的發票量 特別少是正常

Slide 47

Slide 47 text

Check and Use BACKUP 備份什麼

Slide 48

Slide 48 text

備份什麼 什麼時候會用到?備份到什麼程度? 每次升 DB 前常用到 RDS 規格: 每天有一個 snapshot 每 5 分鐘不同的地區備份 沒有確定能還原的備份也許不算備份

Slide 49

Slide 49 text

Security Easy 資訊安全不簡單 程式:讓錯誤容易明顯看到 不容忽略 防治宣導 社交工程演練 ISO 27001

Slide 50

Slide 50 text

SRE DevOps 人才 1. 性向 2. 技能 3. 成長方向 4.

Slide 51

Slide 51 text

這年代 Django 用 BigInt 給 DB 作 autoincrement 應該就沒事;不然生意太好就會出事 但是有舊的欄位不好改欄位型別的話 最近寫了一個 script 每季檢查一下各個 table DB ID 的整數值達上限

Slide 52

Slide 52 text

Developer Experince 開發者體驗

Slide 53

Slide 53 text

面試時,長官與團隊成員各方面的能力展現 在家工作 WFH : Working From Home 開發工具 與 團隊流程,對軟體工程的要求 組織對重構與償還技術債的看法 PR 的 Code Review 準則+機器人幫忙 職級與績效的評比&過程與耗費的心力 🧊

Slide 54

Slide 54 text

分享的風氣 + 社群影響力

Slide 55

Slide 55 text

總結:這些路上 選擇 Web Framework 與 DB、升級他們的 挑戰,以及週邊架構的挑戰 一些最佳實踐,以及演進或突變中的 SRE、CI/CD、Code 好寫好讀好測好改 測試、監控、備份、資安、開發者體驗 好人 好人 一生平安 一生平安

Slide 56

Slide 56 text

一個後端開發者的 實戰分享 以 PYTHON 應用 來推進 餐飲雲端 POS 系統 @keitheis @keitheis Keith Yang 2024 talk in PyCon TW