Есть идея сделать ресурс (сколько их уже?) коротких ссылок, вроже tinyurl или bitly, tiny-адресс есть («звучный» домен вида ***.**), но вот с технической частью вопросы…
По порядку: использоваться он будет юзерами на форуме, мною лично, ну и тем, кому просто приглянется.
-сбор статистики будет реазизован через Google AppsEngine (сервлетом счетчиком посещений + какие ссылки популярны + будет генерироваться часть статистического контента)
-фронтом на сервере будет вкыступать nginx, который помимо общения с беком (если back будет) будет дергать данные из сервлета на ГуглАппс и вписывать его в страничку.
А вот далее начитаются вопросы…
В интернете и на Хабре есть заметка, как пользователи реализовывали подобные вещи через
готовые решения или самописные, кои можно найти через поиск.
Но все они (все что я видел, а видел я мало) работают
с базой. Варианты БД два:
1) не транзакционная
2) транзакционная
В
первом (
mysql-myisam
) случае малый (до поры) расход оперативной памяти, но при выборке или инсерте таблица блочится на запись и чтение соотвественно. Во
втором (
mysql-innodb
, оракл не ставим) случае блокировки на уровне записей, но нагрузка из-за транзакций и ситуация когда таблички и база будут разрастаться, ибо наша идея хранить все ссылки. На первый порах проект будет для «себя и друзей» и нагрузка будет если что от ботов или ха
цкеров.
Но хочется сделать проект, ориентированный на большую нагрузку, дабы выжать все. Например 50-100 запросов url в секунду это 4-8
миллионов в день (картинка, запостенная в одном топике на хабре, который попал в топ24, дергалась 0.5-2 раза в
секунду, к примеру).
Я расчитываю на более скромные цифры (10-20 запросов в секунду), но на сервере уже есть проекты, которые кушают его ресурсы.
У меня возникла идея — что если хранить данные о ссылках в виде локальных файлов и подпапок. ext4 дает до 64к папок в подкапке. То есть вполне реально разложить
/a/aa
,
/a/ab
… где будет лежать рой файлов вида
abcd.ext
(ext расширения, для удобства), которые будут давать ссылку вида
***.**/aaaabcd
(естественно nginx будет ее обрабатывать через regexp).
Ссылки(файлы) будут генерироваться
perl
на стороне
nginx
(
front
без
back
, perl модуль в
./configure
) или back'ом в виде
fastcgi-php
или
tomcat
/
jboss+jsp
, и затем писаться в файл.
Не станет ли линуксу (или
дисковой подсистеме) плохо от
частых запросов на хард? Страничка на харде будет содержать только линк и будет доформляться nginx в соотв. с конфигом и данные от сервлета с ГуглАппс.
Если есть готовые решения, исключающие использование БД, или статьи, описывающие, что использование дисковой подсистемы не разумно — пожалуйста ткните меня
носом линком в них.
Немного о сервере — «магазинный» сервер от Hetzner, AMD 2 ядра, 2Gb RAM & 400Gb raid-1 (soft), в будущем вероятен переход на EQ4 тариф, если текущего будет мало (хотя его хватает на все, что там висит).