Задать вопрос
  • Разницы в поддержке и обслуживании dedicated server по сравнению с VPS?

    Jump
    @Jump Куратор тега Системное администрирование
    Системный администратор со стажем.
    Да в общем то особой разницы нет.
    Разве что натворите что-то и доступ потеряете - тогда придется просить IPKVM.
    Уточняйте условия у конкретного хостера.
    Ответ написан
    3 комментария
  • Разницы в поддержке и обслуживании dedicated server по сравнению с VPS?

    @MechanID
    Админ хостинг провайдера
    Конечно разница есть:
    1 обычно на вас ложится мониторинг железа - как минимум вам нужно будет следить за износом hdd/ssd и просить замену у хостера в случае обнаруженный reallocated sectors. также нужно следить за батарейкой в рейд контроллере если она имеется.
    2 так как сервер физический то вам нужно огранизовать бекапы, их хранение (обязательно в другом месте) и восстанавливать тоже придется вам. (если конечно у вас не куплен какойнибуть платный саппорт и тд)
    3 мониторинг ресурсов - если вам раньше хватало графиков из контрольной панели хостера, то теперь нужно будет настраивать чтото свое.
    Ответ написан
    3 комментария
  • Как понять есть ли нагрузка на БД?

    @rPman
    Замеры производи на синтетических тестах, написав максимально простое приложение, которое будет долбить ваш сервис запросами (например bash скрипт с использованием curl), собирай метрики типа нагрузка процессора, диска, при разных количествах одновременных запросов и т.п.

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

    Чтобы понять, будет нагружать и что в запросе, используй EXPLAIN, на практике нагрузку создают не сами выводимые данные, а фильтрация по ним, но в случаях многоуровневых запросов, когда для получения данных нужно связывать по форенкеям с другими таблицами, нагрузка логично возрастет

    Кеширование - дает хороший прирост в чтении данных но заставляет решать вопрос инвалидации кеша при записи, т.е. может замедлить ее. Если второе проблемой не является, то тогда смотри, что дешевле процессор или память (кешировать можно и на диске).

    ssd диски безоговорочно быстрее hdd дисков, тем более если сравнивать одинаковые сегменты (серверный ssd с серверным sas)

    p.s. 1500 записей у клиента, оно ему надо? тем более сразу в dom ему все выдавать? на практике мало какие люди способны потреблять сразу всю информацию с экрана, область зрения у большинства сужена, и больше десятка уже не видят, да и на экран все не влезет, можно подгружать по мере прокрутки.

    Фильтрацию же данных можно проводить и на сервере

    С другой стороны, если говорить о кешировании, данные ведь и у клиента можно держать, снимая нагрузку на сервер при повторяющихся запросах, так что еще вопрос где лучше фильтровать данные.
    Ответ написан
    2 комментария
  • Как узнать что письма отмечены или попали в спам?

    Статистика постмастера строится не по письмам которые отправил пользователь Google, а по письмам домена отправленным на гугловые ящики. При этом у гугла есть дополнительные требования по количеству писем при которых статистика начинает показываться. Важно при этом не сколько писем вы отправляете, а сколько писем вы отправляете получателям на GMail. Так же, в статистику обычно засчитываются только письма авторизованные DKIM, убедитесь что он есть в ваших письмах.
    Ответ написан
    1 комментарий
  • Как узнать что письма отмечены или попали в спам?

    jamessvetsky
    @jamessvetsky
    Специалист по почтам и рассылкам
    Добрый день, Антон!
    Постмастер гугла видит только письма, отправленные на сервера гугла с Вашего домена, при этом включает в статистику только рассылки от 200 получателей (опять же среди своих почт а не всего). То есть Ваши почты он не должен видеть. То есть по гуглу попадание в спам можно отследить только тестовым методом
    Если отправляете по рунету, подключите постмастер майл ру, это 40-50% всех почт в Рунете и он видит не только рассылки, но и каждое отдельно отправленное письмо. И выдает, хотя иногда и не сразу, полные цифры по каждому домену.
    Третий из значимых почтовиков Рунета, Яндекс, совсем недавно отключил постмастер, то есть тоже методом тестов.
    Насчет спама - может быть очень много причин, почему такое происходит. Отслеживайте закономерности.
    Ответ написан
    1 комментарий
  • Из-за чего скачки времени обработки запросов?

    SilenceOfWinter
    @SilenceOfWinter Куратор тега PHP
    та еще зажигалка...
    ко всему выше сказанному добавлю, что нагрузка может возникать не в текущей задаче, а в выполняемых параллельно (например, запущен какой-то ресурсоемкий процесс вроде бекапа или индексирования) т.ч. надо учитывать серверную нагрузку на момент запуска задачи.
    Ответ написан
    Комментировать
  • ДДос атака на nginx пакетами 1 байт?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    500 строк в секунду - это не мощно и, вероятно, даже не DDoS. Если адрес один, то просто закройте ему доступ брандмауэром, а если адреса разные, то настройте лимит запросов в Nginx.

    nginx.conf
    http {
        ...
        limit_req_zone $binary_remote_addr zone=reqlimit:10m rate=30r/s;
        ...
    }

    some_site.conf
    server {
        ...
        location / {
            ...
            limit_req zone=reqlimit burst=10 nodelay;
        }
    }

    После этого запросы с одного ip-адреса начиная с 31-го в секунду будут отбрасываться.

    Как вишенку на торт, можно добавить ещё фильтр для fail2ban:

    nginx-req-limit.conf
    [Definition]
    
    failregex = limiting requests, excess: .* by zone .*, client: <HOST>
    ignoreregex =

    и правило в jail.local
    [nginx-req-limit]
    enabled = true
    port = http,https
    filter = nginx-req-limit
    logpath = /var/www/*/*/logs/error.log # Здесь укажите свой путь к логам виртуального хоста
    findtime = 600
    maxretry = 10
    bantime = 7200

    После этого адреса DoS'еров будут автоматически блокироваться брандмауэром на два часа. Что разгрузит Nginx от обработки паразитного трафика.
    Ответ написан
    11 комментариев
  • Зачем нужен Vuex, если хранилище можно эмулировать с помощью data в рутовом экземпляре?

    @alexey2baranov
    Низачем он не нужен. По-моему, это просто мода.

    Особенно смешно читать чел написал, что там есть МОДУЛЬНОСТЬ) Вау!!! а без Вуекса- то мы все как бедалаги пишем в одном огромном файле))) И еще один, что Вуекс крут, потому что там есть геттеры) Челик, геттеры есть в любом объекте, если ты не знал. В любом объекте data можешь написать обычный ЖС геттер, поместить его в Компутед как это делает Вуекс, и он будет реактивный, если ты не знал. Или что там может любой кусок кода сломать состояние. А на бэке разрабы пишут такой код и не парятся ни о чем. Как буд-то фронтеры в другом измерении живут и у них какие-то небывалые сложности.

    Код на Вуексе излишне сложен и он наоборот недебажелен из-за этого. Я на практике видел и с ним и без него. Когда какой -то кусок стора меняется, никто не смотрит по машине времмени че там в 100 коммитах менялось, это только в примерчиках можно применять. А в реале быстрее открыть Ф12 и поставить точку останова в скрипте откуда делается вызов не тай функции или не тех параметров. Так намного быстрее. А тогда зачем вообще этот геморрой с Вуексом если мошеной времени не пользоваться - не понятно.

    Скорее всего Вуекс пошло от того, что Реакт оч. плохо изначально работает с мутабельными данными, для него необходим Стор. А во Вью это съобезъянничали, чтобы быть как большой брат. Мы специально на работе искали что сам Эван говорит про Вуекс, призывает ли он к нему. и нет таких интервью или статей. Только одну нашли где он отвечает на вопрос про Вуекс, и то он ответил что Вуекс не обязательно применять.
    Ответ написан
    1 комментарий
  • Почему упала производительность базы MySQL при переносе на новый сервер?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Самый тупой вариант: в "самой последней версии mysql" query cache отключен по умолчанию. Но если речь о конкретном запросе с воспроизводимым результатом, то наверное дело не в этом.

    Поэтому надo задавать не вопрос "почему упала в два раза после переезда", а надо разбираться с конкретным запросом.
    Вообще, вопрос конечно из серии "Дорогие учёные. У меня который год в подполе происходит подземный стук. Объясните, пожалуйста, как он происходит". Неужели так трудно задать конкретный вопрос?
    • создали два LXC контейнера... С какими характеристиками?
    • поставили последнюю версию MySQL... Какую?
    • на некоторых запросах... Каких?
    • меняли настройки базы... Какие?
    • перерыли рекомендации... Какие?


    Всё-таки, вера советского человека в волшебную палочку или там цветик-семицветик нестребима. Что ламер в соседнем вопросе, что владелец прошаренного сервера, могут осилить только один сакраментальный вопрос, "Подскажите, в чем может быть проблема?". С наивной верой в то что решение проблемы - это не сложный и многоступенчатый процесс, для которого нужно предоставить как можно больше информации, а где-то просто есть заветный гвоздик по которому надо просто ударить волшебным молоточком, и всё сразу заработает как надо.

    Ну так-то в принципе такой гвоздик есть, называется innodb_buffer_pool_size. Но вы ведь по нему тоже пробовали стукнуть, когда "пробовали настройки"? Это же тоже важно в вопросе писать, чтобы не превращать отвечающих в гадалок на базаре
    Ответ написан
    Комментировать
  • SQL Подсчет уникальных значений?

    EreminD
    @EreminD
    Кое-что умею
    Запрос выше выдаст список уникальных значений

    Этот запрос выведет количество
    SELECT COUNT(DISTINCT user_id) FROM orders
    Ответ написан
    Комментировать
  • Выбор ОС для разработки под Docker: Windows или Linux?

    @ProFfeSsoRr
    Сис.админ по Linux
    Linux советуют тебе (ну если отбросить всякие нравится/не нравится, а только объективно) потому, что продукт твой будет в итоге крутится на линуксе. Т.е. чтобы ты, как разработчик, был ближе к инфраструктуре. Причем скорее всего тебе, как разработчику, нужно будет понимать, что сделать на линуксовом сервере, чтобы посмотреть свои логи и т.д. и т.п. Т.е. линукс на базовом уровне знать надо, а для этого проще всего его себе поставить и попользоваться.
    Про докер: докер под винду и под линукс разный, если ты пишешь под линукс в итоге - ты в винде запускаешь докер, который запускается в виртуалке с линуксом. Т.е. фактически да - ты из-под винды работаешь в линуксе в каком-то виде.
    Тут еще такой момент - майкрософт в win10 затащили с линукса уйму всего, начиная от того, что они сам линукс притащили, заканчивая тем, что и терминал новый пишут крутой. Т.е. сейчас разница между "сидеть на винде" и "сидеть на линуксе" уменьшается. Тот же visual studio code есть на обоих платформах, многие инструменты - браузерные по сути, соответственно работают везде. Т.е. сейчас переехать с винды на линукс проще, не надо учить новые инструменты типа IDE, но и остаться на винде легче теперь. Так что попробуй освоится с докером в винде, и на виртуалке в линуксе настроить всё аналогичное и посравнивать процесс работы.
    Ответ написан
    Комментировать
  • Почему отличается время перебора объектов одного класса от множества классов?

    Lynn
    @Lynn
    nginx, js, css
    Почитайте статьи как работают движки JS.
    Можно начать с этой https://mathiasbynens.be/notes/prototypes

    Если очень кратко, то V8 (движок JS в Chrome, node.js и т.п.) анализирует и оптимизирует выполняемый код. В частности в первом случае он понимает что на входе всегда один и тот же класс и оптимизирует доступ к его полям. Во втором случае он каждый раз честно проверяет «а есть ли атрибут buffer_data_calc? есть ли у него атрибут color? а это точно массив? а в нём есть 3 элемент? и т.п»
    Ответ написан
    6 комментариев
  • Пример крупного проекта на Vue.js?

    @WillC
    https://nuxtjs.org/
    https://github.com/zmts/beauty-vuejs-boilerplate

    Одни из самых лучших примеров архитектуры можешь найти тут и тут
    Ответ написан
    2 комментария
  • Как работает сборщик мусор с колбеками Promise?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Сборщики мусора (далее GC) бывают разные, в том же v8 используется сразу 3 типа GC в зависимости от поколения объектов (упрощенно молодое, старое и сложные случаи), но в большинстве своем принцип работы сводится к просчету достижимости из некоторого корня в дереве объектов (например глобального объекта, но не только его). v8 не является исключением, и его GC содержит C++ api для создания таких корней. Из JS мы данным api можем воспользоваться лишь косвенно, через сущности языка предоставляемые либо самим v8 либо платформой (браузером, node.js, deno и т.д.)
    Чтоб было понятно давайте рассмотрим простой пример:
    const h = 'Hello world!';
    const n = 'nothing';
    setTimeout(() => {
      console.log(h);
    }, 1000);
    У нас есть строковые переменные h и n. Переменная n нигде больше не используется и ее память очистится при ближайшей работе GC. А вот переменная h оказалась в замыкании созданном стрелочной функцией. И хотя в JS мы не можем достучаться до h имея ссылку на эту функцию, сама функция все таки имеет ссылку на h, а значит h не может быть уничтожена пока не будет уничтожена сама функция. В терминах GC ссылка на h будет серой, то есть сама ссылка на h недоступна из корня напрямую, но сейчас мы проверяем объекты, которые на нее ссылаются и истина будет зависеть от них (подробнее можете погуглить "mark black white and gray memory in gc").
    Давайте посмотрим на саму стрелочную функцию, которая держит h в замыкании. Из кода видно, что мы ее передаем в функцию setTimeout, о которой известно, что это api предоставленное платформой (а значит вероятно какая-то часть написана на C++), а так же, что она асинхронная. Платформе реализующей setTimeout наша функция понадобится после асинхронного ожидания и никто платформе не сможет гарантировать, что во время этого ожидания не будет работы GC, поэтому ей ничего не остается, кроме как запросить у v8 создание нового корневого дерева объектов, в которое и будет положена ссылка на данную функцию.
    После же выполнения таймаута платформе больше не нужна наша функция, поэтому ссылка на нее будет удалена из дерева объектов. А так как других ссылок на функцию нет, и она больше не доступна ни из одного корня - GC удалит из памяти и функцию и строку связанную h, которая так же стала недоступна из корня.

    Посмотрим на пример из вопроса. У нас есть стрелочная функция, которая удерживает на себе инстанс компонента через this ссылку (так как стрелочные функции замыкают this). Саму функцию в памяти удерживает промис порожденный вызовом loader('url'), так как мы отдали её в метод then. Других ссылок на данную функцию нет, а значит и сама функция и ее замыкание (инстанс компонента) будут "жить" не менее "жизни" промиса.
    Скажем был отправлен запрос на сервер, но потом компонент в котором был объявлен промис и колбек был удален.
    И после удаления приходит ответ от сервера, и он выполнит колбек. Это значит что колбек остался в памяти со всеми переменными контекста
    Если других ссылок не осталось, то инстанс компонента будет удерживаться от очистки через промис.

    Теперь стоит разобраться с самим промисом. У него может быть 3 состояния - pending, resolved или rejected. После перехода в состояния resolved или rejected промис может выполнить сохраненные колбэки в ближайшем микротаске, а после он удалит на них ссылки из себя, в следствии чего, память удерживаемая замыканием колбэка может быть очищена (при отсутствии на нее других ссылок, достижимых из какого-либо корня).
    В состоянии pending промис может потенциально находится бесконечно долго, при этом ссылаясь на все колбэки переданные ему в методы then, catch или finally, а значит так же косвенно ссылаясь на их замыкания. И тут все зависит от того, кто ссылается на данный промис, и достижим ли он из корня. И да, промис вполне может быть удален из памяти так и не дождавшись своего завершения.
    интересное умозаключение
    Если Promise - это обещание, то в данном случае оно будет нарушено?


    В комментах к вопросу есть еще один интересный пример:
    function getSomething(){
      return new Promise((resolve, reject)=>{
        if(sys_condition){
           resolve();
        } 
      })
    }
    
    function testPromise(){
      let config = {....}
      getSomething().then(()=>{
         #use config
         goOn(...config)
      })
    }
    
    testPromise();
    У нас есть вызванная 1 раз функция testPromise, которая получает из функции getSomething промис, в который с помощью метода then сохраняет колбэк, удерживающий в замыкании переменную config. Сам промис она нигде не сохраняет, что здесь очень важно.
    В функции getSomething мы просто возвращаем промис созданный через его конструктор, который как мы уже знаем нигде больше не сохраняется. И на этом могло бы все и закончится, без вызова колбэка независимо ни от чего. Но конструктор промиса выполняет свой колбэк синхронно, а кроме того он передает в него 2 функции - resolve и reject, которые в своем замыкании ссылаются на только что созданный промис (а это уже 2 ссылки на него, хотя мы то его никуда не сохраняли). Переменная reject никак не используется, а значит спокойно может быть удалена после завершения колбэка. Переменная resolve просто вызывается как функция внутри условия, но более тоже никак не используется и никуда не сохраняется, а значит так же может быть удалена.
    В этом примере. если sys_condition = false и resolve не вызовется, это значит что создается утечка памяти
    Нет, утечки памяти не будет. Колбэк созданный в testPromise будет удален вместе с замыканием, так и не вызвавшись ни разу.
    Ответ написан
    3 комментария
  • Влияет ли на производительность количество методов у наследуемого класса?

    IonDen
    @IonDen
    JavaScript developer. IonDen.com
    Абсолютно без разницы. Когда вы создаете экземпляр - под капотом указывается ссылка на прототип. Просто одна ссылка.
    Ответ написан
    5 комментариев
  • В чем основные отличия mySQL от Postgre?

    Insolita
    @Insolita
    Отчаянная домохозяйка
    postgres - массивы, отдельное управление последовательностями (в mysql только одно инкрементное поле на таблицу, в postgres на таблицу можно несколько последовательностей, и одну на несколько таблиц. причем с настраиваемым шагом), оконные фукнции для подсчета статистики https://habrahabr.ru/post/268983/
    лёгкое создание полнотекстового поиска без доп. движков типа sphinx и elasticsearch, которого вполне хватает для многих кейсов https://eax.me/postgresql-full-text-search/ , materialized view, наследование таблиц.
    Вот более полная таблица фич
    https://www.postgresql.org/about/featurematrix/
    Но штука в том, что фичи далеко не всегда и везде нужны, поэтому mysql хватает с головой для многих задач
    Ответ написан
    Комментировать
  • Docker как локальный web-сервер для Windows?

    Если у вас не Windows 10 Pro и не процессор от Intel, то никакого Docker'а у вас не будет.
    Работайте в Linux, будет вам щастье. :-)
    Ответ написан
    4 комментария
  • Как валидно настроить права для nginx и php-fpm?

    Sanes
    @Sanes
    Nginx тут не при чем. Это настраивается в пуле PHP-FPM.
    PHP-FPM

    [{{ username }}]
    user = {{ username }}
    group = {{ username }}
    listen = /var/run/php/php{{ php }}-fpm-{{ username }}.sock
    listen.owner = www-data
    listen.group = www-data
    pm = dynamic
    pm.max_children = 5
    pm.start_servers = 2
    pm.min_spare_servers = 1
    pm.max_spare_servers = 3
    chdir = /
    ;php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f www@my.domain.com
    ;php_flag[display_errors] = off
    php_admin_value[error_log] = /var/www/{{ username }}/logs/fpm-php.{{ username }}.log
    ;php_admin_flag[log_errors] = on
    ;php_admin_value[memory_limit] = 32M
    php_admin_value[upload_max_filesize] = 100M
    php_admin_value[post_max_size] = 100M
    php_admin_value[open_basedir] = /var/www/{{ username }}/
    php_admin_value[disable_functions] = exec,passthru,shell_exec,system,proc_open,popen,curl_multi_exec,parse_ini_file,show_source,stream_set_write_buffer,stream_socket_sendto,highlight_file,com_load_typelib
    php_admin_value[upload_tmp_dir] = /var/www/{{ username }}/tmp
    php_admin_value[soap.wsdl_cache_dir] = /var/www/{{ username }}/tmp

    Nginx

    server {
    	listen 80;
    	#listen [::]:80 default_server ipv6only=on;
    
    	root /var/www/{{ username }}/www;
    	index index.php index.html index.htm;
    
    	server_name {{ domain }};
    
    	location / {
    		try_files $uri $uri/ =404;
            if (!-e $request_filename) {
            rewrite ^/(.*)$ /index.php?q=$1 last;
    	    }
    	}
    
    	location ~ \.php$ {
    		include snippets/fastcgi-php.conf;
    		fastcgi_split_path_info ^(.+\.php)(/.+)$;
    		fastcgi_pass unix:/run/php/php{{ php }}-fpm-{{ username }}.sock;
    		include fastcgi_params;
    	}
    	client_max_body_size 100M;
    }

    Ответ написан
  • Какой сервер использовать для многопользовательского сайта на вебсокетах?

    Swoole — асинхронный движок на C, с PHP API. Неблокирующие клиенты MySQL, Redis; shared memory, менеджер процессов.

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

    Покритиковать: документация минимальна, в интернетах часть дискуссии на китайском.
    Тем не менее движок функциональный, эффективный и мощный, упоминается в оф. доке PHP и нескольких постах на Хабре.
    Ответ написан
    1 комментарий