Статьи

API-функции Java App Engine и пространства имен

API возможностей

С API-интерфейсом Capabilities ваше приложение может обнаруживать сбои и запланированное время простоя для определенных возможностей API. Вы можете использовать этот API, чтобы уменьшить время простоя в вашем приложении, обнаруживая, когда возможность недоступна, и затем обходя ее.

Как мы справимся с этим, каков компромисс?

1. Элегантно: создайте аспект, который пересекает все записи в хранилище данных и проверяет возможности. Сбой с дружественным сообщением об ошибке.
2. Не так элегантно: добавьте возможность проверки в код хранилища перед каждой записью. Сбой с дружественным сообщением об ошибке.
3. Быстро: фильтр записи, который оборачивает всю транзакцию и проверяет записи в хранилище данных.

Как мы можем проверить это в локальной среде?

1. Нет API-хуков. В настоящее время я не смог найти или использовать Java-прокси GAE для проверки возможности вызова.
2. Решение состоит в том, чтобы создать другие сборки с сервисом Mocked Capability Service, который может возвращать флаги CapabilityStatus.DISABLED и тестировать.

Из-за нехватки времени я пошел на быстрый подход. Я попытаюсь вернуться к этому позже и включить AspectJ или Google Juice, чтобы использовать аспекты этой очевидной сквозной проблемы.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Map<Capability, Boolean> apis = new HashMap<Capability, Boolean>();
 
public void init(FilterConfig filterConfig) throws ServletException {
    apis.put(Capability.DATASTORE, true);
    apis.put(Capability.MEMCACHE,  false); 
}
 
public void doFilter(ServletRequest req, ServletResponse res,
        FilterChain chain) throws IOException, ServletException {
 
    HttpServletResponse httpResponse = (HttpServletResponse)res;
    HttpServletRequest httpRequest = (HttpServletRequest)req;
 
    CapabilitiesService service = CapabilitiesServiceFactory.getCapabilitiesService();
 
    for(Map.Entry api : apis.entrySet()) {
 
        if(api.getValue()) {
            CapabilityStatus status =  service.getStatus(api.getKey()).getStatus();
 
            if (status != CapabilityStatus.ENABLED) {
                log.warn("API " + api.getKey().getPackageName() + ":" +
                        api.getKey().getName() + " has been disabled!");
                httpResponse.sendRedirect(NEPAL_RES_HOST + "/html/read-only.html");
                return;
            }
        }  
    
    chain.doFilter(req, res); 
}

API пространств имен

Прежде чем мы сможем поговорить об этом API, давайте представим концепцию Multitenancy.

Одним из наиболее привлекательных применений API пространств имен является многопользовательский режим. Многопользовательский режим — это имя, данное архитектуре программного обеспечения, в которой один экземпляр приложения, работающий на удаленном сервере, обслуживает множество организаций-клиентов (также называемых арендаторами).

Многопользовательская аренда упрощает администрирование и предоставление арендаторов. Вы можете обеспечить более упорядоченный, настраиваемый пользовательский интерфейс, а также объединять различные хранилища данных в одной схеме базы данных. В результате ваши приложения становятся более масштабируемыми и более экономичными по мере масштабирования.

Данные становится легче разделять и анализировать между арендаторами, поскольку все арендаторы используют одну и ту же схему базы данных.

Multitenancy отличается от нескольких экземпляров:

  • В нескольких экземплярах разные экземпляры программного обеспечения настраиваются для разных клиентских организаций.
  • В случае нескольких экземпляров приложение, как правило, не знает о разнице в клиентах, тогда как в случае нескольких арендаторов приложение может использоваться для разделения и разделения данных.

API Namespaces в Google App Engine позволяет легко создавать хранилища данных Google App Engine. Этот API реализован с помощью нового пакета, называемого диспетчером пространства имен.

Когда вы устанавливаете пространство имен в менеджере пространства имен, эти API получают текущее пространство имен и используют его глобально.

Любой запрос App Engine может получить доступ к любому пространству имен, оставляя приложение для применения политики контроля доступа в пространствах имен. При таком подходе именно приложение отвечает за настройку рабочего пространства имен.

API с поддержкой пространства имен:

1. Datastore
2. Memcache
3. Очередь задач

Используя API пространств имен, вы можете легко распределить данные между арендаторами, просто указав уникальную строку пространства имен для каждого арендатора. Вы просто устанавливаете пространство имен для каждого арендатора глобально, используя диспетчер пространства имен. API с поддержкой пространства имен по умолчанию всегда используют текущее пространство имен.

В хранилище данных диспетчер пространства имен будет применять пространство имен к каждому объекту ключа и запроса.

Не существует Java API для явной установки пространства имен ключа или запроса, все это происходит через диспетчер пространства имен.

Справка: Google App Engine Java-возможности и пространства имен API от нашего партнера JCG в ReflectiveThought .

Статьи по Теме: