Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

FAQ appendix 1: как писать сервера

168 views
Skip to first unread message

RU.UNIX.PROG FAQ poster

unread,
Nov 17, 2009, 3:14:33 AM11/17/09
to
RU.UNIX.PROG FAQ - ���������� 1

$Id: FAQ.a1,v 1.18 2008/11/05 11:36:33 netch Exp $

>Q: ��� ������ �������?

A: (Lev Walkin, Dmitri Lenev, ������������� ����������, �������� ��
Igor Sysoev, Igor Khasilev, Sergue E. Leontiev)

�������� ��������� ��������:

1. ������ ����� ������������ ��������� ���������, ������ �� �������
����������� ������������ �������:
�����:
+ ���������� � �������� ������� ���������� ����� ���� �����������
��������� - ����� [x]inetd (��. ����)
+ ������� ������ ������
+ ����������� � ������ ����� �����������.
+ ������ � ����� �������� �� �������� � ������ �
������������ ��������� ��������.
+ ���� ������������ ���������������� ��������� ����� �������������, ����
������� ������������ ���� ����������� ����������, ������ �
����������� ���������������� � ������������.
������:
- ������� - ��� ���������� ������� ������ OS, �������
����� ���������� ��� ������� ���������� ������������
���������� �������� (������ ���������� �������� ���
�����).
- H������� �� ����������������, ������ ������ � � ������� �������
����� ����������, ��� FSM (������ 2 ������� ��������) ���
��������� ������.
- H��������� ��� ������ ����� ��� �������� � ����� ��������� ������ �
����������� ��� ������������ ���������� (��������, DNS-������ -
������ � �������� �� UDP).

������� ����������:
- ����������� MTA (sendmail, postfix, exim, qmail)
- ������������ ������� (qpopper, cucipop, popa3d)
- � ������ ������������ unix'���� ������� (telnetd, rlogind, nnrpd,...)
� ���� ������������� ���� ����� ����� �������� - ����� ������������ �������.
- apache 1.*, apache 2.* � ��������������� ������
� apache - �������� ��������� �������, ������� ����� ����
�������������� �����.

H������� ������� (� ������� �������) ������� ����� ���������� - �� ������
������������ ������ �������� (inetd, xinetd, in.inetd � ����������� �� ����
����� ��). � ���������� ������ ��� ���� ����� ����������� ������� ���������
����������� ������������ ������ ������� (���������� TCP),
������� ��������� ������� ������� �� stdin/STDIN_FILENO � ������ ������ �
stdout/STDOUT_FILENO. ��� ��������� (��ɣ� �������, ������������� �������,
����������� ��������, ����������������) ��������� inetd �� ������
�����������������(��) ������ /etc/inetd.conf (/etc/xinetd.conf �
/etc/xinetd.d/*). H�������, ���������� "�����������" TCP/IP ��������
�������� �� ������ ����������� ������ POSIX/SVR4 (��� ������� ������
�������� � inetd � ���������� �����).

# RFC 862: Echo Protocol
#
echo stream tcp nowait nobody /usr/bin/cat cat

# RFC 863: Discard Protocol
#
discard stream tcp nowait nobody /usr/bin/dd dd of=/dev/null

2. ������ ����� ������������ �������������� FSM (Finite State Machine)
����������� (�� ���� �������� �������), ��������� �� ��� ���� ������
��������� ������ � ��������� ������� (select, poll, etc).
�����:
+ ����� ����������� ����� � ����� ������ CPU.
������:
- H� �������������� � ������ ����� �����������.
- ��������� FSM, ��� �������, ���������� ������ �
������� ����������� ������� ��� ��������������.
- � ������ ���� ��������� ������ ��������� �� ����������
������� ������ (� ��������� �����������) ��������, �� ��
����� ���������� ���� �������� ���������� ������������
������ ����������. �������������� ��������� �������� �
��������� ��������� ��������...
�������� � ��� ���:
�) H������� � ������ ����� ������ �� ����, ������������� ����-�����
�� select/poll �� ������ ��������������...
�) ���� ���� �� ���������� ������ ���������� �� ���������� ������
�����������, �������� kqueue, ��� aio, �� ��� ��� ����� ����� ����
�� �������� �������� ������ � ������. H� �������� ���� ����������
��� ������ � ���� � ��� ����������� ������� � �� ������������
����� �������� �������� ����������� ��������������� ����������� �
�������� ����.
�) ���� ���� �� ����� ������ �������� ��� ������ ������� �� �����
��������� ����������� � ������ ����������� (�� ���� ����� �
��������� ����������)... H� ����� ������� ������� ��������
���������� ������ �� ��� �� ������ ������...

� �������� ��� ��� �������� ����� ������ ��������� ��� ����������
���������� ��� ����������� �������� ��������������� (slave) ��������
��� ���� ����� �� (��������) ��� ����� �� ������������. � ��������
��� ������ ������ ����� ���������� �����:
http://www.cs.princeton.edu/~vivek/flash_usenix_99/

(Dmitri Lenev)
+ �� ������������ ����� ���� ������� ��� ���� ������ �������������
���������� ������� ������ ������� �� FSM ���������� �����...

������� ����������:
- innd
- squid (� ufs ����������)
- named (� ��������� �� �������� UDP ��� ����������� �������)

������ ���������� �� ���������������� ���������� ��� ����������� ��������:
- squid � diskd

������ ���������� �� ���������������� ������ (�������) ��� �����������
��������:
- squid � aufs

3. ������ ����� ������������ ��������� ����� ���������, ������ ��
������� �������������� FSM (a la ����� 2).
�����:
+ ���� ��� ������� ������� �� ���� #2 (���� ������� � FSM), �� ������� ��
�� ������ ������� #3 ��� �������, ���������� �������.
��� ���� ����������� ������� ������� ����������� ��
���� ����� ��������� ������.
������:
- ��� ����� �������� ������ ������ FSM.

4. ������ - �������, ������������ ���� (threads) ��� ������� �������
(������).
�����:
+ H�������� ��������� ����������, ������ �� #1 (��������� ��������).
��������� ���������� ���������� ������ ����� ������.
+ � ����������� �� OS, ������ ����� ���� � ��������������,
� ����������� (Solaris, HP-UX).
������:
- � ����������� �� OS, ������ ����� ���� ��� ������������� (Linux,
��� ��� ���� "�����" ����� ������� ��, ������� � �������), ��� �
�� �������������� � ������ ����� ����������� (old BSD libc_r
� user-space threads; green threads). � �������� ��� ��� � �������.
- (Igor Khasilev) ���� ����������� ����������� ������������ ������� �����
������������ �������� (�� ������ � ���� � ����������� �� ��) ��� ������
����� ��������� ��������� �� ��������: ������ ��������� ������������
�� ���� ��� ������ ����, ������� �������� �� ����������� �
����������� �� ����� ����� ����� � ������� (�������� � ������
1:1 ������). ������ ����� ������ ������������ ���� - ������� ��
64-������ ���������.
- ����������� ������������ �������.

�������:
- Oops! 1.*
- apache 2.* � MT-�������� ������
- CommuniGatePro (�������� ��� ����������, �� � Usenet ����� ����� �����
������� ���������� � ��������� ���������)

5. ������ - �������, ������������ ��������� ���������� �����, ������
�� ������� ����������� ��������� ���������� ������� ������������.
�����:
+ H� ������������ � kernel-threads (Linux, Solaris, FreeBSD 5+,
NetBSD 2+...) �������� ����������������� � ����� ����������.
������:
- ��������� ���������� FSM �� ���� #2, ���� ����������
������������� ������� � ����� ������ (#4).
- H� �������� ���������������� �� ��������� ��������������
������� (libc_r ������ BSD; green threads), ������� �� ���
��������� ����� ����������, ��� #2. � �������� ��� ��� � �������,
������� �ޣ� ����� ������������� ��� ������ �� ������ �� ����� ������.

6. H�������� ���������, ������ �� ������� ������������ ����������
�������� ����� ��������� �� ������ �� ������� ��� ������� #5.
�����:
+ ������� �������� �� ������������ ����� ���
��������� ������ �������, ��� ��� �������� ��������
��������� ��������.
+ ������� �������������� � ������ ����� �����������.

������:
- ��������, ������������ ��������� ���� �������������
���� �������.
- H� ������������� ����������� ����� #3 �� �����
����������.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

H�������� ������ ��������� ��������� (����������) ������
(��������� �����������):

����� select():
+ ������� ��������������.
+ ����� ���������� ��� ������������ ��������� ����� ������������
�������� ������� (�������� � ���� � ����� �� ��� ���� �� �����).

������ select():
- H� ������ ���������� ������������ ����������� �� 1024 (������
������) �������� ������������ �� ��������� ���
������������������ ���������� ��� ���� ���� ������� (���
FreeBSD �� ����� ����������������� ����, ������ ����������).
- ��� ������� ���������� ���������� �������� �������� � ���� �
����� ������� ��������� ������ ������������ ����� ��������
��������� �������.

����� poll():
+ H� �������� ������������ ����������� �� ������������
���������� ������������� �������.
+ ���������� ������� ��������������.

������ poll():
- ����� ����������, ��� select() (��� ��� �������� � ����
� ����� �� ������-����������� ���� �� �����). (���������� � Linux
���������� �������� ��������� �������� ������ ������ � poll().)

����� /dev/poll (��������� Solaris, ����� ��� Linux):
+ H� ����� ����������� �� ������������ ���������� �������������
�������.
+ ��-�� ������ �������� ������� (events) ������ ������ ��������
���������, ����� ���������� ��� ������������ �������� ����������
��������, ������ ����� �� ������� ����� ������� (��������
�������� ��� web- � ������� ���� ��������). ��������� ����������
������� �� �������� ������� ��������.

������ /dev/poll:
- H� ����������.
- H���������� ��������� �� �������� �����������, ����ӣ����� � ������
�������� � �� ����������� ������ ����� ���������. ���������� ��������
� ������ (������� ����� �������). ������� ����� ��������� ����
����������� �������� ���������� �� ������.

�ݣ ��� /dev/poll ��. http://soldc.sun.com/articles/polling_efficient.html

����� kqueue/kevent (FreeBSD 4.1+, OpenBSD 2.9+, NetBSD 2.0+, MacOS X,
DragonFlyBSD):
+ H� ����� ����������� �� ������������ ���������� �������������
�������.
+ ����� "������� ����", ������� ��������� ������������ ���
����� ����������� ������� �� ������ ��� �������, �� � ���
�������� ������� ���� (������, ���������).
+ ��-�� ������ �������� ������� ������ ������ ��������
���������, ����� ���������� ��� ������������ �������� ����������
��������, ������ ����� �� ������� ����� ������� (��������
�������� ��� web- � ������� ���� ��������). ��������� ����������
������� �� �������� ������� ��������.
+ (Igor Sysoev) kqueue/kevent �����������, ��� /dev/poll.
������:
- H� ���������� �� ������� BSD ����.
- ����� ��������� ��� ������������� �� �����. (��.
http://www.uwsg.iu.edu/hypermail/linux/kernel/0010.3/0013.html; �������,
epoll ��������� ��� �� "silly" �������)

������ �� kevent (�� ��������� ��� manpage):
http://people.freebsd.org/~jlemon/papers/kqueue.pdf
http://people.freebsd.org/~jlemon/kqueue_slides/index.html

����� realtime signals (sigtimedwait,
http://www.kegel.com/c10k.html#nb.sigio, Linux 2.4+):
+ H� ����� ����������� �� ������������ ���������� �������������
������������. (������, ���������� �������� ����������, � ���� �����������
������������ �� ��������, ������ ������ �������� ���������� ���
�����������.)

������ realtime signals:
- ���� � ������� ����� ���������� ������.
- ������� �������� ����� �������������. (Linux � ���� ������ ���� SIGIO,
��� �������� ������������� ������������ ���� ������������. H� ��� �����,
��� ������������ ������������ �������.)
- ���� kqueue/kevent - ������ ���� ������ �������������� �� ���; kevent()
����� ������� � �������� ��������� ������� �� ���� �����.

����� epoll (Linux 2.5.44+):
+ H� ����� ����������� �� ������������ ���������� �������������
�������.
+ ��-�� ������ �������� ������� ������ ������ ��������
���������, ����� ���������� ��� ������������ �������� ����������
��������, ������ ����� �� ������� ����� ������� (��������
�������� ��� web- � ������� ���� ��������). ��������� ����������
������� �� �������� ������� ��������.
������, epoll ����� �� kevent. 4-� ������ ��������� level triggering
� ���������� � edge triggering (��� ��� ����� kqueue/kevent).

������ epoll:
- H� ���������� - ������ Linux � ������ ����� 2.5.44.
- ������ �� ������������ ��� kqueue/kevent (��� ���������� �� ����������,
�������, ���������, ������������ AIO ��������; ������ ���� �������
�� ����� � ������ ���������� ������).

��� �� epoll ��. http://www.uwsg.iu.edu/hypermail/linux/kernel/0210.3/1164.html

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

�������� ����� ������� ����� ����������� � ��������� �� ������:
http://www.kegel.com/c10k.html, ������� ����� ���ף����� � � ������
���������� ������ �� ��������� �������� � ��������.

��� ����� ���������� � ������� D.C. Schmidt'������ ACE � JAWS,
���� �� � ������� ������� ��� � ������� ���������� ��� ������������ -
������������������ ������������...

0 new messages