Мне было поручено разработать систему для обработки SMS-транзакций. Транзакции поступают в виде HTTP-запросов от поставщика услуг. В процессе обработки транзакции рассматриваемой системе потребуется связаться с несколькими другими системами, не зависящими от меня, и выполнить некоторую обработку. Я могу выбрать практически все, от языка реализации до базы данных, которая будет использоваться. Я бы хотел, чтобы эта система хорошо масштабировалась и была высокодоступной, по крайней мере, потенциально. Исходя из вышеизложенного, у меня следующие вопросы:
1) Какой язык выбрать? Я программист на C ++ полный рабочий день, но C ++ не кажется хорошим выбором для этой системы. Я хорошо знаю Java, Python и PHP, пробовал много других языков. Я готовлюсь к Java. Вы бы тоже выбрали Java или предпочли бы что-то другое (с учетом требований)?
2) Я думаю, что для хорошего масштабирования эта система должна обрабатывать вещи асинхронно, и должна быть возможность добавлять узлы обработки. Для этого система сообщений Java выглядит правильным выбором, например, ее реализация в Apache ActiveMQ. Это хорошая идея?
3) Очевидно, для этой вещи нужна своего рода база данных. Растет движение NoSQL - стоит ли мне вообще смотреть в этом направлении (например, Apache Cassandra выглядит очень многообещающим) или просто использовать проверенные временем PostgreSQL или MySQL с InnoDB? Потому что мне кажется, что этой штуке нужна КИСЛОТА.
Используйте тот язык и инструменты, которые вам удобнее всего использовать. Критически важные проекты - не время и не место для изучения нового языка. Я любитель Python и C / C ++, поэтому, наверное, выбрал бы один из них. Не позволяйте моему выбору языка затуманивать ваше суждение;).
Тем не менее, Erlang был бы хорошим выбором, хорошо масштабируется ... просто добавьте больше оборудования, и он масштабируется по горизонтали. Проблема в том, что учиться - сука. См. Предыдущий комментарий об обучении в крупных критических проектах.
То же самое относится и к выбору базы данных ... Используйте это, если вы знакомы с MySQL. Если вы знаете Кассандру наизнанку, то это может вам больше подойти.
То, что вы делаете, требует механизма сохранения состояния транзакции и атомарности. Поэтому выберите комбинацию языка и базы данных, которая позволит вам выполнить эти критерии.
Асинхронная операция обязательна, особенно когда вы хотите масштабировать. Я бы определенно встал на сторону какой-то платформы обмена сообщениями типа AMQP, RabbitMQ - мой любимый выбор, но он основан просто на том, что у меня больше всего опыта.
Основное преимущество такого типа очереди перед базой данных заключается в том, что вы получаете возможность быть управляемой событиями при поступлении сообщения, в отличие от ожидания поступления данных или регулярного опроса базы данных, чтобы узнать, есть ли новые данные. ожидание. Вы можете установить сохранение сообщения как свойство сообщения, чтобы при перезагрузке сервера сообщение сохранялось на диске.