
2 Вибір програмних засобів
1.1 Вибір архітектури програмного забезпечення.
Для розробки такого веб-застосування, як соціальна мережа необхідно створити не просту систему. Вона повинна володіти такими властивостями, як:
-
швидкість;
-
надійність;
-
безпечність;
-
простота;
-
масштабованість.
Архітектурою, яка має такі властивості, на мій погляд, є багаторівнева архітектура клієнт-сервер. Вона дозволяє винести функцію обробки даних на декілька серверів, це дозволяє розділити функції зберігання даних, представлення та обробки інформації. Розроблена архітектура показана на Рис. 1.1.
Я вважаю, що створення не лише веб-сервісу, а й любого веб-продукту повинно бути розроблено з використанням патерну проектування MVC. Це зумовлено тим, що він дозволяє максимально відділити модель даних від інтерфейсу користувача та від логіки роботи. У такому разі, розробка та тестування програмного продукту стає значно простішою.
Цей шаблон поділяє систему на три частини: модель даних, вигляд даних та керування. Застосовується для відокремлення даних (модель) від інтерфейсу користувача (вигляду) так, щоб зміни інтерфейсу користувача мінімально впливали на роботу з даними, а зміни в моделі даних могли здійснюватися без змін інтерфейсу користувача.
Мета шаблону — гнучкий дизайн програмного забезпечення, який повинен полегшувати подальші зміни чи розширення програм, а також надавати можливість повторного використання окремих компонент програми. Крім того використання цього шаблону у великих системах призводить до певної впорядкованості їх структури і робить їх зрозумілішими завдяки зменшенню складності.
Архітектурний шаблон Модель-Вид-Контролер (MVC) поділяє програму на три частини. У тріаді до обов'язків компоненту Модель (Model) входить зберігання даних і забезпечення інтерфейсу до них. Вигляд (View) відповідальний за представлення цих даних користувачеві. Контролер (Controller) керує компонентами, отримує сигнали у вигляді реакції на дії користувача, і повідомляє про зміни компоненту Модель. Така внутрішня структура в цілому поділяє систему на самостійні частини і розподіляє відповідальність між різними компонентами.
MVC поділяє цю частину системи на три самостійні частини: введення даних, компонент обробки даних і виведення інформації. Модель, як вже було відмічено, інкапсулює ядро даних і основний функціонал з їх обробки. Також компонент Модель не залежить від процесу введення або виведення даних. Компонент виводу Вигляд може мати декілька взаємопов'язаних областей, наприклад, різні таблиці і поля форм, в яких відображається інформація. У функції Контролера входить моніторинг за подіями, що виникають в результаті дій користувача (зміна положення курсора миші, натиснення кнопки або введення даних в текстове поле).
Зареєстровані події транслюються в різні запити, що спрямовуються компонентам Моделі або об'єктам, відповідальним за відображення даних. Відокремлення моделі від вигляду даних дозволяє незалежно використовувати різні компоненти для відображення інформації. Таким чином, якщо користувач через Контролер внесе зміни до Моделі даних, то інформація, подана одним або декількома візуальними компонентами, буде автоматично відкоригована відповідно до змін, що відбулися.
Також для спрощення розробки та підвищення її ефективності було вирішено розробити шаблонізатор, програмне забезпечення, призначене для використання html-шаблонів для генерації кінцевих html-сторінок. Розробка веб-проекту з використанням шаблонізатора покращує читабельність коду та внесення змін у інтерфейс користувача. Діаграма взаємодії між компонентами шаблону показана на Рис. 2.1
Рисунок 2.1 – Діаграма взаємодії між компонентами шаблону
Рисунок 1.1 – Схема архітектури клієнт-сервер.
Перший рівень – це термінал, інтерфейсний, графічний компонент, кінцевий інтерфейс користувача. Він не повинен мати жодних зв’язків з базою даних (потреби безпеки), бути навантаженим бізнес-логікою (потреби масштабування) і зберігати стан програми (потреби надійності). На цей рівень винесена найпростіша бізнес-логіка: інтерфейс авторизації, перевірка, чи задовольняють введені значення формату, та чи є вони допустимими та інше.
Другий рівень – це сервер програми. На цьому рівні знаходиться найбільша частина бізнес-логіки. Поза цим рівнем залишаються лише процедури та тригери, що знаходяться на третьому рівні.
Сервер бази даних займає третій рівень багаторівневої архітектури клієнт-сервер. Він забезпечує зберігання даних. У даному випадку – це реляційна СУБД. Якщо третій рівень представляє собою базу даних разом з процедурами та тригерами й схемою, яка описує програму термінами реляційної моделі, то другий рівень будується як програмний інтерфейс, що пов’язує компоненти користувача з прикладною логікою бази даних.
Переваги багаторівневих моделей:
-
централізована бізнес-логіка. Як відомо, бізнес-логікою називають деякі правила обробки даних. Наприклад, видаляючи запис з однієї таблиці, потрібно видалити пов'язані з нею записи інших таблиць. У звичайних файл-серверних або клієнт-серверних додатках, частина бізнес-логіки лягала на клієнтську програму. При необхідності зміни якихось правил, доводилося переробляти клієнтський додаток, потім витрачати зусилля на його поширення на клієнтські ПК. Тепер же, ця бізнес-логіка зберігається на рівні сервера додатків, і при її зміні, клієнти відразу отримують можливість працювати за новими правилами.
-
архітектура "тонкого" клієнта. Як відомо, для отримання даних з БД, додатки використовують один з механізмів доступу до даних - BDE, ADO, ODBC, IBX, dbExpress і т.п. Все це призводить до того, що на ПК кожного клієнта доводиться встановлювати і налаштовувати відповідні драйвери, а це сильно ускладнює процес поширення програми. У багатоланкової архітектури механізми доступу до даних розташовуються на сервері додатків. Тільки там треба встановлювати ці драйвери (наприклад, BDE). Клієнтські ж машини не потребують їх, за що і називаються "тонкими".
-
модель "портфеля" (briefcase model). Модель "портфеля" має на увазі можливість відкладеної обробки даних. Уявіть, що вам у вихідні дні потрібно виконати якусь роботу з даними. При використанні файл-серверної або клієнт-серверної моделі, вам для цієї роботи доведеться прибути в офіс, інакше ви не зможете отримати доступу до даних. У багаторівневої моделі ви можете зберегти на переносному ПК всі необхідні вам дані у вигляді локального файлу. Удома ви зможете завантажити цей файл, і провести необхідну роботу з даними. Потім, прибувши в офіс, ви зможете перенести ці зміни в реальну базу даних.
-
зниження трафіку мережі. За рахунок можливості відкладеної обробки даних значно знижується навантаження на мережу.
Більшість веб-сайтів світу розроблені саме на багаторівневій архітектурі клієнт-сервер, адже приведені вище доводи надто серйозні, щоб ними нехтувати. Розроблена архітектура проекту показана на Рис. 1.2.
Рисунок 1.2 – Багаторівнева архітектура клієнт сервер
1.2 Вибір програмних засобів.
На даний момент існує багато програмних засобів для розробки веб-застосувань різної складності. Кожен з них має свої плюси та мінуси, своїх прихильників та незадоволених. Для розробки соціальної мережі, потрібно веб-сервер, СКБД, мова програмування.
Можливих варіантів вибору веб-серверу було два: IIS, Apache. Вибір пав на Apache, який є самостійним, некомерційним, вільно розповсюджуваним продуктом. Підтримує безліч можливостей, багато з яких реалізовані як скомпільовані модулі, які розширюють основні функціональні можливості. Вони різняться від серверної підтримки мов програмування до схем аутентифікації. Існують інтерфейси для підтримки мов програмування Perl, Python, Tcl і PHP. У проекті використовується Apache 2.2.19
Сервер Apache створений на початку 1995 року співтовариством незалежних розробників «Apache Group», члени якої у свій час брали участь у проекті з побудови перших Web-серверів у NCSA (National Center for Supercomputer Applications, USA). «Apache Group» пропонує Web-сервери, сумісні з будь-якою UNІХ-системою, установленої на будь-якій апаратній платформі. Сервер перенесений і на інші операційні системи. Так, уже зараз Apache Web-сервер доступний для OS/2, UNІХ-платформ, Windows 2000 та ін.
Web-сервер Apache, як і всі інші Web-сервери, базується на ідеях і частині коду, реалізованих у першому по-справжньому популярному Web-Сервері — NCSA httpd 1.3.
Є два пояснення назви проекту. Згідно Apache Foundation, назву проекту було вибрано з поваги до корінного племені американського континенту апачів, що були відомі за свою витривалість та військову майстерність. Проте, перший FAQ на веб-сайті проекту Apache Server з 1996 до 2001 стверджував, що «назва „Apache“ походить від абревіатури „А PAtCHy server“, що дослівно перекладається як „залатаний сервер“ — сервер, у код якого внесений цілий ряд серйозних змін.» Перше пояснення було підтверджено на Конференції Apache і в інтерв'ю 2000 року з Брайаном Беглендорфом, який, тим не менш, спростував це твердження в інтерв'ю 2007 року, заявляючи, що «сервер Apache не названий на честь племені Джеронімо».
Версія 2 веб-сервера Apache була істотним переписом великої частини коду програми версії 1.x, з сильним нахилом на подальшу модульність та портативність. Версія 2.2 має гнучкіший API авторизації. Вона також включає поліпшені модулі кешу й проксі сервера.
Web-сервер Apache є самостійним, некомерційним, вільно розповсюджуваним продуктом. Продукт підтримує безліч можливостей, багато з яких реалізовані як скомпільовані модулі, які розширюють основні функціональні можливості. Вони різняться від серверної підтримки мов програмування до схем аутентифікації. Існують інтерфейси для підтримки мов програмування Perl, Python, Tcl і PHP.
Популярні методи стискування на Apache включають зовнішній модуль mod_gzip, створений для зменшення розміру веб-сторінок, переданих по HTTP.
Функції віртуального хостингу дозволяють одній інсталяції Apache обслуговувати різні веб-сайти. Наприклад, одна машина, з однією інсталяцією Apache може одночасно містити www.example.com, www.test.com, test47.test-server.test.com і так далі.
Apache передусім використовується для передачі через HTTP статичних та динамічних веб-сторінок у всесвітній павутині. Багато веб-застосунків спроектовано, зважаючи на середовище і можливості, які надає цей веб-сервер.
Продукт може працювати в якості кешувального проксі-сервера, що дозволяє істотно підвищити продуктивність роботи користувачів локальної мережі при роботі з документами, розташованими в Інтернет. Можна задавати такі параметри і налаштування проксі-сервера:
-
типи файлів, які необхідно кешувати або навпаки, не включати в кеш;
-
максимальний обсяг дискового простору, відведений під кеш;
-
періодичний перегляд і індексування бази даних кеша з метою вивільнення дискового простору шляхом видалення застарілих об'єктів.
Apache зіграв ключову роль у початковому зростанні всесвітньої павутини, і продовжує бути найпопулярнішим у світі веб-сервером, де-факто платформою, на яку орієнтуються інші веб-сервери.
Згідно статистики[2] Netcaft за червень 2008 року, Apache є найпоширенішим серверним програмним забезпеченням в Мережі: на цей веб-сервер припадала частка близько 49 % відповідного сегменту ринку (майже 85 мільйонів сайтів). Друге місце за популярністю займають програмні платформи Microsoft — 35,4 % (61 мільйон сайтів).
База даних – це дуже важлива частина для кожного веб-проекту. Усі важливі дані зберігаються саме в ній. СКБД обрати було тяжче, ніж веб-сервер, так як вибір значно більший. Та після довгих міркувань було вирішено користуватися СКБД MySQL. Ця система керування базами даних (СКБД) з відкритим кодом була створена як альтернатива комерційним системам. MySQL з самого початку була дуже схожою на mSQL, проте з часом вона все розширювалася і зараз MySQL — одна з найпоширеніших систем керування базами даних. Вона використовується, в першу чергу, для створення динамічних веб-сторінок, оскільки має підтримку з боку різноманітних мов програмування. У проекті використовується MySQL версії 4.1.16.
MySQL– вільна реляційна система керування базами даних (СКБД), яка працює як сервер для забезпечення багатокористувацького доступу до великої кількості баз даних.
Проекти на основі безкоштовного ПЗ, які вимагають повнофункціональної системи керування базами даних часто використовують MySQL. До таких проектів відносяться, наприклад, WordPress, phpBB, Drupal та інше програмне забезпечення, побудоване на стеку продуктів LAMP (Linux, Apache, MySQL, PHP/Perl/Python). MySQL також використовується в багатьох гучних великомасштабних Web-продуктах, включаючи Wikipedia, Google (для програми AdWords), Facebook, YouTube, Flickr, Yahoo!, Digg, LiveJournal, Nokia тощо. MySQL— компактний багато потоковий (багатонитевий) сервер баз даних. Характеризується великою швидкістю, стійкістю і простотою використання.
Для некомерційного використання MySQL є безкоштовним. Можливості сервера MySQL:
-
простота у встановленні та використанні;
-
підтримується необмежена кількість користувачів, що одночасно працюють із БД;
-
кількість рядків у таблицях може досягати 50 млн.;
-
висока швидкість виконання команд;
-
наявність простої і ефективної системи безпеки.
Історія mSQL (вона ж MiniSQL) – легка клієнт-серверна реляційна СУБД, що випускається компанією Hughes Technologies. Вперше випущена в 1994 році, вона заповнила вакуум утворився між вбудованими настільними СУБД типу Microsoft Accessі такими комерційними СУБД рівня підприємства як Oracleі DB2. З 1994 по 1997 рік її популярність росла і mSQL стала популярною серед open source розробників. При цьому початковий код самої mSQL не є відкритим.
З 1996 року розвиток mSQL загальмувалося, внаслідок чого її місце зайняла MySQL. У 1999 році MySQL обігнала mSQL за популярністю. Остання версія mSQL- 3.8 - була випущена 9 червня 2006.
MySQL виникла як спроба застосувати mSQL до власних розробок компанії: таблицям, для яких використовувалися ISAM — підпрограми низького рівня. У результаті був вироблений новий SQL-інтерфейс, але API-інтерфейс залишився в спадок від mSQL.
В січні-лютому 2008 Sun Microsystems придбала виробника системи керування базами данних MySQL за $1 млрд. Після поглинання у 2009 році Sun Microsystems з боку Oracle Corporation MySQL стала власністю Oracle.
Функціональність MySQL. Станом на квітень 2009 року, MySQL пропонує версію MySQL 5.1 в двох різних варіантах: з відкритим вихідним кодом MySQL Community Server і комерційний Server Enterprise. Вони мають спільний програмний код і включають в себе серед іншого наступні можливості:
-
крос-платформна підтримка
-
збережувані процедури та функції
-
тригери
-
курсори
-
оновлювані подання (представлення)
-
інформаційна схема (так званий системний словник, що містить метадані).
-
підтримка SSL
-
кешування запитів
-
вкладені запити SELECT
-
підтримка реплікації
-
повноцінна підтримка Юнікоду (UTF-8 і UCS2)
-
сегментування таблиць
-
тощо.
Адміністрування СКБД MySQL найкраще проводити за допомогою програми phpMyAdmin.
phpMyAdmin – веб-застосунок з відкритим кодом, написаний на мові PHP, представляє собою веб-інтерфейс для адміністрування СКБД MySQL. phpMyAdmin дозволяє через браузер здійснювати адміністрування сервера MySQL, запускати команди SQL та переглядати вміст таблиць і баз даних. Система користується великою популярністю у веб-розробників, оскільки дозволяє керувати СКБД MySQL без безпосереднього вводу SQL команд, надаючи дружній інтерфейс, Рис. 2.1.
Рисунок 2.1 – Інтерфейс програми phpMyAdmin
Програма розповсюджується під ліцензією GNU General Public License і тому інші розробники інтегрують його у свої проекти, у тому числі у XAMPP та Denwer.
Експорт БД виконується за допомогою вкладки Експорт. Результатом буде дамп БД, Рис. 2.2, який являє собою набір SQL (DDL) інструкцій.
Рисунок 2.2 – Дамп БД
Щоб перенести БД на інший сервер необхідно виконати SQL-запит, тілом якого буде дамп бази даних.
Проводити розробку веб-сервісу було вирішено на мові програмування PHP. Велика різноманітність функцій PHP дають можливість уникнути написання багаторядкових призначених для користувача функцій на C або Pascal. Ця мова програмування має інтерфейси до більшості баз даних. важливою перевагою PHP є те, що ця мова належить до інтерпретованих. Це дозволяє обробляти сценарії з достатньо високою швидкістю. За деякими оцінками, більшість PHP-сценаріїв (особливо не дуже великих розмірів) обробляються швидше за аналогічні їм програми, написані на Perl. Проте, щоб не робили розробники PHP, виконувані файли, отримані за допомогою компіляції, працюватимуть значно швидше — в десятки, а іноді і в сотні разів. Але продуктивність PHP цілком достатня для створення цілком серйозних веб-застосунків. Саме цим і зумовлений мій вибір. У проекті використовується модуль PHP версії 5.2.1. PHP — мова, яка може бути вбудована безпосередньо в html-код сторінок, які, в свою чергу коректно будуть оброблені PHP -інтерпретатором. Механізм РНР просто починає виконувати код після першої екрануючої послідовності (<?) і продовжує виконання до того моменту, коли він зустріне парну екрануючу послідовність (?>).
Велика різноманітність функцій PHP дають можливість уникнути написання багаторядкових призначених для користувача функцій на C або Pascal.
Наявність інтерфейсів до багатьох баз даних в PHP вбудовані бібліотеки для роботи з MySQL, PostgreSQL, mSQL, Oracle, dbm, Hyperware, Informix, InterBase, Sybase, через стандарт відкритого інтерфейсу зв'язку з базами даних (Open Database Connectivity Standard — ODBC) можна підключатися до всіх баз даних, до яких існує драйвер.
Мова РНР здаватиметься знайомою програмістам, що працюють в різних областях. Багато конструкцій мови запозичені з С, Perl. Код РНР дуже схожий на той, який зустрічається в типових програмах на С або Pascal. Це помітно знижує початкові зусилля при вивченні РНР. PHP — мова, що поєднує переваги Perl і С і спеціально спрямована на роботу в Інтернеті, мова з універсальним і зрозумілим синтаксисом. І хоча PHP є досить молодою мовою, вона здобула таку популярність серед web-програмістів, що на даний момент є мало не найпопулярнішою мовою для створення веб-застосунків (скриптів).
Стратегія Open Source, і розповсюдження початкових текстів програм в масах, безсумнівно справили благотворний вплив на багато проектів, в першу чергу — Linux хоч і успіх проекту Apache сильно підкріпив позиції прихильників Open Source. Сказане відноситься і до історії створення РНР, оскільки підтримка користувачів зі всього світу виявилася дуже важливим чинником в розвитку проекту РНР.
Ухвалення стратегії Open Source і безкоштовне розповсюдження початкових текстів РНР надало неоціниму послугу користувачам. Додатково, користувачі РНР в усьому світі є свого роду колективною службою підтримки, і в популярних електронних конференціях можна знайти відповіді навіть на найскладніші питання.
Ефективність є дуже важливим чинником при програмуванні для середовищ розрахованих на багато користувачів, до яких належить і web. Важливою перевагою PHP є те, що ця мова належить до інтерпретованих. Це дозволяє обробляти сценарії з достатньо високою швидкістю. За деякими оцінками, більшість PHP-сценаріїв (особливо не дуже великих розмірів) обробляються швидше за аналогічні їм програми, написані на Perl. Проте, щоб не робили розробники PHP, виконувані файли, отримані за допомогою компіляції, працюватимуть значно швидше — в десятки, а іноді і в сотні разів. Але продуктивність PHP цілком достатня для створення цілком серйозних веб-застосунків.
Всі сценарії оформляються у вигляді блоків коду. Ці блоки можуть бути поміщені в HTML-код, але відділені від нього відповідними обмежувачами. Код PHP в HTML повинен знаходитись між початковим тегом <?php та кінцевим ?> (або між <script language="php"> та </script>) Бажаним варіантом виділення PHP коду є варіант <?php ?>, оскільки саме такі початковий та кінцевий теги дозволять використовувати PHP код в документах, які відповідають правилам XML. Також можна користуватися скороченим записом: <? ?> (інколи потрібно активізувати даний стиль внісши вручну зміни в файл php.ini: змінна short_open_tag повинна мати значення On) і записом в стилі ASP: <% %> (в php.ini змінна asp_tags повинна мати значення On). Проте стиль ASP не рекомендується і очікується, що він буде відсутній у PHP6.