Высокая доступность и масштабируемая платформа для Java/C++ на Солярисе

8
задан Martijn Pieters 17 July 2016 в 08:49
поделиться

3 ответа

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

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

Затем я использовал бы Принцип Парето (80/20 правило) для выбора небольшого количества вещей, которые произведут самые большие усиления и сфокусируются только на тех.

Для масштабирования JAVA-приложения горизонтально я использовал Когерентность Oracle экстенсивно. Хотя некоторые отклоняют его как очень дорогую распределенную хеш-таблицу, функциональность намного более богата, чем это, и можно, например, непосредственно получить доступ к данным в кэше из кода C++.

Другие альтернативы для того, чтобы горизонтально масштабировать Ваш код Java были бы Пробелами Giga, Сеткой Объекта IBM или Драгоценным камнем Gemfire.

Если Ваш код C++ является не сохраняющим состояние и используется просто для перемалывания чисел, Вы могли бы посмотреть на распределение процесса с помощью Сетки ICE, которая имеет привязку для всех языков, которые Вы используете.

5
ответ дан 5 December 2019 в 21:24
поделиться

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

1
ответ дан 5 December 2019 в 21:24
поделиться

Andrew, (в дополнение к моделированию как конвейер и т.д.), измерение вещей важен. Вы имеете, выполнил профилировщика по коду и получил метрики того, где большая часть времени проведена?

Для кода базы данных, как часто это изменяется? Вы смотрите на кэширование в данный момент? Я предполагаю, что Вы посмотрели на индексы и т.д. по данным для ускорения дб?

Какие уровни трафика Вы имеете на фронтэнде? Вы кэшируете веб-страницы? (Не слишком трудно сказать, используют API типа JMS для передачи между компонентами. Можно ли затем поместить компонент Веб-страницы на одну машину (или больше) и затем поместить ли код интеграции (C++) на другого, и для многих продуктов JMS существует обычно собственный API C++, т.е. ActiveMQ приходит на ум), но он действительно помогает знать, сколько из времени находится в сети (JSP?), C++, операция в секунду Базы данных.

База данных хранит бизнес-данные, или она также использует передавать данные между Java и C++? Вы говорите использование совместно использованной мадам не JNI? Какой уровень многопоточности в настоящее время существует в APP? Вы описали бы код, как являющийся синхронным по своей природе или асинхронным?

Есть ли физические отношения между кодом Соляриса и устройствами, которые должны сохраняться (т.е. сделать весь регистр устройств с кодом C++, или может это быть указанным). т.е. если необходимо было поместить веб-подсистему балансировки нагрузки на frontend и просто поднять 2 машины, сегодня relationhip, которого устройствами управляет поле, инициализированное впереди или заранее?

Каковы требования HA? т.е. просто информация состояния? HA может быть сделан только в ярусе веб-узлов путем кластеризации данных Сессии?

DB работает на другой машине?

Насколько большой DB? Вы оптимизировали свои запросы т.е. попытались использовать явные внутренние / внешние объединения, иногда помогает по сравнению с вложенными запросами sub (sometmes). (снова посмотрите на sql статистику).

1
ответ дан 5 December 2019 в 21:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: