• Какой стек выбрать для бэкэнда?

    Stalker_RED
    @Stalker_RED
    На каждом из перечисленных стеков существуют гораздо более нагруженные проекты, чем 200к хитов.

    Выбирайте или то что вам уже знакомо, или то, что хотите изучить (если ваш заказчик готов оплачивать ваше саморазвитие).

    При масштабировании упор будет в хранение данных (БД) и взаимодействие сервисов. А на чем написаны сами сервисы не так важно, хоть все на разных языках.
    Ответ написан
    Комментировать
  • Как выполнить go run main.go при рестарте ubuntu?

    uvelichitel
    @uvelichitel Куратор тега Go
    habrahabr.ru/users/uvelichitel
    "Чтобы сервер запускался сразу при включении системы" вам не нужно выполнять go run main.go. go run -- это тестовые компиляция и запуск при эскизировании. Вам нужно сделать нормальный бинарник вашего сервера go build -o myserver main.go или go install. Полученный бинарник при включении системы можно запускать стандартными средствами -- юнитом systemd, записью cron или, самое простое, поместив команду в profile
    myserver &
    Ответ написан
    1 комментарий
  • Go get - connection refused, какие порты открывать?

    uvelichitel
    @uvelichitel Куратор тега Go
    habrahabr.ru/users/uvelichitel
    Go get под капотом использует git.
    git в качестве транспорта умеет использовать:
    • http - 80
    • https - 443
    • собственный протокол git - 9418
    • ssh - по умолчанию 22, но часто для безопасности меняют на кастомный(например 2222)

    Для связи протоколами git и ssh вы ещё должны иметь пару rsa ключей -- приватный у себя и публичный на git сервере.
    Ответ написан
    Комментировать
  • Мой код выглядит плохо или отлично?

    osvex
    @osvex
    Ответ написан
    Комментировать
  • Как запустить 5000 потоков параллельно с GET запросами?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Посмотрите на Swoole PHP – он хорошо умеет в неблокирующую асинхронность и корутины. Так сможете в меньшее число тредов запустить неблокирующие curl запросы. Swoole работает со стандартным libcurl – можно тот же GuzzleHTTP использовать.
    Ответ написан
    Комментировать
  • Как запустить 5000 потоков параллельно с GET запросами?

    Vamp
    @Vamp
    Распараллелить выполнение в самом воркере с помощью ReactPHP или лучше GuzzleAsync. В таком случае не придется держать 5000 воркеров именно

    Вариант с GuzzleAsync - самый лучший. Под капотом он использует возможности curl_multi_exec, которые позволяют асинхронно отправлять несколько запросов, не плодя при этом лишние процессы. Не уверен конечно, что осилит 5000 параллельных запросов, но даже если и не сможет, то можно разделить 5000 между несколькими воркерами.

    2. "Правильно ли" это вообще делать с помощью PHP или это все таки задача уже других языков которые умеют в параллельное выполнение, корутины? Go, NodeJs?

    У вас нагрузка в основном IO bound, так что не имет значения какой язык выбрать. Главное чтобы он поддерживал IO multiplexing (который поддерживается в PHP через вышеупомянутый curl_multi_exec).

    3. Может уже есть готовые решения в виде библиотек на PHP? Искал, но не нашел

    Guzzle
    Ответ написан
    3 комментария
  • На чём написан язык программирования C?

    Griboks
    @Griboks
    На С. Это называется раскруткой.
    Ответ написан
    Комментировать
  • Как в Python скачать файл, не зная его названия и расширение?

    Вообще-то в заголовке content-disposition указано, какое имя и расширение у файла: inline;filename="unnamed.jpg"
    Но вообще да - просто при сохранении генериш случайное имя.
    import requests
    response = requests.get("https://lh4.ggpht.com/HSXdsQpFEOTgh0QywV4NzNJIPADnWnkCVOsMmQkIgG9K08pQcwpNiWlu3Ls73mzYMTM")
    filename  = response.headers["Content-Disposition"].split(";")[1].split("=")[1].strip('"') #вместо этого можно сгенерить случайное имя
    file = open(filename, "wb")
    file.write(response.content)
    file.close()
    Ответ написан
    5 комментариев
  • Как лучше сделать список в базе данных?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Нужно почитать про то, почему базы называются реляционными, и про их нормальные формы. Вам нужно отношение многие ко многим.
    Ответ написан
    2 комментария
  • В чем сложность поддержки проектов на Go?

    EvgenyMamonov
    @EvgenyMamonov Куратор тега Go
    Senior software developer, system architect
    Более четырёх лет пишу на Go, лично для меня поддерживать проекты на других языках сложнее ))
    До Go много лет писал на Perl/PHP/Python/Java/C/Ruby on rails/JavaScript и "крутил" еще не мало чего.
    Сейчас пишу только на Go и Python.

    Основная сложность в Go - это то, что если вы начинаете писать "криво" - то писать так очень трудно :))
    Подход к реализации в Go достаточно непривычный для тех, кто приходит из скриптовых языков.
    Например запрет циклических импортов - это самое первое, что "взрывает" мозг :)
    Нужно время чтобы адаптироваться после скриптовых языков.

    Про обработку ошибок - это да, это, пожалуй, единственное что мне не нравится в Go.
    Для себя я решил эту проблему за 1-2 часа :) и больше меня это не беспокоит.

    По ООП - в Go оно есть, лично мне оно нравится намного больше, чем ООП в других языках ))
    Всё, что реально нужно - всё есть, но при этом ничего лишнего нет.
    Интерфейсы - просто прекрасны :)) Каналы, горутины - это просто "счастье" :))

    А если объективно - то я бы не стал говорить о сложности поддержки проекта применимо к какому то конкретному языку.

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

    А когда в таком проекте нужно что-то доработать или исправить ошибку, то почти всегда очень не просто найти то место, где нужно править, и после правок в одном месте, как правило, что-то ломается в другом :)

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

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

    Хочется добавить, что как бы не писали про Go, что он простой и т.д. - он явно сложнее Python/PHP и т.д.
    Это еще один повод сказать, что поддерживать код на Go сложно ))

    Также стоит учитывать, что проекты которые пишут на Go зачастую сложнее, чем проекты для которых выберут скриптовый язык. Go выбирают когда планируются большие нагрузки, параллельная обработка чего-либо и т.д., а это, в свою очередь, дополнительно усложняет проект.
    Ответ написан
    7 комментариев
  • Golang. Что работает быстрее strings.Contains или json.Unmarshal?

    Производительность это повысит, strings.Contains работает гораздо быстрее, чем json.Unmarshal
    Но надежность понизит, ибо error_code будет искаться везде, это не обязательно будет имя поля.
    Ответ написан
    2 комментария
  • Как сделать быстрый веб-сервер для статики но с аутентификацией?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Просто настроить авторизацию oauth на Nginx и всё.
    Ответ написан
    Комментировать
  • Логирование веб-приложений: syslog и stdout/stderr?

    @ProFfeSsoRr
    Сис.админ по Linux
    stdout - это стандартный вывод, обычно это консоль. Вот запустили вы в консоли приложение - и увидели, что оно вам написало, потому что оно выводит сообщения в stdout. И не зря тут std в названии - "стандартный". С ним умеет работать много чего. Вот возьмем допустим systemd: он запускает сервис, его stdout ловится и попадает в journald. Можно куда-нить еще завернуть. Системы управления контейнерами тоже так умеют.

    Как собирать? Ну вот вы ж всё умеете, вы там про очереди, logstash пишите - вот, это оно. Вы берете filebeat, ну или там какие еще *beat'ы у него есть, ловите ими вывод ваших приложений и пихаете его в эластик. Ну или допустим fluentbit берёте и им шлете логи в очередь какую-нить, а оттуда уже в хранилку.

    1. В каких случаях обычно пишут логи в syslog ?

    ну syslog очень много лет, он был еще до всех этих контейнеров и 12-факторных приложений ;) Так что когда-то им пользовались практически все.
    Ответ написан
    Комментировать
  • Куда пропало место на диске?

    @mureevms
    Не знаю что именно в Ubuntu для этого используется, но в Linux Mint изкоробки стоит baobab. В Uduntu можно поставить и запустить так:
    sudo apt install baobab
    baobab


    Так выглядит

    619f89d5361dc646930627.png


    Но удобнее и практичнее из консоли
    du -h /home --max-depth=1
    Ответ написан
    4 комментария
  • Почему тормозит веб сервер?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    Так вам же и Apache ругается
    WARNING: [pool www] server reached pm.max_children setting (5), consider raising it
    , и Nginx ругается
    [mpm_prefork:error] [pid 70323] AH00161: server reached MaxRequestWorkers setting, consider raising the MaxRequestWorkers setting
    на одно и то же, а вы в упор не видите?

    База данных тоже ругается
    HINT: See server log for query details.\nCONTEXT: while rechecking updated tuple (4,118) in relation "oc_file_locks"
    , один запрос обновляет записи (и этим заблокировал таблицы), другие запросы ждут окончания блокировки и не могут дождаться.

    Кстати, в логах видны $1, $2 и т.д. Это вы заменили, или это база данных так запрос видит? Или это в коде ошибка, и в запрос вообще не подставляются нужные значения?
    И ещё, почему "lock" вместо кошерного SQL-ного `lock`?
    Ответ написан
    3 комментария
  • Как сделать умный поиск по базе?

    no_one_safe
    @no_one_safe
    Ответ написан
    Комментировать
  • Golang и PHP, дань моде или необходимость?

    @Vitsliputsli
    Если в проекте есть критичные места, которые нужно ускорить, но упираемся в скорость работы интерпретатора php, то берём go.
    Go достаточно простой и высокопроизводительный язык. Но скорость разработки на нем значительно ниже, чем на php.
    Ответ написан
    4 комментария
  • Golang и PHP, дань моде или необходимость?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    какие задачи решает Go настолько хорошо, что это нужно писать именно на Go, а не на PHP

    https://ru.wikipedia.org/wiki/C10k
    Ответ написан
    3 комментария
  • Цель - WEB Full-stack. Сносный ли план обучения для новичка?

    saboteur_kiev
    @saboteur_kiev Куратор тега IT-образование
    software engineer
    Все очень плохо.
    А теперь подробнее.

    1. Рекомендую почитать несколько статей о том, что такое девопс инженер, потому что понятие девопс методологий и девопс инженера - кардинально различаются.

    2. У вас очень много книг. Это неплохо. Но у вас вообще не вижу практики. Это плохо.
    Есть заметка, что "неплохо бы иметь второй проект", но даже нет идей что за проект.
    Какой-то пет проект, который вы будете писать не потому, что у вас есть идея, которую вы хотите воплотить в цифровом виде, а просто потому что "нужно пет проект для портфолио"?
    Так это не работает, точнее такой пет-проект будет больше похож на непонятно кому нужную курсовую, которую вам не будет интересно развивать, искать варианты реализации понимая какой результат вам нужен. С другой стороны девопс не может существовать отдельно от проекта...

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

    P.S. Вижу, что топик поменялся с DevOps на Web full stack - в таком случае мой ответ более нерелевантен, но возможно из-за него топик и поменялся =)
    Ответ написан
    1 комментарий
  • С чего начать изучение Phyton?

    Сначала следует научиться внимательно читать, тк вы в своём вопросе нарушаете несколько правил/рекомендаций.
    (Как упражнение - найдите, какие именно)

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

    Ну и английский язык в придачу.

    А вот более конкретно:
    1. Роадмап: https://roadmap.sh/python
    2. Ответ трёхлетней давности: https://qna.habr.com/q/1759
    Ответ написан