Сервисы, лежащие в основе взаимодействия: HTTP, SMTP, SSH
Сетевые сервисы — основа взаимодействия
- В современных проектах основная часть взаимодейтсвия проходит по сети
- Даже если разработчики находятся локально, всё равно есть некая сетевая составляющая. Если же разработка ещё и территориально распределена, то это единственный эффективный способ регулярного взаимодействия.
- Сеть представляет из себя набор стеков протоколов, из которых нас интересуют, фактически, самые верхние: TCP/IP и ряд прикладных протоколов.
Сетевой сервис
- Сетевой сервис — нечто, доступное по сети (в интересном нами случае — по протоколу TCP/UDP) и отвечающее на клиентские запросы.
- Отметим, что TCP представляет нам транспорт, соответственно, взаимодейтсвие клиента и сервера на прикладном уровне можно представить как обмен последовательностями байт. Что, в свою очередь, есть фактически взаимодействие по stdin/stdout.
- Соответственно, для ряда простых сетевых сервисов можно не заниматься адом реализации многопоточного сетевого сервера на люббимом языке программирования, вместо этого написав приложения вида текстовый фильтр, реализуя только собственно логику приложения.
- Эта идея не нова, как следствие, существуют мета-сервер, позволяющий сервить подобные текстовые фильтры как сетевые сервисы. Он имеет несколько реализаций, среди них можно отметить те, что называются inetd и xinetd. Из существенной для их использования разницы — xinet.d хранит конфигурацию в отдельных файлах для каждого сервиса и имеет для этих сервисов ручек поболе, в то время как inetd — в одном и ручек у него поменьше.
- В качестве примера создадим репозиторий и предоставим возможность забирать его содержимое по внутреннему сетевому протоколу Git.
- Git для взаимодействия по сети может использовать несколько протоколов: свой собственный, туннелироваться по ssh, rsync или HTTP WebDAV.
- Для работы по собственному протоколу (который, к слову, является бинарным) с git поставляется сервер git-daemon.
- Помимо собственной реализации tcp-сервера у себя внутре, также может работать с режиме текстового фильтра совместно с inetd.
server$ git init
server$ git add
server$ git commit
# в этот момент у нас появился репозиторий, в котором что-то есть
server$ cat /etc/xinetd.d/git
# default: off
# description: The git server offers access to git repositories.
service git
{
disable = no
socket_type = stream
type = UNLISTED
port = 9418
wait = no
user = esyr
nice = 10
rlimit_as = 256M
server = /usr/bin/git
server_args = daemon --inetd --syslog --verbose --base-path=/home/esyr/git-test/.git
}
server$ sudo /etc/init.d/xinetd restart
client$ git clone
server$ touch .git/git-daemon-export-ok
client$ git clone
client$ git commit
client$ git push
server$ cat .git/
[daemon]
uploadpack = true
client$ git push
HTTP
- Протокол
- Программный стек
- CGI
- Идея аналогичная той, что у других сервисов с inetd
- cgit
- WSGI
- Аутентификация
SMTP, XMPP, SIP
SSH
- Суть — безопасный транспорт, поверх которого можно запускать разное (в том числе, shell)
- Юзкейсы: предоставление различных сервисов на удалённой машине
- Пример: авторизованная работа с git
- gitolite
root@server\# useradd git
client\$ ssh-keygen -f ~/.ssh/gitolite
client\$ ssh-copy-id -i ~/.ssh/gitolite.pub git@server
client\$ git clone git://github.com/sitaramc/gitolite gitolite
client\$ cd gitolite/src
client\$ ./gl-easy-install git server git-admin
client\$ tail -31 ./gl-easy-install
client\$ cd ~/gitolite-admin/
Ссылки