เมื่อเร็วๆ นี้ เราเริ่มต้นโปรเจ็กต์เล็กๆ เพื่อล้างวิธีที่ส่วนต่างๆ ของระบบสื่อสารกันอยู่เบื้องหลังที่ Buffer บริบทสั้นๆ บางอย่าง: เราใช้สิ่งที่เรียกว่า SQS (Amazon Simple Queue Service คิวเหล่านี้ทำหน้าที่เหมือนห้องรอสำหรับงาน ส่วนหนึ่งของระบบส่งข้อความออกไปและอีกส่วนหนึ่งหยิบขึ้นมาในภายหลัง ลองนึกถึงการฝากข้อความไว้ให้เพื่อนร่วมงาน: "เฮ้ เมื่อคุณได้รับโอกาส ให้ประมวลผลข้อมูลนี้" ระบบที่ส่งบันทึกไม่จำเป็นต้องรอการตอบกลับ โปรเจ็กต์ของเราคือ เพื่อทำการบำรุงรักษาตามปกติ: อัปเดตเครื่องมือที่เราใช้เพื่อทดสอบคิวในเครื่องและล้างการกำหนดค่าแต่ในขณะที่เรากำลังแมปคิวที่เราใช้จริงเราพบสิ่งที่เราไม่คาดคิด: กระบวนการพื้นหลังที่แตกต่างกันเจ็ดกระบวนการ (หรืองาน cron ซึ่งเป็นงานตามกำหนดเวลาที่ทำงานโดยอัตโนมัติ) และผู้ปฏิบัติงานที่ทำงานอย่างเงียบ ๆ นานถึงห้าปี ทุกคนไม่ทำอะไรเลยเลยนี่คือสาเหตุที่สำคัญวิธีที่เราค้นพบพวกเขาและสิ่งที่เราทำเกี่ยวกับมันเหตุใดสิ่งนี้จึงสำคัญมากกว่าที่คุณคิดใช่การเรียกใช้โดยไม่จำเป็น โครงสร้างพื้นฐานต้องเสียค่าใช้จ่าย ฉันคำนวณอย่างรวดเร็ว และสำหรับพนักงานคนหนึ่ง เราจะต้องจ่ายเงินประมาณ 360-600 เหรียญสหรัฐในระยะเวลา 5 ปี นี่เป็นจำนวนเงินเพียงเล็กน้อยในโครงการการเงินของเรา แต่แน่นอนว่าเป็นการสิ้นเปลืองอย่างแท้จริงสำหรับกระบวนการที่ไม่ทำอะไรเลย อย่างไรก็ตาม หลังจากผ่านการล้างข้อมูลครั้งนี้แล้ว ฉันจะยืนยันว่าต้นทุนทางการเงินเป็นส่วนที่เล็กที่สุดของปัญหา ทุกครั้งที่วิศวกรคนใหม่เข้าร่วมทีมและสำรวจระบบของเรา พวกเขาต้องเผชิญกับกระบวนการลึกลับเหล่านี้ คำถามที่กลืนกินเวลาและสร้างความไม่แน่นอน เราทุกคนเคยเจอมาแล้ว — จ้องมองไปที่โค้ดบางส่วน กลัวที่จะสัมผัสมันเพราะบางทีมันอาจจะกำลังทำบางสิ่งที่สำคัญ แม้แต่โครงสร้างพื้นฐานที่ "ถูกลืม" ก็จำเป็นต้องได้รับการดูแลในบางครั้ง ออกจากบริษัทเมื่อหลายปีก่อนและบริบทยังคงอยู่กับพวกเขา สิ่งนี้เกิดขึ้นได้อย่างไร มันง่ายที่จะชี้นิ้ว แต่ความจริงก็คือสิ่งนี้เกิดขึ้นตามธรรมชาติในระบบที่มีอายุยืนยาว ฟีเจอร์เลิกใช้แล้ว แต่งานพื้นหลังที่รองรับมันยังคงทำงานต่อไป มีคนหมุนพนักงาน "ชั่วคราว" เพื่อจัดการการย้ายข้อมูล และไม่เคยถูกรื้อถอน งานที่กำหนดเวลาไว้จะซ้ำซ้อนหลังจากการเปลี่ยนแปลงทางสถาปัตยกรรม แต่ไม่มีใครคิดที่จะตรวจสอบ เราเคยส่งอีเมลฉลองวันเกิดที่ Buffer To การทำเช่นนี้ เราได้รันงานที่กำหนดเวลาไว้ซึ่งตรวจสอบฐานข้อมูลทั้งหมดสำหรับวันเกิดที่ตรงกับวันที่ปัจจุบัน และส่งอีเมลส่วนตัวถึงลูกค้า ในระหว่างการปรับโครงสร้างใหม่ในปี 2020 เราได้เปลี่ยนเครื่องมืออีเมลธุรกรรมของเราแต่ลืมที่จะลบผู้ปฏิบัติงานรายนี้ออก เนื่องจากมันทำงานต่อไปอีกห้าปี ไม่มีความล้มเหลวของบุคคลใดเลย - เป็นความล้มเหลวของกระบวนการ โดยไม่ได้ตั้งใจ การล้างข้อมูลที่สร้างไว้ในวิธีการทำงานของเรา สถาปัตยกรรมของเราช่วยให้เราค้นพบมัน เช่นเดียวกับหลายๆ บริษัท Buffer ยอมรับการเคลื่อนไหวของไมโครเซอร์วิส (แนวทางยอดนิยมที่บริษัทต่างๆ แบ่งรหัสออกเป็นบริการเล็กๆ จำนวนมากที่เป็นอิสระ) เมื่อหลายปีก่อน เราแบ่งบริการขนาดใหญ่ออกเป็นบริการต่างๆ กัน โดยแต่ละบริการมีที่เก็บข้อมูล ไปป์ไลน์การปรับใช้ และโครงสร้างพื้นฐานของตัวเอง ในเวลานั้น มันสมเหตุสมผลแล้ว: แต่ละบริการสามารถนำไปใช้งานได้ด้วยตัวเองโดยมีขอบเขตที่ชัดเจนระหว่างทีม แต่ในช่วงหลายปีที่ผ่านมา เราพบว่าค่าใช้จ่ายในการจัดการพื้นที่เก็บข้อมูลหลายสิบแห่งมีมากกว่าผลประโยชน์สำหรับทีมที่มีขนาดเท่าเรา ยังคงมีอยู่เป็นขอบเขตทางตรรกะ แต่พวกเขาอยู่ด้วยกันในที่เดียว นี่กลายเป็นสิ่งที่ทำให้การค้นพบเป็นไปได้ ในโลกของไมโครเซอร์วิส แต่ละพื้นที่เก็บข้อมูลเป็นเกาะของตัวเอง วิศวกรที่ถูกลืมใน repo หนึ่งอาจไม่เคยถูกสังเกตเห็นโดยวิศวกรที่ทำงานในที่อื่น ไม่มีที่เดียวที่จะค้นหาชื่อคิว ไม่มีมุมมองแบบรวมของสิ่งที่กำลังทำงานอยู่ ในที่สุดเราก็สามารถเห็นภาพทั้งหมดได้ เข้าคิวกับผู้ผลิตแต่ไม่มีผู้บริโภค เราสามารถค้นหาคนงานที่อ้างอิงถึงคิวที่ไม่มีอยู่อีกต่อไป การรวมไม่ได้ออกแบบมาเพื่อช่วยให้เราค้นหาโครงสร้างพื้นฐานของซอมบี้ - แต่มันทำให้เป็นเช่นนั้นการค้นพบนี้แทบจะหลีกเลี่ยงไม่ได้ จริงๆ แล้วสิ่งที่เราทำเมื่อเราระบุกระบวนการที่กำพร้าได้แล้ว เราก็ต้องตัดสินใจว่าจะทำอย่างไรกับกระบวนการเหล่านั้น ต่อไปนี้คือวิธีที่เราเข้าถึงมัน ขั้นแรก เราติดตามแต่ละอันไปยังต้นกำเนิดของมัน เราขุดค้นประวัติ git และเอกสารเก่าๆ เพื่อทำความเข้าใจว่าเหตุใดผู้ปฏิบัติงานแต่ละคนจึงถูกสร้างขึ้นตั้งแต่แรก ในกรณีส่วนใหญ่ วัตถุประสงค์เดิมมีความชัดเจน: การย้ายข้อมูลเพียงครั้งเดียว คุณลักษณะที่เลิกใช้งาน วิธีแก้ปัญหาชั่วคราวที่หมดประโยชน์ จากนั้นเราก็ยืนยันว่าไม่ได้ใช้งานจริง ก่อนที่จะลบสิ่งใดออก เราได้เพิ่มการบันทึกเพื่อตรวจสอบว่ากระบวนการเหล่านี้ไม่ได้ทำสิ่งสำคัญที่เราพลาดไปอย่างเงียบๆ เราเฝ้าติดตามอยู่สองสามวันเพื่อให้แน่ใจว่าพวกเขาจะไม่ถูกเรียกเลย และเราก็ลบออกทีละน้อย เราไม่ได้ลบทุกอย่างพร้อมกัน เราได้ลบกระบวนการออกทีละขั้นตอน โดยคอยดูผลข้างเคียงที่ไม่คาดคิด (โชคดีที่ไม่มี) ในที่สุด เราก็บันทึกสิ่งที่เราเรียนรู้ เราได้เพิ่มบันทึกลงในเอกสารภายในของเราเกี่ยวกับสิ่งที่แต่ละกระบวนการทำแต่แรกและเหตุใดจึงถูกลบออก ดังนั้นวิศวกรในอนาคตจึงไม่สงสัยว่ามีบางสิ่งที่สำคัญหายไปหรือไม่ มีอะไรเปลี่ยนแปลงหลังจากการล้างข้อมูล เรายังเร็วในการวัดผลกระทบทั้งหมด แต่นี่คือสิ่งที่เราได้เห็นจนถึงตอนนี้ รายการโครงสร้างพื้นฐานของเราถูกต้องแล้ว เมื่อมีคนถามว่า “เราทำงานคนงานอะไร?” เราสามารถตอบคำถามนั้นได้อย่างมั่นใจ การสนทนาการเริ่มต้นใช้งานก็ง่ายขึ้นเช่นกัน วิศวกรหน้าใหม่ไม่สะดุดกับกระบวนการลึกลับและสงสัยว่ากระบวนการเหล่านี้ขาดบริบทหรือไม่ โค้ดเบสสะท้อนถึงสิ่งที่เราทำจริง ไม่ใช่สิ่งที่เราทำเมื่อห้าปีที่แล้ว ถือว่ารีแฟกเตอร์เป็นเหมือนโบราณคดีและการป้องกัน สิ่งสำคัญที่สุดที่ผมได้รับจากโปรเจ็กต์นี้ คือ การปรับแฟกเตอร์ที่สำคัญทุกครั้งคือโอกาสสำหรับโบราณคดี เมื่อคุณเจาะลึกลงไปในระบบ และเข้าใจอย่างแท้จริงว่าชิ้นส่วนต่างๆ เชื่อมโยงกันอย่างไร คุณจะอยู่ในตำแหน่งที่สมบูรณ์แบบที่จะตั้งคำถามถึงสิ่งที่ยังจำเป็นอยู่ คิวนั้นจากโปรเจ็กต์เก่าบางอันเหรอ? ผู้ปฏิบัติงานที่ใครบางคนสร้างขึ้นสำหรับการย้ายข้อมูลแบบครั้งเดียว? งานที่กำหนดเวลาไว้ซึ่งอ้างอิงถึงคุณลักษณะที่คุณไม่เคยได้ยินมาก่อน? พวกมันอาจยังคงทำงานอยู่ นี่คือสิ่งที่เรากำลังสร้างในกระบวนการของเราในอนาคต:ในระหว่างการรีแฟคเตอร์ใดๆ ให้ถามว่า: มีอะไรอีกที่ส่งผลกระทบต่อระบบนี้ซึ่งเราไม่ได้ดูมาระยะหนึ่งแล้ว?เมื่อเลิกใช้งานฟีเจอร์ ให้ติดตามไปจนถึงกระบวนการเบื้องหลังของมัน ไม่ใช่แค่โค้ดที่ผู้ใช้ต้องเผชิญเท่านั้น เมื่อมีคนออกจากทีม บันทึกสิ่งที่พวกเขารับผิดชอบ โดยเฉพาะอย่างยิ่งสิ่งที่พวกเขาทำงานในเบื้องหลัง เรายังคงมีส่วนที่เก่ากว่าของโค้ดเบสของเราที่ยังไม่ได้ถูกย้ายไปยังเวอร์ชันเดียว ที่เก็บข้อมูลยัง เมื่อเรารวบรวมต่อไป เราก็มั่นใจว่าเราจะพบโบราณวัตถุที่ซ่อนอยู่เหล่านี้อีก แต่ตอนนี้เราพร้อมแล้วที่จะจับพวกมันและป้องกันไม่ให้เกิดโค้ดใหม่ เมื่อโค้ดทั้งหมดของคุณรวมอยู่ในที่เดียว โครงสร้างพื้นฐานที่ถูกละเลยก็ไม่มีที่ซ่อนอีกต่อไป
สิ่งที่เราเรียนรู้หลังจากค้นพบงานที่ถูกลืม 7 งานที่ทำงานมาเป็นเวลา 5 ปี
By Social Media
·
·
6 min read
·
165 views
Read in:
aa
ace
af
ak
alz
am
ar
as
awa
ay
az
ba
ban
be
bew
+191 more
bg
bho
bik
bm
bn
brx
bs
bug
ca
ceb
cgg
ckb
co
crh
cs
cv
cy
da
de
din
doi
dv
dyu
dz
ee
el
en
eo
es
et
eu
fa
ff
fi
fj
fo
fr
fur
fy
ga
gd
gl
gom
gn
gu
ha
haw
he
hi
hil
hne
hmn
hr
hrx
ht
hu
hy
id
ig
ilo
is
it
ja
jam
jv
ka
kab
kbp
kg
kha
kk
kl
km
kn
ko
kri
ku
ktu
ky
la
lb
lg
li
lij
ln
lo
lmo
lt
ltg
lua
luo
lus
lv
mai
mak
mg
mi
min
mk
ml
mn
mni-mtei
mos
mr
ms
mt
my
nd
ne
nl
nn
no
nr
nso
nus
ny
oc
om
or
pa
pag
pam
pap
pl
ps
pt
pt-br
qu
rn
ro
ru
rw
sa
sah
sat
sc
scn
sg
si
sk
sl
sm
sn
so
sq
sr
ss
st
su
sus
sv
sw
szl
ta
tcy
te
tg
th
ti
tiv
tk
tl
tn
to
tpi
tr
trp
ts
tt
tum
ty
udm
ug
uk
ur
uz
ve
vec
vi
war
wo
xh
yi
yo
yua
yue
zap
zh
zh-hk
zh-tw
zu