여러 도메인을 통해 제공되는 Google App Engine Python 표준 환경에서 Flask로 API를 작성하고 있습니다.Google App Engine API의 네임 스페이스 관리자의 범위는 무엇입니까?
API는 데이터를 저장하고 데이터를 가져 오는 데 사용할 수 있습니다.
API가 액세스되는 도메인에 의해 결정된 네임 스페이스에서만 데이터를 저장하거나 가져 오기 위해 클라우드 데이터 저장소의 멀티 테넌시를 사용하고 싶습니다.
이 작업을 수행하는 유일한 방법은 요청시 또는 I/O 시간에 컨텍스트 관리자에서 google.appengine.api.namespace_manager
을 사용하여 네임 스페이스를 설정하는 것입니다.
@contextmanager
def multitenancy_namespace(namespace):
original_namespace = namespace_manager.get_namespace()
if namespace:
new_namespace = to_namespace_safe_url(namespace)
namespace_manager.set_namespace(new_namespace)
yield
namespace_manager.set_namespace(original_namespace)
을 그리고 예상대로 작동합니다.
내 걱정은 namespace_manager
입니다. 나는 이것에 대한 어떠한 문서도 찾을 수 없었다.
내 사용자 인터페이스가 namespace_manager.set_namespace(...)
으로 설정된 네임 스페이스를 전역으로 가정 할 때 1000 명이 넘는 사용자가 동시에 스레드를 사용하면 첫 번째 요청 후 set_namespace
이라는 다른 요청이 발생하여 데이터가 잘못된 네임 스페이스에 저장 될 것으로 예상됩니다. 하지만 첫 번째 요청이 I/O를 수행하기 전에
내가 통과 한 스레드 테스트 here을 작성했는데, 이는 namespace
의 범위가 개별 스레드 (적어도 내 Flask 응용 프로그램에 충분 함)에 국한되어 있음을 알려줍니다.
그러나 는namespace_manager
의 맥락입니까? set_namespace
은 실제로 무엇을합니까? 네임 스페이스 설정은 어디에 저장됩니까? 네임 스페이스 충돌이 인 일 수있는 사용 사례가 있습니까?
분명히 문서에서 그런 것을 보지 못했습니다. 설명해 주셔서 감사합니다! – Charles
조금 쉬워. 메소드에 대한 주석은 다소 확실합니다. "" "현재 HTTP 요청의 기본 네임 스페이스를 설정하십시오." –