自我介紹
對各種系統充滿著好奇心的資深開發者,主攻 Web 後端開發、DevOps 自動化與基礎設施管理。
相信運作良好的系統不只是工程師們的努力,更上一層樓的關鍵是與業務單位的合作無間
- Web 後端開發 (熟悉 Node.js / Python,略懂 .NET core / Golang / PHP)
- Web 前端開發 (Vue.js)
- 伺服器與應用程式管理
- 使用 Proxmox VE / VMWare ESXi 建立虛擬化叢集
- Linux VM 建立與維護,使用 Ubuntu / Debian / CentOS / Alpine Linux
- Docker 容器管理,使用 Docker Compose 與 AWS ECS
- 將舊有 VM 佈署的應用程式遷移至 Docker 佈署,根據程式需求自行編寫 Dockerfile
- DevOps CI/CD pipeline 建立與維護,使用過 Drone, Gitlab CI, Jenkins, Azure DevOps
- 使用 ELK 和 Grafana Labs 系列開源軟體進行伺服器監控與 log 收集
- 使用 Prometheus 監控服務與網路設備健康狀態,針對沒有現成 Prometheus exporter 的設備自行開發監控程式
- 使用 CDN 與 WAF 服務阻擋惡意攻擊,使用 Imperva 與 AWS Cloudfront + WAF
-
雲端服務
- Amazon Web Services
- Google Cloud Platform
- Linode
- Vultr
- 網路管理
- 使用 AS38852 做 BGP Peering / Transit,並租用兩個 Class C 的 IP 使用
經歷
帶領 MIS 同仁們盤點沒有留下文件的網路架構,協助日常網路設備與伺服器維護,並主導 Pi 拍錢包上雲計畫的技術規劃
在 2023 年 5 月時,為了解決系統的技術債,同時擴充系統容量以應付雙 11 的大量交易,我們決定於 7 月展開上雲計畫,最後於 10 月中成功上線,遷移期間交易不中斷,讓對消費者與合作廠商的影響降到最小。
此計畫主要難點在前人留下的文件甚少,因此除了盤點所有網路設備設定以外,應用程式環境也是參考線上環境從零重建而成,同時將環境從傳統的 x86 架構轉換到 ARM 架構,可以節省 20-25% 的運算成本。
負責以下專案:
-
Pi 錢包上雲
此專案主要分成四大步驟進行:- 重建應用程式部署環境
- 盤點現有基礎架構,釐清系統架構
- 製作與實行遷移計畫
- 監控遷移以後系統狀況
-
重建應用程式部署環境
- 因前人沒有留下 deployment guide,因此參考正在線上運作的 VM,整理出執行程式所需要的 PHP 版本、資料庫、快取服務等 dependency
- 考慮到開發環境以 ARM 架構為主,同時使用 ARM 架構在雲端上可以節省 20 ~ 25% 的運算成本,因此便以前者為基礎從零開始編寫 Dockerfile,重新 compile 所有 PHP extension,並將佈署方式從 Apache 轉為效率更好的 Nginx + php-fpm
-
盤點現有基礎設施,釐清系統架構
- 盤點網路架構,包含線路盤點、子網路切分、VLAN、路由規則、防火牆規則、load balancer 設定、CDN 設定。
- 盤點應用層所有對外 API 入口與內部系統 API 端點的依賴關係,釐清資料流向
-
製作與實行遷移計畫
與 AWS 的 solution architect 合作,除了 review 架構設計以外,AWS 所提供的 migration plan 樣板規劃步驟,失敗時的 rollback plan 等,在許多細節上提供了非常大的協助。
技術重點摘要如下:- 使用 AWS Elastic Container Service (ECS) 從零重新架設所有交易核心服務
- 使用 AWS VPC Security Group 與 AWS WAF 將原有的防火牆規則遷移至 AWS
- 使用 Oracle Data Pump 與 AWS Database Migration Service 將資料庫從實體機遷移至 AWS Relational Database Service (RDS),不只執行單次匯入,也持續同步後續變更資料
- 使用 AWS site to site VPN 與 AWS Direct Connect 打通 IDC 的內網與 AWS VPC,並導入 OSPF 與 BGP 讓機器自動交換路由,減少要逐台機器設定的麻煩。也使用 AWS Transit Gateway 讓 VPN 與 Direct Connect 互為備援
- 部分無法使用 AWS ECS 重新架設的服務使用 AWS Application Migration Service (MGN) 將 VM 整台遷移至 AWS EC2
- 使用 AWS Step Functions 與 AWS EventBridge 將排程工作從使用 linux crontab 在 VM 上執行轉為在 ECS Cluster 上執行,讓運算所需的成本減少達 90% 以上,且更利於掌握執行成功狀況與時間長度,同時讓失敗的任務能夠在 Slack 發出警告或是自動重試。
此部分使用 AWS Cloud Development Kit (CDK) 編寫讓 AWS 上的資源也能如程式一般進行版本控制、複製與刪除。
-
監控遷移以後系統狀況
- 架設 Prometheus + Grafana 監控系統,在 Grafana 整合 prometheus / AWS CloudWatch 的監控資料,並在系統異常時發出警告到 Slack 通知 SRE 人員
- 自行編寫 Prometheus exporter 抓取如交易數量等業務性質資料,讓一個 Grafana dashboard 同時能從系統與業務角度掌握健康狀態。
-
網路設備與伺服器維護
-
盤點網路架構,並協助日常設定修改。
使用設備包含:- Cisco 2960/3560/3850 series switch (Cisco IOS)
- Cisco N3K series switch (NX-OS)
- Citrix ADC load balancer
- Fortigate firewall
- CheckPoint firewall
- A10 Thunder ADC load balancer
- 協助維護 HP / Dell / Supermicro 伺服器,使用 VMWare ESXi 做為 VM Host,使用 vCenter 管理叢集
-
盤點網路架構,並協助日常設定修改。
從零開始建立公司的資訊基礎架構,並主導公司內部系統與嘗試性新專案等多項專案開發
在母公司 (廿一世紀數位科技股份有限公司) 被網路家庭國際資訊股份有限公司 (PCHome) 收購與收購喬睿科技股份有限公司 (TapPay) 以後,協助團隊之間的技術合作與團隊整合與協作規劃
負責以下專案:
-
慢點付 Paylater (系統架構設計與後端服務開發)
- 是一個先買後付 (BNPL) 的支付平台,消費者只要提供身分證與個人基本資料,透過自行開發的信用評分系統,只需幾秒鐘審核就可取得消費額度
- 導入微服務架構,讓支付服務可以獨立快速擴展,不需要在容量不足時擴展整套系統
- 支付 API 規格相容 Line Pay,讓已經串接 Line Pay 的商家可以快速串接 Paylater
- 與兩家銀行串接 ATM 和超商繳款,提供消費者繳交帳單服務
- 信用評分系統串接政府各種查詢資料 API,並綜合上千萬筆法律相關資料建構出的評分模型,可在數秒內決定要給予消費者多少額度
- 導入 TypeScript、自行開發的程式範本與 Linter,讓初級工程師可以快速上手為專案貢獻程式碼
- 利用 Grafana 與 Redash 建構非技術人員也可簡單了解各種商業指標的 dashboard,同時也被用來抓出有問題的交易
-
電話訪問系統 (系統架構設計與後端開發)
- 為一多功能的雲端總機系統,基於 Asterisk 進行開發,包含名單自動撥號、來電佇列、大量簡訊發送、回撥、多層可客製化的權限等功能
- 全套系統架設於 GCP 台灣區,並直接連線至遠傳 SIP Trunk,中間不經過任何地端設備,提供最低的延遲與維護成本
- 藉由將總機架設在雲端,不需要 VPN 或昂貴的專線才可串聯不同辦公室之間的話機,實測在 NAT 環境下也可正常運作無虞
- 提供話機與 App 兩種使用方式,讓人員在公司內外皆可使用
- 架設 Kamailio 讓多台 Asterisk 可以共用同一批號碼撥出與撥入,更可在不同公司和用途之間切換號碼以避免號碼被回報為騷擾電話
-
挖礦機房建置 (協助進行規劃)
- 協助規劃兩個乙太幣挖礦機房建置,兩者加起來有超過 40 台礦機與超過 150 張 NVidia GTX 3070/3080 顯示卡
- 規劃機房網路架構,利用 GRE Tunnel 與辦公室內網串聯,並利用 OSPF 協定交換路由,讓機房的資料可以直接回傳公司
- 協助進行電力與冷氣容量估算與驗算,電力使用超過 50kW,同時提供 55kW 以上的冷房能力
- 使用 NodeMCU 搭配 DHT22 溫濕度感測器建立感測節點,加上 Raspberry Pi 4 執行自行編寫的 Prometheus Exporter 作為主機建立 IoT 環境監控,並搭配 Prometheus + Alertmanager 在溫度異常時自動告警
提供家庭與辦公室電腦購置維護、網路設備規劃建置、資訊系統外包製作服務
主導下列專案:
-
線上開店平台
- 一個簡易的線上開店平台,提供基本的進銷存與下訂單功能,且多間商店可共用同一個後端並套用不同版面
- 使用 Vue.js + Node.js 開發,且所有 API 都使用 GraphQL,讓 GraphQL schema 本身即是 API 文件
-
樂分期 網站維護
- 使用 Prometheus + Grafana 進行網站上線狀況監控與告警
- 使用 Twillio 搭配自行開發的 script 在網站出問題時自動撥打手機通知值班人員進行處理
- 協助進行原始碼 Review,抓出系統內數個 SQL injection 漏洞與造成嚴重效能異常的程式
將舊有的官方網站與行程訂購網站翻新,開發新系統並導入 AWS 與 CI/CD 流程
- 主導將舊有 server side rendering 的 jQuery + Django 架構漸進轉移到新的前後端分離 Angular + Node.js 架構,轉換中新舊兩個版本的後端同時運作且無資料不同步的問題
- 將後端從舊有的 Heroku 平台轉換至 AWS,並改以 Docker + ECS 進行部署
- 新架構串接 PayPal 與綠界金流,讓顧客在網站上下單完即可馬上付款
- 轉換至新架構時將業務邏輯完全重新梳理,讓訂單流程減少了 1/3 的步驟,同時減少了一半的訂單狀態
- 使用 AWS CodePipeline 與 CodeBuild 導入 CI/CD 流程,從 commit, build 到 deploy 一氣呵成
- 使用 AWS S3 + Cloudfront 部署舊有台北市立導遊協會網站,並協助使用 EC2 + PHP 7 + Wordpress 建置新版網站
技術能力
學歷
- 資工系實驗室
- 在實驗室導入 Docker 與 NAS,讓教授自行開發的 Java based 系統可以一個 script 完成部署,同時在電腦有問題時只要 15 分鐘即可將整套系統在另一台電腦上部署完成,同時有一套 shell script 讓不熟 Docker 的同學也可簡單管理
- 資工系計算機中心
- 提供網頁空間與可執行 shell 且有 root 權限的 Docker container 供系上學生申請使用,學生只需使用學校 email 信箱驗證即可自動開通,最高同時有超過千個 container 同時在線運作
- 負責規劃整體系統架構和基礎設施維運
- 利用 consul 與 registrator 管理所有學生 container 的上線狀況,並利用 sshpiper 轉發 SSH 連線,最後用 consul-template 在學生註冊時自動更新 sshpiper 和 nginx 的設定檔
- 利用 Docker overlay2 檔案系統的特性,讓學生的 container 疊在客製化的基底容器上,達成底下共通的 library 與工具可以共用不額外消耗硬碟空間,學生又可以自行依據需求安裝自己所需的 Library