Low cost and platform independent ASP.NET - be free with MONO.
В этом разделе я буду рассказывать не просто о технологии программирования ASP NET, а о программировании на ASP.NET с минимальными финансовыми вложениями. Как добиться лучшего соотношения цена/качество при программировании на ASP.NET? Как уменьшить суммы, которые жаждет отмутить от программистов и хостеров Билл Гейтс?
ASP.NET - это на сегодня самая малораспростаненная в природе WEB-технология. По моим оценкам лишь 0,4% сайтов сделано на ASP.NET. Вызвано это адски невыгодным соотношением цена/качество - как и у всех микрософтовских продуктов. Однако сегодня уже прошли времена, когда Visual Studio 2005 падала десятки раз в день - технология уже стала стабильной. И сегодня невыгодное соотношение цена/качество вызвано не плохим качеством ASP.NET, а безумными ценами микрософтовских продуктов, безумной жаждой Билла Гейтса оставаться самым богатым человеком планеты.
Как правило, для полноценной профессиональной работы требуется Microsoft SQL Server, который стоит в обычной комплектации $24,999.00 на процессор (есть и более дешевые, но совершенно кастрированные версии, а есть и версии по $57,498.00 на процессор. Кроме MS SQL обычно требуется Microsoft Visual Studio, которая для профессиональной работы тоже стоит немало - более ли менее укомплектованные редакции стоят 7-12 тысяч долларов. Ну и сама виндузня в более ли менее укомплектованном виде стоит $3,999.00 - не считая конечно прав на доступ к ней извне за $7,999.00.
Поэтому при наличии бесплатных Eclipse/MySQL/PostgreSQL выиграть в открытой конкуренции соотношения цена/качество микрософтовские продукты, конечно, не могут. Даже если их цена будет снижена в 100 раз - не уверен, что полнофункциональный микрософтовский SQL окажется более привлекательным, чем MySQL Enterprise Server за $500 или бесплатный PostgreSQL, а полнофункциональная Visual Studio за $20 окажется привлекательнее бесплатного Eclipse.
Сегодня мы наблюдаем взрывной процесс роста интереса к более развитым чем у MS и совершенно бесплатным технологиям. Если сравнивать убогий и дорогущий Microsoft SQL Server c совершенно бесплатым PostgreSQL, то огромное открытое сообщество PostgreSQL явно выглядит предпочтительнее. Например, на открытой Freeware OpenSource платформе PostgreSQL работают сегодня многие мировые бренды: Skype, Yahoo, Mail.ru, NASA. Компания SUN утверждает, что PostgreSQL работает быстрее Оракла (не говоря уже о MS SQL). Для ПГ существует множество дополнений и расширений, множество специализированных организаций, проводящих тестирование знаний и выдающих сертификаты, большое международное сообщество, проводящее регулярные встречи и ведущее развитие PostgreSQL по основным 400 направлениям-проектам, есть и русскоязычное сообщество. Весь этот открытый мир свободных людей не идет ни в какое сравнение с какой-то зомбированной сектой мазохистов - любителей платежей Биллу Гейтсу.
Одновременно с Биллом Гейтсом, давление на пользователей билогейтсовских технологий усилила репрессивная система, разгромив многие правозащитные организации, экологические организации, редакции газет и даже осудив каких-то наемных работников за использование Windows. "Чужие" даже публично обьявили о конфискации у нас имущества и денег за 2009-й год почти на миллиард рублей - Осторожно Microsoft.
Создание кроссплатформенного и бесплатного ASP.NET-кода приобрело еще большую актуальность, когда Microsoft начала раcпространять со своего сайте дистрибутивы PHP 5, публично признав неудачу своего проекта ASP.NET - зафиксировав свою долю рынка в 0,4% и пустившись в новые технологические авантюры.
Поэтому сообщество независимых разработчиков, которым нравится ASP.NET, всем миром поддерживают Freeware OpenSource проект MONO, в котором можно работать в ASP.NET на любой платформе независимо от Микрософта. Это позволяет при желании отказаться от основных ценовых составляющих ASP.NET - от MS SQL-сервера, MS Windows и MS Visual Studio - сохранить технологию ASP.NET и отделить ее от жажды денег, которая колбасит Билла Гейтса и убивает эту неплохую технологию.
Ведь главное достоинство ASP.NET еще никто не отменял - использование практически одних и тех же классов для Win и Web-программирования. При этом ASP.NET/MONO работает на всех основных платформах явно быстрее, чем аналогичная по назначению полностью бесплатная среда JAVA - тоже предназначенная для таких же универсальных решений - для WEB и desktop-приложений. Да и в целом, на мой взляд, .NET сделан более капитально, чем JAVA. А продуктам типа PHP или PERL, ASP.NET вообще конкурентом на является, ибо .NET в равной степени заточен как на desktop, так и на Web приложения. В интернете много выложено много тестов, где MONO даже под Win часто дает большую производительность, чем NET.
Сегодня проект MONO (http://www.mono-project.com) стал может быть даже более популярным, чем классическое микрософтовское ASP.NET (то же MONO + 50 тысяч долларов Биллу Гейтсу + самокастрация своего решения только под Win). Многие всемирно известные порталы, например wikipedia.org, осознали это и выбрали в качестве своей платформы именно MONO. При беглом просмотре в интернете я нашел сотни программистов, которые не просто экспериментируют, а делают на потоке реальные сайты на ASP.NET в Linux, например - Linux, Apache, MySql, Asp.Net — The best of ALL Worlds!.
К сожалению многие программисты микрософтоской платформы имеют чрезвычайно узкий кругозор и совершенно не знакомы с миром Freeware Opensource. Микрософтовские курсы, учебники и форумы - изо всех сил стараются заузить кругозор программистов. Это так называемая "маркетинговая политика Microsoft", которая позволяет Биллу Гейтсу занимая всего 0,4% рынка Web-приложений оставаться самым богатым человеком планеты. Например достаточно было мне на форуме SYSADMINS.RU заикнутся про то, что NGINX Игоря Сысоева является бесплатной альтернативой MS ISA Server и выполняет роутинг по хост-хеадерам сайтов лучше чем MS ISA - как я был навечно там забанен и был удален не только этот топик, но и все мои другие топики. Аналогичный беспредел в отношении мира Freeware OpenSource происходит на всех основных сайтах рунета. Технологии зомбирования биомассы MS отточила до совершенства - как оболванить, зомбировать и превратить деморализованную биомассу в потребителей продукции MS (Игла от Microsoft). Любопытно что эта секта мазохистов - любителей платежей Биллу Гейтсу, утверждает что программистам выгодно существование в информационной индустрии такого паразита, как Билл Гейтс. Якобы существование этого паразита увеличивает капиталлизацию IT-индустрии, что по мнению членов этой секты, приводит к росту зарплат программистов.
Информацию как соскочить с платежей самому богатому человеку планеты и выйти на бесплатные и более развитые платформы мне пришлось собирать буквально по крупицам. И я с удовольствием поделюсь своими сокровенными знаниями.
Если вы более ли менее серьезно настроены познакомится с MONO, то для начала надо поставить себе Linux - Установка и начальное конфигурирование OpenSuse Linux. Ибо испытывать MONO под Windows - это все равно что нюхать розу через противогаз. Например одной из сладких фишек MONO является замена обычной процедуры развертывания ASP.NET-сайтов на развертывание приложений с помощью технологии KIWI. Эта технология позволяет создать загрузочную флешку с вашим ASP.NET-сайтом, c которой можно просто загрузиться на любой встроенной бездисковой системе (например на обычной бытовой материнке или на сверхкомпактной типа Soekris). Естественно, в Windows нет и никогда не будет даже похожих технологий - а комплект таких технологий и есть основа MONO.
Есть также интересный подход по запуску MONO-сайтов в Windows под Apache на модуле mod-mono - это позволяет работать в Win именно под Apache (а не под IIS). Можно взять какой-нибудь дохлый Win без IIS в виде Windows Live CD на флешке, на это установить Apache с mod_mono и на этой платформе попытатся поднять мощный публичный сайт на ASP.NET. Ну и вообще mod_mono - это способ запустить MONO-сайт под Windows не переделывая его в микрософтовский ASP.NET.
Кроме запуска ASP.NET приложений под Linux, MONO - это еще и возможность для WIN-программистов запустить свои настольные приложения в Linux без полного погружения в UNIX, а оперируя привычными классами .NET - как я это сделал вот здесь SNMP-тестер сетевых устройств. GUI-программа на Windows.Forms для Linux.
Кроме того, запустить свое собственное .NET приложение тоже можно на кампутере без винчестера, напрямую загрузившись с флешки - Загрузочные компакты и флешки (bootable LiveCD and bootable USB).
MONO-сборки также можно вызывать из JAVA-программ с помощью ikvm - транслятора байт-кода JAVA в байт-код .NET. Такой коктейль из JAVA-NET кода можно разрабатывать в любой мощной современной бесплатной среде JAVA-программиста (без Visual Studio 2008) и работать этот коктейль тоже будет в любой среде, где работает MONO - от игровых приставок Xbox и Макинтошей до многопроцессорных суперкомпьютеров IBM/390 серий G5/G6/G900, производительностью более 1000 MIPS.
Итак, для начала необходимо избавится от дорогущего, тормозного и непереносимого на другие платформы MS SQL Server (даже рекламу которого микрософт делает в стиле Д. Оруэла "Мир-это война"). Для избавления от этого микрософтовского чуда есть два основных пути:
- Используем MySQL вместо MS SQL в проектах на ASP.NET
- Используем PostgreSQL вместо MS SQL в проектах на .NET и ASP.NET
- Инструкция портала MonoProject по переносу ASP.NET приложений из MS SQL Server в PostgreSQL - Guide:_Porting_ASP.NET_Applications.
Разумеется, на практике избавится от MS SQL не так просто, как в этих Getting Started инструкциях. Microsoft догрузил в MS SQL Server слишком много дополнительной функциональности, чтобы затруднить переход на другой SQL Server. Но все эти вопросы в принципе решаемые: Выполнение периодических задач в ASP.NET, Избавляемся от Microsoft Reporting Services. Вряд-ли серьезный проект можно поднять в одиночку, поэтому важно обеспечить коллективный доступ к коду и контроль версий сайта - Избавляемся от Team Foundation Server. Существует также множество весьма специфических ASP.NET-технологий, которые вообще затруднительно перенести куда-нибудь - Проблемы развертывания ASP.NET сайтов.
Для переноса ASP.NET сайтов есть несколько путей:
- Mono позволяет запустить один и тот же EXE-файл, содержащий байт-код IL напрямую в любой операционке и на люббом процессоре - подробнее я описал это в конце этой странички GoogleTranslate - англо-русский онлайн переводчик.
- Можно просто скопировать исходники кода из системы в систему и скормить его в на другой платформе в Apache модулю mod_mono. MonoDevelop в этом случае не требуется вообще (ну разве что как удобный нотепад с подсветкой и подсказкой). Это наиболее простой и очевидный путь.
- Существует коммерческое дополнение Visual Studio 2008 - Mono Tools for Visual Studio, которым можно прямо в VS2008 изготовить (и удаленно отлаживать) ASP.NET-сайты для Linux и Mac OS. По идее это дополнение может переносить готовый байт-код .NET, но в моей среде оно переносило обычные исходники. MonoDevelop в этой схеме работы тоже не требуется - исходники просто скармливаются Апачу (запущенному либо под Win либо под Unix).
- Если ASP.NET-разработка велась изначально в Monodevelop, то для переноса из MonoDevelop в Visual Studio в MonoDevelop предусмотрен мастер упаковки и развертывания. Под Win этот небольшой сервис сворачивания директории с исходными текстами сайта у меня не заработал, хотя под Linux он работал нормально. Соответсвенно, получив в Windows MONO-сайт, его можно либо запустить напрямую в Apache либо перекомпилировать в Visual Studio под натуральным микрософтовским .NET и запустить сайт под IIS.
Суть коммерческого дополнения к Visual Studio в том, чтобы разработчик мог продолжать работать в среде Visual Studio. Этот путь имеет несколько явных преимуществ - Intellisense для Visual Basic и визуальный дизайнер форм. В MonoDevelop такие фенечки не настолько продвинутые. На локальный кампутер девелопера загружается Addins для Visual Studio Mono Tools for Visual Studio - это единственная платная вещь во всей идеологии (стоит $99). Чтобы запускать сайт локально на кампутере девелопера под Windows на этот кампутер надо еще установить само MONO. По ходу дела потребуется установить еще vcredist_x64.exe). Таким образом у вас должно добавится в системе Addins к Visual Studio (monovs_1.0.4410.msi), само MONO (mono-2.6.1-gtksharp-2.12.9-win32-1.exe), графический интерфейс к MONO Gtk# (gtk-sharp-2.12.9-2.win32.msi). Все это ставится в одном инсталляционном пакете. После установки у вас добавится в меню от кнопки пуск пару пунктов, но главное - добавится Addins для Visual Studio. Теперь девелопер запускать локально исходный код ASP.NET сайта не только под микрософтовской средой, но и под MONO прямо из студии. При этом в системном трее вместо привычного микрософтоского девелоперского сервера появляется девелоперский сервер Mono XSP (с иконкой обезьянки). Можно запустить TcpView и посмотреть как XSP-сервер слушает порт, куда обращается браузер. |
Более интересный функционал этого дополнения от Novell - подготовка RPM-пакета для развертывания в целевой Linux-системе. Для этого в этот аддинс от Novell загружается откомпилированный код сайта, устанавливаются ссылки на библиотеки компиляции и аддинс коннектится к целевому Линуксу, где и создается инсталляционный RPM-пакет сайта. Конечно, для этого на Linux надо установить и само MONO и XSP-сервер. Просто для коннекта к девелоперскому XSP-серверу и MONO из Visual Studio никакая настройка XSP и MONO не требуется - она потребуется только если надо запускать MONO под более универсальным Web-сервером. По логике вещей наверное можно было бы обращатся и девелоперскому XSP серверу на локальной WIN-машине - но по факту это падает. Если посмотреть на процесс создания инсталляционного пакета, то можно увидеть как .NET-сборки передаются из Windows в XSP-сервер на Linux. Соответственно, на этом этапе замечены заморочки - сборки должны быть отмечены как перезапиываемые и если что-то зависло - надо перегружать Linux (или девелоперский Web-сервер в нем). Казалось бы, (судя по трафику от девелоперской Win-машины c исходниками к XSP на целевом Linux), инсталляционный пакет должен содержать байт-код .NET - но по факту он содержит исходники, если вы разворачиваете сайт в исходном виде. Но его можно разворачивать и в виде бинарников. Мне также очень понравилась удаленная отладка в MONO. Cозданный инсталляционный RPM-пакет ASP.NET-сайта надо проинсталлировать в Linux любым из известных способов. Я сделал это еще одним способом - просто воспользовался GUI Yast: добавил в Linux новый репозитарий с дистрибутивами и установил оттуда пакет. Упаковщик Novell включил в инсталляционный пакет моего тестового сайта исходники и 4 конфигурационных файла. |
Взаимосвязь этих конфигурационных файлов необходимо четко понимать для работы с MONO. Девелоперский XSP-сервер можно запустить тремя способами: автостартом при запуске системы, с GUI-оболочкой или из командной строки.
|
Теперь посмотрим как запустить в Linux ASP.NET-приложение. Но уже не под девелоперским XSP-сервером, а под настоящим Apache. Для этого надо сконфигурировать модуль апача Mod_mono. Для конфигурирования этого модуля апача MOD_MONO есть два режима - авто и ручной (с множеством виртуальных хостов). Для одного хоста в автоматическом режиме ручками надо сделать следующее.
В принципе конфигурационные файлы в SUSE Linux выставлены так, что подключаемая к конфигурации Apache конфигурация умалчиваемого узла /etc/apache2/defaul-server.conf содержит строку Include /etc/apache2/conf.d/*.conf, что автоматически подключает /etc/apache2/conf.d/mod_mono.conf (там подключается и бинарник mod_mono.so) - поэтому для простейших конфигураций действия 1 и 3 можно опустить. Важно понять, где именно будет на диске умалчиваемый узел Apache. Средства публикации Novell размещают в каталог /etc/apache2/conf.d файл с параметрами вызова MONO. Собственно, это просто линк на конфигурационный файл, который средства публикации Novell разместили для конфигурирования XSP-сервера в /etc/xsp2/2.0/application-available. Свой собственный тестовый узел можно запустить с этой конфигурацией. При установке MONO устанавливется в /usr/lib/xsp/test также тестовый сайт. Его можно запустить и под XSP. Но мы его запустим под Apache. Для этого надо сам каталог с тестом (test) положить из /usr/lib/xsp/ в директорию корневого узла Apache по умолчанию /srv/www/htdocs и положить в /etc/apache2/conf.d файл с описанием конфигурации виртуального каталога Apache - тогда к тестовому примеру, который идет в комплекте с MONO можно будет обратится по http://localhost/test/index2.aspx (или index.aspx). Если вы сомневаетесь куда смотрит умалчиваемый узел Apache - вам поможет журнал ошибок Apache. Можно на одном DNS имени (например LocalHost) сконфигурировать множество виртуальных каталогов - некоторые из которых будут на ASP.NET - пример такой конфигурации - раздел More on applications, а можно каждый виртуальный каталог запустить как отдельный домен приложения ASP.NET - раздел 2 applications, 2 mod-mono-server. Если все сделано правильно, то должно случиться чудо - ASP.NET приложение заработает в Linux. К своему web-узлу можно добавить сброс MONO. Обратите внимание, что MONO-сайт можно таким же образом запустить и в Windows под Apache, при этом многие утверждают, что это даже работает быстрее чем под натуральным микрософтовским .NET, хотя лично я такой эксперименты со скоростью пока не ставил. Обратите внимание на интересные серверные переменные: SERVER_SOFTWARE: Apache/2.2.10 (Linux/SUSE) ; PATH_TRANSLATED: /usr/share/mono/asp.net/apps/monotest1-1.0/Default.aspx ; HTTP_COOKIE: ASP.NET_SessionId=... - не правда-ли замечательно? А при запуске под девелоперским XSP-сервером под Win эти переменные будут примерно такие: SERVER_SOFTWARE: Mono.WebServer2/0.2.0.0 ; PATH_TRANSLATED: C:\Documents and Settings\Administrator\Local Settings\Temp\hxph4zha.3gk\Default.aspx Интересная галка MonoIoMap означает стирание различий между файловой системой Win и Unix - те в в юниксе работает в одном регистре и с прямым слешем. Привычная иерархия config-файлов, начиная от maсhine.config до умолчаний web.config теперь находится в /etc/mono/ - там же ищите и конфигурацию MONO. При программировании есть переменная Environment.OSVersion.Platform, которая позволяет различать платформу. |
Для создания конфигураций для хостинга MONO-сайтов существует онлайновый конфигруатор MOD_MONO - http://go-mono.com/config-mod-mono/.
Для конфигурирования множества виртуальных узлов в Apache рекомендуется доставить webmin - тогда вы сможете настраивать Web-узлы в более комфортной графической среде, не хуже чем MS IIS. Подробнее о конфигурировании Apache смотрите в разделе Настройка Apache.
Вместо Apache можно использовать NGINX Игоря Сысоева. Этого варианта запуска я пока не опробовал, но обязательно найду время и опишу этот вариант работы MONO позже. Не забывайте, что NGINX, как и Apache - тоже запускается под любым UNIX, Linux, MAC и Windows.
Можно вообще не пользоваться при разработке ASP.NET-сайтов Microsoft Visual Studio. Для этого надо для начала установить в нужную операционную систему (или даже в видузню) Mono и MonoDevelop.
Технология это работающая, но функционально более ограниченная относительно девелопмента в Visual Studio 2008 - ну примерно как Нива и тойота. Те ездить конечно можно - но при пересадке с тойоты на Ниву надо привыкнуть. В MonoDevelop нет визуального дизайнера форм. Поддержка бейсика ограниченная. В моей версии под Win был шаблон ASP.NET приложения на бейсике, а на Linux этого шаблона не было. Надо было создать пустое приложение, потом добавлять в него VB-формы. Нету Intellisense для бейсика. Неудобно создавать события контролов и страниц. Всякие мастера типа настройки SqlDatasource тоже отсутсвуют. Отладчик и Toolbox у меня так не заработали под Win, хотя я нашел в интернете кучу народа, у кого все это работает отлично. Возможно люди работают на 32-х разрядных кампутерах, а у меня девелоперский кампутер - двухпроцессорник с 64-х разрядной виндузней. В общем, тому кто привык работать под VS2008, лучше брать готовый сайт, сделанный под VS2008 и просто открывать существующий проект в MonoDevelop, чем изначально писать код сайта под MonoDevelop. Тому, кто с самого начала учится писать на ASP.NET из Linux - может и нет смысла привыкать к фенечкам VS2008. Ведь на Нивах тоже люди ездят, хоть и без кондиционера и АБС. Но что-то подправить по-быстренькому в MonoDevelop можно и фанату Visual Studio 2008 - все формы Visual Studio 2008 присутсвуют и вполне узнаваемые. Основные же достоинства MonoDevelop никто не отменял - это абсолютно бесплатная прога, написанная энтузиастами - фанатами ASP.NET. И работает MonoDevelop везде, где работает само MONO - от игровых приставок Xbox и Макинтошей до мощных современных многопроцессорных суперкомпьютеров IBM/390 серий G5/G6/G900, производительностью более 1000 MIPS. Полная документация на MONO. |
С удовольствием сообщаю, что лично я уже перешел с этапа теоретического осознания необходимости перехода с ASP.NET на более производительные, кроссплатформенные и совершенно бесплатные технологии - на этап практического программирования MONO-проектов. Всю настройку среды для сайта на MONO с использованием PostgreSQL сервера вместе MS SQL вы можете посмотреть здесь - Этюды на ASP.NET. Пример сайта на СУБД PostgreSQL.
Для перегрузки своих существующих данных из MS SQL в среду MONO вы можете воспользоватся моей программой ScriptManager. Обратите внимание, что я не поддерживаю работу моих программ в Windows 7. Последняя версия Windows, в среде которой я поддерживаю работу моих OpenSource-программ и моих публичных компонентов ASP.NET-сайтов - Windows 2003 и Windows 2008. В дальнейшем работа всех моих популярных публичных .NET-программ и моих популярных компонентов ASP.NET-сайтов будет поддерживатся только в Windows XP-2003-2008 и в Linux.
C некоторых пор мой собственный OpenSource-код я стал выкладывать в основном только в версии MONO для Linux, например GoogleTranslate - англо-русский онлайн переводчик, SNMP-тестер сетевых устройств. GUI-программа на Windows.Forms для Linux.
Для рефакторинга своих проектов из ASP.NET в MONO вы можете обратится на //www.vb-net.com/
|