Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
12
Добавлен:
20.04.2024
Размер:
12.01 Mб
Скачать

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

Учебник по высоким нагрузкам. УрокwClick4

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

МАСШТАБИРОВАНИЕВОВРЕМЕНИ

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

ОТЛОЖЕННЫЕВЫЧИСЛЕНИЯ

Когдапользовательвводитзапроснасайт,необходимодатьему ответ,идляэтогосначалапридетсяпроделатьсоответствующую работу.Скажем,есличеловексделалмодификационныйзапрос(например,создалновыйпост),товампредстоитпровернутьогромныйобъемработы.Недостаточнопростоположить пост.Нужнообновитьсчетчики,оповеститьдрузей,разослать электронныеуведомления.Хорошаяновость:делатьвсесразу необязательно.

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

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

вфункцииобработкисамогомодификационногозапроса.Впротивномслучаепользовательнеполучитмоментальныйответ.

Современныефреймворкидлявеб-программированиячасто непозволяютвявномвидереализоватьтакойтрюк,поскольку

внихнепредусмотренавозможностьделатьчто-либопосле отправкиответапользователю.Однакоестьиисключения. Впопулярномвеб-сервереApacheсуществуетболеедесяти

стадийобработкизапроса,включаятрансляциюURI,авторизацию,аутентификациюисобственнообработкузапроса.Сюдаже входятистадии,которыевыполняютсяужепослетого,какответ пользователюотправлен.Некоторыефреймворки(например, mod_perl)позволяютперехватитьэтистадиииповеситьнаних вашисобственныефункции.Можнопередатьвэтифункцииданныедляобработкииспокойнообрабатыватьихужепослетого, какпользовательполучилответ.

АСИНХРОННАЯОБРАБОТКА

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

Втакомслучаепомогаетследующийархитектурныйпат- терн—сохранитеданныевнекоепромежуточноехранилище,

азатемобработайтеихспомощьюотдельногоасинхронного процесса.Термин«асинхронность»означаетвобщемслучае разнесенностьвовремени.Тоестьданныесобираютсясейчас,

аобрабатываютсятогда,когдабудетудобно.

Например,оченьчастоасинхроннообсчитываетсястатистика уникальныхпосетителей—развдень,какправилопоночам, вчасынаименьшейзагрузки,запускаетсяскрипт,которыйберет

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Поле

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Некоторые поля

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

N:1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

анкеты пользователя

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

могут быть открыты

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

для другого конкретного

 

 

 

 

Событие

 

 

 

 

Анкета

 

 

 

 

Фотография

 

 

пользователя

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

N:1

 

 

 

1:1

 

 

 

1:N

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Между двумя

 

 

 

 

 

 

 

Между двумя

 

 

 

 

 

 

 

 

Приглашение

 

Пользователь

 

 

Связьмежду

 

 

 

 

 

пользователями

 

 

пользователями

пользователями

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Сущность «связь»удобно хранит в себе

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

информацию о переписке и открытых полях

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Переписка

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Открытоеполе

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1:N

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Сообщение

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Обратитевнимание—мыуже используемнашезнаниеобизнеспроцессахвпроекте.Мызнаем, чтодетальнуюстатистикузадень пользователиготовыподождать, иучитываемэтотфактприпроекти-

рованииархитектурыпроекта.Более углубленноеиспользованиеэтих знаниймысвамиразберемдальше.

ОЧЕРЕДИ

Рассмотримподробнееинструменты,позволяющиеотложитьнапотом тевещи,которые«негорят».Одноиз ужеупоминавшихсярешений—про- межуточноехранилище.Носуществуетцелыйклассоднотипныхзадач,длякоторыххотелосьбы,чтобы этохранилищеобладалоопределеннымисвойствами.Этоуженепросто данныедляобработки—тутважен порядок,важнаочередность.

Дляподобныхцелейиспользуют инструмент,называемыйочередя- ми,—особыйвидхранилища,под- держивающийлогикуFIFO(первый вошел—первыйвышел).Получа- ютсяочередисообщенийиочереди задач,которыенадоделать.Напри- мер,вместотогочтобыслатьe-mail, можно поместитьвочередьзадачу: «Послатьe-mail».Какой-тофоновый скрипт,которыйзапущен,вытянет

изочерединовыйзапрос.«О,надо послатьe-mail.Сейчаспошлюего».

Очереди—довольнопро- двинутыйичастовстречающийся инструмент.Например,дажекогда пользовательвWindowsкликает мышкойнакнопкувприложении, топриложениенепринимается немедленнообрабатыватьэто событие(ведьвэтотмоментприложениеможетбытьзанятодругим действием).Операционнаясистема присылаетприложениюсообщение, содержащееописаниесовершенногопользователемдействия.Сообщениеставитсявочередьибудет обработановпорядкепоступления. Врезультатеесливыдваразакликнитемышкойнадваразныхпункта меню,тосначалаоткроетсяодно, потомдругое.

Дляиспользованияочередей естьрядинструментов,одиниз наиболеепопулярныхсейчас— RabbitMQ(www.rabbitmq.com), написанныйнаErlang'е.Причем несмотрянаколоссальныевозможностипообслуживаниюочередей сообщений,начатьиспользовать егокрайнепросто.Практическидля любогоязыкапрограммирования (PHP,Python,Rubyитакдалее)есть готовыебиблиотеки.

ХАКЕР 10 /165/ 2012

109

 

 

 

 

hang

e

 

 

 

 

 

 

C

 

E

 

 

 

X

 

 

 

 

 

-

 

 

 

 

 

d

 

F

 

 

 

 

 

 

t

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

to

АКАДЕМИЯm

w Click

 

 

 

w

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

.

 

 

 

 

 

.c

 

 

p

 

 

 

 

g

 

 

 

 

df

 

 

n

e

 

 

 

 

-xcha

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

ОТАВТОРОВ

 

никаетнеконсистентностьданных.

• загружаютсядесятьпоследних

Основнымнаправлениемдеятельностинашейкомпанииявляется

 

Например,сообщениепопало

 

объектов-записейповремени

решениепроблем,связанныхсвысокойнагрузкой,консультирование,

 

восновнуюбазу,нонебылодобав-

 

объектов,опубликованныхвсе-

проектированиемасштабируемыхархитектур,проведениенагрузочных

 

леновочередь.Сообщениепрошло

 

мипользователями,накоторых

тестированийиоптимизациясайтов.Вчислонашихклиентоввходят

 

модерацию,ноонореальноудалено

 

подписанпользователь;

инвесторыизРоссииисовсегомира,атакжепроекты«ВКонтакте»,

 

небыло,потомучтоочередь,ответ-

• длякаждойиззаписей

«Эльдорадо»,«Имхонет»,Photosight.ruидругие.Вовремяконсультаций

 

ственнаязахранениесообщенийна

 

поднимаетсяинформация

мычастосталкиваемсястем,чтомногиенезнаютсамыхоснов—чтота-

 

удаление,вышлаизстроя.

 

опользователе-авторе(имя,

коемасштабированиеикакимонобывает,какиеинструментыидлячего

 

 

 

 

Чтобыизбежатьэтого,нужно

 

аватариссылканапрофиль);

используются.Этапубликацияпродолжаетсериюстатей«Учебникпо

 

писатьпрограммутакимобразом,

• длякаждойиззаписейна

высокимнагрузкам».Вэтихстатьяхмыпостараемсяпоследовательно

 

чтобыприповторномеевыполне-

 

страницеподнимаютсятрипо-

рассказатьобовсехинструментах,которыеиспользуютсяприпострое-

 

ниионадоходиладоконца.Этот

 

следнихкомментария,покаж-

нииархитектурывысоконагруженныхсистем.

 

принципназываетсяидемпотент-

 

домукомментариюподнимается

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ностью—повторноедействие

 

аватариимяпользователя.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

неизменитнашиданные,если

 

Отдельногоупоминаниязаслу-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

впервыйразвсебылосделанопра-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

вильно.Увы,этодалеконевсегда

живаетобсуждениепотенциальных

 

 

 

 

Вкрупныхвеб-системахмогутиспользоватьсяодновремен-

 

можноприменить.

 

 

 

 

 

сценариевдальнейшегоразвития

нодесяткиочередей:очередьнаотправкуэлектроннойпочты,

 

 

 

 

Другоерешение—логическое

проекта.Например,сейчаснетоб-

очередьдляобновлениясчетчиков,очередьдляобновления

 

логированиедействий.Создается

новлениякомментариевбезпере-

френдлентпользователей.

 

некийблокнот,напримерфайл,

загрузки,апотомбудет—такую

 

 

 

 

Побольшомусчетуочереди—этопримермежсервиснойком-

 

хранящийсянакаком-тонадеж-

возможностьнужнопредусмотреть

муникации,когдаодинсервис(публикацияпоста)ставитзадачи

 

номносителе.Программыпри

ещенаэтапеначальногопроекти-

другомусервису(рассылкаэлектроннойпочты).Рассмотримэто

 

выполненииоставляюттамзаписи

рования.Далеепоэтимописаниям

подробнеенаконкретномпримере.

 

вида:«Яуспелсделатьто,тоито,

планируютсяпотокиданныхсрас-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ноещенеуспелсделатьвотэто»

четомпотенциальныхобъемов,

ПРИМЕРПРЕМОДЕРИРУЕМОЙСОЦИАЛЬНОЙСЕТИ

 

и«Ясобираюсьсделатьэто».Если

требованийкскоростивкаждом

Рассмотримпримербольшогопроектасоциальнойсетиуровня

 

что-топошлонетак,подобный

случае.Важнотакжепроговорить

Facebook.Пользователипишутпостывогромномколичестве,

 

отчетпозволитпонять,накаком

потенциальнуюстепеньдеграда-

генерируютсягигантскиеобъемыразличныхопераций.Нодопу-

 

этапепроизошелсбой,иисправить

цииданных.

 

 

 

 

 

стим,чтоэтонепростоFacebook,асоциальнаясетьспремодера-

 

положение.

 

 

 

 

 

 

Например,унасожидается

циейвсехсообщений.Задачасталаещесложнее—чтоделать?

 

 

 

 

 

 

 

 

 

 

 

 

 

 

тридцатьмиллионовзарегистри-

 

 

 

 

Разработчикипосмотрели:постыхранимтак,комментарии

 

АЛГОРИТМПРОЕКТИРОВАНИЯ

рованныхпользователейвновой

хранимтак.Всёвразныхтабличках,можетбытьдажевбазахдан-

 

АРХИТЕКТУРЫ

 

 

 

 

 

потенциальнойсоциальнойсети.

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

 

Рассмотримрешениенашейпро-

Поаналогииссуществующими

модераторскийсофтдолженбудетходитьподесяткубазданных,

 

блемы,исходяизконкретныхусло-

сетямипредположим,чтовденьна

вытаскиватьобновлениязапоследниепятьминутизвсехэтих

 

вийбизнес-логики.Сначаласо-

сайтбудетзаходить1 5 зарегистри-

табличек?Объединятьвсеизмененияводинбольшойсписок

 

ставляемвариантыиспользования

рованныхпользователей,тоесть

ипоказыватьмодератору?Ачто,еслимодераторовнесколько?

 

проекта(Usecases),функциональ-

шестьмиллионовпользователей.

Аеслиданныхоченьмного?

 

ноеописание,внашемслучае—

 

Какоеколичествозаписейдела-

 

 

 

 

Воттутнапомощьиприходяточереди.Любойпостингприво-

 

основныевеб-сервисы.Описываем,

етвденьпользователь?Этотвопрос

дитнетолькокдобавлениюсообщениявбольшуюбазуданных

 

чтоконкретноделаетпользователь

требуетисследования,нодопустим,

(гдеонобудетжитьпостоянно),ноикегопопаданиювнекую

 

натойилиинойстранице.

чтовсреднемтрисообщениявдень

модераторскуюсистему.Взаимодействиесервисовпозволяет

 

 

 

 

Например,страницаnewsfeed

кто-тобольше,кто-томеньше.

навеститутпорядок.

 

пользователя:

 

 

 

 

 

Напрактикебольшинствобудет

 

 

 

 

Нижнийкрасныйблокнаслайде—этоисходящийсервер

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

очередейRabbitMQ,которыйполучаетсообщение.Этотсервер

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

кем-тослушаетсястойстороны,иврезультатеприходящие

 

 

 

 

 

 

 

 

 

Очереди:модерация

 

 

 

данныеперегруппировываютсяиужескладываютсявдругую

 

 

 

 

 

 

 

 

 

базуданныхиливдругоеместо,специальнопредназначенное

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Резервный дата-центр

длямодерации.Например,онигруппируются,ивместомодера-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

цииможетидти,например,аналитическаясистема.Самбогвелел

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Фронтенддля

 

 

входящиеданныепреобразовывать,чтобыпотомбылоудобноих

 

 

Erlang-

 

Erlang-

 

Erlang-

 

 

 

 

 

 

 

 

 

модератора

 

 

обрабатыватьирешатьданнуюконкретнуюузкуюзадачу.

 

 

 

фронтенд

 

фронтенд

 

фронтенд

 

Удаление

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Новернемсякнашемупримеру.Всеэтисообщениякаким-то

 

 

 

 

 

 

 

 

 

 

 

 

 

сообщений

 

 

 

 

 

 

 

 

 

SQL

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

образомпросматриваются,и,таккаксхемабазыданныхзаточе-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Заявкинаудаление

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

наподмодерацию,этопроисходитлегкоипросто.Намчто-тоне

 

 

 

 

 

 

 

 

 

 

 

 

 

Входящий

 

сообщений

 

 

 

 

 

 

 

 

БД

 

БД

 

БД

 

 

 

 

 

 

 

 

 

SQL

нравится—удаляемэтосообщение,изапросточнотакжеуходит

 

 

 

 

 

 

Rabbit MQ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

обратно,вдругуюочередь:«Этосообщениеизтех,чтотымнепри-

 

 

 

 

 

Копии всех

 

 

 

 

 

 

Очередьнаудаление

 

 

 

 

 

 

 

слал,удали».Естьтакойжеразборщик,которыйберетэтузадачуc

 

 

 

 

обновлений

 

 

 

 

 

 

отмодерированных

 

 

 

 

 

 

SQL

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

удаленнымсообщением,ищет,гдежеонотамвсе-такилежит,иуда-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

комментариев

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Этот сервер очередей должен

 

 

 

 

 

 

ляет.Мыполучиликлассическийпримериспользованияочереди.

 

 

 

 

 

 

 

 

 

 

Исходящий

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Rabbit MQ

 

 

стоять на стороне кластера

 

Приложение,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

фронтендов для того, чтобы

 

обновляющее SQL

 

НЕКОНСИСТЕНТНОСТЬДАННЫХ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

в случае пропадания связи

 

и считающее кучу

 

 

 

 

 

 

 

 

 

 

 

 

 

 

с резервным ДЦ информация

 

статистики

 

Здесьвозникаютнедостатки,характерныедлялюбойсистемы,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

никуда не потерялась

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

котораяхранитданныевдвухместах.Любаяпроблемасоборудо-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ванием,свыполнениемэтойсложнойфункциональности—ивоз-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

110

ХАКЕР 10 /165/ 2012

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

заходитьнасайттолькодлячтениячужихсообщений,поэтомусо- кратимвпятьраз—пустьпишетпотрисообщениякаждыйпятый пользователь.

Получается3,6миллионазаписейвсутки.Укаждогопользователя100подписчиков,тоесть(еслимыостаемсянасхеме уведомленийобизменениях)360миллионовуведомленийвсут- ки.Сучетомпиковогохарактеравеб-трафикаполучаем10тысяч уведомленийвсекунду—этоможетбытьпроблемой!Мывидим такуюцифруипонимаем,чтонампридетсярассылатьуведомленияневреальномвремени.

Чтобырассчитатьобъемыданных,допустим,чтополови- насообщенийтекстовые,аполовина—графические.Размер текстовогосообщениявсреднем200байт,графического—100 килобайт.Итоговденьмыгенерируемданныхна360мегабайт текстовыхсообщенийина180гигабайтграфики.Этонемало, иочевидно,чтомынеможемпростоположитьтекстывSQLбазу данныхиделатьпонейвыборки.Максимум—мыможемделать

выборкипонекоейупрощеннойинформации,напримертаблицам сидентификаторами.

Наэтомэтапеможноинужнопроговоритьсущностиисвязи междуними.Например,какнаприведенномрисунке.Этопример изреальногопроектапростойсоциальнойсети,разработанной нашейкомпанией.Здесьжемыпроговариваемвопросыдеграда- ции,дляэтогопродакт-менеджердолженответитьнамнаследую- щиевопросы:

Страшноли,еслизаписьдругапоявитсявnewsfeedпользователянемоментально,ачерезпятьсекунд?Аесличерездесять?Черезминуту?Черезчас?Каковадопустимаязадержка?

Сколькопоследнихзаписеймывыводимнаоднойстранице? Десять?Двадцать?Могулияперейтикболеестарымзаписям?

Должнылиновыезаписипоявлятьсянастраницебезперезагрузки?

Должнылиновыекомментариикзаписям,находящимсяна странице,появлятьсябезперезагрузкистраницы?

Страшноли,еслизаписибудутподгружатьсяпользователю постепенно,несразу,сначалаодна,потомещепять,апотом вдруграз—изагрузиласьзаписьгде-товсередине?

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

Учебник по высоким нагрузкам. УрокwClick4

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Интеркоммуникациясервисов

Задача:необходимоуведомлятьодничастисистемы особытиях,которыепроисходятвдругихчастях:

размещениеинформациивпользовательскихлентах (feeds)особытиях,произошедшихвсообществах;

лайки;

комментарии;

рассылкаписем

Здесь же мы прописываем

 

писейи,покаонсмотритнаних,

скорость работы страницы (в нашем

 

подгружатьостальные.

случае не более 0,2–0,5 секунды, на-

 

 

пример) и проговариваем какие-то

 

Воттутнадопонаблюдать

особенности использования модуля.

заработойконкурентов,например

Например, в нашем случае с news

тогожеFacebook.Алгоритмработы

feed это может быть:

примернотакой:

• 99%пользователейпросматри-

сначалазагружаетсяобвязка;

ваютлентусвоихзаписейнаодну-

затемпроисходитзапрос

тристраницыназад(обычнодо

 

идентификаторовзаписейдля

последнейпрочитаннойзаписи).

 

даннойnewsfeed;

Архивпросматриваетсякрайне

• затемвцикле,начинаяотсамых

редко.Можемлимыкак-нибудь

 

старых,запрашиваемподроб-

использоватьэтуособенность?

 

ностипрозаписи.

• Намненадопоказыватьполь-

 

 

зователюсразувсюстраницу,

 

Этусхемуможноупростить—

мыможемпоказатьемупаруза-

напримерчастьданныхввидеJSON

HIGHLOAD-ИНСТРУКТОРЫ

ОлегБунин

КонстантинОсипов

МаксимЛапшин

КонстантинМашуков

 

Известный

 

Специалистпо

 

Решениядля

 

Бизнес-аналитик

 

специалист

 

базамданных,

 

организации

 

вкомпанииОлега

 

поHighload-

 

которыйдолгое

 

видеотрансляции,

 

Бунина.Констан-

 

проектам.

 

времяработал

 

которыесуществу-

 

тинпришелиз

 

Егокомпания

 

вMySQL,где

 

ютвмиренадан-

 

мирасуперком-

 

«Лаборатория

 

отвечалкакраз

 

ныймомент,можно

 

пьютеров,где

 

ОлегаБунина»

 

завысоконагру-

 

пересчитатьпо

 

долгоевремя«пи-

 

специализиру-

 

женныйсектор.

 

пальцам.Макс

 

лил»различные

 

 

 

 

етсянаконсалтинге,разработке

БыстротаMySQL—вбольшой

разработалодноизних—Erlyvideo

научныеприложения,связанные

итестированиивысоконагру-

степенизаслугаименноКости

(erlyvideo.org).Этосерверноеприло-

счислодробилками.Вкачестве

женныхвеб-проектов.Сейчас

Осипова.Всвоевремяонзани-

жение,котороезанимаетсяпотоко-

бизнес-аналитикаучаствуетво

являетсяорганизаторомконфе-

малсямасштабируемостьюMySQL

вымвидео.Присозданииподобных

всехконсалтинговыхпроектах

ренцииHighLoad++(www.highload.

5.5.СейчасотвечаетвMail.Ruза

инструментоввозникаетцелаякуча

компании,будьтосоциальныесети,

ru).Этоконференция,посвящен-

кластернуюNoSQLбазуданных

сложнейшихпроблемсоскоростью.

крупныеинтернет-магазиныили

наявысокимнагрузкам,которая

Tarantool,котораяобслуживает

УМаксиматакжеестьнекоторый

системыэлектронныхплатежей.

ежегоднособираетлучшихвмире

500–600тысячзапросоввсекунду.

опыт,связанныйсмасштабировани-

 

 

специалистовпоразработке

ИспользоватьэтотOpenSource

емсреднихсайтов(нетакихкрупных,

 

 

крупныхпроектов.Благодаряэтой

проектможетлюбойжелающий.

какMail.Ru).Подсреднимимыпод-

 

 

конференциизнакомсовсеми

 

 

разумеваемтакиесайты,количество

 

 

ведущимиспециалистамимира

 

 

обращенийккоторымдостигает

 

 

высоконагруженныхсистем.

 

 

около60миллионоввсутки.

 

 

ХАКЕР 10 /165/ 2012

111

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

 

d

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

 

t

 

 

 

 

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

r

 

 

 

 

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

 

o

 

 

 

 

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

АКАДЕМИЯm

 

 

 

 

 

 

 

 

 

to

 

 

 

 

 

 

w Click

 

 

 

 

 

 

w Click

 

 

 

 

 

 

m

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

o

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

g

.c

 

 

 

 

 

 

.

 

 

 

 

g

.c

 

 

 

p

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

p

 

 

 

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

загружатьзаранеепризагрузкестраницы.Еслипосмотреть

 

 

Интеркоммуникация:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

представленыввидеJSON-массивов.Этооченьудобно—про-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

страницыFacebook,выувидитетолькоJavaScript,вседанные

 

 

решениесочередью

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

стосделатьAJAX-обновлениестраницыбезперезагрузки.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Далеенужносформулироватьдополнительныетехнические

Пользователи

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

требованиякотказоустойчивостиискоростивсейсистемыиот-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

дельныхвеб-сервисов.Наконец,длякаждогоизвеб-сервисов,

 

 

 

Всегда быть готовым

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

исходяизконкретныхособенностейданныхитребований

 

 

 

к дублированию

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ккаждомукомпоненту,проектируемархитектуруиподбираем

 

Постинг

 

задач в очереди

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

технологии.Многиетехнологииимеютаналоги,исредикла-

 

поста

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

стератехнологийвыборстоитделатьнаосновепредпочтений

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

командыразработчиков.Чтоумеют,натоминадоработать.

 

 

Синхронная

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Итак,унасестьдовольносущественныйпотокданных,об-

 

Сервис

 

 

Разборщик

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

постановка

Очередь

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

постов

 

очереди

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ладающих,однако,определеннымиособенностями.Похоже,

 

в очередь

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

чтостоитразделитьсамизаписииструктуруnewsfeed’ов.Не

 

 

 

Репликация

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

вседанныенужнопоказыватьсразу,успокоилнаспродакт-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Синхронная запись

 

или Heart beat

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

менеджеридалпаруминут,чтобыпоместитьновоесообщение

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

в базу данных

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

пользователявофрендлентыегодрузей.Строгоговоря,это

 

 

 

Репликация

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

можетбытьинетакисходяизбизнес-логикипроекта.Вэтом

Постоянная

 

очереди

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

случаемысвамивыбралибыдругуюархитектурудлясистемы

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

храненияфрендлент.Приобсуждениипродакт-менеджерска-

база данных

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Если очередь сломалась —

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

залнамтакже,чторассылкупочтовыхуведомлениймыможем

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

отложитьнапотом.Мырассчиталиобъемзадач,прикинули

 

 

 

переставляем задачи

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

по постоянной базе

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

системухранениядляочередииприступиликреализации.

 

 

 

сообщений

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Строгоговоря,использованиесерверовочередейне

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

обязательно.НеумеетеработатьсRabbitMQ?Ничегострашно-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

го—используйтепаттерн«Очереди»,нохранитесписокзадач

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

вобычномMySQL.

Интеркоммуникация:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ИСПОЛЬЗОВАНИЕОЧЕРЕДЕЙ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ДЛЯДОСТИЖЕНИЯНАДЕЖНОСТИ

решениесочередью

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Усложнимзадачуизпримераспочтовымирассылками.Итак,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

воркеру,обслуживающемупочтовыерассылки,нужноразо-

 

 

 

 

Это могут быть те же серверы,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

слать25писем.Трипослали,начетвертомзакончилосьместона

 

 

 

 

что и обрабатывают запросы

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

от фронтендов

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

диске.Хлоп,сломалось!Есливыпишетесинхроннуюрассылку

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

вединомPHP-коде,тоувасиз-заотвалившегосяпочтовика

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

можетвозникнуть500-яошибкадляпользователя.Этовообще

 

 

 

Входящие

Забираем задачи

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

неприемлемо.

 

 

 

HTTP-серверы

 

СервисБ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

сервиса Б

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Этоважныйаспект—спомощьюочередисообщенийможно

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

позволитьсломатьсякакому-токускувашейсистемы.Напри-

 

Внутренняя

Раздающий

Входящие

Внутренняя

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

мер,водномизпроектов,которыймыразрабатывали,запись

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Сервис А

очередь

демон

HTTP-серверы

очередь

СервисБ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

вбазушлачерезочередьсообщений.Этобылооченьудобно.

 

сервиса А

сервиса А

сервиса Б

сервиса Б

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Можнобылодлярешардингаидругихобслуживающихопера-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

цийвыключитьодинизкусковбазыданныхнакакое-товремя.

Сервис А

 

 

Входящие

 

СервисБ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Всеэтовремяунаступорослаочередьсообщенийичто-тоне

 

 

HTTP-серверы

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

сервиса Б

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

записывалось.Потом,когдабазучинятисноваподключают,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

очередьрассасывается.

Обработка

 

Push сообщений

Прием задач

 

Обработка

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

задач

 

из сервиса А во все

 

задач

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Такимобразом,очередьсообщенийпозволяетвамеще

 

остальные сервисы

для сервиса Б

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

сервиса А

 

 

сервиса Б

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ифункциональноразвязатькускивсейвашейэкосистемыипо-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

зволитькому-тосломатьсянавремябезобщейдеградации.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Нарисункеизображенодвасервиса,которыеполностью

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

независимыдруготдруга.Поломкаодногонеприводиткпо-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ломкедругого.Допустим,сервисуАнужноотправитьчто-нибудь

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

всервисБ.Онставитзадачувовнутреннююочередьсервиса

ВКАЧЕСТВЕРЕЗЮМЕ

иделаемчто-точутьпозже,чем

А.Раздающийдемон(своегородавыходныеворотасервисаА)

Итак,мыcвамиизучилиодиниз

отдалиответ.

разбираетвнутреннююочередьирассылаетзапросывовне.

самыхмощныхпаттерноввпроек-

Во-вторых,речьможетидти

ВходныеворотасервисаБпринимаютзапросипишутегововну-

тированиивеб-систем— исполь-

отакназываемойобщейшинедан-

треннююочередьсервисаБ.ВоркерысервисаБобрабатывают

зованиеочередей.Подочередями

ных.Унасвозникаетмежсервисная

задачиизвнутреннейочереди.

сообщенийвпроектировании

коммуникация,котораяпомогает

Подобнаясистеманетолькопрактическинеубиваема,она

веб-проектовмогутпониматьсядве

разнестивызовымеждусервисами,

ещеивосстанавливаетсяпослесбоябезпотериданных:).Может

разныевещи.

сделатьихразнымиповремени

сложитьсявпечатление,будтоэтонечтозапредельное,ноэто

Во-первых,способотложить

иунифицироватьобщениемежду

нетак.Вкрупныхбанковскихсистемахподобныеархитекту-

задачунапотом.Намнадосделать

разнымисервисами.

рывстречаютсянакаждомшагу.Даиввеб-системахможно

что-то,нопользователюнадоотве-

Удачи!Вследующемномереса-

использоватьчто-топохожеедлядостижениянезависимости

титьпрямосейчас.Мывыходимза

моесложное—масштабирование

сервисовдруготдруга.

рамкиPHP’шного«запрос—ответ»

базданных. z

112

ХАКЕР 10 /165/ 2012

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Реклама

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

 

d

 

F

 

 

 

 

 

 

 

t

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

UNIXOIDm

w Click

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

.

 

 

 

 

 

 

.c

 

 

p

 

 

 

 

 

g

 

 

 

 

 

df

-xcha

n

e

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

ЕвгенийЗобнин(execbit.ru)w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

ПРИРУЧЕНИЕ

СТРОПТИВОЙ

ИСПОЛЬЗУЕМ OPENBSDВКАЧЕСТВЕ ДЕСКТОПА

Когда разговор касается OpenBSD, на ум приходят межсетевые экраны, IPSec-туннели

и агентство национальной безопасности США. Тем не менее опенок может быть отличным десктопом, в котором нет простоты установки Ubuntu, но есть логичность и проработанность каждого компонента, а также солидный набор первоклассных инструментов администрирования прямо из коробки.

ВВЕДЕНИЕ

OpenBSD не принято использовать на десктопах, но чем больше разбираешься в этой ОС, тем больше хочешь видеть ее на своем домашнем компе. Здесь нет излишнего переусложнения системных компонентов, нет инсталлятора, создатели которого считают пользователя идиотом, нет нагромождения софта, написанного разными людьми в разных условиях и с разным виденьем удобства использования программы. Но здесь есть сквозная простота, абсолютная логичность и вылизанность компонентов системы. Только когда начинаешь использовать OpenBSD, понимаешь, насколько толсты, неуклюжи и перегружены функционалом Linuxдистрибутивы.

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

114

ХАКЕР 10 /165/ 2012

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

НАЧАЛО НАЧАЛ, ИЛИ УСТАНОВКА НА ЖЕСТКИЙ ДИСК

Как и все другие ОС, OpenBSD распространяется в виде ISOобразов и даже образов флоппи-дисков, которые можно использовать для установки системы на совсем старое железо.

ISO-образов при этом предлагается два: для установки по сети (имя cdXX.iso, где XX — номер версии ОС) и полная система (файл installXX.iso), которая включает в себя все, кроме сторонних пакетов. Получить образы можно с любого из доступных FTPсерверов, например bit.ly/Q7XwYc. Следует перейти в каталог

с номером версии ОС (например, 5.1), а далее — в каталог с именем нужной архитектуры (i386 или amd64 для стандартных ПК) и скачать подходящий образ, в моем случае install51.iso.

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

Первый вопрос инсталлятора касается режима работы LiveCD:

(I)nstall, (U)pgrade or (S)hell?

Нас интересует первый пункт, поэтому вводим символ 'i'. Далее — раскладка клавиатуры:

Choose your keyboard layout ('?' or 'L' for list)

Жмем <Enter>, чтобы выбрать стандартную QWERTY-раскладку. После этого необходимо ввести имя хоста:

System hostname? (short form, e.g. 'foo')

Набираем любое понравившееся имя и жмем <Enter>. Далее инсталлятор выведет список доступных сетевых интерфейсов и предложит сконфигурировать один из них:

Available network interfaces are: em0 vlan0.

Which one do you wish to configure? (or 'done') [em0]

Сетевая установка OpenBSD с помощью минимального образа диска (cd51.iso) — распространенная практика, поэтому данный вопрос появляется одним из первых. Жмем <Enter> и видим на экране запрос IP-адреса интерфейса em0 (естественно, в твоем

Схемаразметкираздела,предложеннаяинсталлятором,невсегдабывает правильной

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

Приручение строптивойw Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

случае имя интерфейса может быть и другим, в BSD-системах имя интерфейса зависит от производителя сетевухи):

IPv4 address for em0? (or 'dhcp' or 'none') [dhcp]

Жмем <Enter>, чтобы IP-адрес и все остальное было получено от DHCP-сервера. В противном случае вводим айпишник и отвечаем на еще несколько вопросов об адресах DHCP-сервера, дефолтовом шлюзе и так далее. Затем нам предложат назначить IPv6-адрес, жмем <Enter>, чтобы не делать этого:

IPv6 address for fxp0? (or 'rtsol' or 'none') [none]

Далее будет выдан запрос относительно настройки конфигурации других интерфейсов:

Available network interfaces are: em0 vlan0.

Which one do you wish to configure? (or 'done') [done]

Как видно, кроме em0 остался только vlan0, то есть виртуальный сетевой интерфейс, поэтому инсталлятор предлагает нажать <Enter>, чтобы перейти к следующему этапу установки. Так и делаем и видим на экране следующее:

Using DNS domainname my.domain Using DNS nameservers at 192.168.0.1

Do you want to do any manual network configuration? [no]

Жмем <Enter>, чтобы отказаться от последующего ручного конфигурирования сети. Теперь мы должны дважды ввести пароль root’а:

Password for root account? (will not echo)

Password for root account? (again)

После чего нам предложат прописать sshd и ntpd в автозагрузку:

Start sshd(8) by default? [yes]

Start ntpd(8) by default? [no]

Нажимаем два раза <Enter>, чтобы sshd запускался, а ntpd — нет. Далее инсталлятор спросит нас о том, будет ли на этой машине работать X Window. Единственное, на что он влияет, — это помещение в конфиг /etc/sysctl.conf строки machdep.allowaperture=1, без которой запуск иксов невозможен:

Do you expect to run the X Window System? [yes]

Жмем<Enter>,чтобысогласиться.ДалеенасспросятозапускеXDM по умолчанию, то есть запуске иксов сразу после загрузки системы:

Окончаниеустановкисистемы

ХАКЕР 10 /165/ 2012

115

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

F

 

 

 

 

 

 

t

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

UNIXOIDm

w Click

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

.

 

 

 

 

 

.c

 

 

p

 

 

 

 

g

 

 

 

 

 

df

-xcha

n

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ТакпоумолчаниювыглядитрабочийстолOpenBSD

Do you want the X Window System to be started by xdm(1)? [no]

Жмем <Enter>, чтобы отказаться, так как вместо убогого XDM мы будем использовать более современный менеджер входа (хотя эстеты могут ввести здесь «yes», чтобы наслаждаться XDM). Далее нам предложат добавить в систему пользователя:

Setup a user? (enter a lower-case loginname, or 'no') [no]

Отказываемся нажатием <Enter>, эту операцию проще выполнить после установки. Следующий шаг — выбор временной зоны:

What timezone are you in? ('?' for list) [Canada/Mountain]

Вводим, например, Europe/Moscow. Найти нужную зону можно здесь: en.wikipedia.org/wiki/List_of_IANA_time_zones. На следующем шаге установщик спросит о жестком диске, на который будет устанавливаться система, и использовании уникальных номеров DUID в /etc/fstab вместо путей к файлам устройств:

Available disks are: wd0.

Which one is the root disk? (or 'done') [wd0]

Use DUIDs rather then device names in fstab? [yes]

В домашней машине обычно только один диск, поэтому смело жмем <Enter> два раза. Далее мы должны ответить, хотим ли мы, чтобы OpenBSD использовала весь диск:

Use (W)hole disk or (E)dit the MBR? [whole]

В случае установки OpenBSD внутри виртуальной машины просто жмем <Enter>, чтобы отдать весь диск под систему и не мучиться с разбивкой. Если же речь идет о реальной машине, на которой уже установлена одна или несколько операционных систем, то следует ввести 'e', а затем создать дополнительный раздел для OpenBSD с помощью fdisk.

После нажатия <Enter> инсталлятор произведет предварительную разбивку раздела/диска на OpenBSD-партиции (все BSDсистемы используют собственную схему разметки диска, которая несовместима с другими ОС и создается внутри обычного раздела) и выведет их список на экран, предоставляя выбор — откорректировать либо согласиться с предложенной схемой:

РабочийстолXfceвOpenBSD

Use (A)uto layout, (E)dit auto layout, or create (C)ustom layout?

На данном этапе лезть в дебри утилиты disklabel, с помощью которой происходит разметка, смысла нет, поэтому просто жмем <Enter>, соглашаясь на то, что предложил инсталлятор (тем, кто не терпит автоматический режим, предложу ссылку на пошаговое руководство по ручной разметке: goo.gl/eNBta). После непродолжительной процедуры разбивки следует выбрать источник установки системы:

Location of sets? (cd disk ftp http or 'done') [cd]

Опять же жмем <Enter>, соглашаясь на установку с CD. На следующий вопрос о выборе дисковода также отвечаем нажатием клавиши «Ввод» (у тебя ведь только один дисковод?). Далее выбор пути, по которому располагаются пакеты на диске:

Pathname to the sets? (or 'done') [5.1/i386]

Здесь вообще без вариантов: <Enter>. Далее система выведет на экран список «сетов», то есть наборов ПО, и предложит выбрать нужные:

SЫSSet name(s)? (or 'abort' or 'done') [done]

По умолчанию будет выбрано все, что весьма логично, поэтому продолжаем нажатием <Enter> (чтобы исключить из процесса установки какой-либо сет, нужно использовать знак «-», так, конструкция «-x*» отменит установку всех Х-компонентов). Начнется установка системы, которая продлится буквально несколько минут, после чего инсталлятор попросит выбрать дополнительный источник установки:

Location of sets? (cd disk ftp http or 'done') [done]

Жмем <Enter>. На этом все, вводим reboot, чтобы перезагрузиться.

ПОСТИНСТАЛЛЯЦИОННОЕ КОНФИГУРИРОВАНИЕ

Установка закончена, но на этом наша эпопея с вводом команд и ответами на вопросы еще не завершена. Теперь нам необходимо произвести послеустановочную настройку: добавить обычного пользователя, настроить автомонтирование накопителей, уста-

116

ХАКЕР 10 /165/ 2012

 

 

 

 

hang

e

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

d

 

 

F

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

w Click

 

 

 

 

m

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

o

 

 

.

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Постер,посвященныйвыходуOpenBSD5.1

новить графическое окружение и настроить графический вход в систему. Все это делается опять же из командной строки.

Для начала войдем в систему, добавим нового бесправного пользователя и назначим ему пароль. Как и в других никсах, сделать это можно с помощью команд useradd и passwd:

#uaseradd -m -G wheel имя_юзера

#passwd имя_юзера

Обрати внимание, что passwd из OpenBSD не допустит применения коротких и простых паролей, так что придется придумать что-то изысканное. Теперь добавим в конфиг sudo строку, которая позволит созданному пользователю выполнять любые команды от имени root:

# echo 'имя_юзера ALL=(ALL) SETENV: ALL' >> /etc/sudoers

Теперь можно выйти, набрав команду exit, и залогиниться под именем созданного пользователя. Следующий шаг, который необходимо сделать, — это установить bash, графическую среду и все необходимые приложения. В OpenBSD приложения распространяются в виде портов и пакетов, собранных из портов. Первый способ установки приложений дает больший контроль над установкой, позволяя собрать приложения с теми опциями, которые нужны конкретно тебе, второй — быстрее и проще. Мы пока не будем заморачиваться с портами и для установки всего необходимого воспользуемся пакетами.

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

Приручение строптивойw Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Управлять пакетами можно с помощью стандартных для BSD команд pkg_add, pkg_delete, pkg_info и нескольких других, однако, чтобы они заработали, необходимо указать источник установки пакетов, прописав его адрес в переменную окружения PKG_PATH:

$ export PKG_PATH=ftp://ftp.corbina.ru/pub/ \

OpenBSD/$(uname -r)/packages/$(uname -m)/

Теперь можно установить bash, vim и другие инструменты, которые могут тебе понадобиться:

$ sudo pkg_add -v bash vim screen elinks

Обрати внимание, что короткие имена пакетов сработают, только если в репозитории пакет с таким именем лишь один. В противном случае pkg_add выведет список пакетов с одинаковым именем и попросит тебя установить один из них, указав полное имя. После того как команда pkg_add будет выполнена, меняем свой шелл на bash и прописываем vim в качестве редактора по умолчанию (все это опционально, и ты можешь остаться на стандартных

для OpenBSD ksh и vi):

$ sudo usermod -s /usr/local/bin/bash $ echo 'export EDITOR=vim' >> ~/.bashrc

$ echo 'export PKG_PATH=ftp://ftp.corbina.ru/pub/ \ OpenBSD/$(uname -r)/packages/$(uname -m)/' >> ~/.bashrc

$ bash

Теперь можно установить графическую среду. Я предлагаю использовать Xfce как легкую среду для легкой ОС. В OpenBSD Xfce разбита на множество пакетов, большинство из которых никак не зависят друг от друга, поэтому их придется устанавливать по отдельности. Чтобы инсталлировать базу, достаточно набрать следующую команду:

$ sudo pkg_add -v xfce4-session xfdesktop xfwm4

Пакет вытянет вместе с собой GTK, Glib, cairo, d-bus, некоторые компоненты среды и все необходимое для их работы (кроме X.Org, он идет в комплекте базовой системы). После того как среда будет установлена, можно запустить иксы, добавив Xfce в автозагрузку:

$ echo 'LC_CTYPE="ru_RU.UTF-8"' > ~/.xinitrc

$ echo 'setxkbmap "us,ru" ",winkeys" "grp:caps_toggle" &' \

>> ~/.xinitrc

$ echo 'exec xfce4-session' >> ~/.xinitrc

$ ln -s ~/.xinitrc ~/.xsession

$ startx

Первая команда здесь нужна, чтобы установить правильную локаль, позволив приложениям корректно выводить текст на русском; вторая — чтобы настроить переключение языков между русским и английским по клавише <Caps Lock>; третья запускает Xfce; четвертая нужна, чтобы Xfce также попала в автозагрузку графического менеджера логина, который мы установим позже. Чтобы инсталлировать весь Xfce целиком, установи следующие пакеты:

gtk-xfce-engine libxfce4mcs libxfcegui4

xfce-mcs-manager xfce-mcs-plugins xfce-utils

xfce4-* xfdesktop xfwm4 xfwm4-themes

Этот список можно сохранить в файл (ты найдешь его на прилагаемом к журналу диске), а затем установить все разом с помощью следующей команды:

$ sudo pkg_add -v $(cat файл)

ХАКЕР 10 /165/ 2012

117

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

 

d

 

 

 

 

 

 

-

 

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

 

t

 

 

 

 

 

F

 

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

 

i

 

 

 

 

 

D

 

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

r

 

 

 

 

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

 

o

 

 

 

 

P

 

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

UNIXOIDm

 

 

 

 

 

 

 

 

 

to

 

 

 

 

 

 

w Click

 

 

 

 

 

w Click

 

 

 

 

 

 

m

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

o

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

g

.c

 

 

 

 

 

.

 

 

 

 

 

g

.c

 

 

 

p

 

 

 

 

 

 

 

 

 

 

 

 

 

 

p

 

 

 

 

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Чтобы настроить графический логин в систему, мы должны уста-

 

 

 

 

INFO

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

новить менеджер входа, такой как GDM, KDM, или воспользоваться

 

 

 

 

КромеISO-образов,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

стандартным XDM. К сожалению, первые два тянут за собой большое

 

 

 

 

командаOpenBSD

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

количество ненужных зависимостей, а третий выглядит скверно,

 

 

 

 

распространяетнабор

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

фирменныхкомпакт-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

поэтому мы установим простой и стильный менеджер SLIM:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

дисков,накоторых

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

помимоосновной

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

$ sudo pkg_add -v slim

 

 

 

 

системысодержатся

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

такженабордопол-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

нительныхпакетов,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Чтобы он запускался автоматически после старта системы, до-

 

 

 

 

постерыссимволи-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

койOpenBSDимузы-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

бавь в /etc/rc.local следующую строку:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

кальнаякомпозиция,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

подготавливаемая

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

# vi /etc/rc.local

 

 

 

 

ккаждомурелизу.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Вбазовуюпостав-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

[ -x /etc/rc.d/slim ] && /etc/rc.d/slim start

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

куOpenBSDвходит

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Если же нужен автологин, достаточно добавить в /etc/slim.conf

 

 

 

 

двавеб-сервера:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BSD

nginxиApacheсна-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

две строки:

 

 

 

боромпатчейдля

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

повышениябезопас-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

# vi /etc/slim.conf

 

 

 

ностиибэкпортами

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

функциональностииз

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

default_user имя_юзера

FreeBSD

OpenBSD

NetBSD

DragonFly

второйверсии.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

auto_login yes

поставляется

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

OpenBSDимеет

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

самыйбольшой

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Теперь после перезагрузки машины будет сразу стартовать

 

 

 

 

наборкачествен-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

графическое окружение.

 

 

 

 

ныхдрайверов

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

длябеспроводного

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

оборудованиясреди

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ПАКЕТЫ И ПОРТЫ

 

 

 

 

всехBSD-систем.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

OpenBSD

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Мы научились устанавливать пакеты, но что делать, если прило-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

жение необходимо удалить из системы? Для этого служит команда

 

 

 

 

ссобственным

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

pkg_delete, просто запусти ее с именем нужного пакета, и ты его

77%

32,8%

16,3%

2,6%

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

звуковымсервером

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

больше не увидишь:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

изразныхисточников

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

aucat,который

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

можноиспользовать

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

$ sudo pkg_delete xfdesktop

 

 

 

 

длясмешивания

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

аудиопотоков

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Удалять пакет со всеми зависимостями pkg_delete не умеет,

 

 

 

 

безнеобходимости

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

установкиpulseaudio

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

но утилита принимает флаг '-a', с помощью которого можно под-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

РаспределениедолейBSD-системсредипользователей

илиjack.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

чистить систему от осиротевших зависимостей. Кроме того, если

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

сам пакет является зависимостью, команда выведет на экран

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

список его «родительских» пакетов, так что ты легко разберешься

В случае необходимости приложение можно поставить из пор-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

в веренице взаимных зависимостей.

тов, это позволит тебе произвести оптимизацию при сборке либо

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Чтобы просмотреть список пакетов, можно использовать коман-

указать необходимые опции. По умолчанию OpenBSD поставляется

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ду pkg_info, которая просто выводит на экран имена всех пакетов

без коллекции портов, заставляя пользователя скачать последний

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

с версией и кратким описанием. Также тебе будут доступны коман-

для данной версии срез портов. Сделать это очень просто, доста-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ды pkg_create и pkg_check для создания и проверки целостности

точно ввести три команды:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

пакетов, а из репозитория можно установить pkg_find, с помощью

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

которой легко найти нужное приложение. Всего в репозитории

$ sudo mkdir /usr/ports

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

OpenBSD доступно около 5000 пакетов, среди которых есть все не-

$ ftp ftp://ftp.corbina.ru/pub/OpenBSD/5.1/ports.tar.gz

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

обходимое, начиная от Firefox и заканчивая различными мелкими

$ sudo tar -C /usr/ports -zxvpf ~/ports.tar.gz

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

инструментами вроде iotop.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Далее можно перейти в каталог /usr/ports, найти нужный порт

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

и собрать его. Например:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

# cd /usr/ports/sysutils/nut

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

# env FLAVOR=no_cgi make install clean

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Система портов во всех BSD почти идентичная, поэтому если ты

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

когда-либо работал с FreeBSD, то легко разберешься.

 

 

 

 

 

 

 

 

 

 

 

 

 

АВТОМОНТИРОВАНИЕ

 

 

В OpenBSD нет udev, sysfs или динамической файловой системы

 

devfs, поэтому стандартные механизмы автомонтирования не сра-

 

ботают. У пользователя остается выбор: либо настроить архаичный

 

amd для автомонтирования, либо сделать так, чтобы монтирова-

 

ние можно было выполнить с помощью одной простой команды.

 

Мы пойдем по второму пути, и позже я объясню почему.

 

Чтобы сделать монтирование удобным, мы должны, во-первых,

 

сделать так, чтобы диски и флешки мог монтировать любой поль-

 

зователь; во-вторых, добавить необходимые записи в /etc/fstab.

УстанавливаемXfce

Первая операция выполняется с помощью пяти команд:

118

ХАКЕР 10 /165/ 2012

Соседние файлы в папке журнал хакер