יום רביעי, 25 במרץ 2015

רשמים מכנס רברסים 2015 [פוסט אורח]

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

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

אז מה זה רברסים? למי שלא מכיר -  פודקאסט ישראלי (http://www.reversim.com/) בנושאי תוכנה שמשדרים אורי להב ורן תבורי מאז 2008. הפודקאסט הזה הוא אחד הגורמים שהשפיעו המון על הסטרטאפים הישראלים שקמו בשנים האחרונות, משום שהוא נתן את הטון לשיתוף ידע ואוירה קהילתית.

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

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




קצת על הנוכחות הנשית בכנס

היה לנו מספר עגום ביותר של נשים נוכחות (לדעתי לא יותר מ 20, כשמספר הרשומים בכל יום עבר את ה 300).

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

את הביתן של Rails Girls ארגנו אילונה ונטלי - זהו הסניף הישראלי של Rails Girls שמארגן אירועי קידוד והאקתונים לנשים ולבנות.

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

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

אגב, את הרעיון קיבלתי מכנס על Mobile שהייתי בו בחו"ל לפני כמה שנים. קיבלתי אז מייל כמה ימים לפני הכנס שהזמין אותי ל women's networking lunch. גם שם היינו כ-20 נשים, וישבנו בשני שולחנות, פשוט לאכול יחד ולשוחח.

ולסיום אשתף אתכם בחוויות של משתתפת בכנס טכני בחו"ל שזכתה למשפטים נוסח "את לא תביני...".
לדעתי מצבנו בארץ פחות גרוע.... (=~ יותר טוב).








קצת על הנושאים בכנס


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

ההרצאות ההמעניינות ביותר בעיני היו Architecture Overview על המערכת הקיימת של חברה מסוימת, עם כמה דגשים:
  • איך התפתחה הארכיטקטורה עם הזמן כדי לענות לבעיות (בעיקר scalability אבל לא רק) 
  • עקרונות ותבניות של הארכיטקטורה (והמנצח השנה, טמ-טמ-טמ: Micro-Services !!!) 
  • רכיבי open source מרכזיים בפתרון. עבורי, זזו היתה אחת ההזדמנויות לעשות קורס מזורז בטכנולוגיות החמות והמוכחות ביותר, ברמה של - "שם", "מספר אישי", ו"תפקידך בכוח".
מוטיב נוסף שחזר בכמה הרצאות היה - שפות מבוססות JVM
Closure, שפה פונקציונלית המזכירה את Scheme/LISP, הוזכרה כשפה שנבחרה למימוש אחת המערכות. הרצאה אחת הוקדשה לסקאלה (Scala) ואחת לגרובי (Groovy), כולל טיפים לאיך להכניס את השפות הללו לפרויקט java קיים. לקחתי מההרצאות האלה כמה רעיונות פרקטיים לפרויקט שלנו.

הרצאות ה ignite היו מדליקות - זה רצף של הרצאות קצרות של 5 דקות כל אחת, בעירוב נפלא של נושאים טכניים ו soft skills. למדתי דברים חדשים מההרצאה על HTTP 2.0

לצערי לא נשארתי להרצאות של סוף היום - ביום הראשון הייתה בעצם סטנד אפ, ובשני - אירוע ה hall of shame שבו אנשים מתחרים על הסיפור הבאג המזעזע\מביך\יקר ביותר שיצא תחת ידיהם.



כל השקפים מצטברים לאט בלינק הבא: https://hackpad.com/RS15-Presentations-htx5kKsSeCv
הקלטות של ההרצאות יפורסמות בעתיד.


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






Scaling with micro services - Wix architecture:
  • Clusters divided to end user view (public) / editing / media serving
  • Micro services architecture…but other services can read directly from other services DB
  • No DB transactions at all (only applicative transactions / eventual consistency)
  • Save logic in the editor: Save each page in a separate REST call, where page ID is a hash on the content. Then save the site object , with a list of all pages (new IDs) to complete the “transaction”
  • Media is stored in several places: CDN + Google cloud + amazon, and fallback logic to all locations. If everything fails – media is loaded from Wix servers.
  • JS code renders a json configuration object – avoid server side HTML rendering for maximum scale. 4 servers serve all of Wix traffic.
  • SEO content requires server side HTML rendering and for that they are a separate cluster of 12 servers.

Some limitations\challenges in the microservices architecture
  • Debugging is not easy
  • They implemented no dependency management between the services
  • API versioning, as APIs (within their version) do not change. Need forward + backward compatibility

















Reactive by Example

Slides are here

The reactive manifesto describes a common pattern for distributed systems:

A reactive system is:
  • Responsive - requires quick responses. predicted response time + QoS (Quality of Service).
  • Resilient - remains responsive even in case of a system failure. Failure is to be expected. Almost a "1st class citizen" in the system's design.
  • Elastic - can grow up/down in scale, according to traffic's requirements.
  • Message-Driven - asynchronous, loosely coupled, messages
A “metrics collecting system” was described as an example of a reactive pattern system.
Open source components mentioned, that were used:














MicroServices and Event-Driven architecture with Clojure and Kafka

The business is to analyze marketing campaigns on mobile applications.
This was another example of a system architecture rapidly scaling rapidly (during 1.5 years) from:
10+services, 250M events\day, 5 servers+3DBs

into:
100+ services, to 2.5B events a day, 200 servers+20DBs

Architecture highlights:
  • All raw data is stored in S3
  • Services communicate with events, IO is non-blocking
  • Event stream is using Kafka (high scale messaging system)
  • key attribute is that the event can be consumed by multiple consumers and is not erased from the queue.
  • A “conveyor belt” analogy
  • Not fast enough for real-time response (OK for this use case)
Other elements in their architecture:
  • Clojure as programming language (see below). Motivation: JVM-based, enforces functional paradigm.
  • Consul for service discovery
  • Docker for service deployment
  • Statsd for JVM metrics
  • Testing is done directly on production systems (no test systems!!!)












JVM-based languages

In 3 different lectures they addressed the next generation of JVM-based languages, after Java.

The common of all of them:
  • All Running on JVM and compile to bytecode, 
  • Leveraging one of the best runtime engines that exist today
  • Compatible with other development done in Java

Clojure
  • Enforce functional paradigm.
  • Suitable for sequence-based processing, very suitable for event processing.

Scala
  • Everything is an expression (not a statement)
  • Remove a lot of coding overhead (“boilerplate code”)
  • Strong collection framework
  • Functions are first-class objects (Like JS)
  • Option – a cool way to eliminate the need to handle null in your code (Option is an array of size 1 or 0, enforcing you to always take into consideration the fact that the value may not exist there)\
  • Traits – partially implemented interfaces, a good way to model effective multiple inheritance
  • Lazy evaluation built into the language, thus preventing the need to code if (debugLevel>INFO)
  • Domain specific languages. E.g. a powerful tests
  • Java 8 took many great ideas from Scala but still there’s an inherent gap 

Groovy
  • Java code is also groovy code so you can have a gradual adoption
  • You can have a java interface and groovy implementation (Need to implement Groovy Loader)
  • JSonSlurper – parse json objects, and then access them in an JS-like way (addressing the names of the properties)
  • RESTClient/HttpBuilder for easier work with HTTP/REST
  • Now to become part of Apache foundations


Recommendations how to add a new JVM-based language to an existing project
  • In the tests
  • For new projects
  • In a specific layer
  • For an isolated component



Other information fragments \ Interesting technologies


Storm in under a second
Storm in a framework for event streaming and processing, implemented in Java.
Its deployment can be done on a single machine
The lecture was about how to achieve a controlled response time with an events framework, which theoretically does not guarantee response time


HTTP 2.0
How it overcomes many limitations in how browsers work today
Good source is: http://daniel.haxx.se/http2/http2-v1.11.pdf


Gamification of code reviews
An open source plugin for git hub providing a count of how many people commented on code differences, including leaderboard
https://github.com/tzachz/github-comment-counter
Advantage – publish the people who do the most code reviews. Gamification!!!



סיכום

ליאור: תודה רבה לרחלי אבנר על הפוסט! כן ירבו.




תגובה 1:

  1. תודה רבה רחלי, היה נעים מאוד להפגש ולהכיר!

    השבמחק