За последние 24 часа нас посетили 22774 программиста и 1258 роботов. Сейчас ищут 728 программистов ...

Оценка качества работы

Тема в разделе "PHP для профи", создана пользователем askanim, 1 июн 2018.

  1. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    Добрый вечер. Прошу суровую критика наших про оценить уровень моих знаний согласно выполнению
    следующего тз:
    Вот ТЗ
    https://docs.google.com/document/d/1cQJ_JJ2nGu-fmpQLi96NqeMTQJ8USIWOi8d0_pJL1Uw/edit
    Дополнительно делать приложение под нагрузку 100 миллионов записей бесплатно мне влом. Но алгоритм я полагаю должен быть следующим:
    дописывать приложение под пошаговый разбор текста (То есть парсить текст по кусочкам), соответственно с проверкой на уже отобранные данные. Тогда скорее всего это будет оптимальным решением. Но заморачиваться этой задачей за бесплатно не комильфо.
    Вот выполнение задания:
    https://drive.google.com/open?id=1OfUNk59oOXcKy-2-COe43ZQ208euz2Bq
    Ставите на любой хост и открываете видим на экране результат

    Прошу оценить.
     
  2. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    расскажи этим чувакам про эластик, логсташ и кибану.
    --- Добавлено ---
    чувак, ты реально хочешь вот так вот открыть 100кк записей лога и разом распарсить?
     
    Zuldek нравится это.
  3. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    Хорошее задание.
    Тип приложения никак не ограничен в задании, но логи как правило бывают оооочень большие. Как по мне, авторы задания обязательно оценят способно ли твоё изделие на работу с правдоподобно большим объемом. Я бы сфокусировался на консольном "фильтре", которому не принципиально сколько времени понадобится на разбор. Веб-приложение не имеет права долго работать.

    Вот это вот сразу ставит крест на логичном доводе "парсить текст по кусочкам".
    PHP:
    1. echo json_encode($jsonAccess);
    Какие в опу кусочки, если ты результат накапливаешь в памяти чтобы выплюнуть за один раз? Досвидания.

    "Но заморачиваться этой задачей за бесплатно не комильфо."
    И снова досвидания. Зачем вообще взялся?
     
    runcore нравится это.
  4. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    Да эластик это тема.
    Я сделал echo чтобы показать результат работы на экране. Они дали 16 строк я показал что могу его разобрать.
    Как его складывать?
    Могу записать файл. Могу записать в бд. А на лету обрабатывать это вообще нельзя если говорить о 100 мультах.
    А как тогда?
    --- Добавлено ---
    нет я так распарсил 16 строк.
     
  5. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    Ну и по мелочи:
    Кодинг стандарт не PSR-2 и вообще непоследовательность в именах - то с большой буквы метод, то с маленькой.
    Класс зависит от константы из глобального пространства имен.

    Долго не вникал, ибо лень. Не запускал.

    Можно. Если это cli приложение и если ты спроектируешь его думая о потоках.
     
  6. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    просто изначально в задачи написано про 100 мультов не было. Они написали это после того как я уже сделал...
    Скажу так это просто модель обработки текста. Текст можно разбить допустим на 10 частей. И поискать в каждой части этой моделью.
     
  7. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    Вот этот скелетон делался с реального приложения, обрабатывающего гиги.
    https://gist.github.com/artoodetoo/f143395965fb4fd2c705
    --- Добавлено ---
    Вывел заголовок
    Цикл пока есть данные.
    . . . . Прочел строку, обработал, вывел строку.
    Вывел подвал
     
    askanim нравится это.
  8. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    artoodetoo нравится это.
  9. Chushkin

    Chushkin Активный пользователь

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Какова скорость разбора? (строк лога в секунду)
     
  10. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    @Chushkin эти 16 строк обрабатываются быстро вопрос в том если 100кк строк то уже file get contents отработает точно не быстро. Мне нравится вариант открыть файл в поток.
    --- Добавлено ---
    Я хочу переписать свой код именно на вариант который предложил @artoodetoo
     
  11. acho

    acho Активный пользователь

    С нами с:
    28 дек 2016
    Сообщения:
    854
    Симпатии:
    210
    Адрес:
    Санкт-Петербург
    и не факт, что отработает. Нельзя брать сразу одним махом большие данные, это гибель
     
  12. Chushkin

    Chushkin Активный пользователь

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Просто интересно сравнить. Я как-то делал разбор логов (несколько лет назад), - если не запамятовал, там было порядка 10 тыс строк в секунду. Но это был навороченный универсальный парсер. Вероятно, "жёсткий" парсер будет быстрее.
    По твоей задаче:
    Если учесть, что средняя длина строки лога 300 байт, то 100М логов это порядка 300 000 строк, что даст около 30 секунд разбора. Хорошо это или плохо, судите сами.

    п.с. это было на PHP 5.6. На 7-ке не проверял, может будет быстрее немного.
     
  13. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    а у кого есть опыт работы с эластиком тут?
     
  14. Chushkin

    Chushkin Активный пользователь

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Насколько помню, я использовал fgets() и построчное чтение в цикле. Парсер строк также построчно.
    **Это так, для информации.
     
  15. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    @igordata у меня скоро будет. Я ща устанавливаю его на сервер, и надо умный фильтр переписать на битриксе на нём. Там слишком тяжёлая обработка данных в бд.
    --- Добавлено ---
    @Chushkin а ща я попробую как вот арту предложил. И посмотрим чего получится.
     
  16. Chushkin

    Chushkin Активный пользователь

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
  17. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    я ща прогнал код по своему http://wsleonpd.beget.tech Вот можете глянуть на экране....
    --- Добавлено ---
    Тут надо в потоке файл делать и записывать данные в бд.
    --- Добавлено ---
    Я просто не знал про fopen я не разу с файлами то не работал.
     
  18. Abyss

    Abyss Старожил

    С нами с:
    12 дек 2015
    Сообщения:
    1.298
    Симпатии:
    218
    Адрес:
    Default city
    PHP:
    1. //считываем файл
    2.         if (empty(self::$text)) {
    3.             $text = file_get_contents(ROOT .  $path_to_file);
    4.             self::$text = $text;
    5.         }
    6.         else $text = self::$text;
    7.         //задаем шаблон регулярного выражения для вычесления
    8.         $pattern = '/'.self::$pattern.'/';
    9.         //вытаскиваем данные в массив matches
    10.         preg_match_all($pattern, $text, $matches);
    Плохо.
     
    runcore нравится это.
  19. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    а че там сложного то? индексы замутил и обращайся )
     
  20. Zuldek

    Zuldek Старожил

    С нами с:
    13 май 2014
    Сообщения:
    2.381
    Симпатии:
    344
    Адрес:
    Лондон, Тисовая улица, дом 4, чулан под лестницей
    обычно при правильной настройке они бьются по дням и пишутся не на эту же железку

    Решений может быть много, какое бы хотел увидеть если бы поставил эту задачу... . Ее бы конечно не поставил, потому что есть Zabbix и вообще мы ж не балбесы, но все-таки... если бы приперли к стенке и под дулом пистолета заставили делать на пыхе:

    И тем не менее, мы все-равно не идиоты, мы можем реализовать приложение которое бы осуществляло некую логику обработки джейсонов, но конвертировать access-лог в json пыхом, строить на php поисковый индекс не наш метод (но можно: есть вполне себе реализации по алгоритмам апач люсина). Поэтому мы:

    1. Просто накатываем модуль который заставит nginx писать лог в json (отдельный вопрос в том должен ли он вообще писаться на апликейшн сервере и нужна ли там нам эта логика? Ответ - нет, нахрен она там не нужна. Мы не полные идиоты чтобы нагружать апы дополнительной логикой помимо основной задачи основных приложений которые они поддерживают.

    3. Соответственно, мы должны реализовать (заново изобрести) масштабируемое приложение которое будет способно забирать/получать данные логов с шлюзов и(или) балансиров и(или) серверов приложений и выполнять с ними некоторые определенные действия.

    Передачу рассматривать не будем, не интересно.
    перейдем сразу к сервису:

    4. предположим что у нас есть доступ (на что как раз хотел показать придумавший эту задачу) к оооочень большому числу файлов и большому объему данных в них. Они у нас уже в нужном формате. Соответственно, что можно нам потребоваться для реализации задачи:

    4.1. Нам однозначно потребуется кластер с индексом по обновляемым данным. Строгой необходимости реализовывать его на системах для реализации сложного поиска я не вижу, но тем не менее, при реальных условиях эксплуатации нам совершенно точно может потребоваться поиск конкретных записей (вроде не увидел в ТЗ), помимо агрегированных отфильтрованных каунтов из первичных данных (по сути, аналитика). Второй критерий к реализации уровня данных: поддержка кластеризации и масштабируемость из коробки. Поэтому да, это может быть эластик. Равно как и солр или вообще голый апач люсен который они используют.
    Тем не менее, следуя условиям задачи, мы можем взять даже самую обычную mongodb, писать в нее получаемые уже в json записи логов и чувствовать все преимущества nosql.

    4.2. Приложению осталась всего лишь логика обработки первичных данных. И то она опциональна: мы можем агрегировать данные при их поступлении по фильтрам и в веб-приложении видеть по сути сформированные готовые отчеты (делать это налету неблагодарное дело при больших объемах). На самом деле, решение на эластике справится с этим и для него предназначено :).
    Изящнее это решается периодическим пересчетом данных и формированием готовых отчетов подобно тому как это делают счетчики (метрика и т.п.) и запись агрегированных данных (по всем фильтрам отчетов, прим.: по часам, для каждого фильтра и т.п. в колоночную базу данных) согласно ТЗ. Это исключит необходимость формирования отчетов налету по поступлению запроса и позволит молниеносно показывать результат.
     
    #20 Zuldek, 1 июн 2018
    Последнее редактирование: 1 июн 2018
    romach нравится это.
  21. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    ищу исполнителя на сайд-проект. Ты умеешь в эластик?
     
  22. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    Почему?
     
  23. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    админить - не особо, а так - пользуюсь.
    --- Добавлено ---
    к слову, для быстрого анализа логов есть https://goaccess.io/ ставится быстро, настроек не требует, юзается прямо с консоли.
     
    Zuldek нравится это.
  24. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    программировать. у тебя есть свободные часы в неделе?
     
  25. johovich

    johovich Активный пользователь

    С нами с:
    24 авг 2016
    Сообщения:
    146
    Симпатии:
    17
    Это для устройства на работу тебя так задрочили? Ты им запилил что-то free, а они тебя не взяли? Так это было?

    Я с этими козлами кстати работал уже, я про роистат. Мышей не ловят совсем, не понравилась их контора.

    Вот тут ключевая хрень написана. Им скрипт рабочий не нужен, хотели твой стиль оценить. Может у них главный задрот из стандарт-наци, увидел, что у тебя табами вместо пробелов отступы (или наоборот), \r вместо \n между строчками, методы с большой буквы начинаются, вот и не взяли тебя. Надо было разведку провести сначала. Может он vim любит, пизданул бы ему просто чистый лист, но вот такой:
    Код (Text):
    1.  
    Плюнь на них.

    Насчет сложных заданий на собеседованиях. Я как-то раз пытался пройти конкурс в KPMG. Аудиторская контора, одна из самых жирных. Там такое жесткое демо задание было, но народ кто в их паблике был подписан все равно бросился решать. Там стояла очень четкая задача по минимизации налоговых платежей иностранному гражданину при устройстве на работе в Россию.
    Каких там только не было ответов. Моя самооценка тогда сильно пострадала. :)
     
    #25 johovich, 6 июл 2018
    Последнее редактирование: 6 июл 2018