Какой язык выбрать для api сервера?

Доброго времени суток.

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

Не могу выбрать для себя язык/языки на которых писать сайт и api сервис(

Написать нужно две части:
Сайт для пользователей.
Api сервер, который будет отвечать на запросы с сайта, они будут доступны только самому сайту, пользователи даже знать об них не будут.

Требования:

Сайт буду просматривать пользователи, и делать всякое разное. он должен быть максимально быстрым.
Api будет выполнять ресурсоёмкие задания: вычисления, запись из бд в файл и наоборот, и прочие функции которые не выдержит сайт. Api обязательно должно быть многопоточным, ни об какой асинхронности речи идти не может, оно должно уметь обрабатывать много и сразу.

Писать все в одном месте не подходит т.к. много сайтов будут обращаться к api серверу.


С начала начал писать так:
Сайт на PHP - на который заходили пользователи
Api на С# - который принимал запросы от сайта и отвечал ему.

Но если честно мне в самом начале эта связка не понравилась, не знаю почему.
Сайт и api сервер могут общаться на любом протоколе, лишь бы его удобно было реализовать на выбранных языках. В случае с тем что я написал, они общались просто, API принимал и отдавал JSON.

Вот примерная схема как должно быть все устроено:
c19b74fe2c6e419296cbe3876518568a.png

Бд сайта(та которая сверху) может быть в принципе любой, лишь бы быстрой.
Хотя предпочтительней MySQL ибо очень к нему привык.
Спасибо и надеюсь на Вашу помощь.
  • Вопрос задан
  • 6359 просмотров
Решения вопроса 1
index0h
@index0h
PHP, Golang. https://github.com/index0h
1. Для серьезных вычислений вам может понадобиться целый кластер + ***MQ для организации очереди.
2. Для длительных по времени / больших по оперативке вычислений - php не совсем торт. PHP Hypertext Processor, но про этот факт почему-то куча народу забывает.
3. С++ стоит использовать если вы сможете аргументировать почему)).
4. В принципе рекомендую посмотреть в сторону Golang.
Ответ написан
Пригласить эксперта
Ответы на вопрос 9
viktorvsk
@viktorvsk
Сайт буду просматривать пользователи, и делать всякое разное. он должен быть максимально быстрым.

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

Api будет выполнять ресурсоёмкие задания: вычисления, запись из бд в файл и наоборот, и прочие функции которые не выдержит сайт.

API не делает задания. А вычисления и запись из бд в файл - не являются ресурскоемкими операциями в общем случае. Да и сайт их обычно тоже не производит. В таком контексте сайт - это, скорее, фронтенд. А вычисления будут производиться на сервере.

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

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

Возможно, это все потому что 3 (4) часа ночи и вы переварили очень большой объем информации. Тогда попробуйте конкретизировать.

Если по существу:
1. Неважно, какой язык выбирать. Тот - который лучше всего знаешь. На любом языке можно реализовать что угодно. Большинство "производительности" достигается не за счет быстродействия стандартной библиотеки языка, а за счет кеширования, оптимизации sql запросов, настройки веб-сервера и базы данных и использования очередей.
2. Видимо, для вас важен вопрос: "Стоит ли разносить API сервера и клиент приложения на разные приложения, языки, инстансы?". Здесь ответить сразу не получится, потому что все зависит от задачи. Смотря как вы будете использовать свои инстансы. Какие вычисления будут проводиться и т.д. - больше конкретики по предметной области.
Ответ написан
@vsuhachev
Фактически вы создаете 2 отдельных приложения. Оба приложения могут быть написаны на одном и том же языке, если нравится/знаете PHP - пишите все на нем. Для выполнения длительных ресурсоемких задач используйте очереди . В любом случае одновременно использовать разные стеки технологий (PHP и .NET) без веских на то причин не рационально, лучше работать в одном стеке.
Ответ написан
@sakuradaj
Сайт буду просматривать пользователи, и делать всякое разное. он должен быть максимально быстрым.

должен быть максимально быстрым.

Насколько именно быстрым? Не очень понятно чем обуславливаются такие требования. Не исключено что вы занимаетесь преждевременной оптимизацией.


С начала начал писать так:
Сайт на PHP - на который заходили пользователи
Api на С# - который принимал запросы от сайта и отвечал ему.
Но если честно мне в самом начале эта связка не понравилась, не знаю почему.


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

Вообщем я бы писал бы на том языке/фреймворке с которым больше опыта и тут довольно равнозначны php, python, ruby, etc... и может какие-то другие новые вроде Go иди node.js, не суть.

Если хотите скорости то делаете части вашего приложения горизонтально масштабируемыми (то есть например можно запустить 10 копий вашего приложения на разных серверах и архитектура его будет такова что все будет работать нормально).
Плюс как писали тут думать больше не о языке, а об оптимизации базы данных и взаимодействий с ней, кешированием в нужных местах, обычно там самые узкие места.
Ответ написан
Sanasol
@Sanasol
нельзя просто так взять и загуглить ошибку
На чем умеете на том и пишите. А на сколько быстро оно будет работать зависит от того как хорошо сделаете.

Но если надо прям что-то совсем серьезное вычислять, то наверно лучше выбрать python(django)/ruby(onrails)
Пожалуй это достаточно быстрые варианты.

Демон на си(каком-нибудь) тоже быстрый вариант при правильном подходе
Ответ написан
@TheMrViper Автор вопроса
Только что возникла идея написать модуль для nginx, скажите насколько это бредово.
Так же не против бы был принять что то типа, php c вставками на с/с++. Вроде удобно и производительно, но все равно не то что нужно(
Так можно сделать с python, ruby. Тогда может что то бы получилось, но если уже и писать на с++ то все и сразу.
Ответ написан
Комментировать
Serhioromano
@Serhioromano
Web Developer
Сайт - AngularJS
API - PHP/C#/Node - любой что удобней.
Ответ написан
Комментировать
saintbyte
@saintbyte
Django developer
Вам не API нужно а Gearmand
Ответ написан
Комментировать
@Mak1012
Мне кажется вы слишком далеко закопались, и слишком торопитесь.
Начните сначала, с постановки задачи - что вы хотите сделать?
Вам подскажут как это лучше делать.
Подозреваю, на первые год-два вам и одного сервера хватит,
ну максимум, сервер SQL разместить на отдельной железке.
Ответ написан
Комментировать
struggleendlessly
@struggleendlessly
.net Senior developer
Пиши на си шарпе и не парся. кстати что то я асинхронно и многопоточно не понял. в большинстве случаев async более чем достаточно, или там видео в реальном времени будет обрабатываться?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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