חוויות ממפגש מאוחד של קבוצת המשתמשים עם Juval Lowy בבית HP

27 בדצמבר 2007

4 תגובות

המוטו של המפגש היה. "זה נראה כמו Class רגיל של C#, זה נוצר כמו Class רגיל של C#, זה נקרא כמו Class רגיל של C# אבל, אתה מקבל במתנה מאחורי הקלעים גם…", וכאן באה רשימה שלמה של דברים ש WCF נותן לך במתנה רק בגלל שאתה משתמש בו. אמינות, אבטחה, תמיכה בטרנסאקציות, מצערת אוטומטית, תור אוטומטי, מונים, Trace, הצפנה, זיהוי נכון של הקורא ועוד ועוד ועוד. כל תכונה הוסברה וכל תכונה הודגמה ונשארו עוד הרבה יכולות שקצרה היריעה להראות אותם ולהסביר אותם. אין ספק ש 150 המשתתפים שהגיעו לשמוע, יצאו משם עם תמונה יותר ברורה של מה WCF יכול לעשות עבורם אם רק יפעילו אותו.

נושא שחזר ועלה במפגש קבוצת המשתמשים (וגם בסיום יום העיון שהיה באותו יום) היה נושא הביצועים. כמה עולה לנו להשתמש ב WCF. התשובה שניתנה, שהמחיר שאתה משלם הוא זניח יחסית לתמורה, לא מצאה חן בעיני חלק מהאנשים.

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

אם אתה מנהל פיתוח ואתה הולך ושואל את המפתחים שלך מה התפקיד שלהם במערכת. אם התשובה שאתה מקבל היא "אנחנו כותבים קוד", יש לך בעיה. המפתח לא אמור "לכתוב קוד", הוא אמור לייצר מוצר. לצורך ייצור המוצר אולי הוא צריך לכתוב קוד, אבל המטרה היא המוצר ולא הקוד. הקוד הוא האמצעי ולא המטרה.

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

Juval הדגים קריאת WCF שהפעילה את כל הדברים שרק אפשר להפעיל ב WCF כל האופציות הכי כבדות שרק יש ב WCF, וקיבל 100 קריאות בשניה על מחשב נייד, שאינו שרת, ואין לו הרבה יע"מ-ים. האם עשר מילי שניות תקורה זה הרבה או מעט ? למי שכותב Device Driver זה אולי הרבה. אבל לשרת של בנק בינוני שאמור לטפל בממוצע בעשר פעולות בשניה, זה לא הרבה. אם הקריאה בשרת כוללת בתוכה לוגיקה עיסקית המחייבת כתיבה לשרת מסד נתונים, זו אפילו תקורה זניחה מאד יחסית לשאר הפעולות.

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

משפט המפתח פה היה, אם אתה יכול להרשות לעצמך להשתמש בדוט נט על מנת לפתח את היישום שלך, אתה גם יכול להרשות לעצמך להשתמש ב WCF באותה מידה כי זה יעלה לך יותר לא להשתמש בו. יעלה יותר גם בגלל שמה שתעשה ירוץ יותר לאט ממה ש WCF נותן לך וגם בגלל שתבזבז המון זמן פיתוח על המצאה מחדש של הגלגל. 

הוסף תגובה
facebook linkedin twitter email

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *

4 תגובות

  1. Asher F27 בדצמבר 2007 ב 23:11

    מה שאתה אומר לא נכון. אין סוג אחד של בעיה ואין פיתרון אחד שמתאים להכל. יש מערכות שונות עם אילוצים שונים.

    יש מתארים בהם הביצועים ומהירות העברת המידע ברשת מאד חשוב. וכל מילי שניה של עיקוב משמעותית.
    מבהחינה הזו הבעיה היא ב overhead שאתה מעביר מעל הרשת (אין הבדל במקרה הזה בין native ל managed ).
    תחשוב על מערכת שתפקידה להגיב לארועי אמת בעולם האמיתי (לא מערכת מידע) – אין אפשרות במערכות להשמש ב WCF בגלל ה overhead שהוא מביא.

    יובל, עם כל הכבוד, ויש הרבה, עוסק במערכות מידע.
    הוא אומר שאם אתה לא משתמש ב enterprise componetns (יכול להיות שעכשיו זה WCF) אתה כותב "צעצוע"…
    זה רוב השוק של פיתוח תוכנה ב .net וזה בסדר גמור.

    אני מכיר כמה מערכות שכתובות ב .net שעושות כל מיני דברים אחרים ולא משתמשות בטכנולוגיות האלה.
    אפשר רק להבין שמדובר במערכות צבאיות שלא ממש מתאימה לנן ההגדרה "צעצוע", גם אם יובל חושב שהן כאלה בגלל שאין להן WCF/טראנזאקציות/enterprise components.

    הגב
  2. שני רבה28 בדצמבר 2007 ב 10:40

    היה ממש טוב, נהניתי מאוד, היה מצחיק ואיכותי,
    כן ירבו מרצים כאלו בארצנו הקטנה.

    בקשר לויכוחים שלנו על שימוש ב-wcf וכל מיני נושאים אחרים, בשביל זה יש לנו ארכיטקטים וטכנולוגים גדולים שיחליטו למה הם מעוניינים ללכת לכל אחד יש זכות בחירה וראש גדול כדי להחליט.

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

    עכשיו לכו ותבדקו אם אתם צריכים את זה או שזה overkill.
    כל אחד במקומו.

    go juval.

    הגב
  3. GadiM28 בדצמבר 2007 ב 22:38

    הי אשר,
    אני לא יודע מאיפה הבנת ממה שאני כתבתי וממה שיובל אמר ש WCF הוא הפתרון לכל סוגי הבעיות שקיימות בעולם, אם תחזור למה שכתבתי שלוש פסקאות לפני הסוף, תגלה שכתבתי במפורש ש WCF זה לא הכלי לכתיבת Device Drivers וגם יובל התיחס לזה כך. כך שלא ברור לי מה לא נכון במה שכתבתי.
    אני גם לא חושב שכל מערכת צבאית היא אוטומטית Real Time ברמה שמחייבת זמן תגובה של פחות מ 100 מילי שניות (וכמו שיובל הדגים WCF עומד בדרישה של 10 מילישניות שזה פי 10 מזה).
    אני גם מכיר המון מערכות צבאיות חשובות וקריטות שכן עונות להגדרה המלאה של מערכות מידע קלאסיות ודווקא שם הצפנה מובנית ואבטחת משלוח הם דברים שמוכנים לשלם עליהם בהרבה יותר מ 10 מילי שניות.
    ל WCF יש עלות (עלות ולא תקורה) שהיא יותר זולה מהעלות שהיה עולה לך לממש את מה שהוא נותן בעצמך. אתה גם לא חייב לקחת את כל מה שהוא נותן לך ואתה יכול בהחלט לקחת רק את מה שאתה צריך ממה שהוא נותן ולשלם פחות. כך שהשאלה היחידה היא אם אתה צריך את מה שהוא נותן או לא.
    ודרך אגב, אני לא יודע גם מאיפה אתה לוקח את ההנחה שיובל עוסק רק במערכות מידע וש WCF מתאים רק למערכות מידע. זה בערך כמו להשוות בין Enterprize services ל WCF ולומר ש WCF זה השם החדש של Enterprize Services.

    הגב
  4. Asher F30 בדצמבר 2007 ב 18:53

    לא הבנתי ולא כתבתי את מה שאתה מייחס לי ("יובל אמר ש WCF הוא הפתרון לכל סוגי הבעיות שקיימות בעולם")

    אני מתיחס למשפט הזה שלך, ואני מצטט:
    "אם אתה יכול להרשות לעצמך להשתמש בדוט נט על מנת לפתח את היישום שלך, אתה גם יכול להרשות לעצמך להשתמש ב WCF באותה מידה כי זה יעלה לך יותר לא להשתמש בו….."

    בקביעה הזו אני כופר (במערכות מסוג מסוים, במקרים אחרים, מה שאתה אומר מדויק ב 1000%).

    אנחנו לא מדברים על device drivers. לא הזכרתי את זה.
    אנחנו מדברים כל ספריה שנותנת שרותי תקשורת בין תהליכים (בד"כ התהליכים רצים במחשבים שונים).

    לא דיברתי על real time (באף מובן של המילה) דיברתי על זמני תגובה מהירים ועל latency ברשת (LAN בד"כ).
    בוודאי שיש מערכות צבאיות שהן מערכות מידע, צבא הוא ארגון גדול וצריך מערכות כאלה ובודאי ש WCF זו תשתית מעולה למערכות כאלה, לי אין שום ספק בעניין.
    המערכות שאני מדבר עליהן הן בהגדרה לא מערכות מידע. ז"א מערכות שתפקידן להגיב לארועים בזמן אמת, לדוגמא שיגור של טיל, ירוט של טיל, פעולות בלוחמה אלקטרונית וכ'. במערכות כאלה אין, לדוגמא, חשיבות לטרנזרקציות ולהצפנה של מידע (בתוכנה).
    כמו שהבוס שלי נוהג לומר, לא ניתן לבצע rollback לשיגור של טיל 🙂
    שיפור של ביצועי התוכנה במערכות כאלה, מתרגם ישירות ובצורה מיידית ליעילות המבצית של המערכת.
    ולכן, גם אם (אני מצטט) "זה עובד מספיק טוב" , אבל ניתן לשפר את ביצועי התוכנה ב 10% וזה יוסיף (לדוגמא) 5% ליעילות המבצעית של המערכת, זה שווה וצריך לעשות את זה.
    שוב, בסוג המערכות שאני מדבר עליהן.

    לגבי מה שאמרתי על יובל, לא יודע מה הוא עושה ביום יום ולמי הוא מייעץ (אני לא מקבל את דו"ח השעות שלו.. 🙂 ).
    התכוונתי יותר לצד הציבורי שלו, כלומר לנושאים עליהם הוא מדבר והדרך בה הוא מדבר עליהם.

    בפעם הראשונה שהבאת אותו לארץ הייתי ביום העיון (וגם ב UG מייד אחרי),בסדנת ה WCF שערך (הבוס שלי השתתף) בביקרו השני הוא אמר את ההערה שלו (אני אנסה לצטט מהזיכרון):
    If you don't use transactions/enterprise components in your system your are basically building a toy.

    לאמירה הזו התחסתי כשכתבתי את מה שכתבתי. כמובן, בלי שום כוונה לפגוע.

    תקורה היא סוג של עלות. לכן, כאשר אתה אומר שיש ל WCF עלות אתה צריך להסביר למה אתה מתכוון. האם מדובר על עלות פיתוח ? עקומת לימוד ? עלות תחזוקה וכ'
    אגב, ל WCF יש תקורה כמו שלכל רכיב תוכנה שנכתב במטרה לשרת מספר גדול של לקוחות/ישומים יש תקורה. ל .NET יש תקורה, ל windows יש תקורה. וזה בסדר גמור.
    השאלה היא האם תקורה כזו או אחרת של רכיב/סביבה נתונה פוגעת ביכולת של המערכת שאתה מפתח מלעמוד בדרישות (בעיקר בדרישות ביצועים, אבל לא רק).

    הגב