-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
34 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,37 @@ | ||
# About this project | ||
|
||
This is a very simple blog engine made for the Scalaxy's Highload Battle. | ||
|
||
## Результат | ||
|
||
Во второй круг нагрузки не вышел, так как на один единственный запрос отдал код 500. Судя по логам nginx-а, развалился канал между веб-севером и моим приложением, либо приложение не влезло в таймаут, за который nginx хочет данные. | ||
|
||
## Что я использовал и почему | ||
|
||
Вместо постмортема попробую рассказать, что и почему я сделал. | ||
|
||
Для начала, после долгих раздумий и экспериментов, я решил обойтись одной виртуальной машиной размером в две ноды. И, кажется, именно из-за этого и напоролся. Нужно проверять, конечно. | ||
|
||
### Nginx | ||
|
||
На машинке мне удалось натюнить nginx на отдачу примерно 16000 запросов в секунду из веб-приложения, выдающего банальный "Hello world", но через шаблонизатор. | ||
|
||
Когда принимал решение оставить nginx ещё расчитывал на вариант с несколькими машинами в качестве апстримов. Перед самым запуском отказался от многомашинной конфигурации, так как, если бы бомбили мегабайтными запросами, то в 100-мегабитный линк из много бы не влезло. В коненчом итоге, понял, что бомбы вряд ли будут толстыми, но переделывать уже не стал. Это и был фейл, как я думаю. | ||
|
||
### Python & Tornado Web Server | ||
|
||
Я не имею предбеждения против интерпретируемых языков, а питон ещё и люблю (мне приятно и удобно выражать на нём свои мысли). | ||
|
||
Tornado Web Server очень годный и по скорости отдачи практически равносилен nginx-у (rps: 15,5k против 16k). | ||
|
||
### Redis | ||
|
||
Ничего не знал про Редис и было интересно. Решил попробовать, соблазнившись активной работой в памяти и асинхронным сбросом данных на диск. По условиям конкурса, целостность данных должны быть только во время тестирования. | ||
|
||
В процессе написания движка понял, что благодаря поиску ключей по маске могу сделать поисковый индекс с очень быстрой отдачей. В итоге, каждое слово становилось ключом со списком значений, указывающих на пост, в котором это слово есть. | ||
|
||
Вообще, я решил сыграть на том, что пост может попадать в индекс в течение 3-х секунд после поста и хотел поставить несколько отдельных машинок, которые редьюсили бы тексты и забивали в редис, но, как я уже писал выше, машинка была одна и я вставил этот процесс прямо в обработчики post-операций. Вероятно, это всё же стоило разнести. | ||
|
||
Как-то так. | ||
|
||
Мне можно написать по адресу [email protected] или в твиттер @gregor_ru |