שרת יישומים

שרת יישומים (באנגלית: Application server) הוא שרת אשר מריץ רכיבי תוכנה המהווים את הלוגיקה העסקית ביישומים מבוזרים. לעיתים קרובות רואים בשרת יישומים חלק מיישום הבנוי בארכיטקטורת שלוש שכבות. יישום כזה מורכב מממשק משתמש גרפי, משרת המספק את הלוגיקה העסקית (הוא שרת היישומים), ומשרת בסיס נתונים.

שרת יישומים מספק ליישומי תוכנה שירותים כדוגמת אבטחת מידע, שירותי נתונים, תמיכה בטרנזקציות, איזון עומסים וניהול של מערכות מבוזרות גדולות. מונח זה משמש לעיתים קרובות בהקשר לשרתי רשת התומכים ב-Java Enterprise Edition. עם זאת, השימוש במושג אינו מוגבל רק ל-Java.

== יתרונות של שרתי יישומים ==
* נכונות ועקביות (integrity) של הנתונים והקוד: על ידי ריכוז הלוגיקה העסקית על גבי שרת אחד או על מספר קטן של מכונות שרתים, ניתן להבטיח עדכונים ושדרוגים של היישום עבור כל המשתמשים. אין סכנה שלגרסאות ישנות של היישום תהיה גישה אל הנתונים או יכולת לשנות אותם בצורה מיושנת ולא תואמת.

* קונפיגורציה מרוכזת: שינויי קונפיגורציה ביישום, כדוגמת העברת שרת בסיס נתונים או הגדרות המערכת, יכולים להתבצע באופן מרוכז.

* אבטחת מידע: כאשר ספקי שירות יכולים לנהל את הגישה לנתונים ולחלקים מהיישום עצמו דרך נקודה מרכזית אחת, דבר זה נחשב ליתרון מבחינת אבטחת מידע. בצורת עבודה כזאת, האחריות לאותנטיקציה מועברת משכבת הלקוח שעלולה להיות לא בטוחה, אל שכבת השרת וזאת מבלי לחשוף את שכבת בסיס הנתונים.

* ביצועים: על ידי הגבלת התעבורה ברשת לתעבורה של שכבת הביצועים (performance-tier), מודל השרת-לקוח משפר את הביצועים של יישומים גדולים בסביבות הפועלות בתנאי עומס כבדים.

* עלות הבעלות הכוללת (TCO): באופן תאורטי, השילוב של היתרונות שצוינו עד כה יכול להביא לחיסכון בעלויות עבור ארגון המפתח תוכנות enterprise. עם זאת, במציאות, האתגרים הטכניים של כתיבת תוכנות התואמות לפרדיגמה הזאת, יחד עם הצורך בביזור התוכנה על מנת להפיץ את הקוד לצד הלקוח, סותרים במידה מסוימת את היתרונות הנ"ל.

* תמיכה בטרנזקציות: טרנזקציה היא יחידת פעילות בה עדכונים שמתבצעים על נתונים (על גבי אותו מקור נתונים או על כמה מקורות מבוזרים), יכולים להיעשות בצורה אטומית (כיחידת עבודה נפרדת).

* משתמשי קצה יכולים להפיק תועלת מהתנהגות סטנדרטית התקפה על פני כל המערכת, מקיצור זמני פיתוח ומהפחתת עלויות. מאחר שהשרת מייצר חלק גדול מהקוד, מתכנתים יכולים להתמקד בפיתוח הלוגיקה העסקית במקום בהקמת תשתיות.

== שרתי יישומים ל-Java ==
Java Enterprise Edition (או בקיצור, Java EE) מגדירה סט מחייב של תכונות (features) וממשקי תכנות יישומים (API), המהווים את הליבה של שרתי יישומים ל-Java. הגדרות אלו נבעו מהעבודה של ה-Java Community Process. ההגדרות של שרת יישומים עבור Java EE הן מאוד ספציפיות; המפרטים שכלולים במסגרת הגדרות אלו הם מסמכים רשמיים, ושרתי יישומים חייבים לעמוד בדרישות שלהם על מנת לקבל אישור תאימות ל-Java EE.

דוגמאות לשרתי יישומים בולטים ל-Java:

שרתי יישומים מסחריים, לא בקוד פתוח:
* WebLogic של אורקל
* WebSphere של IBM

שרתי יישומים בקוד פתוח:
* אפאצ'י טומקט (לא כולל תמיכה בכל המפרטים של Java EE. מיועד לעבודה עם servlets ו-JSP)
* JBoss של Red Hat
* Geronimo של קרן התוכנה אפאצ'י
* TomEE של קרן התוכנה אפאצ'י
* GlassFish של אורקל

== פלטפורמת NET. ==
בעולם של מיקרוסופט, מערכת ההפעלה Windows Server ביחד עם הטכנולוגיות של פלטפורמת דוט-נט משמשים על תקן שרת יישומים, שם מציבים את יישומי שכבת הביניים (middle-tier) ותשתיות השירותים.

קיימות גם חברות צד-שלישי המפתחות שרתי יישומים מבוססי דוט-נט. לדוגמה: פרויקט Mono של חברת Novell, שרת היישומים Base4 ושרת היישומים TNAPS.

== שרתים אחרים ==
* שרתי יישומים ל-PHP משמשים לצורך ניהול והרצה של יישומי PHP. שרת Zend של חברת Zend Technologies מספק פונקציונליות של שרת יישומים עבור יישומים מבוססי PHP.
* קיימות תוכנות אחרות אשר מתארות את עצמן כשרתי יישומים, כדוגמת Appserver ו-Spring Framework.
* שרת היישומים [http://barracudaserver.com/ Barracuda] היא ספריית C אשר נועדה להטמעה בתוך תוכנות מחשב אחרות. כאן צד השרת של יישומי ווב מתוכנן בשפת Lua.

== ראו גם ==
* שרת HTTP
* ארכיטקטורה רב-שכבתית
* Java Enterprise Edition

== קישורים חיצוניים ==
* [http://searchsqlserver.techtarget.com/definition/application-server הגדרת המושג באתר WhatIs.com] 

קטגוריה:סוגי שרתים
קטגוריה:ארכיטקטורת תוכנה