>  기사  >  백엔드 개발  >  다른 요청을 받은 후 HTTP 요청에 대한 응답을 제공합니다.

다른 요청을 받은 후 HTTP 요청에 대한 응답을 제공합니다.

PHPz
PHPz앞으로
2024-02-09 13:06:181188검색

收到另一个请求后提供 HTTP 请求的响应

php editor 딸기 웹 애플리케이션을 개발할 때 HTTP 요청을 처리하고 해당 응답을 제공해야 하는 경우가 많습니다. 요청을 받으면 요청의 내용과 목적에 따라 적절한 응답을 생성해야 합니다. 여기에는 데이터베이스 쿼리, 양식 데이터 처리, 다른 API 호출 등과 같은 다양한 작업이 포함될 수 있습니다. 이 기사에서는 사용자에게 더 나은 상호 작용과 사용자 경험을 제공하기 위해 PHP에서 HTTP 요청을 처리하고 해당 응답을 제공하는 방법을 살펴보겠습니다. 간단한 정적 웹 페이지를 구축하든 복잡한 웹 애플리케이션을 구축하든 HTTP 요청을 처리하고 응답을 생성하는 방법을 이해하는 것이 중요합니다.

질문 내용

제 사용 사례는 별도의 서버에서 다른 요청을 받은 후 HTTP 요청에 대한 응답을 제공하는 것입니다.

  1. 확장성을 염두에 두고 가능한 최선의 방법으로 이 작업을 수행하고 싶습니다.
  2. 우리는 Golang 1.19와 Gin 프레임워크를 사용합니다.
  3. 서버에 Pod가 여러 개 있으므로 채널이 작동하지 않습니다.
  4. 모든 요청은 시간 초과되며, 초기 요청은 60초 후에 시간 초과됩니다.

현재 솔루션은 각 Pod가 지속적으로 캐시를 확인하는 공유 캐시를 사용하는 것입니다. 나는 캐시를 하나씩 확인하는 대신 시스템을 채널링하여 완료된 응답을 주기적으로 확인함으로써 이를 최적화할 수 있다고 믿습니다.

다른 프로그래밍 언어에서도 어떻게 구현하는지 알고 싶습니다.

PS: 이것은 디자인 기반 쿼리이고 여기서 현상금을 공유하는 것으로 유명해서 여기에 질문합니다. 질문이 불분명한 경우 자유롭게 편집하시기 바랍니다.

솔루션

tl;dr

문제 설명

그러므로 서버 애플리케이션 이름이 server_app이고 3개의 포드가 있다고 가정해 보겠습니다.

으아악

귀하의 service"request a"라는 요청을 받고 이를 server_app_pod_a에 전달하기로 결정합니다. 이제 server_app_pod_a는 요청을 일부 게이트웨이로 전달하고 클라이언트 응답 처리를 계속하기 위해 일종의 "request a" 的请求,并决定将其传递给 server_app_pod_a。现在,您的 server_app_pod_a 将请求转发到某个网关,并等待某种通知,以继续处理客户端的响应。正如您所知,无法保证当网关执行 request b 时,服务会再次将其传递给 server_app_pod_a알림

을 기다립니다. 아시다시피 게이트웨이가 request b를 실행할 때 서비스가 이를 server_app_pod_a에 다시 전달한다는 보장은 없습니다. 이렇게 해도 애플리케이션의 상태 관리는 어려운 작업이 됩니다.

메시지

request“b”알다시피, 이전 단락에서 "알림"이라는 단어를 굵게 표시했습니다. 왜냐하면 실제로 생각해 보면 가 누군가에게 리소스를 요청하는 메시지라기보다는 일부 메시지

가 포함된 알림처럼 보이기 때문입니다. 그래서 나의 첫 번째 선택은 kafka와 같은 메시지 대기열입니다(아시다시피 그런 대기열이 많이 있습니다). 요청에 대한 고유 키를 계산하는 알고리즘을 정의할 수 있으면 정확히 동일한 Pod에서 결과를 통보받을 수 있다는 아이디어입니다. 이렇게 하면 상태 관리가 더 간단해지고 동일한 Pod에서 알림을 받을 가능성이 높아집니다(물론 이는 메시지 대기열 상태와 같은 여러 요소에 따라 달라집니다). 질문을 살펴보세요:
  1. 확장성을 염두에 두고 가능한 최선의 방법으로 이 작업을 수행하고 싶습니다.

물론, kafka와 같은 메시지 대기열을 사용하여 메시지 대기열 및 애플리케이션 확장을 활성화하고 데이터 손실을 줄일 수 있습니다.
  1. 모든 요청은 시간 초과되며, 초기 요청은 60초 후에 시간 초과됩니다.

코드베이스에서 시간 초과를 관리하는 방법에 따라 컨텍스트를 사용하는 것이 좋습니다.

다른 프로그래밍 언어에서도 어떻게 구현하는지 알고 싶습니다.

scala 中,如果您使用一些名为 akka 的特定工具(它提供了 actor 模型编程范例),您可以使用所谓的 akka-cluster-sharding메시지 대기열을 사용하는 것은 거의 모든 프로그래밍 언어에서 작동하는 일반적인 아이디어이지만 언어의 프로그래밍 패러다임과 언어별 라이브러리 및 도구에 따라 이 문제를 해결하는 다른 방법이 있을 수 있습니다. 예를 들어

에서는 이 문제를 처리합니다. 아이디어는 매우 간단합니다. 우리는 가입자의 정확한 위치와 상태를 알고 있는 일종의 감독자가 있어야 한다는 것을 알고 있습니다. 따라서 메시지를 받으면 요청을 어디로 전달할지, 어느 액터에게 전달할지 알 수 있습니다(액터 모델 프로그래밍에 대해 이야기하고 있습니다). 즉, 동일한 머신에 있든 없든 클러스터에 생성된 참가자 간에 상태를 공유하는 데 사용할 수 있습니다. 그러나 개인적 선호로 나는 언어별 의사소통을 선호하지 않으며, 이것이 미래에 문제를 일으킬 수 있으므로 일반적인 생각을 고수할 것입니다.

요약

설명이 너무 길어요 :). 제가 말하는 내용을 이해하기 위해 완전히 동일한 시나리오를 다른 통신 모델로 추적해 보겠습니다. 🎜
  1. 클라이언트는 server_app 서비스에 "a" 요청을 보냅니다.
  2. 서비스는 요청을 처리하기 위해 포드(예: server_app_pod_b) 중 하나를 선택합니다.
  3. 그런 다음 포드는 요청에 대한 일부 키를 정의하고 이를 요청과 함께 게이트웨이에 전달하고 해당 키가 포함된 메시지가 대기열에 게시될 때까지 기다립니다.
  4. 게이트웨이는 해야 할 일을 수행하고 키를 사용하여 메시지를 메시지 대기열로 보냅니다.
  5. 완전히 동일한 포드 serer_app_pod_b가 키가 있는 메시지를 수신하고, 메시지의 데이터를 가져오고, 클라이언트의 요청을 계속 처리합니다.

이 문제를 해결하는 다른 방법이 있을 수 있지만 이것이 제가 원하는 것입니다. 그것이 당신에게 도움이되기를 바랍니다!

위 내용은 다른 요청을 받은 후 HTTP 요청에 대한 응답을 제공합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제