[Из песочницы] История проекта длинною в год от 11.11.16 до 11.11.17
Всем привет! В этой статье я хотел бы рассказать о двух вещах: с какими трудностями я столкнулся в ходе работы над Прайс Архивом и что из этого вышло. Мой рассказ я построю, может быть, не совсем обычно. Я почти не буду давать ответы на возникшие вопросы. Я только озвучу те вопросы и проблемы, которые возникали и возникают, которые решил или которые находятся в процессе решения. Инсайд чистой воды, можно сказать.
Как говорится — все от земли, из первых уст. Предполагаю, что Вы устанете просто от прочтения того, что нужно было сделать.
Честно говоря, если бы мне показали подобный список проблем, которые нужно будет решить и рассказали с каким трудностями я столкнусь — возможно я бы оставил эту затею и не разрабатывал бы Прайс Архив с нуля. Но я решил проверить себя, что ли.
Если Вас интересует информация по ценам на товары AliExpress.com, то прошу сразу ко второй части. Там я расскажу все самое интересное, что было мной замечено.
Для кого эта статья?
Наверное, для еще студентов или людей, собирающихся с мыслями по поводу открытия своего проекта. Мне такая статья год назад не помешала бы.
Год назад?
Да, именно 11.11.2016 я решил сделать что-то полезное для людей. Я понимаю, что для одних это оказалось полезно, для других не очень, у третьих будет вообще своя особенная точка зрения. Но цель была такая. И сейчас я по-прежнему призываю придумывать только что-то
полезное, иначе ваша работа обречена на провал. Но сразу оговорюсь — даже что-то полезное с легкостью может провалиться.
Что-то из этого сделано, что-то нет, что-то я забыл и об этом тут не написано. Но я старался написать обо всем, что было.
Извините за винегрет, я вставляю сюда среди прочего и куски из своего to do листа, который я вел некоторое время. В общем как оно было на самом деле, так тут местами и вставлено. Итак, вот такой список дел у меня получился.
1. Найти проблему, которая волнует многих людей.
2. Изучить предметную область. Найти похожие сервисы и конкурентов.
3. Убедить себя в том, что проект нужен людям и он имеет шансы взлететь.
4. Убедить себя в том, что хватит денег, сил и желания все сделать до наступления самоокупаемости.
5. Составить список инструментов сервиса, которые должны быть реализованы в будущем.
6. Продумать дизайн сайта, какой функционал у него будет. Первоначальный выбор был сделан в пользу сайта, а не приложения.
7. Составить подробнейшее техническое задание по дизайну. Заказать и следить за разработкой. Это единственное, что я заказывал. Дизайн — это очень сложно даже с хорошими дизайнерами и верстальщиками. Надо все проверять и перепроверять тысячу раз, если хочешь добиться прилично сделанного дизайна и верстки.
8. Централизованно освежить в памяти или научиться некоторым командам в Linux.
Когда-то в университете изучали, но это было давно и не правда. Монтирование-размонтирование диска, ntpdate, tune2fs, screen, man, mkfs, df -i, lsof, ps aux, top, du -sh *, date, blkid /dev/sda1, fdisk -l и еще подобных два-три десятка.
9. Изучить теорию по теме скорости записи и чтения данных на диски. Тесты дисков разных производителей, моделей и т.п.
10. Изучить теорию по файловым системам. ext-семейство, xfs, reiser, brtfs, zfs, другие.
Въехать во все это при условии, что действительно всеобъемлющей информации вот так, что бы для своего случая — такого я не нашел. Все нужно было перепроверять и в итоге по некоторым вещам Google показывал только 3 страницы с обсуждением действительно важных моментов, которые оказывались краеугольными. Остановиться на такой файловой системе, которая может легко справляться с десятками миллионов файлов и при этом быть очень легко масштабируемой. Изучить различные моменты по тюнингу файловых систем, типа отключить directory index и проверить скорость чтения и записи, директива noatime, и еще несколько подобных.
11. Написать скрипты для тестов диска по скорости записи, чтения, перезаписи: все последовательно и все в разнобой. Изначально десятки тестов проводились на обычных дисках со всеми возможными размерами блока и количеством inodes. Нужно было разработать подходящие тесты, что бы они моделировали все возможные ситуации, включая очень сильную фрагментированность.
12. Оказалось, что обычные диски по умолчанию не справляются по времени с большим количеством данных. Надо было искать выход. Он нашелся в хороших SSD дисках. Да, они дороже, но без них оказалось никак.
13. Провести снова все тесты диска по скорости записи, чтения, перезаписи: все последовательно и все в разнобой.
14. Подобрать под ожидаемые данные размер блока файловой системы, количество inodes так, что бы процент их использования увеличивался синхронно. Иначе будет перекос или по месту или по количеству inodes, что приведет к более быстрому расходованию потенциала диска по вместимости. А это лишние деньги из-за недоработанной архитектуры вначале. Не очень хотелось.
15. Изучить технологию виртуализации данных RAID или придумать свой вариант на случай выхода дисков из строя.
16. Разработать свою собственную схему на будущее по поводу расширения сервиса в N раз и хранения данных при форс-мажорах.
17. Выбрать надежного хостера с более-менее вменяемой технической поддержкой. Рассчитать размеры необходимой оперативной памяти, количество и размер дисков, чтобы не переплачивать долгое время. Ждать приезда дисков и настройки сервера. Проблема была еще в том, что SSD диски были в дефиците. Но повезло, ждал не долго. Сервер заказывать с возможностью увеличения, как памяти, так и дисков.
18. При получении сервера провести все возможные и нужные тесты — все ли работает, все ли правильно настроено. Проверить диски на ошибки, был случай даже с новым диском. Поменять порт ssh на свой. Настроить большое количество одновременно открытых соединений.
Увеличить предел открытых файлов для пользователей admin и apache. Проверить, что бы стояли последние версии bash и т.п. — надо, что бы стояли с патчами от атак, которые уже известны, типа heartbleed. maxclients у apache — надо поднять с 256 до (не скажу). Поставить directamin-y simple_disk_usage=1. Проверить, что бы были подключены оба IP адреса сервера и при перезагрузке не отваливались из-за того, что они сохранены только в памяти. Проверить подключение putty. Удалить FTP сервер. Закрыть все ненужные порты В iptables внести разрешающие правила для портов: * Все остальные под запрет. Найти полезные команды для сервера и разобраться в их синтаксисе: iptables -I INPUT -s 1.1.1.1 -j DROP, iptables -nvL INPUT.
Установить ntpdate. Установить UTC время для всего: для сервера, для php. hwclock — тоже UTC. Часовой пояс как для hwclock так и для php — надо поменять на Europe/London. Установить screen, man, и другие нужные вещи. Удалить phpmyadmin.
19. Много времени было потеряно при работе с CentOS 6.
CentOS 6 не ставить — в ней иногда есть проблемы с сетевой картой, если через нее идет много трафика — около 15–20 Gb в час.
20. Найти — как решаются проблемы с масштабируемостью, высокой производительностью и надежность сейчас. Найдена Cassandra. Изучить Cassandra и применимость в своей ситуации.
21. Решить — как будут храниться данные на основании проведенных тестов и имеющейся информации по базам данных.
22. Поставить все нужные для безопасности сайта и CEO заголовки, убрать ненужные, раскрывающие — что именно установлено на сервере. Vary User-Agent, X-Accel-Version, X-Frame-Options и другие.
23. Приступить к разработке сайта. Определиться на чем будет вестись разработка и почему. Разработать архитектуру, которая позволит безболезненно добавлять неучтенные вещи.
Что бы в то же самое время быть легкой, быстро доступной и предельно понятной как в коде, так и в том, что где лежит на сервере и почему именно тут.
24. Определиться с количеством языков, на которые будет переведен сайт исходя из финансовых возможностей и расценок на переводы. Найти переводчиков для каждого языка или агентство переводов, где будут делать свою работу так, чтобы не нужно было перепроверять каждый раз. Тут я столкнулся с разными случаями. Некоторые люди настолько своеобразны, что не могли принять email с заданием для перевода — им нужен был личный приезд и объяснение на пальцах. Причем все подавалось в таком виде, что они мне делают одолжение. Пишу тут про социальные моменты, что бы дальше не останавливаться на них. А они были. Понял только одно. Если нет уже проверенных людей в какой-либо области, то найти тех, с кем можно работать — довольно не быстрое занятие.
25. Досконально изучить правила работы с AliExpress.com в качестве аффилиата.
26. Изучить API AliExpress. Понять, что оно не очень то и информативное. Искать выход. Потратить часы общения с саппортом и всеми теми сторонами, которые могут помочь AliExpress сделать API лучше.
27. Собрать все названия категорий и подкатегорий в каталоге AliExpress на английском языке. Сохранить с пометками какой подраздел относится к какому разделу. Написать для этого скрипт.
28. Написать скрипт для сбора базы данных для английского языка. Исходя из получаемых данных провести тесты по месту, количеству занимаемых блоков, inodes.
Прикинуть — на какое время хватит диска. Что делать потом, когда диск заполнится?
29. Разработать правильную структуру хранения данных для быстрой записи, поиска, чтения и удаления. Время полной отдачи страницы не должно быть больше 0.8 секунды при десятках миллионах записей на диске.
30. Провести мониторинг пропадающих товаров на AliExpress. Если товар пропадает из продажи — это на время или навсегда? Было еще много особенностей, с которыми нужно было разобраться.
31. Написать скрипты посуточного анализа всех товаров. При разработке учесть все возможные и необходимые статистические данные.
32. Собрать названия категорий и подкатегорий для русского языка + для всех остальных, кроме английского. Он уже собран.
33. Написать скрипт сбора названий товаров на всех языках и собрать с его помощью нужные товары из сформированной при первом проходе базы. Учитывать лимиты на количество запросов к API.
34. Написать код сайта. Сделать весь функционал, включая поиск товаров, отображение категорий, подписки, личный кабинет, блог, регистрация, отслеживание, email оповещения и т.д. и т.д.
35. Составить список всех фраз и слов, которые используются для сайта на русском языке.
36. Связаться с переводчиками и отдать им списки фраз и слов для перевода.
37. Обработать полученные списки на разных языках и настроить код сайта на отображение соответствующего языка.
38. Оказалось, что надо писать один скрипт для первоначального сбора. Но надо писать еще один скрипт для всех последующих сборов-обходов составленной базы, потому что первый скрипт будет работать медленнее, а надо быстрее.
39. Все это время была связь с дизайнерами. Доработать полученный дизайн, потому что это быстрее, чем просить исправить еще вон тот момент.
При этом получше разобраться в css.
40. Написать скрипт сбора браузеров пользователей. Исходя из них смотреть верстку — правильно или нет работает под всеми популярными браузерами. Провести тестирование на всех возможных браузерах. Для этого можно просто пойти в салон apple или samsung, у них там куча устройств с разными диагоналями. Тестируй — не хочу + тестировать через сервис, делающий скриншоты экранов для десятков операционных систем. Локализовать css файлы для каждого языка. Это оказался лучший вариант при условии, что в разных языках одни и те же фразы занимают место на экране по-разному.
41. Из html страниц доработанного дизайна сделать шаблоны с макросами. Продумать синтаксис макросов, потому что будут использоваться два подхода по формированию страницы. Второй подход связан с внутренними макросами при локализации языковых файлов.
42. Настроить домен у регистратора и на сервере + все сабдомены.
43. Разобраться с графиками. Как формируются, как должны изменяться. Выбрать подходящие графики и настроить их.
44. Постоянно при чтении новостей, статей и т.п. думать о возможности создания подобных статей на сайте, для того, что бы различные медиа источники ссылались на сайт. Это важный момент, но на него совсем не хватает сил.
45. Разработать шаблон для анализа статистических показателей. Перевести его на все языки, отдав переводчикам.
46. Разработать структуру анализа, хранения данных анализа, хранений статей и т.п.
47. Написать скрипты для сбора названий товаров на нужных языках.
48. Поставить ограничения, например, на количество товаров, которые пользователь может трэкать.
49. Не совсем правильно работает на телефонах tipsy — потом разобраться почему и починить.
50. Разобраться и настроить записи SPF, DKIM, DMARK. Не знаю почему, но этот момент дался очень сложно. Может из-за того, что толкового руководства для впервые видящего это человека я так и не нашел.
51. Подумать над подачей не графиков, а таблиц в каких-то случаях.
52. Изучить графики highcharts.
53. Разобраться в сертификатах и настроить https соединение.
54. Разобраться и настроить htaccess.
55. Разобраться и настроить ptr записи.
56. Сделать еще буквально пару сотен улучшений в функционале, дизайне и работе сайта. У меня сейчас еще 80 пунктов просто по улучшению того, что есть, сохранено в файлике.
И этот список каждый день пополняется пожеланиями пользователей и своими собственными соображениями.
57. Поработать по СЕО теме. Настроить все необходимые заголовки на всех страницах: canonical, dns-prefetch, preconnect, og:*,
product:*, twitter:*, alternate, и так далее. До сих пор не все настроено, еще парочка важных осталась.
58. Сделать каждый день обновляемые карты сайта и карты карт.
59. Запостить несколько статей на форумы, тем самым рассказать о сервисе. Тут я скажу «спасибо» некоторым владельцам форумов. Нет, дело конечно Ваше и правила Ваши на Ваших порталах. Но из-за того, что были удалены мои хорошие статьи — молодой сайт без ссылочного пессимизировал Google. И никак его не сдвинуть с места. В топах сотни сайтов-дорвеев, лома — все цветет и пахнет на первых позициях. А вот Прайс Архив какашка, потому что ссылки на него удалили. Хочу тут сказать пару добрых слов Яндексу. Он тоже ссылок не видит особо, но хоть каких то пользователей приводит на сайт. Они конечно мало влияют на окупаемость в принципе, потому что их очень мало. Я говорю сейчас об алгоритме поисковых систем. Яндекс дает шанс, хоть призрачный молодым проектам, а Google же — чуть-чуть бонус новичка и давай до свидания. А вот на ломе и дорвеи — это да, все в топе. Ребята из поисковых систем, вот есть проект, он полезен людям. Вот не хочу я его продвигать, я хочу работать над его улучшением. А приходится то за одно хвататься, то за другое. Я довольно неплохо понимаю в СЕО и мог бы его с определенным риском попытаться все-таки поднять в топы не очень белыми методами. Но разве так должно быть? Ладно, как есть. А, нет, еще добавлю. Я в это не верил, но у нас в СНГ владельцы форумов готовы удавиться за подробный рассказ даже о не конкурирующем проекте на своем ресурсе. Все подчищается быстренько. Хотят денег за рекламу.
Дело, как говорил, Ваше конечно. Но сразу бросается в глаза разница в подходе СНГ владельцев и забугорных, не важно каких. К ним можно прийти и без постов и кармы рассказать о себе и почти все воспринимают это нормально. Что делать? Быть добрее и не жадными.
60. Бороться с прокрастинацией и выгоранием при условии, что хватает дел и в офлайне.
61. Разослать 100 писем по новостным сайтам и 10 писем топовым блоггерам. С предложением рассказать о сервисе бесплатно и с предложением рассказать о сервисе с пост оплатой в виде фиксированного процента. Знаете, какой был ответ? Никакого. Ну как, не совсем никакого.
Штук 5 самых крупных сайтов ответили предложением обычной рекламы. За что им спасибо. Не зря они крупные. Остальные промолчали.
Я хотел для себя узнать что будет — я узнал. И теперь могу с Вами поделиться. Если у вас нету денег за рекламу — писать кому-то — пустое дело. Еще очень многим писать бесполезно, даже если деньги есть. Не знаю почему, это не мое дело — что у них на уме. Просто сам факт — вот такой. В общем, тут нужен другой подход. Писать на контактный email, как показывает практика — бесполезно. Возможно, потому что проект неизвестный.
62. Создать страницы проекта в социальных сетях. Оформить их и вести.
63. Ошибка, которую совершают многие, и которую совершил я — не рассчитал количество имеющихся денег для жизни, разработки сайта и его продвижения. На продвижение денег совсем не осталось. А ведь продвижение — это, возможно, еще более важная часть,
чем вся проделанная работа. Финансовый момент нужно очень хорошо взвесить.
Некоторые пункты — это работа не на одну неделю. Проектом должно было заниматься несколько человек, если по-хорошему. Каждый своим делом. Но мне было интересно сделать все самому от начала и до конца, окунуться в работу каждого. Еще очень много надо сделать, что бы довести проект до нормального состояния согласно моим задумкам. Самоокупаемости сейчас нет — значит история не заканчивается. Вот как то так.
PS. Само собой я не претендую на какое-то хорошее мнение о всем написанном или обо мне. Я не вообще для этого все это написал. Я хорошо понимаю, что мнения у всех разные и очень разные. Для меня цель данной статьи — рассказать как есть о проделанной работе, рассказать людям, что можно покупать и при этом точно знать, что покупаешь по минимальной цене, а не по завышенной сегодня. Прайс Архив предоставляет бесплатное отслеживание цен и уведомление о снижении цены посредством email.
Ну и наконец, моя позиция — информацией нужно делиться друг с другом — надеюсь, кому-нибудь она будет полезной, может в качестве какого-никакого начального черновика.
Теперь вторая часть.
Что интересного я могу сказать о распродаже и в целом о товарах на AliExpress.com.
Каждый день Прайс Архив собирает данные примерно о 12 миллионах товаров. На данный момент количество товаров, о которых есть информация — более 37 миллионов. Примерно о 5% самых популярных товарах получить информацию нельзя. Потому ее пока нет на сайте,
но в этом вопросе уже есть подвижки.
Смотрим сюда. Оставляем активными только два кружочка — «Подешевело» и «Подорожало». 2 ноября 2.2 миллиона товаров из почти 12 миллионов проанализированных подорожало. 4 ноября примерно столько же подешевело. А вот 4 ноября уже более 4 миллионов из почти 12 миллионов проанализированных товаров подорожало. И до сих пор они не дешевели так массово. Отсюда ответ на интересующий вопрос — товары дорожали массово именно 4 ноября, за одну неделю до распродажи, а не перед самой распродажей 10 числа. Так что, если и покупать до распродажи — то во многих случаях это надо было делать до 4 ноября и не первого ноября.
Есть еще такая вот интересная страница. Каждый день собирается информация о товарах на AliExpress.com. На этой странице представлены товары, которые вчера продавались без скидки, а сегодня продаются со скидкой от 5 до 99%. Так же тут находятся товары со скидками, информацию о которых мы получили сегодня в первый раз. Страница справляется со своим предназначением, но находится в первой стадии разработки, если так можно сказать. Позднее будут добавлены некоторые фильтры и функционал, что сделает эту страницу хорошим инструментом для поиска товаров с большими скидками.
Зачем вообще смотреть эти Ваши графики изменения цен? Лучше примеров быть ничего не может. Посмотрите на графики и на какую сумму меняются цены. Раз, два, три. Цены меняются очень часто и у очень многих товаров. Причины могут быть разными: пора года, близость распродажи, конкуренция и т.д. Если Вы не хотите переплачивать, то просто смотрите график изменения цены и делайте выводы: когда лучше купить — сегодня сейчас или стоит подождать. По графикам все сразу становится понятным.
Хотел бы рассказать еще об одной функции сайта. На странице каждого товара есть форма для оповещений. Вводите свой email и желаемую цену, опираясь на информацию на графике. Когда цена упадет до указанной Вами, мы вышлем Вам email оповещение об этом на Вашу почту.
Вам не нужно каждый день смотреть подешевело или подорожало или сохранять данные в эксэлевский файл, как некоторые делают. Все просто и удобно можно смотреть в своем кабинете, в который можно попасть после регистрации.
Спасибо за внимание!