Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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