Показаны сообщения с ярлыком WebSphere Application Server. Показать все сообщения
Показаны сообщения с ярлыком WebSphere Application Server. Показать все сообщения

вторник, 29 декабря 2015 г.

Spring Framework vs EJB vs CDI. Небольшой бенчмарк с использованием JMH

На днях Суровый выложил на GitHub исходники и некоторые результаты небольшого бенчмарка, проверяющего гипотезу о том, что Spring Framework быстрее этих ваших EJB.

Как оказалось - нет, не быстрее.

Описание эксперимента


Для тестирования был выбран кейс, представленный Адамом Бином в его вебкасте What Is Faster--EJBs Or CDI? A JMH Benchmark: были разработаны три реализации простейшего RESTful веб-сервиса, с использованием Spring Framework, CDI и EJB, соответственно. Конструкция сервисов в общем случае напоминает архитектуру корпоративного приложения: в контроллер инжектируется сервис, в который в свою очередь инжектируются два ресурса (этакие "DAO").

Пример кода с использованием EJB:

@Stateless
public class EJBResourceA {

    public String message() {
        return "A#" + System.currentTimeMillis();
    }
}

@Stateless
public class MessageService {

    @EJB
    private EJBResourceA aresource;

    @EJB
    private EJBResourceB bresource;

    public String message() {
        return aresource.message() + bresource.message();
    }
}

@Stateless
@Path("/")
public class MessageController {

    @EJB
    private MessageService service;

    @GET
    @Path("/message")
    @Produces({"text/plain"})
    public String message() {
        return service.message();
    }
}

Каждая технология использовалась самым очевидным, т.е. распространенным, принятым в сообществе пользователей данной технологии, способом.

  • Для Spring Framework в качестве основы реализации RESTful веб-сервиса был взят Spring MVC: запросы обрабатываются с помощью DispatcherServlet, к которому подключается MessageController, аннотированный RestController, что говорит фреймворку возвратить результат метода MessageController#message() в теле ответа сервиса. В данный контроллер с помощью аннотации Autowired инжектируется сервис, в который, в свою очередь, аналогичным образом инжектируются два компонента-ресурса. Конфигурация контекста приложения (Spring Framework ApplicationContext) осуществляется с помощью аннотаций:

    @Configuration
    @ComponentScan(basePackageClasses = ApplicationConfig.class)
    @EnableWebMvc
    public class ApplicationConfig {
    }
    

    Регистрация слушателей, осуществляющих загрузку контекста, а так же настройка DispatcherServlet'а осуществляется в классе, реализующем интерфейс org.springframework.web.WebApplicationInitializer:

    public class ApplicationInitializer implements WebApplicationInitializer {
    
        @Override
        public void onStartup(ServletContext servletContext) throws ServletException {
            AnnotationConfigWebApplicationContext applicationContext = 
                    new AnnotationConfigWebApplicationContext();
            applicationContext.register(ApplicationConfig.class);       
            
            servletContext.addListener(new ContextLoaderListener(applicationContext));
            
            ServletRegistration.Dynamic dispatcher = 
                    servletContext.addServlet("spring-mvc-dispatcher", 
                            new DispatcherServlet(applicationContext));
            dispatcher.setLoadOnStartup(1);
            dispatcher.addMapping("/api/*");        
        }
    }
    

  • Для CDI: все компоненты создаются в области видимости по-умолчанию - Dependent.

  • Для EJB: все классы аннотированы @Stateless, что соответствует наиболее популярному типу - сессионным компонентам без сохранения состояния. Для хранения экземпляров компонентов используется пул, предоставляемый контейнером EJB сервера приложений. Так же очень важный момент - управление транзакциями. По-умолчанию, EJB-контейнер берет на себя управление транзакциями при обращении к компоненту, при этом если вызов бизнес-метода компонента осуществляется вне контекста глобальной транзакции, то такая транзакция будет создана. Можно было отключить использование данного механизма, тогда условия тестирования больше бы соответствовали режимам, в которых работают конкуренты, но для следования озвученному выше критерию - технология используется наиболее распространенным способом - этого сделано не было.

четверг, 26 ноября 2015 г.

Как настроить сквозную аутентификацию в WebSphere Application Server, z/OS и DB2

По умолчанию команды операционной системы из приложений, развернутых на сервере WebSphere Application Server for z/OS, выполняются от имени пользователя, под которым запущен servant. Под этим же пользователем осуществляется соединение с базами данных, например DB2 или IMS по JDBC Type 2. Но можно настроить сервер приложений таким образом, чтобы обеспечить сквозную аутентификацию: пользователь вашего приложения аутентифицируется на сервере и под этим же именем соединяется с базой данных и выполняет команды в операционной системы: создает файлы в USS (например с логами), работает с наборами данных, а так же запускает на выполнение пакетные задания (JOB'ы).

Процесс сквозной аутентификации

Выглядит процесс следующим образом. При обращении к странице, находящейся в защищенной зоне, будет запрошен логин и пароль пользователя, если настроена, например, BASIC аутентификация по паролю.


Введенные данные проверяются с помощью сервера защиты z/OS (IBM предлагает продукт Resource Access Control Facility (RACF)) и если они верны, то открывается запрошенная страница.


При этом действия в операционной системе будут выполняться под тем пользователем, под которым произведена аутентификация.


И под ним же будут выполняться запросы в СУБД DB2: см результат выполнения запроса SELECT CURRENT SQLID FROM SYSIBM.SYSDUMMY1: ROOT.

понедельник, 26 октября 2015 г.

А почему бы мне и не заплатить за мой Spring Framework?

Вопрос, вынесенный в заголовок темы, может показаться странным. Действительно, все знают, что Spring Framework стоит ровно столько же, сколько, например, посмотреть на знаменитого брюссельского Писающего мальчика, т.е. ровно ноль. Однако, если задуматься об эксплуатации приложения, разработанного на основе этого замечательного фреймворка, то может оказаться, что у нас не все так однозначно.

В данной статье Суровый расскажет о плюсах эксплуатации приложения, разработанного на основе Spring Framework, на "взрослом" сервере приложений, например на, поскольку уж так получилось, что я работаю в IBM, - WebSphere Application Server. Целью данного изложения является донести до вас, уважаемые читатели, мысль о том, что инфраструктура имеет значение.


четверг, 6 августа 2015 г.

Живьем брать демона!

Вот бывает так в жизни, что ты сидишь никого не трогаешь, починяешь примус, переносишь менеджер развертывания DMGR сервера приложений WebSphere Application Server for z/OS на другой LPAR, а он там не работает. Т.е. никак. При этом адресные пространства живые, а соответствующие порты никто не слушает. И в логах ничего. Но, как доказали наши предки ровно 100 лет назад, русские не сдаются, поэтому проблему можно и нужно решить.

Если посмотреть содержимое файла /wasv85config/CELL/DMGR/DeploymentManager/profiles/default/config/cells/CELL/nodes/DMGR/servers/dmgr/was.env, то там можно увидеть строчки, ссылающиеся на не верный LPAR, т.е. на тот, с которого мы перенесли менеджер развертывания:


daemonInstanceName=LPAR1
server_configured_system_name=LPAR1
daemon_start_command_args=JOBNAME=DMNC,ENV=CELL.ZPLEX.LPAR1,REUSASID=YES
daemon_was_env_file=/wasv85config/CELL/DMGR/Daemon/config/CELL/ZPLEX/LPAR1/was.env


Недостаточно просто исправить значения данных параметров в файле was.env! Важно помнить, что данный файл генерируется менеджером развертывания и рано или поздно внесенные вручную изменения будут отменены. Изменять необходимо переменные окружения сервера приложений и файл server.xml.

Переменные окружения можно отредактировать с помощью консоли администрирования сервера приложений: Environment -> WebSphere variables, чтобы проще было найти нужные переменные необходимо выбрать Scope - Node=dmgr.


Файл server.xml расположен в каталоге /wasv85config/CELL/DMGR/DeploymentManager/profiles/default/config/cells/CELL/nodes/DMGR/servers/dmgr. В данном файле необходимо найти строчку

<properties xmi:id="Property_15" name="was.ConfiguredSystemName" value="LPAR1" required="false"/>

и изменить значение атрибута value на актуальное.

P.S. За подготовку материалов к заметке благодарю Александра Анискина, ведущего программиста ГВЦ ОАО "РЖД".

Понравилось сообщение - подпишитесь на блог

понедельник, 27 июля 2015 г.

Почему мой DMGR не видит экс-стэндалон узел, успешно подключенный с помощью addNode?

Давеча Суровый выполнял эксперимент по подключению готового стендалон-узла сервера приложений IBM WebSphere Application Server v8.5.5 for z/OS к ячейке. В процессе обнаружилось, что, не смотря на успешное завершение работы JOBBBOWADDN, вызывающего команду addNode, менеджер развертывания (DMGR) "не видит" свежеподключенный узел.


Сам узел (CZNODEB) при этом запущен и соответствующее адресное пространство существует в z/OS.


Симптомы заболевания

Что происходит на самом деле можно посмотреть в логах FFDC. Для узла сервер приложений пишет данные логи в каталог /wasv85config/CELL/NODE/AppServer/profiles/PROFILE/logs/ffdc/. Очень удобно отсортировать содержимое каталога по дате изменения файлов и смотреть последние измененные, иначе разобраться в каком файле находится актуальная информация довольно не просто. В нашем случае обращает на себя внимание следующая ошибка:



[6/30/15 7:01:44:582 GMT] FFDC Exception:com.ibm.websphere.management.exception.ConnectorException SourceId:com.ibm.ws.management.RoutingTable.Accessor.getConnector ProbeId:583 Reporter:com.ibm.ws.management.RoutingTable$Accessor@e153aa4c
com.ibm.websphere.management.exception.ConnectorException: ADMC0016E: The system cannot create a SOAP connector to connect to host HOST at port PORT.
at com.ibm.websphere.management.AdminClientFactory.createAdminClientPrivileged(AdminClientFactory.java:635)
at com.ibm.websphere.management.AdminClientFactory.access$000(AdminClientFactory.java:127)
at com.ibm.websphere.management.AdminClientFactory$1.run(AdminClientFactory.java:210)
...
Caused by: [SOAPException: faultCode=SOAP-ENV:Client; msg=Error opening socket: java.io.IOException: Exception during sslSocket.startHandshake: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty; targetException=java.lang.IllegalArgumentException: Error opening socket: java.io.IOException: Exception during sslSocket.startHandshake: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty]
at org.apache.soap.transport.http.SOAPHTTPConnection.send(SOAPHTTPConnection.java:475)
at org.apache.soap.rpc.Call.WASinvoke(Call.java:510)

Записи в логах FFDC на стороне менеджера развертывания во многом похожи:


[6/26/15 6:45:11:707 GMT] FFDC Exception:com.ibm.websphere.management.exception.ConnectorException SourceId:com.ibm.ws.management.RoutingTable.Accessor.getConnector ProbeId:583 Reporter:com.ibm.ws.management.RoutingTable$Accessor@b44063cd
com.ibm.websphere.management.exception.ConnectorException: ADMC0016E: The system cannot create a SOAP connector to connect to host HOST at port PORT.
at com.ibm.websphere.management.AdminClientFactory.createAdminClientPrivileged(AdminClientFactory.java:635)
at com.ibm.websphere.management.AdminClientFactory.access$000(AdminClientFactory.java:127)
at com.ibm.websphere.management.AdminClientFactory$1.run(AdminClientFactory.java:210)
at com.ibm.ws.security.util.AccessController.doPrivileged(AccessController.java:63)
at com.ibm.websphere.management.AdminClientFactory.createAdminClient(AdminClientFactory.java:206)
at com.ibm.ws.management.RoutingTable$Accessor.getConnector(RoutingTable.java:1102)
at com.ibm.ws.management.RoutingTable$Accessor.getConnector(RoutingTable.java:1218)
at com.ibm.ws.management.RoutingTable$Accessor.resetSession(RoutingTable.java:1264)
at com.ibm.ws.management.RoutingTable.addChild(RoutingTable.java:397)

Caused by: [SOAPException: faultCode=SOAP-ENV:Client; msg=Error opening socket: java.io.IOException: Exception during sslSocket.startHandshake: Received fatal alert: handshake_failure; targetException=java.lang.IllegalArgumentException: Error opening socket: java.io.IOException: Exception during sslSocket.startHandshake: Received fatal alert: handshake_failure]
at org.apache.soap.transport.http.SOAPHTTPConnection.send(SOAPHTTPConnection.java:475)

Ставим диагноз

Очевидно, что проблема заключается в невозможности установить защищенное соединение между менеджером развертывания и агентом узла по протоколу (HTTPS). Чтобы менеджер развертывания "доверял" агенту узла, в хранилище сертификатов truststore менеджера развертывания должен находиться корневой сертификат, которым подписан сертификат сервера агента узла. Аналогично, чтобы агент узла "доверял" менеджеру развертывания, в хранилище сертификатов truststore данного агента узла должен находиться корневой сертификат, которым подписан сертификат сервера менеджера развертывания.

Если мы говорим о WebSphere Application Server for z/OS, то хранилищами сертификатов как правило являются z/OS System Access Facility (SAF) Keyrings. Задать пути и параметры подключения к хранилищам сертификатов можно на странице Security -> SSL certificate and key management -> Key stores and certificates консоли управления сервера приложений.


Лечение

На рисунке выше видно, что для узла cznodeb используется хранилище сертификатов safkeyring:///WASKeyring.WSBCELL, созданное для экс-стендалон сервера приложений WebSphere Application Server. Более того, в моем случае данное хранилище сертификатов изначально было пустым. Так как все остальные сервера в ячейке используют хранилище сертификатов safkeyring:///WASKeyring.CZCELL, то и для узла cznodeb необходимо прописать ссылки на данное хранилище.


После сохранения и синхронизации изменений (синхронизация с узлом cznodeb по очевидным причинам работать не будет, поэтому необходимо вручную скопировать на него файл /wasv85config/CELL/DMGR/DeploymentManager/profiles/default/config/cells/CELL/security.xml) необходимо перезапустить агент узла cznodeb. Агент сможет подключиться к менеджеру развертывания и синхронизироваться, а менеджер развертывания сможет подключиться к агенту, о чем будет свидетельствовать яркая зеленая стрелочка напротив соответстветствующей строки в таблице System administration -> Node agents, Node agents.


Больше вам зеленых стрелочек в жизни. Оставайтесь на связи!

Понравилось сообщение - подпишитесь на блог

вторник, 30 июня 2015 г.

Ошибка при запуске NodeAgent'а: A conflicting IP address and port, хотя все проверено, конфликтов нет

При запуске агента узла (nodeagent) сервера приложений WebSphere Application Server возможна следующая ошибка, приводящая к аварийному останову данного компонента:


Trace: 2015/07/01 10:01:46.318 02 t=8E5E88 c=UNK key=S2 tag= (13007004)
SourceId: com.ibm.ws.hamanager.coordinator.dcs.CoreStackMembershipManager
ExtendedMessage: BBOO0220E: HMGR0031E: A conflicting IP address and port has been detected for the DCS_UNICAST_ADDRESS end point.
czcell\cznoded\nodeagent, czcell\cznodeb\nodeagent members are configured to use the IP address and port combination of IP::PORT.


Далее могут находиться следующие записи:


Trace: 2015/07/01 13:26:56.778 02 t=8E5E88 c=UNK key=S2 tag= (13007004)
SourceId: com.ibm.ws.hamanager.coordinator.impl.CoordinatorImpl
ExtendedMessage: BBOO0222I: HMGR0228I: The Coordinator is not an Active Coordinator for core group DefaultCoreGroup. The active coordinator set is

... trace skipped

Trace: 2015/07/01 13:26:56.973 02 t=8E5E88 c=UNK key=S2 tag= (13007004)
SourceId: com.ibm.ws.runtime.WsServerImpl
ExtendedMessage: BBOO0220E: WSVR0009E: Error occurred during startup
com.ibm.ws.exception.RuntimeError: Unable to start the CoordinatorComponentImpl

... trace skipped

Trace: 2015/07/01 10:01:46.524 02 t=8E5E88 c=UNK key=S2 tag= (13007004)
SourceId: com.ibm.wsspi.runtime.component.WsComponentImpl
ExtendedMessage: BBOO0222I: WSVR0401W: Unable to deregister the MBean


В FFDC при этом могут быть следующие записи:


[7/1/15 10:01:46:348 GMT] FFDC Exception:com.ibm.wsspi.hamanager.HAException SourceId:com.ibm.ws.hamanager.coordinator.impl.DCSPluginImpl ProbeId:255
Reporter:com.ibm.ws.hamanager.coordinator.impl.DCSPluginImpl@b220dd73
com.ibm.wsspi.hamanager.HAException: This process has conflicting ip:port configuration with another member. See previous messages for more info.
at com.ibm.ws.hamanager.coordinator.dcs.CoreStackMembershipManager.(CoreStackMembershipManager.java:147)
at com.ibm.ws.hamanager.coordinator.impl.DCSPluginImpl.(DCSPluginImpl.java:231)
at com.ibm.ws.hamanager.coordinator.impl.CoordinatorImpl.(CoordinatorImpl.java:349)

...

[7/1/15 10:01:46:430 GMT] FFDC Exception:com.ibm.wsspi.hamanager.datastack.DataStackException SourceId:
com.ibm.ws.hamanager.coordinator.impl.CoordinatorImpl ProbeId:288 Reporter:com.ibm.ws.hamanager.coordinator.impl.CoordinatorImpl@f036c22f
com.ibm.wsspi.hamanager.datastack.DataStackException: Failure creating core stack
at com.ibm.ws.hamanager.coordinator.impl.DCSPluginImpl.(DCSPluginImpl.java:263)
at com.ibm.ws.hamanager.coordinator.impl.CoordinatorImpl.(CoordinatorImpl.java:349)

...

[7/1/15 10:01:46:445 GMT] FFDC Exception:com.ibm.wsspi.hamanager.HAInternalStateException SourceId:
com.ibm.ws.hamanager.runtime.CoordinatorComponentImpl ProbeId:234 Reporter:com.ibm.ws.hamanager.runtime.CoordinatorComponentImpl@331d9876
com.ibm.wsspi.hamanager.HAInternalStateException: failure creating the Coordinator
at com.ibm.ws.hamanager.coordinator.impl.CoordinatorImpl.(CoordinatorImpl.java:356)
at com.ibm.ws.hamanager.coordinator.corestack.CoreStackFactoryImpl.createDefaultCoreStack(CoreStackFactoryImpl.java:88)


Т.е. нам говорят, что невозможно запустить требуемый nodeagent, потому что другой nodeagent имеет пересекающийся по значениям набор портов, однако это - не так!. Т.е. возможно когда-то по ошибке или специально было создано две node с пересекающимся набором портов у соответствующих nodeagent'ов, но эта ситуация давно исправлена, почему же компонент продолжает аварийно завершаться при запуске?

Все дело в файле PROFILEDIR_A/config/cells/CELL/nodes/NODE_B/serverindex.xml. Так как nodeagent аварийно завершает свою работу до запуска синхронизации конфигурации, то у него в данном каталоге остается старый конфигурационный файл serverindex.xml, соответственно компонент продолжает считать, что есть пересечение по значениям ip:port, этакая фантомная боль. Важно обратить внимание, что профиль в данном случае относится к запускаемой node, а в каталоге с профилем нужно найти подкаталог, относящийся к конфликтующей node, там будут два файла: node-metadata.properties и serverindex.xml. Необходимо вручную заменить файл serverindex.xml для соответствующей node, взяв его из профиля с менеджером развертывания (DMGR): .../DeploymentManager/profiles/default/config/cells/CELL/nodes/NODE_B/serverindex.xml.

P.S. Хотел спросить читателей, будет ли им полезна серия заметок по решению вопросов с замечательным сервером приложений IBM WebSphere Application Server? Какие еще компоненты стека нашей корпорации вам были бы интересны: Process Server, Business Process Manager (BPM), Portal, Lombardi или что-нибудь еще? Пожалуйста, ответьте в комментариях. Спасибо.

Понравилось сообщение - подпишитесь на блог

четверг, 25 июня 2015 г.

Ошибка com.ibm.websphere.ssl.SSLException: Cannot get security object from WCCM при запуске WebSphere Application Server

Начну новую серию зарисовок - коротких сообщений, описывающих достаточно стандартные проблемы, с которыми мне пришлось столкнуться, и методы их решения. Может быть буду делиться какими-то лучшими практиками. Начну с проблемы, которая может возникнуть при запуске сервера приложений WebSphere Application Server:


Caused by: com.ibm.websphere.ssl.SSLException: Cannot get security object from WCCM.
at com.ibm.ws.ssl.config.SSLConfigManager.initializeServerSSL(SSLConfigManager.java:212)
at com.ibm.ws.ssl.core.SSLComponentImpl.initialize(SSLComponentImpl.java:145)
... 31 more


Данная проблема возникает из-за того, что файл ...\profiles\PROFILEDIR\config\cells\CELL\security.xml испорчен. Решить проблему можно либо восстановлением данного файла из резервной копии (рекомендуемый вариант), либо копированием его из другого профиля, входящего в данную ячейку: ...\profiles\APPSRV_PROFILEDIR\config\cells\CELL\security.xml.

Понравилось сообщение - подпишитесь на блог

пятница, 22 мая 2015 г.

А вот о работе

Как-то так получилось, что Суровый перестал радовать своих читателей и подписчиков хорошими техническими статьями. За последние несколько месяцев было сделано довольно много, но тема моя настолько специфична - Java и WebSphere Application Server на мейнфреймах IBM (теперь это называется z Systems), что я даже не знаю, будут ли технические статьи по данной теме восстребованы широкой общественностью.

Давайте лучше поговорим немного о другом.

Возможно среди читателей и подписчиков моего блога есть специалисты, эксплуатирующие WebSphere Application Server или другие продукты Middleware от IBM: WebSphere MQ, WebSphere Message Broker, IBM Integration Bus, CICS (!)). Возможно также в вашей компании используются средства мониторинга и автоматизации Tivoli. И все это богатство работает на мейнфрейме, или вы планируете миграцию на мейнфрейм. Наверняка у вас есть вопросы, какие-то замечания, предложения или даже проблемы, связанные с работой наших продуктов. Пожалуйста не стесняйтесь, просто пишите мне на почту psamolysov@ru.ibm.com. Если вы работаете у партнера, разрабатывающего программное обеспечение для мейнфреймов, или задумываетесь о поддержке вашим продуктом этой замечательной платформы, то так же прошу обращаться по любым возникающим вопросам.

Моя роль в IBM называется Client Technical Professional. Это значит, что каждую неделю я должен посещать заказчиков, общаться с их техническими специалистами и помогать решать возникающие вопросы. Помогать вам - это моя непосредственная рабочая обязанность, поэтому даже не думайте стесняться, не зависимо от того, куплена или нет вашей организацией поддержка на тот или иной продукт!

Отдельно отмечу (потому что хотя бы для меня самого это очень важно), в обращении за помощью нет ничего постыдного. Если вы попросили у меня совет или консультацию, то это не значит, что я хоть в чем-то умнее вас или являюсь более квалифицированным специалистом. Вовсе нет! Просто у меня есть бейджик с надписью IBM, который дает право обращаться к действительно умным коллегам внутри компании, включая разработчиков продуктов из зарубежных лабораторий и даже к архитектору IBM JVM (так мне недавно удалось ответить на один интересный вопрос нашего крупнейшего заказчика). Не использовать такие возможности на мой взгляд недальновидно.

Понравилось сообщение - подпишитесь на блог

вторник, 3 марта 2015 г.

Правильная платформа для Java EE приложения или как Линукс оказался в 3 раза медленее z/OS

Ваш покорный слуга написал еще одну статью на Хабрахабр - Правильная платформа для Java EE приложений: как z/OS + DB2 оказались в 3 раза быстрее Linux + Oracle.

Краткое резюме: очень быстро мигрировали Java EE приложение, использующее Hibernate, на мейнфрейм и провели сравнительное тестирование, с одной стороны данное приложение на zLinux + Oracle (2 LPAR), с другой - оно же на z/OS + DB2 (1 LPAR). Вариант на z/OS + DB2 работал быстрее в 3 раза. Конфигурация выбрана исходя из требований заказчика, для которого выполняли тестирование, но в принципе соответствует реальным практикам, почему-то именно так и разворачивают - на Linux стараются вынести каждую подсистему на свою виртуальную машину, на z/OS - весь стек разворачивается вместе, тем самым используются примущества операционной системы, в частности Cross-Memory Services - механизм, позволяющий из одного адресного пространства (WebSphere Application Server) обратиться к другому (DB2) с помощью нескольких машинных команд, минуя планировщик ОС. Преимущества подхода перед типичным кодом межпроцессной коммуникации (IPC), содержащем сотни, а то и тысячи машинных инструкций, да к тому же выполняющем обращения к ядру, очевидны любому инженеру, знакомому с операционными системами чуть глубже, нежели на уровне "интерфейс унылый/интерфейс неунылый".

Отдельно отмечу, что исключительно расчетная часть на Java под z/OS выполнялась быстрее на 25%, что является отдельным приветом сторонникам мнения "Java на мейнфрейме тормозит и вообще".

P.S. Очень распространенное заблуждение, что zLinux выполняется только на z/VM. В данном случае и z/OS и zLinux выполнялись на LPAR'ах, VM в тесте не участвовала.

UPD: Хабраэксперты не подкачали, адекватные комментарии и претензии затерялись в ворохе: "Мы веруем в Линуха святого, а вы говорите, что он в чем-то хуже? Вы все врети, вы - сурковскаяпропаганда!!!" Грамотность аудитории оставляет желать лучшего, но это - уже наша недоработка. Основная претензия - разнесение подсистем на линуксе по разным LPAR'ам, но кто виноват, что линуксоиды так деплоят. В целом интерес к теме прослеживается и это не может не радовать.

UPD2: С нетерпением жду реакции анонимных аналитиков с ЛОРа.

Понравилось сообщение - подпишитесь на блог

пятница, 13 февраля 2015 г.

Производительный отказоустойчивый географически разнесенный кластер на базе мейнфрейма? Yes, rly!

Вторую половину октября и весь ноябрь Суровый провел в солнечной Франции неподалеку от Лазурного берега, в клиентском центре IBM, расположенном в замечательном городке Монпелье. Ну знаете, как это бывает: глухие стены, сенсорные панели, мейнфрейм за стеклом, французские коллеги, вкалывание с 9 и до 22-х, но самое главное - очень и очень интересная задача.


Занимались мы с коллегами тестированием реального банковского приложения - платежной системы - на нашей уникальной платформе IBM zEnterprise EC12. В качестве программного обеспечения промежуточного слоя использовалось стандартное ПО IBM: СУБД DB2 z/OS, менеджеры очередей WebSphere MQ, сервер приложений WebSphere Application Server for z/OS (еще раз было продемонстрировано, что вопреки популярному убеждению мейнфрейм идеально подходит для работы Java-приложений). Платежная система была развернута на кластере Parallel Sysplex, узлы которого работали в режиме Active-Active. Самое главное, что хотелось проверить, - как ведет себя платформа и приложение при изменении расстояния между узлами кластера вплоть до 70 км.

Результатами, касающимися масштабируемости и производительности, хотим поделиться с вами в статье: Производительный отказоустойчивый географически разнесенный кластер, работающий по схеме Active-Active на мейнфрейме IBM zEnterprise EC 12. Автором статьи является ваш покорный слуга. Если будет зафиксирован интерес к теме, то напишу еще о результатах тестирования высокой доступности, обеспечиваемой нашей платформой.

Чтобы немного оживить заметку, фотография Сурового челябинского программиста на Чертовом мосту на фоне гор:


и да, мы тоже любим Linux и Тукса, но работать предпочитаем в z/OS.


Понравилось сообщение - подпишитесь на блог