2010λ
μ¦μ μμΌ λΌμ΄λΈλ¬λ¦¬ κ°λ° μ€μ λ°μν μ΄μμ΄λ€. νλ° μΈμ ν λ²νΌμ μ¬λ¬ μ€λ λκ° λμμ μ‘μΈμ€ ν λ κΈκ²©ν λλ €μ§λ λ‘κ·Έλ₯Ό λ°κ²¬νλ€.
- μ±λ₯ μΈ‘μ μ μν profiler
- μ체μ μΈ λ‘κ·Έ λͺ¨λμμ μ΄μ νμμ΄ λ³΄μλ€.
μ μμ μΈ μν©μμ ms μ΄νμ μκ°μ΄ μμλλλ° μ΄λ¨μ μ΄μμ μκ°μ΄ μμλλ νμμΌλ‘ μΈν΄ latencyκ° λ°μνκ³ μμκ³ , μ΄λ‘ μΈν κ°νμ μ§μ°μ μ΅μ°μ λμ κ³Όμ κ° λμλ€. κ΄λ ¨ν μν©μ λν΄μ μ¬λ΄ μ¬λ¬ κ°λ°μλΆλ€κ» λ¬Όμ΄λ³΄κ² λμμΌλ©°, λλ£λΆλ€κ³Ό μ½λμ λ‘κ·Έλ₯Ό κ°μ΄ λ³΄κ² λλ€.
κ·Έλ¬λ μ€ ν κ°λ°μλΆμ΄ False Sharing μλλλ©° λ§ν¬λ₯Ό λμ Έμ£Όμ
¨λ€.(ν΄λΉ λΈλ‘κ·Έλ λΉμ λ§ν¬λ μλμ§λ§ μ μ€λͺ
λ κΈμ΄λΌ κ°μ Έμ보μλ€.) C++ false sharingμ΄λ?(κ±°μ§ κ³΅μ ) (tistory.com)
μμ½νμλ©΄ μΊμκ° λ°μ΄ν° 곡μ λ₯Ό μν΄ μκ°μ μλͺ¨νλ κ³Όμ μ΄λΌκ³ λ³Ό μ μλ€. λ©ν° μ€λ λκ° μΈμ λ©λͺ¨λ¦¬ μ κ·Όμ΄ μλκ²λ λ©λͺ¨λ¦¬ μμμ ν¨λ©μ μ£Όμ΄ ν¬κ² μ‘μΌλ ν΄κ²°λμκ³ , κ°μ λ²νΌμ λν΄μ μ κ·Όμ΄ μμ κ²½μ°μλ μμ°¨ μ κ·Όνλλ‘ sequencialν λμμ΄ μ΄λ€μ§κ²λ νλ‘ μ²λ¦¬νλ€. λΉμ C++μ μ΄μ©νκΈ° λλ¬Έμ΄κΈ°λ νμ§λ§, μμΌ λΌμ΄λΈλ¬λ¦¬ μ체λ₯Ό μ§μ ꡬννκ² λλ©΄μ μ»΄ν¨ν° ꡬ쑰λ μ΄μ체μ μ λν λμ μ΄ν΄κ° νμνλ€.
CPUμ λν μ΄ν΄λ, κ·Έλ¦¬κ³ μΊμκ° μ΄λ€ μλ―Έλ₯Ό κ°μ§λμ§ μ’ λ μ μμμ΄μΌ νλλ°, μ΄λ¬ν λΆλΆμ λν νμ΅μ΄ λΆμ‘±ν΄μ μκΈ΄ μ΄μλΌκ³ λ³Ό μ μκ² λ€.
μ΄λ μ»΄ν¨ν° ꡬ쑰μ μ΄μ체μ μ λν λμ μ΄ν΄κ° low level νλ‘κ·Έλλ° (μ΄μ체μ λ λ©λͺ¨λ¦¬λ₯Ό μ§μ λ€λ£¨λ μͺ½μ κ·Όμ ν μμ
)μ νλ λ°μ μ€μνλ€κ³ λλΌκ³ μ‘°κΈ λ νμ΅μ 맀μ§νλλ°, μ΄λ¬ν λΆλΆμ΄ high level νλ‘κ·Έλλ°(μ΄λ―Έ κ°λ°λ κΈ°μ μ νμ©νκ±°λ, μ λ§λ€μ΄μ§ ν¨ν€μ§λ λΌμ΄λΈλ¬λ¦¬λ₯Ό κ°μ Έλ€κ° λΉμ¦λμ€ λ‘μ§μ ꡬννλ μΌ)μ νκ² λ μ΄νμλ, κ°μ’
μ₯μ νμμ΄λ, λμ μ리λ₯Ό μ΄ν΄νλ λ°μ ν° λμμ΄ λμλ€.
λλ low level νλ‘κ·Έλλ° κ³Όμ μμ λμ¦λ₯Ό λκΌμ§λ§, high level νλ‘κ·Έλλ°μ μ£Όλ‘ νλ€κ³ ν΄λ μ»΄ν¨ν° ꡬ쑰λ μ΄μ체μ μ λν λμ μ΄ν΄κ° ν° λμμ΄ λλ€.
μμΌ μλ² μλ¨μ L4 μ€μμΉ λμ
μ μκ²Όλ μ΄μΌκΈ°
System Engineer κ΄μ μμ νΈλν½ νλ°μ λμνκ³ μ νλ μ°¨μμμ L4 μ€μμΉκ° μ κ² μκ°μ λμ
μ΄ λλ€.
- λ€νΈμν¬ νΈλν½ μ μ΄λ κΈ°μ‘΄ λΌμ°ν°μμ μ€κ° L4 μ€μμΉλ₯Ό νλ λ κ±°μΉκ² λλ€.
- λΈλ‘λ μΊμ€ν
λμμ μ’νκΈ° μν¨μ΄λΌκ³ μκ°νλ©΄ κ·Έλ΄ μλ μμ κ² κ°μλ€. λμ€μμΌ μκ² λ μ¬μ€μ΄μ§λ§, κ°λ°ν λꡬλ L4 μ€μμΉ λμ
μ κ²ν ν΄μΌ λ μ΄μλ, μ€μ κ° κ²ν , QA μλ²μ μ λμ
ν΄ λ³Ό μκ°μ νμ§ λͺ»νκ³ , κ·Έλ κ² μνμ κ°μ§λ λΆμμ ν μνμμ L4λ λμ
λλ€.
- λμ
λμλ§μ μ΄μκ° ν°μ‘κ³ , 컀λ₯μ
μ μ€μ΄ λ μ’
λ₯κ° λ°μνλ€.
λλΉ μ»€λ₯μ
μ μ€
νλλ λλΉ μ»€λ₯μ
μ΄ λμ΄μ§λ©΄μ, λμ½νκ² μ§μ¬ μλ ODBCλ‘ μμ±λ μ½λ μ€ μ»€λ₯μ
μ μ€ μ μ¬μ μ νλ μ½λμμ 무ν루νκ° λ κ²μ΄λ€. μ₯μ κ° λκ³ λμμΌ λ€νλ₯Ό λ μ νμΈνκ³ , μ²λ¦¬νλ€.
컀λ₯μ
μ΄ μ μ€ λ μ΄μ λ 컀λ₯μ
νμ μ΄μ©νκ³ μμλλ° ν΄λΉ νμμ κΊΌλ΄ μ¬μ©νλ λ°©μμ΄ μ΅κ·Ό λ°νλλ 컀λ₯μ
μμ£Όλ‘ μ¬ μ¬μ©λλ νꡬ쑰μκ³ κ·Έλ λ€ λ³΄λ νΈλν½μ΄ μ§μ μ μ
λκ³ DB 쿼리λ₯Ό μννμμλ ν λ μͺ½μ μλ μ¬μ©λμ§ μλ μν©μ΄ λ²μ΄μ‘λ€.
μ΄λ‘ μΈν΄ ν΄λΉ 컀λ₯μ
μ΄ alive checkμ걸리면μ L4κ° μ ν¨νμ§ μμ 컀λ₯μ
μΌλ‘ νλ³ν΄ μ°κ²°μ ν΄μ ν κ²μ΄λ€.
μ΄λ‘ μΈν΄ λΉμ ODBC λΌμ΄λΈλ¬λ¦¬λ λ²μ©μ΄ μλ μ¬λ΄μμ μμ±λ μ½λμλλ° ODBCμ μ¬μ μ μλ μ²λ¦¬μ λν λ‘μ§μμ while λ¬Έμ μ’
λ£ μ‘°κ±΄μ΄ μλͺ»λμ΄μ λ€μ μ°κ²°μ μ±κ³΅νμμλ 루νλ₯Ό λΉ μ Έλμ€μ§ λͺ»νκ³ λ¬΄ν 루νκ° λ°μν΄, μμ€ν
μ₯μ λ‘ μ΄μ΄μ§κ² λμλ€.
μ¬μ©μμμ 컀λ₯μ
μ μ€
L4 μ€μμΉ μ체μμ μΌμ μκ° μ΄μ μ§λ 컀λ₯μ
μ μλμΌλ‘ μ κ±°νκΈ° λλ¬Έμ΄λ€. μ κ±° μμΈμ λ°°ν¬λ ν΄λΌμ΄μΈνΈλ μλ²μμ μ§μ λ KeepAlive ν¨ν·μ μ£Όκ³ λ°λ μ£ΌκΈ°λ³΄λ€ L4 μ€μμΉμμμ KeepAlive μ ν¨μ± νλ¨ μ£ΌκΈ°κ° μ§§μ λ°μνλ€.
λ°κ²¬μ΄ μ‘°κΈ λ¦μ μ΄μμλλ°, μ¬μ©μκ° μ‘ν°λΈν λμμ νμ§ μμΌλ©΄ Alive Check ν¨ν·λ§ μ£Όκ³ λ°κ² λλλ°, μ΄ κ²½μ°μλ§ μ»€λ₯μ
μ΄ λμ΄μ‘κ³ , μ΄λ‘ μΈν μ¬μ©μ λΆνΈμΌλ‘ μΈν μ΄μκ° λ°μνλ€. κ·Έλλ§ λ€νμΈ κ²μ μ μ΄μμλ λ€λ₯΄κ² ν΄λΉ μ΄μλ μ₯μ λ‘ μ΄μ΄μ§μ§λ μμμΌλ©°, μλΉμ€λ₯Ό μ§μμ μΌλ‘ μ¬μ©νλ μ μ μκ²λ λ°μνμ§ μλ μ΄μμλ€λ μ μ΄λ€.
L4 μ€μμΉμ KeepAlive μ ν¨μ± νλ¨μ λν μ€μ κ°μ λλ¦ΌμΌλ‘μ¨ μμμ μΌλ‘ ν΄κ²°λμ§λ§, κ³Όμ° μ΄ L4 λμ
μ΄μκ° μμΌ μλ²μ κ²½μ°μλ μ μ νλκ°μ λν μκ°μ λ¨μΉ μ μμλ€. λ¬Όλ‘ νμ¬λ μ¨νλΌλ―Έμ€λ‘ ꡬμΆλ μλΉμ€λ₯Ό μ νμ§ μκ³ , μ¬μ§μ΄ μ΄κ²μ΄ λ κ±°μ νκ²½μ΄λΌκ³ λΆλ¦¬κΈ°λ νλ€. μλλ©΄ νΈλν½ νλ°μ μ μ°ν λμμ΄ μ μλκΈ° λλ¬Έμ΄λ€.
νμ§λ§ μ΄ μ΄μμ κ°μ μΌμ΄μ€λ L7 νΉμ ALB, NLBλΌκ³ ν΄λ μν©μ λ¬λΌμ§μ§ μλλ€. κ·Έλ¦¬κ³ μ€μν κ²μ, κΈ°μ‘΄ νκ²½μμ λ³νκ° μΌμ΄λ λ μ΄λ ν μν₯μ΄ μμμ§ μΆ©λΆν κ²μ¦μ΄ λμ§ μμλ€λ μ μ΄λ€. λλΆλΆ κΈ°λ³Έ μ΅μ
μΌλ‘ λμ
λμκ³ , μ¬λ΄μ λ€λ₯Έ μλΉμ€μ λμ
λ μ₯λΉλΌκ³ ν΄λ μΆ©λΆν κ²ν μ κ²μ¦μ κ±°μ³μΌ λλ€λ μ , κ·Έλ¦¬κ³ μμΌ μλ²μ νΉμμ±μ μ΄ν΄νλ κ², μΉ μλ²κ° μ체μ μΌλ‘ ν΄μ£Όλ μμ
(Keep Alive), Stateless κΈ°λ°μ νκ²½μ μ μ°ν¨ λ±μ΄ μ£Όλ μ°¨μ΄λ 체ν¬νμ΄μΌ νλ€.
DB μ²λ¦¬ μλ κΈκ° μ΄μ, λ°°ν¬ μλν μμ€ν
μ€λ₯ λ±
λ λ§μ κΈ°μ μ΄μμ ν΄κ²° κ³Όμ μ΄ κΆκΈνλ€λ©΄? ππ»