해결된 질문
작성
·
215
0
안녕하세요. 수업 잘 듣고 있습니다.
굉장히 흥미롭게 수업을 듣던 도중 궁금한 것이 이것저것 생겨서 질문드립니다. 수업에서 좀 벗어난 이야기일 수도 있는데 찾아보니 잘 찾을 수가 없어서 질문 드립니다.(혹시 답변하기 힘드시면 안하셔도 괜찮습니다.)
구조를 보니 API gateway는 서비스 ID만 알고있고, 해당 서비스의 실제 ip 주소와 포트 번호를 알기위해서는 Eureka에게 request를 요청해야하는 것 같습니다. 그렇다면 API gateway는 사용자 요청이 들어 올 때마다 매번 Eureka에게 물어보는 방식인가요? 이렇게 되면 통신 오버헤드가 상당이 클 것 같다는 생각이 들어서 질문드립니다.
Eureka와 서비스들 간에는 지속적으로 heartbeat message나 서비스 정보 등을 교환하기위해 통신하는 것 같습니다. 혹시 이런 통신은 전부 HTTP 프로토콜을 통해서 이루어지는 것인가요? 혹은 다른 프로토콜을 사용하여 정보를 주고 받나요?
답변 2
0
안녕하세요, 이도원입니다.
문의하신 질문은 본 수업 내용과 전혀 무관하지 않기 때문에, 답변드리겠습니다. ^^;
말씀하신 것처럼 API Gateway에서는 매번 Eureka에게 문의한다기 보다는 일정한 주기(기본값 30초)를 가지고 정보를 가져오게 됩니다. 만약 기본 값을 변경하려면, application 설정 파일에 아래와 같이 설정해 보실 수 있습니다.
eureka.client.instanceInfoReplicationIntervalSeconds=30
아래 그림은, 기존에 apigateway-service, first-service, second-service 등이 실행 되어 있고, 이 3가지 서비스는 eureka에 등록되어 있다고 할때, 4번째 서비스인 user-service가 실행되어 eureka에 등록될 때의 콘솔로그 화면입니다. user-service에서도 초기에 기존에 등록되었던 3개의 서비스 목록을 얻게 되고, apigateway-service와 같은 다른 서비스들은 일정은 시간을 갖고 eureka로부터 정보를 업데이트 하게 됩니다.
<user-service 로그>
<apigateway-service 로그>
Eureka와 다른 서비스 들 간의 통신은 말씀하신 것 처럼 REST 통신을 기본으로 하며, 등록/삭제 관련 된 RESTful API는 아래 링크에서 확인해 보실 수 있습니다.
Eureka REST operations · Netflix/eureka Wiki (github.com)
만약 등록 서비스를 강제로 삭제하실려면, 아래와 같이 실행해 보실 수 있습니다.
DELETE http://eureka_host:eureka_port/eureka/apps/<appName>/<instanceId>
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다.
박정선님의 질문에 대해서, Eureka 서버와 API 게이트웨이의 관계 및 통신 방식에 대해 유사한 질문과 답변이 있어 이를 참고해주시면 도움이 될 것 같습니다.
API 게이트웨이가 Eureka에 요청을 보내는 방식에 관한 설명입니다. 실제로 API 게이트웨이는 사용자의 요청을 받을 때마다 Eureka 서버에 매번 요청을 보내는 것이 아닙니다. 대신, 주기적으로 Eureka 서버로부터 서비스의 위치 정보를 업데이트 받아 로컬에 캐싱합니다. 이를 통해 서비스의 IP와 포트 정보를 빠르게 찾아 통신할 수 있습니다. 관련된 자료로는 “Gateway와 eureka 개념”의 답변에서 Eureka와 API 게이트웨이의 통신 방식과 캐싱하는 부분에 대해 설명하고 있습니다.
Eureka 서버와 클라이언트 간의 통신 프로토콜에 대한 질문입니다. 일반적으로 Eureka에서의 통신은 HTTP 프로토콜을 이용합니다. 서비스 인스턴스가 Eureka 서버에 등록하거나, Eureka 서버로부터 서비스 인스턴스의 정보를 조회할 때 HTTP를 사용하는 것이 일반적입니다. 하트비트 메시지를 포함하여 서비스 상태 업데이트나 정보 교환 등이 이루어집니다.
위 정보와 함께, 직접적으로 프로토콜에 대해 언급하고 있는 구체적인 링크를 제공할 수는 없으나, 일반적으로 Eureka의 통신 방식과 관련하여 HTTP 프로토콜이 사용됩니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
와 답변 감사합니다. 아예 rest API를 제공하는 군요.. 큰 도움이 됐습니다.