Дизайн высокого уровня системы обработки смс транзакций

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

1 ответ

Решение

Используйте любой язык и инструменты, которые вам удобнее всего использовать. Важнейшие проекты - не время и не место для изучения нового языка. Я парень на Python и C/C++, поэтому я бы выбрал один из них. Не позволяйте моему выбору языка омрачить ваше мнение;).

Тем не менее, Erlang будет хорошим выбором, хорошо масштабируется... просто добавьте больше оборудования, и он масштабируется горизонтально. Проблема в том, что это сука, чтобы учиться. Смотрите предыдущий комментарий об изучении больших критических проектов.

То же самое относится и к выбору базы данных. Если вы знакомы с MySQL, используйте это. Если вы знаете Кассандру наизнанку, то это может быть лучше для вас.

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

Асинхронная операция обязательна, особенно если вы хотите масштабировать. Я определенно был бы на стороне какой-то платформы обмена сообщениями типа AMQP, RabbitMQ - мой любимый выбор, но он основан просто на том, с чем у меня больше всего опыта.

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

Другие вопросы по тегам