LINKEDIN ประทับใจ SPRING

May 18th, 2009 by roofimon Leave a reply »

แปลมาจากเอกสาร LinkedIn Ensure Positive User Experience with Spring

LinkedIn ออนไลน์เน็ทเวิร์คที่มีคนใช้มากกว่า 34 ล้านคนทั่วโลก LinkedIn มีบริการหลักคือการเชื่อมโยงคนด้วยรายละเอียดและความสามารถทางธุรกิจเข้าด้วยกันทำให้ผู้คนและบริษัทต่างๆสามารถเชื่อมโยงถึงกันได้ในรูปแบบที่ไม่เคยมีมาก่อน ทำให้ LinkedIn กลายเป็นผู้นำทางด้านเน็ทเวิร์คทางธุรกิจ
ความท้าทาย
กระบวนการพัฒนาซอฟท์แวร์รูปแบบเดิมนั้นจะเน้นไปที่การผูกคอมโพเนนท์ต่างๆเข้ากันด้วยมือ แต่เมื่อเวลายังคงเดินไปและเทคโนโลยีเปลี่ยนแปลงไปทำให้บริษัทตัดสินใจเปลี่ยนมาใช้สปริง ผู้นำอย่างไม่เป็นทางการในเรื่องของแพลทฟอร์มแบบเอ็นเทอร์ไพรส์ใน java และความท้าทายใหม่ก็คือจะเปลี่ยนแปลงสิ่งเดิมที่มีอยู่ได้อย่างไร” มีโค้ดปริมาณมหาศาลที่ถูกพัฒนาขึ้นด้วยวิธีการเดิมๆ ซึ่งสามารถนำมา reuse ได้น้อยมาก” เสียงจาก Yan Pujante, Distinguished Software Engineer และหนึ่งในผู้ก่อตั้ง LinkedIn ”แน่นอนเมื่อระบบ เติบโต ขึ้นทุกวันส่งผลให้การร้อยคอมโพเนนท์ด้วยมือหรือการทำ hard-code wiring นั้นเป็นเรื่องที่สร้างปัญหามากในแง่ต่างๆ ไม่ว่าจะเป็นการดูแลระบบ การจัดการเรื่องคอนฟิกกูเรชั่นต่างๆ” Pujante ได้ยกตัวอย่างการทำงานขึ้นมาหนึ่งอย่างที่เป็นงานที่ยากมากเมื่อเราทำด้วยมือ นั่นคือการปิดโพรเซสของแอพพลิเคชั่นในขณะที่ยังมีโพรเซสอยู่ในคิว ดังนั้นการทำ clean shutdown จึงเป็นเรื่องที่แทบจะเป็นไปไม่ได้ในการทำงานแบบเดิม เนื่องจากเราไม่รู้ว่ามีคอมโพเนนท์อะไรเชื่อมต่ออยู่บ้าง ดังนั้น LinkedIn จึงต้องการ อะไรบางอย่างที่สามารถเข้ามาช่วยแก้ปัญหาเหล่านี้ นอกจาก Spring แล้วทางทีมงาน LinkedIn ก็ยังสนใจ EJB ด้วยเช่นกัน
“หลังจากศึกษาแล้วทางทีมงาน ตัดสินใจอย่างทันควันว่าจะไม่ใช้ EJBs” Pujante กล่าว “มาตรฐานดู ยึ่งยากและซับซ้อนมากและมันจะก่อให้เกิดการเปลี่ยนแปลงกับประบวนการทำงานอย่างมหาศาลในกรณีที่เลือกใช้ EJBs แต่อย่างไรก็ตาม เรายังคงต้องเลือกแพลทฟอร์มใหม่ อยู่ดีเพราะเรายังต้องแก้ปัญหาเดิมๆของเราให้ได้”
 ทางออกและเซอร์วิส
“Spring เองนั้นถูกพัฒนาขึ้นเพื่อตอบโจทย์ในเรื่องปัญหาความซับซ้อนของ EJBs เพื่อให้เราสามารถพัฒนาระบบได้ด้วยแนวทางที่เรียบง่ายแต่ทรงพลัง” Pujante กล่าว ดังนั้นปัจจุบันนี้ทุกๆแอพพลิเคชั่นของ LinkedIn จะถูกพัฒนาด้วย Spring ทั้งหมดตั้งแต่ใช่เพื่อเป็นโครงสร้างพื้นฐานของระบบ ไปจนถึงผูก Spring เข้ากับกระบวนการพัฒนาของบริษัทอีกด้วย โดยที่ LinkedIn จะใช้ Spring Core, Spring IoC และ SpringMVC เป็นหลักในการพัฒนาระบบนอกจากนี้ในอนาคตยังมีแผนที่จะใช้ Spring DM เพื่อให้เข้ากับแผนในการเดินทางไปสู่มาตรฐาน OSGi(Open Service Gateway Initiative) ในอนาคตอีกด้วย
LinkedIn ได้ทำสัญญากับ SpringSource บริษัทที่อยู่เบื้องหลัง SpringFramework เพื่อว่าจ้างให้เป็นเทคนิคอลซัพพอร์ท
สิ่งนี้ให้ประโยชน์อะไรกับ LinkedIn บ้าง ประการแรกคือคนที่เขียนและพัฒนา spring ส่วนมากแล้วทำงานให้กับ SpringSource
โดยสามารถระบุได้ว่า 97% ของโค้ดทั้งหมดถูกเขียนด้วยพนักงานของ SpringSource ดังนั้นแล้ว “ในกรณีที่เกิดปัญหา สิ่งที่เราต้องทำคือส่ง ticket กลับไปที่SpringSource และเราจะได้รับบริการกลับมาอย่างรวดเร็ว” Pajante กล่าว “นอกเหนือสิ่งอื่นใดพนักงาน SpringSource ทุกคนล้านเป็นคนฉลาดและมีความรู้ในสิ่งที่ทำ ดังนั้นเขาเหล่านั้นสามารถเข้าใจถึงที่มาของปัญหาได้อย่างถึงแก่นแท้ และรู้ว่าจัดการกับมั้นได้ด้วยวิธีใด”
ประโยชน์ที่ได้รับ
Spring ได้นำสิ่งดีๆและประโยชน์ในแง่มุมต่างๆมาสู่ LinkedIn ดังนี้

ทำงานได้เร็วมากขึ้น
ด้วยการใช้ Spring ทำให้ทีมพัฒนาไม่ต้องทำการเขียนโค้ดในส่วนของการทำการเชื่อมต่อคอมโพเนนท์เอง “Spring เริ่มเข้ามาช่วยเราในเรื่องของการ ทำ boot strapping และประโยชน์ต่างอีกหลายแง่มุมในแง่ของการเพิ่มประสิทธิภาพของการผลิต” Pujante กล่าว ซึ่งการทำงานของ Spring นี้สามารถเข้ามาช่วยเราในเรื่องของการปิดแอพพลิเคชั่น session ได้อย่างที่กล่าวไว้ในครั้งแรก “ถ้าเราต้องการเขียนโค้ดในการปิดโพรเซสเองทั้งหมด นั่นคือฝันร้าย แต่ Spring เข้ามาจัดการกับปัญหานี้ได้อย่างสวยงาม”

ความประทับใจสุดยอดของผู้ใช้
วิธีการพัฒนาแอพพลิเคชั่นของ Spring ไม่เพียงแต่จะช่วยให้ LinkedIn พัฒนาได้อย่างมีประสิทธิภาพเท่านั้น Spring ยังสร้าง
ความประทับใจต่อผู้ใช้ได้ดีมากขึ้นด้วย ยกตัวอย่างเช่นการปิดแอพพลิเคชั่น Pujante กล่าวว่าถ้าปราศจาก Spring แล้วมันจะเป็นเรื่อง
ยากมากที่เราจะยืนยันได้ว่าจะไม่มีอะไรถูกเปลี่ยนในหน่วยความจำในระหว่างที่ทำการปิดระบบ และช่วงที่ข้อมูลบนแคชถูกเขียน
ลงไปในระบบไฟล์ ซึ่งกระบวนการนี้กินเวลานานช่วงเวลาหนึ่ง นอกจากนี้ Pujante ยังคงอะบายเพิ่มเติมต่อไปอีกว่ากระบวนการการปิด
จะทำด้วยขั้นตอนที่แน่นอนดังนี้

  1. หยุดรับ request ทั้งหมดจากผู้ใช้ภายนอก
  2. หยุดกระบวนการทำงาานที่เป็นแบบ asynchronous update
  3. ขั้นตอนสุดท้ายคือเขียนข้อมูลบนแคชลงไฟล์

“ในกรณีที่แอพพลิเคชั่นถูกปิดแบบไม่สมบูรณ์สิ่งที่จะเกิดขึ้นคือ อาจจะมีผู้ใช้บางคนที่กำลังแก้ไขข้อมูลส่วนตัว หรือกด link และได้ผลกลับมาเป็นหน้าแสดงเออร์เรอร์ แทน ซึ่งสิ่งนี้จะส่งผลกระทบในด้านไม่ดีโดยตรง ต่อความรู้สึกของผู้ใช้” “แต่วิธีการและกระบวนการพัฒนาของ spring ช่วยให้ LinkedIn สามารถแก้ไขปัญหาเรื่องนี้ได้ดีและส่งผลให้ผู้ใช้มีความรู้สึกที่ดีต่อ LinkedIn เอง”"เนื่องจากธุรกิจของเราอยู่ได้ด้วยเวบไซท์ ดังนั้นถ้าไม่มีเวบไซท์ก็ไม่มีธุรกิจ ดังนั้นหน้าที่หลักของเราคือทำให้ผู้ใช้ มีความรู้สึกที่ดีต่อเวบของเรา”Spring คือหนึ่งในปัจจัยที่ทำให้เราตอบคำถามเหล่านี้ได้

คุณภาพของแอพพลิเคชั่นที่ดีขึ้น

การเตรียมเครื่องมือต่างๆในการทำ test มาให้ทำให้เราสามารถทำ test ได้อย่างง่ายดาย ซึ่งส่งผลให้คุณภาพของแอพพลิเคชั่นดีมากขึ้นด้วย

มีสมาธิกับ Business Logic ได้ดียิ่งขึ้น

เนื่องจาก Spring เป็นระบบพื้นฐานที่ถูกสร้างขึ้นมาอยางดีแล้วทำให้ developers ของ LinkedIn สามารถมีสมาธิกับงานที่ตัวเองต้องรับผิดชอบได้มากขึ้น

ก้าวสู่ OSGi ได้อย่างมั่นใจ

LinkedIn มีแผนที่จะย้ายไปสู่ OSGi ด้วยการใช้ SpringDM ซึ่งเป็นเครื่องมือที่ช่วยให้เราพัฒนาแอพพลิเคชั่นด้วยแนวคิดของ OSGi ได้ง่ายขึ้นโดยสำหรับ LinkedIn แล้วการใช้ OSGi จะช่วยให้เราสามารถแยกส่วนต่างๆออกเป็น Modules ได้ง่ายขึ้น จึงทำให้สามารถทำการ เพิ่ม เปลี่ยน หรือลบ คอมโพเนนท์เหล่านั้นได้แบบ ไดนามิกส์ “OSGi คือเทคโนโลยีที่สมบูรณ์แบบ” Pajunte อธิบาย “ผมเองชอบ Sping DM เนื่องจากมันคือการทำให้เราใช้งาน OSGi ได้อย่างง่ายดายซึ่งถ้าปราศจาก Spring แล้วมันคงเป็นเองยากมากที่เราจะทำการย้ายสิ่งต่างจากการทำงานในรูปแบบเดิมไปสู่ OSGi แต่เนื่องด้วยระบบของเราถูกสร้างอยู่บนพื้นฐานของ spring ทำให้เราสามารถก้าวไปสู่โลกของ OSGi ได้อย่างมั่นใจ” นอกจากนี้ “Spring DM ยังยอมให้เราใช้ OSGi ในรูปแบบที่เราไม่ต้องยึดติดกับ OSGi ได้อีกด้วย เนื่องจากในกรณีที่เราต้องทำ OSGi ที่ต้องยึดติด กับ OSGi แล้ว มันจะทำให้เราทำการ test แอพพลิเคชั่นได้ยากมาก ในทางกลับกันถ้าเราใช้ SpringDM เราจะสามารถสร้าง OSGi ในรูปแบบของ POJO ซึ่งจะช่วยให้เรา test สิ่งเหล่านั้นได้ง่ายยิ่งขึ้น”

Advertisement

4 comments

  1. ผมเคยศึกษา architecture ของ linkedin มาคร่่าวๆ มาได้ประมาณ 2 ปีเนื่องจากมันใช้ java technology เกือบทั้งหมด

    เข้าไปดูจึงรู้ว่ามันใช้ Spring แถมบอกว่าใช้ Spring JDBC ด้วยนะ เราไม่ใช้ OR เพราะว่ามันส่งผลต่อการขยายระบบ

    และเคยไปดูในส่วนของการ config ต่างๆ มันดันเขียน custom config tag เองหมดเลย เท่มากๆ

    ส่วนเรื่อง oSGi นี่มีการทำ POC ตั้งแต่แรกๆ ของ SpringDM ยังเป็นวุ้นอยู่เลย ตอนนี้อาจจะเริ่มเอามาใช้กันแล้ว

    ส่วนเรื่องที่น่าสนใจของ LinkedIn คือการสร้าง Graph ของ Networking ภายในระบบ ทีมันทำการสร้างบน memory ซึ่งใช้ resources มหาสาลมากๆ

    ที่สำคัญ LinkedIn มันใช้ Grails ด้วยนะครับ อิอิอิ ขายของ ดูได้จากที่นี่ ไม่รู้ว่าปัจจุบันเปลี่ยนหรือยัง
    http://blog.linkedin.com/2008/06/11/grails-at-linkedin/

    ส่วนเรื่อง Architecture ของ LinkedIn ลองอ่านคร่าวๆ ได้ที่นี่ครับ ถึงจะเก่าหน่อยแต่ยังเก๋าครับ
    http://hurvitz.org/blog/2008/06/linkedin-architecture

    สิ่งที่น่าสนใจคือ Software ครับ ชื่อมันคุ้นๆ ทั้งนั้นเลยว่ามั้ยครับ
    * Tomcat and Jetty as application servers
    * Oracle and MySQL as DBs
    * No ORM (such as Hibernate); they use straight JDBC
    * ActiveMQ for JMS. (It’s partitioned by type of messages. Backed by MySQL.)
    * Lucene as a foundation for search
    * Spring as glue

    ว่าแล้วไปดู hi5 กันด้วยดีไหมว่ามันใช้ java ยังไงบ้าง ???

    พูดถึง hi5 เลยเอามาให้ดูว่า hi5 มันใช้อะไรบ้าง ส่วนใหญ่ก็ opensource ด้วยนะ และใช้ Struts, Spring, iBatis ด้วยนะ อิอิ

    # Linux Servers running SuSE Enterprise Linux
    # Apache and Lighttpd web servers
    # PostgreSQL, a highly scalable database
    # Squid for web acceleration
    # Resin and Tomcat Java Application Servers
    # Struts, our MVC platform
    # iBatis – for Object Relational Mapping
    # Spring – Java Application Framework
    # Memcached, where we cache as much as possible.
    # Lucene indexing and search engine
    # Enunciate web service deployment framework

    ที่มาของ Hi5 :: http://www.hi5networks.com/blog/2007/08/open_source_at_hi5.html

  2. yahoo says:

    อ่านเพลินดีครับ

    ผมไม่เคยใช้ spring

    อ่านไปแล้วชักสนใจแล้วสิ

  3. dekpump says:

    พี่ roof ผมมาตามอ่านเหมือนเดิม

  4. ortisticgenius says:

    เป็นประโชชน์จังเลยครับ ขอขอบคุณ ผู้แปล และ ความเห็นที่1 ด้วยนะครับ ^^

Leave a Reply

You must be logged in to post a comment.