Что такое сокеты Unix и как они работают? — CloudSavvy ИТ

Соединения оптоволоконного кабеля.Shutterstock / asharkyu

Сокеты Unix — это форма связи между двумя процессами, которая отображается в виде файла на диске. Этот файл может использоваться другими программами для установления очень быстрых соединений между двумя или более процессами без каких-либо сетевых накладных расходов.

Что такое розетки?

Сокеты — это прямая связь между двумя процессами. Представьте, что вы хотите позвонить своему другу по дороге; вы можете сделать звонок, направив его через вашу телефонную компанию и обратно в их дом, или вы можете провести провод прямо в их дом и отключить посредника. Последнее, очевидно, непрактично в реальной жизни, но в мире Unix очень часто устанавливаются прямые связи между программами.

Правильное имя для сокетов unix: Доменные сокеты Unix, потому что все они находятся на одном компьютере. В некотором смысле сокеты — это сеть, полностью содержащаяся в ядре; вместо того, чтобы использовать сетевые интерфейсы для отправки данных, те же самые данные могут быть отправлены напрямую между программами.

Несмотря на создание файлов на диске, сокеты Unix фактически не записывают данные, которые они отправляют на диск, так как это было бы слишком медленно. Вместо этого все данные хранятся в памяти ядра; единственная цель файла сокета — поддерживать ссылку на сокет и давать ему разрешения файловой системы для управления доступом. Например, сокет MySQL обычно находится по адресу:

/var/lib/mysql/mysql.sock

Этот файл ничего не содержит, и вы не должны изменять его напрямую, за исключением разрешений, где это применимо. Это просто имя.

Как работают розетки?

Сокеты просто предоставляют фактическое оборудование для перемещения данных. Сокеты на основе TCP называются потоковыми сокетами, куда все данные будут поступать по порядку. Сокеты на основе UDP — это сокеты для дейтаграмм, для которых порядок (или даже доставка) не гарантируется. Существуют также необработанные сокеты, которые не имеют никаких ограничений и используются для реализации различных протоколов и утилит, которые должны проверять низкоуровневый сетевой трафик, например Wireshark.

Сокеты обычно по-прежнему используют TCP или UDP, поскольку они не являются чем-то особенным, кроме причудливого канала внутри ядра. TCP и UDP — это транспортные протоколы, которые определяют, как данные передаются с места на место, но не заботятся о том, что это за данные. TCP и UDP обеспечивают платформу для большинства других протоколов, таких как FTP, SMTP и RDP, которые работают на более высоких уровнях.

Приложение может использовать несколько иную реализацию TCP; потоковые сокеты используют протокол SOCK_STREAM, который TCP также использует для транспорта почти все время, и хотя они в основном взаимозаменяемы, технически они немного отличаются. Хотя это низкоуровневый материал и на самом деле вам не о чем беспокоиться, просто знайте, что самый трафик, отправляемый через сокеты домена UNIX, основан на TCP или UDP или, по крайней мере, очень похож на него, а TCP, отправляемый через сокеты домена UNIX, быстрее, чем TCP, через сетевые интерфейсы, такие как порты.

Использование розеток на практике

Сокеты Unix обычно используются в качестве альтернативы сетевым TCP-соединениям, когда процессы выполняются на одном компьютере. Данные обычно по-прежнему отправляются по тем же протоколам; он просто остается на той же машине и знает, что работает в том же домене (отсюда и название сокеты домена UNIX), поэтому ему никогда не нужно беспокоить петлевой сетевой интерфейс для подключения к самому себе.

Самым ярким примером этого является Redis, чрезвычайно быстрое хранилище значений ключей, которое полностью работает в памяти. Redis часто используется на том же сервере, который обращается к нему, поэтому вы обычно сможете использовать сокеты. На таких низких уровнях и с учетом того, насколько быстро Redis, сокеты обеспечивают Повышение производительности на 25% в некоторых синтетических тестах.

Если вы подключаетесь к базе данных MySQL, вы также можете использовать сокет. Обычно вы подключаетесь к host: port из удаленной системы, но если вы подключаетесь к базе данных на том же сервере (например, REST API обращается к базе данных), вы можете использовать сокеты для ускорения. Это не повлияет на нормальное использование, но очень заметно при нагрузке, более 20% на 24 ядре высокого класса со 128 одновременными пользователями и миллионом запросов в секунду. Независимо от того, увидите ли вы выгоду от сокетов — это совсем другое дело, но на этом этапе вы, вероятно, все равно захотите изучить репликацию и балансировку нагрузки.

Если вы хотите работать с сокетами вручную, вы можете использовать утилиту socat, чтобы открыть их через сетевые порты:

socat TCP-LISTEN: 12345 UNIX-CONNECT: /var/lib/socket.sock

Это технически противоречит назначению сокетов домена Unix, но может использоваться для отладки на транспортном уровне.

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован.