Yuanchieh's Blog
生命是長期而持續的累積
All Posts
About
Categories
Posts
25
Apr 2022
【MySQL】Lock 與 Index 關係和 Deadlock 分析
整理 MySQL 的 Lock 與 Index 關係,以及 Deadlock debug 過程
02
Apr 2022
【DDIA】03 - 資料庫儲存原理研究
整理 DDIA 第三章:關於資料庫儲存原理
06
Feb 2022
I/O 同步與非同步:從硬體、作業系統到應用程式
每次在思考程式語言的執行、I/O 的同步與非同總會有些觀念繞不過去,這次從硬體到作業系統重新理解,對於I/O 的執行有不同的認識
02
Feb 2022
筆記:CloudFlare 優化封包接收的過程
筆記一些 CloudFlare 有趣的文章,關於如何優化作業系統接收封包的過程
14
Jan 2022
「領域驅動設計與簡潔架構入門實作班」上課筆記與心得:關於敏捷、 DDD、 Event Storming 與 Clean Architecture - 上
結論 - 要學 DDD 直接報名 Teddy 的課程絕對是投資報酬率最高的方式
05
Dec 2021
《單體式系統到微服務》讀後分享 - 下
近日公司要開始大力導入微服務,趕緊惡補一些相關知識,這本書一開始提了一些「不該導入微服務」以及思考微服務的替代方案,後續提供導入微服務的幾種模式,尤其是資料庫的部分
03
Dec 2021
《單體式系統到微服務》讀後分享 - 上
近日公司要開始大力導入微服務,趕緊惡補一些相關知識,這本書一開始提了一些「不該導入微服務」以及思考微服務的替代方案,後續提供導入微服務的幾種模式,尤其是資料庫的部分
22
Nov 2021
Python - 直接執行 package 下的 module 的錯誤
最近因為資料分析開始大量使用 Python,因為是與同事在同一個 Package 下拆分不同 Module 協作,當我想要直接執行 Module 就遇上 「ModuleNotFoundError No module named」的錯誤
14
Nov 2021
《Effective SQL》讀後分享
《Effective SQL》分享 61 個優化 SQL Database 相關的技巧,有些關於資料表的設計與複雜的關聯式查詢有很多不錯的點子,是本很實用的工具書
06
Nov 2021
《設計重構》讀後分享
《設計重構》主要分享程式設計上的壞味道,用實例分享如何識別壞味道,並給予重構上的優化建議
10
Oct 2021
MySQL Replication 與 RDS
與同事某一天看到 RDS MySQL read replica 盡然可以 writable,覺得這也太神奇了,花了點時間理解 MySQL Replication,並實驗怎樣的更改會導致 replication 中斷
05
Sep 2021
使用 InversifyJS 達到 Iversion of Control 控制反轉
高層次物件不應該依賴於低層次物件,例如 Controller 處理商業邏輯不應該依賴於資料庫儲存的邏輯,避免低層次物件的改動與耦合導致高層次物件需要跟著修改,透過 InversifyJS 管理 IoC
10
Jul 2021
Nodejs / Ruby / Golang 套件版本管理差異:比對 NPM 與 Bundler
使用套件對於一名開發者很重要,畢竟不可能一直重複造輪子,但套件的載入、版本管理不是一件這麼簡單的事,本篇比對 Nodejs 生態中的 NVM 與 Ruby 的 Gem/Bundler,看套件管理有什麼不同的方法與限制
02
Jul 2021
AWS Aurora 架構研究以及與自駕 MySQL 的差異
AWS Aurora 是 AWS 託管的兼容於 MySQL/PostgreSQL 的雲端關聯式資料庫,我一直誤以為他就是個託管服務與管理跨區域 Replica,但為了因應雲端與效能改善,底層儲存架構與自駕的 MySQL 截然不同
26
Jun 2021
壓測工具:JMeter 使用教學 + 自定義變數使用
壓測工具有很多,JMeter 算是蠻主流也是我一直很喜歡的工具,除了針對單一的 request 發送外,可以設定變數讓 request 不在單一,增加測試的真實性
15
Jun 2021
Youtube 直播「Fred聊聊SOLID設計原則」整理
本來抱持著聽看看的心態,但聽完覺得十分震撼,沒有想到 SOLID 應該是這樣理解的
06
Jun 2021
Golang 併發處理 Mutex / RWMutex / SingleFlight
研究 Mutex , RWMutex 性能對比,以及併發下用 SingleFlight 避免擊穿問題
30
May 2021
深入理解 WebRTC
工作中在瀏覽器用過 WebRTC / 也自架過 TURN Server ,決定從實作原理重新認識 WebRTC
01
May 2021
【Refactoring Ruby Edition】(一) 體驗重構
Refactoring Ruby Edition 系列第一篇,體驗重構的魅力
23
Apr 2021
一日參觀 ARRC 實驗室
ARRC-台灣太空隊,一群深信台灣不能在未來太空時代缺席的熱血中年阿杯們組成的隊伍,打算製作屬於台灣的火箭,因為先前的贊助有幸參觀實驗室,分享參觀的過程
02
Apr 2021
【跨程式語言上手】Ruby 基礎教學
跨程式語言上手系列,用最短的時間上手 Ruby,包含基礎語法 / testing / api server / module 等
18
Mar 2021
Golang Test - 單元測試、Mock與http handler 測試
分享如何在 Golang 中針對 http server 寫測試,包含單元測試 / 如何針對有外部相依性的物件做 Stub / Mock,以及最後針對 http handler 的 http request 測試
07
Mar 2021
《創意競擇》心得分享
作者是曾經是 Apple 首席軟體工程師,參與過 Safari / iPhone 第一代鍵盤設計 / iPad 鍵盤設計,在書中分享在 Apple 參與軟體設計的過程,包含與賈伯斯的互動 / 與設計師反覆溝通找出技術與人文交會之處,令人振奮且發人深省的一本書
07
Mar 2021
從 Nodejs 到 Golang: Concurrency 實作比較
Golang / Nodejs 試著透過有效率地使用 Kernel Thread 方式增加 Concurrency 處理能力,但兩者在實作上有不同的方式,以下將比較核心實作差異與語法上使用的不同
16
Feb 2021
【極速開發+】上課與練習心得
在朋友的推坑下,上了 91 老師在 1/10 的【極速開發+】,目的在於提升工程師對於自我生產力的提升,以下分享上課與練習的心得
06
Feb 2021
【工程師看商業】技術工作者的商業思維講座分享
91 大大分享職涯的過程以及當中選擇的心路歷程
26
Jan 2021
《Clean Coder 無瑕的程式碼》心得
身為工程師,寫程式的能力固然重要,但是身為一個在商業世界提供價值的專業人士,還有心態上、溝通上等軟實力的修煉,Robert C. Martin 分享他的見解
21
Jan 2021
如何打造安全的 production ready Node.js Docker Image
近日常把舊有的 Node.js 專案打包成 Docker Image 部署,過程中不斷思考怎樣的打包過程才是安全、有效率的,分享一些好文與發現
19
Jan 2021
【工程師看商業】量化行銷的流量思維講座心得
關於 KKday 營銷長 Yuki 老師分享量化行銷的觀念與實務經驗的心得分享
26
Dec 2020
MySQL Deadlock 問題排查與處理
週末寫點簡單的 SQL 遇到了 Deadlock,才發現 foreign key 會有額外的 lock 效果導致 Deadlock,重新翻閱 MySQL 文件並分享排查過程
01
Dec 2020
UUID 原理與實作分析 - 該如何挑選適合的 UUID 版本
斯斯有好幾種,UUID 總共有 v1~v5,本篇將從 RFC 文件開始,並介紹 js 中 uuid 的實作方式,幫助大家找到適合的 UUID 方案
30
Nov 2020
一人備戰環花東365挑戰賽 - 備賽、比賽過程分享
八月底購入自行車後,在九月便腦衝報名了環花東 365 挑戰賽,在沒有加入車隊、也沒有太多資料搜集的狀況下,自己瞎練並硬著頭皮完賽了,希望完整分享自己的備賽過程與比賽的經歷,能夠分享給一個人想要挑戰環花東 365 的車友
17
Nov 2020
Sketch Data Structure - Bloom Filter 介紹與實作
犧牲部分準確性,Bloom Filter 用少量的記憶體與 O(1) 的查詢時間回答「某值是否曾經出現過」的問題
03
Nov 2020
Raft 演算法介紹與《In Search of an Understandable Consensus Algorithm》摘要
Raft 演算法是一種 Consensus 演算法,提供分散式系統中可容錯的「強一致性」資料同步的方式,意圖取代複雜難懂的 Paxos,主要由三個機制 Leader / Log Replication / Safety 三塊組成
28
Oct 2020
Gossip Protocol 介紹 (下) - 《Efficient Reconciliation and Flow Control for Anti-Entropy Protocols》論文摘要
延續上篇的研究,接著閱讀了《Efficient Reconciliation and Flow Control for Anti-Entropy Protocols》論文理解 Gossip Protocol 的原理以及應用
26
Oct 2020
Gossip Protocol 介紹 (上) - 從 Cassandra 內部實作認識 Gossip Protocol 的使用
在學習 Consul 與 Redis Cluster 過程中,都提及使用 Gossip Protocol 同步集群中節點的狀態,究竟機器之間怎麼談茶水間八卦實在令人好奇,透過 Cassandra 內部實作理解 Gossip 的原理
19
Oct 2020
Redis Cluster 介紹
參考文件摘要 Redis Cluster 使用與架構
18
Oct 2020
使用 Redis 當作 API Rate limit 的三種方法
API Service 在操作某些行為時需要耗費資源,如果 Client 不如預期的大量呼叫,會造成服務受到嚴重的影響,所以需要針對用戶做 API 呼叫次數的限制;Redis 作為中心化的高效能記憶體資料庫,很適合拿來當作 Rate Limit 的儲存方案,以下分享三種常見的做法 static time window / sliding time window 與 token bucket
08
Oct 2020
公路車新手上路 - 入坑一個月的心得
在同事的推坑下,買個公路車開始在台北走跳,分享一些當時購車至今的一些心得與建議
04
Oct 2020
配眼鏡推薦 - 靈魂之窗與光明分子
分享靈魂之窗與光明分子的配眼鏡心得
22
Sep 2020
RFC 5389 - STUN 協定介紹
STUN 主要是應用於 NAT 穿越技術中,本篇為 RFC 5389 的閱讀心得,分享 STUN 背後的設計原理與結構
21
Sep 2020
Coturn Server 架設教學 - on AWS
Coturn 是知名的 open source STUN/TURN server,本篇分享如何在 AWS 上架設與遇到的坑,以及設定檔的撰寫等
17
Sep 2020
《一千零一個點子之後:NETFLIX創始的祕密》閱讀心得
扎實的 Netflix 共同創辦人 Mark Randolph 心路歷程
15
Jul 2020
Elasticsearch 教學 - API 操作
主要針對 Elasticsearch 的實作與 API 操作
08
Jul 2020
Elasticsearch 系統介紹與評估
Elasticsearch 系統架構分析
07
Jun 2020
gRPC 介紹與 Nodejs 實作分享
gRPC 是一種由 Google 推出的 Client / Server 通訊協定,有別於一般常見的 HTTP + JSON 的 API Endpoint,gRPC 帶來了協作與效率上改進
27
May 2020
JS Proxy / Reflect 實戰 - 實作 API 自動 retry 機制
介紹 ES6 推出的 Proxy 與 Reflect,並分享使用場景 - console log 於正式環境複寫功能與API 自動 retry 機制
23
Apr 2020
Vault 教學-集中化管理機敏資料(上)
初步介紹 Vault 的基本功能,包含 Secrets 管理 / Authentication / Authorization 在 Vault 當中的實踐
15
Apr 2020
Packer教學-打造 Image與實際使用經驗
使用 Packer 打造建制步驟透明的 Image 流程
12
Apr 2020
Vagrant 教學- 從本地端開發到 AWS 部署
12
Apr 2020
Infrusture as Code 挑戰賽 - Hashicorp 工具鏈全教學
05
Apr 2020
閱讀心得《Designing with Data 善用數據幫你打造好設計》
29
Feb 2020
DNS over HTTPs 分享
DNS 查詢可以基於 UDP 或 TCP 查詢域名的對應紀錄,但是目前沒有過多的保證與安全性,基於個人隱私與安全性考量,如今推出了 DNS over HTTPs,基於 HTTPS 安全性與隱密性保護 DNS 查詢
06
Feb 2020
Expressjs Middleware 如何在 Response 結束觸發
因為 express.js 設計因素,如果要自行設計一個 Middleware 在 response 結束時才觸發會比較麻煩些,透過研究紀錄 response time 相關的 middleware 參考他人怎麼實作的
06
Feb 2020
MongoDB 批次處理大量數據
在大量查詢時必須小心使用語法,避免 MongoDB 反應不來
14
Jan 2020
Redis Lock (Redlock) 分散式 lock 原理分析與實作
Redlock 是一種 Redis 作者 antirez 基於 Redis 設計的分散式 lock 機制
01
Jan 2020
Webassembly 教學 - 基本運算、陣列處理與指針
Webassembly 實戰分享
14
Dec 2019
[閱讀心得] 《原子習慣》細微改變帶來巨大成就的實證法則
有意識的培養自己的潛意識
04
Nov 2019
初試 Terraform - 基本介紹與用程式碼部署 Lambda (下)
Terraform 提供跨雲平台的 Infrastructure as code 方案,用 DSL 編寫檔案管理雲端架構
30
Oct 2019
初試 Terraform - 基本介紹與用程式碼部署 Lambda (上)
Terraform 提供跨雲平台的 Infrastructure as code 方案,用 DSL 編寫檔案管理雲端架構
02
Oct 2019
SDP Spec 閱讀筆記
SDP 被應用於多種媒體串流協定中,主要是用來協議雙方所支援的媒體通訊格式
02
Oct 2019
《How Javascript Works》讀後整理 上
Douglas 思考著 The Next Language 下一代的程式語言該具備的樣貌,延伸前作 《JavaScript- The Good Parts》,Douglas 頗析 JS的每一個環節,先解構 JS現有的存在,再重構出一門他覺得最接近下個世代程式語言的雛形
18
Sep 2019
如何設計 REST API
後端工程師最基本的技能要求是設計符合 HTTP-based REST 的API,對你來說 REST API 的第一印象又是什麼呢? 面對一些特殊狀況沒辦法很好用現有的 REST 表達,你又會如何設計呢?
18
Aug 2019
讓 Node.js 跑得更快! ES4X 專案與Graal VM 介紹
認識不同的 JS Engine,讓你的 NodeJS 專案有不同的可能性
09
Aug 2019
V8 內的排序演算法 — Timsort
Timsort 廣泛應用在 Python / Android,現在 V8 JS Engine 也改用 Timsort 當作預設的排序法,此篇分享 Timsort實作的細節
10
Jun 2019
龍舟第二年 — 關於自信
划龍舟邁入第二年,開始習慣三月到六月以划龍舟當作一年的開端,重新調整自己的心態與體態;邁過第一年痛苦的入門期,第二年漸入佳境,開始可以享受划船的樂趣與比賽的刺激,也開始在這過程體會到一些其他心境上的成長,關於自信與團隊這件事。
25
May 2019
龍舟舵手研習營心得
划龍舟邁入槳手二年級生,體能與划槳上慢慢可以跟上大家,雖然還有很多需要調整的細節與磨練,每次練習也都是累得半死,但確實比較得心應手些,慢慢享受龍舟的樂趣;
29
Apr 2019
Route53 Latency-Based Routing 機制 — DNS 如何評估延遲
前陣子做全球不同地區 API Server 的部署,希望用戶基於延遲性選擇最靠近的 API Server,透過 Route53 + API Gateway 實作非常簡單。
08
Apr 2019
Http persistent connection 研究與 proxy — server keep-alive timeout 不一致的 502 錯誤
架構上使用 elb 當作 load balancer proxy,後端接 nodejs api server,但是偶爾拋出 502 錯誤,後來發現是 proxy 與 server 間 keep-alive 差異所造成
05
Apr 2019
Linux Traffic Control (tc) 研究
以下介紹如何使用 Linux Kernel 內建的工具 tc ,完成
19
Feb 2019
CS50 — lecture 0
最近在教人寫程式,發現自己雖然有寫部落格的習慣,但是要如何用口語表達卻還有很大一段的落差,更困難的是「我不知道從何教起」
27
Jan 2019
AWS-CDK教學 — Infrastructore As Code 用程式碼管理架構
最近陸陸續續在看 AWS re:invent 2018 的影片,主要專注於 CI/CD這一部分,以下內容主要出自於,不得不說看完真的是非常振奮人心啊!
20
Jan 2019
如何用解除授權攻擊強迫裝置斷線 Wifi 連線
內容參考 @Brandon Skerritt 的創作,以下僅為個人轉譯成中文,執行平台從作者的 Kali Linux 改為 Mac,紀錄一些執行的細節。
05
Jan 2019
菜鳥茶客-從路人到入門
開始學泡茶也學了三個月,想說培養興趣最困難的其實是第一步,在學茶的過程有些經歷蠻有趣,覺得分享出來供對茶葉感到好奇的路人,跟我一起入門體驗喝茶的樂趣。
01
Jan 2019
V8 Zero Stack Async Stack Trace 研究
這份是在 2018/11/20 由 V8 Team 釋出的文件,主要描述用一種新的Async 錯誤追蹤機制,此新機制僅適用於 async await
28
Dec 2018
愛用 async / await 而非 promise!
近期看不到少關於 async / await 的好文章,這裡特別摘錄兩篇總結
25
Dec 2018
V8 如何優化 async / await
JS 基於事件驅動,大量的 Promise 充斥在應用程式中,其後在 ES2017 加入了 async/ await 語法糖後,讓非同步代碼更加簡潔與直覺
17
Nov 2018
Stripe 串金流教學 (上)
Stripe 是一間國際的金流支付公司,提供 client (Web / Android / iOS等)支付介面與 server-side API,用最短的時間就可以讓服務接上金流
14
Oct 2018
MongoDB Isolation 與 Transaction
在 MongoDB中,其 Isolation 與 SQL標準定義的 Isolation Level不同,畢竟NoSQL注重於海量讀寫 、集群式的應用場景,自然所面對的問題也就差異很多,但也因此在面臨 Concurrency 時的讀寫保證問題,以下是閱讀官方文件並整理的結果。
25
Sep 2018
[筆記] AWS s3 性能提升小撇步 — Amazon S3 Performance Tips & Tricks
AWS S3 用來做靜態資源管理,可以用來儲存非常大量的資料且有很高保持性(duribility:99.9999999%)的保證;在這篇官方的部落格中記載著S3內部的一些儲存機制以及優化的小技巧。
24
Sep 2018
HLS 教學 (上) — 從閱讀Spec 開始
在數位內容的時代,影音的閱讀比例也越來越高,相關的直播與影音串流服務越來越多,而其中最常使用的串流技術規格便是HLS;近日工作上開始使用不少HLS服務,決定自己翻Spec搞懂整個技術架構,並整理成筆記分享。
08
Sep 2018
MongoDB Shard Cluster 架設
在大量資料需要儲存下,可以將 MongoDB做 Sharding 與 Replica Set 設置,增加DB的吞吐量與可用性。
27
Aug 2018
Express 與 Koa 如何處理錯誤
以前只注重把功能寫出來而已,慢慢地開始維護後發現一開始的系統規劃很重要,包含基本的 Loggin / Debugging / Error Handling,以及是否能將每個物件函式乾淨拆分避免過多副作用無法編寫測試(詳見另一篇網誌)
23
Aug 2018
PostgreSQL json 操作
Postgresql 可以用欄位 jsonb型別儲存 json格式的資料,並提供不少內建的函式可以協助查詢,以下稍微整理一些常用的情景。
21
Aug 2018
新店同心救難隊 52期救生員訓練心得
平常喜歡水上活動,但沒特別喜歡游泳,所以泳技、水性都很差,一開始先從捷式重新學起,兩個禮拜加強後學會換氣勉強可以遊完50公尺,接著就直接挑戰救生員訓練,真的是生不如死啊XD
06
Aug 2018
使用 Jest 做API 單元測試的範例與細節
nojest 之前寫測試因為沒有注意細節,導致非常難編寫單元測試;改以 End-to-End測試,直接用docker 開DB輸入假資料,接著執行 Server App 對API一隻一隻測試。
30
Jul 2018
MySQL Explain分析與Index設定查詢優化
資料庫日積月累資料量逐步攀升,MySQL在一般查詢是透過全表搜尋,所以大量的資料會導致查詢等方式越來越慢
30
Jul 2018
DNSSEC 基本原理介紹
前陣子在看 Cloudflare一些相關設定,剛好看到 DNSSEC這個技術名詞,以下是認識後的筆記。
16
Jul 2018
為什麼要理解 Nodejs Event Loop:Dataloader 源碼解讀與分析如何解決 Graphql N+1問題
Nodejs底層是事件驅動,透過 Event Loop處理非同步(non-blocking)操作,讓費時的I/O操作可以交由libuv去呼叫系統事件驅動的 system api或是用 multi thread方式處理,而Main thread則持續處理request或其他運算。
11
Jul 2018
HTTPS不代表安全:Cloudflare SSL 研究從Server到Cloudflare
網頁瀏覽時出現HTTPS的綠色鎖看了令人放心,這似乎代表著我們在網站瀏覽的資料有受到「完整的加密保護」,不用擔心資料被偷窺與被調包等等MitM中間人攻擊的風險,但事實當然沒有這麼簡單。
27
Jun 2018
Jonathan Martin: Async patterns to scale your multicore JavaScript elegantly 總結與試驗
利用Async Pattern 提升JS在多核心上的執行速度
23
Jun 2018
龍舟比賽初體驗 — 一些關於訓練、比賽的心路歷程
2018/03/13,參加了新店同心救難隊的龍舟訓練團,每天清晨 05:30 ~ 06:30 在碧潭操練,假日不停一路練到 2018/06/15 總計99天的訓練,為自己的人生熱血一次
21
Jun 2018
MySQL 關於地理位置的儲存與運算
最近突然好奇如何做LBS服務,最基本的應用場景就是找出某經緯度位置內方圓距離多少內的所有資料,所以就來研究一下MySQL如何處理地理位置。
01
Jun 2018
Google Sheet API 與Google OAuth2 API授權研究
Google 提供可以大量用 API介接的服務,本篇整理 Google 常用的幾種 API授權,與 Google Sheet API 如何使用
28
May 2018
資料庫 Isolation level 與實際應用情境處理
Transaction 交易機制,可以讓單一或多筆操作聚合為單一的原子性操作,一次性成功寫入或失敗回滾,避免資料庫出現資料不一致的狀況。
19
May 2018
The Twelve-Factor App 閱讀筆記
The Twelve-Factor App 是由一群有豐富經驗的工程師,整理開發一個Web應用程式(或是所謂的SAAS software-as-a-service)開發方針
15
May 2018
Chrome extension 開發分享
基本的 Chrome 插件開發分享,擴充網頁滑鼠控制的功能
06
May 2018
[閱讀心得]《我們》、《1984》、《美麗新世界》反烏托邦三部曲
思考「外在環境與內在基因如何影響人類思維」這類型的議題,這一系列反烏托邦的書籍讓人去正視環境與體制對個體的影響與危害
24
Apr 2018
MySQL FOREIGN KEY Constraints 整理
整理閱讀MySQL v5.7的FOREIGN KEY Constraints文件,並針對細節在DB Fiddle加上範例。
19
Apr 2018
[技術筆記] Designing Data-Intensive Applications 下
《Designing Data-Intensive Applications》是我目前看過應用程式開發最推薦的一本書,隨著網路時代的發展,資料量越來越龐大,處理資料成了應用程式擴展的瓶頸。 這本書從資料庫本身、資料庫常見問題、跨機器的資料同步問題等,他不是介紹單一的資料庫如何使用,而是更仔細的介紹每個高大上又令人困惑的 Buzzword,對儲存資料的設計有更深的理解。
28
Mar 2018
[技術筆記] Designing Data-Intensive Applications 上
《Designing Data-Intensive Applications》是我目前看過應用程式開發最推薦的一本書,隨著網路時代的發展,資料量越來越龐大,處理資料成了應用程式擴展的瓶頸。 這本書從資料庫本身、資料庫常見問題、跨機器的資料同步問題等,他不是介紹單一的資料庫如何使用,而是更仔細的介紹每個高大上又令人困惑的 Buzzword,對儲存資料的設計有更深的理解。
27
Mar 2018
[閱讀心得] 娛樂至死
一開始會想讀這本書是因為看到學長的心得文,簡略提到印刷時代的思想比腳深層完整,而電視(網路)時代則是片斷瑣碎;當初看完心得不太認同,因為我會直覺地認為說「媒體只是載具,重點是人的思想」,也就是膚淺的人不論在哪個時代都是膚淺的;…