fragile and resilient

전체 글 32

[Elasticsearch] Shard Allocation 은 어떻게 결정될까?

성능 테스트 과정에서 특정 데이터 노드에 샤드가 집중된 것을 발견했습니다. 엘라스틱서치에서는 아래 상황에서 샤드의 배치를 결정하게 됩니다.클러스터에 인덱스를 추가하는 경우Node failure - 클러스터에서 노드가 drop된 경우 해당 노드에 존재하던 샤드들을 재배치클러스터 크기 조정 - 클러스터에 새로운 노드가 추가되거나 제거되는 경우 노드의 디스크 사용량이 전체의 90% 이상을 도달하는 경우샤드를 수동으로 라우팅하는 경우라우팅 관련 설정 업데이트ShardsAllo cator는 샤드 배치를 담당하는 ElasticSearch 인터페이스입니다. 해당 인터페이스의 구현체 BalancedShardsAllocator의 allocate를 보면 1. allocate unassigned shards, 2. move..

Storage 2024.04.10

[JPA] SimpleJpaRepository의 EntityManager는 어디서 생성될까?

JPA를 사용하면 보통 아래와 같이 선언해서 Repository를 사용합니다. interface JpaTestRepository extends JpaRepository, TestRepository {}여기서 JpaRepository 의 구현체인 SimpleJpaRepository 를 살펴보겠습니다. 데이터를 저장할 때 사용하는 save 메서드를 기준으로 보겠습니다.로직을 보니 entityInformation.isNew를 확인하고 true이면 em.persist(entity)를 실행하고, false이면 em.merge(entity)를 실행합니다. (이 로직에 대한 부분은 다른 포스팅에서 다루겠습니다.) 여기서 em을 통해 로직을 수행하는 것을 보니 EntityManager가 굉장히 중요한 역할을 하는 것으..

Spring 2024.02.24

자바 성능 튜닝 끄적끄적

CPU 사용률CPU 사용률은 전형적으로 사용자 시간과 시스템 시간으로 나뉜다. 사용자 시간: CPU가 애플리케이션 코드를 실행하는 시간의 백분율 애플리케이션 I/O 작업으로 디스크의 파일을 읽거나 네트워크로 데이터를 쓰는 등 시스템 시간: CPU가 커널 코드를 실행시키는 시간의 백분율 기반 시스템 자원 사용 시 vmstat 1 - 매초마다 프로세스, 메모리, 페이징, swap, I/O 블럭, CPU 활동 사항들의 정보 출력코드를 최적화하는 데 있어 목표는 짧은 시간동안 CPU 사용률을 낮추는 것이 아니라 높이는 것이다. 디스크 사용률애플리케이션이 디스크 I/O를 많이 일으키면 I/O는 병목되기 쉽다.iostat -xm 5 - 5초마다 디스크 사용률 정보를 표시할 수 있다. - -x옵션을 사용하면 확장된 ..

Java 2024.02.17

[Elasticsearch] Near real-time search, Refresh

색인 작업 시 세그먼트 동작 방식엘라스틱서치는 내부적으로 Lucene이라는 라이브러리를 통해 검색 기능을 수행한다. 검색 요청이 오면 Segment들이 각각의 검색 결과를 만들고 이를 통합해서 검색 결과를 응답하도록 되어있다.루씬은 색인 작업 시 기존에 생성된 세그먼트에는 정보를 추가하거나 변경하지 않고, 색인 작업을 할 때마다 새로운 세그먼트 파일을 생성한다. 해당 방식으로 동작하는 이유는 Segment의 불변성을 유지해서 검색 성능을 보장하기 위함이다.(새로운 세그먼트가 계속 생성되므로, 루씬은 백그라운드에서 세그먼트 파일을 병합하는 작업을 수행하고 이를 통해 모든 세그먼트들을 물리적으로 하나의 파일로 병합한다.)이미지 출처: 엘라스틱서치 실무 가이드Refresh루씬은 효율적인 색인 작업을 위해 내부..

Storage 2024.02.15

[Elasticsearch] No master is elected

문제 상황성능 테스트 과정에서 master node 의 스펙을 변경하였고, 3개의 마스터 노드중에서 2개를 종료한 뒤 새로운 스펙으로 2대를 띄웠습니다. 해당 과정을 진행 후 도큐먼트 조회 / 업데이트가 안 되었고, 아래 에러가 떴습니다.{  "error" : {    "root_cause" : [      {        "type" : "master_not_discovered_exception",        "reason" : null      }    ],    "type" : "master_not_discovered_exception",    "reason" : null  },  "status" : 503}  원인노드가 추가되거나 제거될 때 Elasticsearch는 새 마스터를 선택합니다. 일..

Storage 2024.02.14

물고기는 존재하지 않는다

주기적으로 보는 책이 있다. 아무 생각 없는 지하철에서, 고민되는 일이 있을 때, 그냥 그저 그런 어느 날.특별한 순간에 생각나는 책은 아니고 그냥 주기적으로 펼치게 되는 책이다. 너무나 매력적이고 소중한 책이다. 이 책을 읽으며 나를 가장 강하게 휘감는 생각은 '나는 내가 제어할 수 없는, 너무나 갑작스럽고 충격적이면서도 혼란스러운 일이 생기면 어떻게 행동하고 있었는가?' 이다. 갑작스럽고 혼란스러운 일.누군가는 큰 충격을 받고 무너질 것이고, 누군가는 이 일을 잊기 위해 더 바쁘게 살아갈 것이고, 누군가는 덤덤하게 받아들이겠지.사람마다 대처는 다르겠지만 변하지 않는 한 가지 사실이 있다.이런 일은 누구에게나 올 수 있고, 온다는 것이다. 나는 이럴 때 어떻게 행동하는 사람이었나?  이 책의 가장 훌륭..

생각 2024.02.12

어느 날의 일기들

2024. 2. 10 어렸을 적 내가 기억하는 이모는 항상 무언가를 열심히 하고 학구열이 강한 사람이었다. 방에는 항상 수많은 책들이 즐비했고, 몇 개의 책들에는 북클립이 꽂혀있었다. 이모와 할머니집 근처에 있는 도서관에 자주 갔었다. 이모는 어디를 갈 때 항상 나를 데리고 나갔다. 나는 이모와 함께 나가는 모든 곳을 좋아했다. 초등학교도 입학하기 전이어서 정확하게 기억나지는 않지만, 이모는 도서관 긴 책상에 앉아서 오랜 시간 공부했다. 나는 그 근처에 영상을 볼 수 있는 컴퓨터가 있는 공간에서 혼자 ‘센과 치히로의 행방불명’을 봤다. 그때 그 도서관에서 영화를 보던 순간들이 이따금씩 생각난다. 내 몸보다 지나치게 크던 책상과 의자. 다른 세계로 이동하는 길목인 푸른 들판에 서있던 치히로의 모습과 햇살이..

생각 2024.02.11

그대들은 어떻게 살 것인가

가끔 마음속에서 요동치는 생각들이 있을 때가 있다. 하지만 어떤 말을 하고 싶은 것인지, 어떤 감정을 느끼고 있는 것인지 표현할 수가 없다. 어린 시절부터 좋아했던 하야오 감독의 를 보고 왔다. 난해하다는 리뷰가 많았는데 이런 후기를 보고 사실 속으로 좋아했다. 80세가 넘은 하야오 감독의 은퇴작이 될 수도 있다고 생각했기 때문이다. 단순한 킬링타임용의 작품을 보고 싶지는 않았다. 차라리 정말 난해해서 오랫동안 곱씹고 싶었다. 영화는 예상대로 이해하기 어려웠다. 수많은 생각들이 주렁주렁 얽혀있어 어떤 말을 하고자 하는지 쉽게 이해하기가 어려웠고, 봇물이 터지듯 정제되지 않은 생각들을 쏟아내는 것 같았다. 보고 난 후 알 수 없는 생각과 감정들이 뒤섞여 일렁였다. 예전이었다면 난해하고 정리가 안 되어있다고..

생각 2024.02.11

아키텍처 설계 고려사항과 부하테스트

좋은 아키텍처란 무엇인가시스템 아키텍처를 설계할 때는 여러 가지 고려할 사항이 있는데요. 밑에는 좋은 아키텍처를 설계하기 위해 고려해야 할 주요 사항들입니다. 1. 가용성(Availability): 서비스가 정상적으로 동작하는 정도.2. 성능(Performance): 빠른 응답 시간과 낮은 레이턴시를 위해 최적화된 시스템을 만드는 것이 중요.3. 확장성(Scalability): 트래픽 규모에 맞추어 잘 확장할 수 있는지.4. 신뢰성(Reliability): 시스템이 항상 정상적으로 동작하는지.5. 관리성(Manageability): 시스템을 쉽게 운영할 수 있는지.6. 비용(Cost): 하드웨어와 소프트웨어 비용, 시스템을 배포하고 관리하는 비용, 교육 비용 등. 시스템 운영에 필요한 모든 비용.대규모 ..

카테고리 없음 2022.10.29

[Spring, AOP] 테스트 격리를 위한 MockRestServiceServer 초기화

문제 상황이번 스프린트에서 슬랙 알림을 도입하기로 하여 알림 로직을 구현하였는데요. 기능을 구현하는 데에는 문제가 없었지만, 알림 기능 테스트를 진행하면서 해당 오류를 마주쳤습니다.오류는 MockRestServiceServer에서 발생하고 있었는데, 내용을 살펴보면 예상되지 않은 추가 요청이라는 문구를 확인할 수 있었습니다. 본격적으로 문제를 살펴보기 전에 간단하게 프로젝트 로직에 대해 설명해 드리겠습니다.프로젝트에서는 외부 API와 통신하며 동작하는 기능(Github OAuth, Slack Alarm)이 있는데요. 해당 작업은 RestTemplate를 사용해서 통신하고 있습니다.(RestTemplate은 Spring에서 제공하는 HTTP 통신에 유용하게 쓸 수 있는 템플릿입니다. )MockRestSer..

Spring 2022.10.11