Tech News
[TechNews] 유용한 개발 관련 아티클 및 영상 #10
망나니개발자
2024. 3. 8. 10:00
반응형
1. 유용한 개발 관련 아티클 및 영상 #10
Kubernetes Is Great On-premise(쿠버네티스는 온프레미스에 적합하다)
- 쿠버네티스는 온프레미스 데이터 센터용 도구에서 탄생했음
- 쿠버네티스는 Google의 Borg와 Omega의 아이디어에서 탄생함
- 쿠버네티스가 온프레미스에서 유용한 이유
- Fault Tolerance(결함 발생 시에 다른 서버로 이전)
- Density(리소스 사용률 최적화)
- 쿠버네티스가 온프레미스에서 갖는 한계
- 확장 기능이 제한적(클러스터에서 최대 5000개 노드까지만 확장 가능)
- 쿠버네티스 API는 복잡하고 서버에 있는 것을 관리하기 위해 다른 도구(Terraform, ansinble 등)를 배워야 함
잘못 설계된 자바 equals 메서드 설계 예시(java.net.URL)
java.net.URL 객체를 비교하면 같은 IP 주소로 해석될 때는 true, 아닐 때는 false가 나온다. 문제는 이 결과가 네트워크 상태에 따라 달라진다는 것이다.
- 동작이 일관되지 않다. 네트워크가 정상이면 두 URL이 같고 문제가 있으면 다르다. 주어진 호스트의 IP 주소는 시간과 네트워크 상황에 따라 다르다. 어떤 네트워크에선 두 URL이 같을 수 있지만 다른 네트워크에선 다를 수 있다.
- 일반적으로 equals, hashCode 처리는 빠를 거라 예상하지만 네트워크 처리는 느리다. URL이 어떤 리스트 내부에 있는지 확인하는 경우, 이런 작업을 할 때 각 요소(URL)에 대해 네트워크 호출이 필요할 것이다. 따라서 예상되는 속도보다 느리게 동작한다. 안드로이드 같은 일부 플랫폼에선 메인 쓰레드에서 네트워크 작업이 금지된다. 이런 환경에선 URL을 Set에 추가하는 기본 조작도 쓰레드를 나눠서 해야 한다
- 동작 자체에 문제가 있다. 같은 IP 주소를 갖는다고 같은 컨텐츠를 나타내는 건 아니다. 가상 호스팅을 한다면 관련 없는 사이트가 같은 IP 주소를 공유할 수도 있다.
출처: 이펙티브 코틀린
GitHub, Slack, Salesforce 등 10개 이상의 서비스 장애 보고서를 분석하여 도출된 5가지 주요 교훈
- 순환 의존성의 덫
- 서비스 인프라는 서로 얽혀 있는 경우가 많음
- 장애 복구 툴도 이러한 인프라에 의존할 때가 있는데, 이 경우 장애 복구 툴이 작동하지 않을 수 있음
- 자동화의 배신
- 인프라 관리의 자동화는 효율적인 운영을 위해 중요한 역할을 하지만, 장애 시 상황을 악화시킬 수도 있음
- 자동화 스크립트를 신중하게 작성하고, 장애 시 자동화를 긴급 중단할 수 있는 기능을 마련해보는 것이 좋음
- 항상 디비가 문제다
- 많은 장애의 원인은 데이터베이스였음, 비싼 쿼리가 주는 부하를 버티지 못하고 쓰러지는 경우가 많았음
- 데이터베이스 as a service의 비용에는 운영 및 장애 대응 비용이 포함되어 있으므로 가능하면 사용하는 것이 운영에 유리함
- 데이터베이스 장애에 대비하여 데이터베이스 복원 작업을 정기적으로 테스트해야 함
- 배포는 조금씩 천천히
- 서비스 안정화와 빠른 배포는 결국 맞바꿔야 함
- 대부분의 서비스 장애는 변경된 코드나 환경 설정이 별다른 검증 없이 모든 프로덕션 서비스에 빠르게 배포될 때 발생했음
- 서비스가 요구하는 안정성에 따라 canary, gradual rollout 등 배포 속도에 브레이크를 조금 거는 매커니즘이 필요함
- 장애 대응 플레이북
- 서비스 장애 시뮬레이션을 하고 복구 우선순위를 미리 정하는 등 매뉴얼을 작성하고, 장애 시 panic mode/code red가 발동해 자동화를 정지시키는 인프라 투자는 (당연하게도) 더 좋은 장애 대응으로 이어짐
- 서비스 장애는 결코 좋은 순간은 아니지만, 필연적이므로, 불현실적인 100% 업타임을 기대하기 보다는 미리 장예를 예상하고, 예방하고, 장애 발생 시 신속하게 복구할 수 있는 체계를 마련해야 함
LinkedIn의 400만 TPS 대용량 프로필 조회 API 처리 일지
- 초기에는 모든 데이터를 Oracle Database에 저장하고 Memcached를 활용해 캐시 레이어를 구축했음
- 서비스 규모가 커짐에 따라 Oracle Database의 라이선스 비용, 확장성 제한, 유지보수 어려움 등의 단점이 드러났고, Memcached 클러스터 역시 투자 대비 성능이 만족스럽지 못했음
- 2010년 초, 당시 유행하던 NoSQL 흐름에 따라 Expresso NoSQL Database를 자체 개발하여 사용했고, 별도의 캐싱 레이어 없이도 범위성과 성능 요구 사항을 모두 충족시킬 수 있었음
- 하지만 프로필 조회 횟수가 초당 100만 번을 넘어설때 쯤 또다시 성능 문제가 발생하기 시작했고, 다시 한 번 캐시 레이어 도입을 고려했음
- 이미 여러 서비스에서 Couchbase를 사용하여 성능을 개선한 성공 사례를 가지고 있었고, Expresso에 Couchbase 기반 캐싱 레이어를 포함하는 시스템 설계에 도전했음
- 기존 시스템에 내포된 커스텀 캐싱 솔루션으로 인해 여러 어려움을 겪었음. Couchbase 시스템의 효과적인 모니터링, 무효한 캐시 데이터 제거를 위한 System Change Number (SCN) 저장 등 시스템에 많은 새로운 요소들이 필요했음
- Expresso와 Couchbase를 함께 사용한 결과, 프로필 조회 서비스는 99백분위수 기준 성능이 60% 이상 개선되었으며, 99% 이상의 캐시 히트 비율 덕분에 전체 서비스 비용이 10% 절감되었음
백악관, 'C'와 'C++' 사용 중단 촉구
- 바이든 행정부가 버퍼 오버플로 및 기타 메모리 액세스 취약성을 유발하는 프로그래밍 언어에서 벗어날 것을 촉구했음
- 마이크소프트와 구글의 최근 연구에 따르면 전체 보안 취약점의 약 70%가 메모리 안전 문제로 인해 발생하는 것으로 나타났음
- 메모리 안전 취약점이 있는 프로그래밍 언어의 두 가지 예로 C와 C++를 제시했고, 안전하다고 판단되는 프로그래밍 언어의 예로는 러스트를 언급했음
- 사이버 보안의 책임을 개인과 소규모 기업에서 "끊임없이 진화하는 위협을 관리할 능력이 있는" 대기업, 기술 기업, 미국 정부로 전환하자는 목표임
출처: https://www.ciokorea.com/news/327256
반응형