LevelUp! Studio » BarcampBkk3 https://blog.levelup.in.th Experience the new world. Fri, 26 May 2017 10:06:07 +0000 th hourly 1 http://wordpress.org/?v=3.8.1 Scalable architecture https://blog.levelup.in.th/2009/05/26/scalable-architecture/ https://blog.levelup.in.th/2009/05/26/scalable-architecture/#comments Tue, 26 May 2009 08:48:56 +0000 http://blog.levelup.in.th/?p=26 from Barcamp Bangkok 3

ยุคของโครงสร้าง Webserver ได้แบ่งไว้คร่าวๆดังนี้

  1. Genaration #1- เริ่มต้น ยุคประหยัด
    • [ WEB +DB] ในเครื่องเดียว
    • รูปแบบมาตราฐาน ที่ทุกๆคนต้องเคยใช้กันอย่างแน่นอน แต่เมื่อเวปมีคนใช้งานถึงระดับนึง ก็มีความจำเป็นที่ต้องขยับขยายสู่ยุคที่ 2
  2. Generation #2 – เริ่มขยายตัว
    • [WEB] + [DB] แยกเครื่อง
    • จาก 1 เครื่องสู่สองเครื่อง โดยเป็น Webserver เครื่องนึงกับ Database server แยกกัน process ทำงาน
    • เกิดคอขวดการส่งข้อมูลระหว่าง server 2 เครื่อง
  3. Generation #3
    • [WEB] [WEB]… [WEB] + [DB] หลาย web server
    • พลังเงินตรา!  ซื้อเครื่องขยายไปเรื่อยๆ แบ่ง load ไปที่ตัว server
    • ปัญหาคือแยก DB ไม่ได้ เนื่องจากระบบการทำงานจะเปลี่ยนแปลง
  4. Generation #4
    • Replication DB = ทำ Mirror ของ Database เพื่อใช้ในการ SELECT
    • [DB] => [Replication of DB : Read Only]
    • เริ่มมี Database หลายตัว โดยมี Master แล้ว Replication โดย
      • หากจะ READ (SELECT) ให้ไปที่ Replication
      • หากต้อง WRITE (UPDATE,INSERT,DELETE) ไปที่ Master
      • Feature Replication มีอยู่แล้วใน Mysql
  5. Generation #?
    • Memcache => Save ข้อมูลต่างๆลง Memory
    • เนื่องจากการทำงานของ HDD ช้ากว่า RAM มากกว่าหลายร้อยเท่า
      • เก็บข้อมูลที่ใช้บ่อยๆไว้ใน RAM
      • ทำ Farm server Memcache แทน Replication DB
  6. Horizontal Scaling
    • http://farm4.static.flickr.com/3161/2459859342_69ed6b6785.jpg
    • แบบที่เวปใหญ่ๆใช้กัน
    • มี Master DB ไว้ดูว่าข้อมูลอยู่ที่ DB ไหน
    • ข้อเสียคือ Database จะ Join ไม่ได้ ต้องออกแบบเวปใหม่แต่แรก

Note

  • 80 % ของ end-user response time อยู่ที่ส่วน Front-end
    • แต่ถ้าเพิ่มความเร็วส่วน back-end ได้ก็เป็นเรื่องดี
  • เปิด Keep alive ในทุกๆ Hop
    • ข้อมูลจะถูก Cache ไว้ไม่ต้องเรียกใช้หมดทุกรอบ
  • แยก Static ไฟล์ กับ Dynamic
    • ช่วยลด Cookie ที่ต้องส่งไปที่ static ไฟล์ได้
  • Mysql
    • ใช้ Memory table of unimportant data
  • Fulltext search – search แบบ Fulltext
    • Recommend : Sphinx
  • Reverse Proxy
    • Squid – Design สำหรับ Forward Proxy
    • Recommend : Vanish* ( ได้เฉพาะ UTF-8)
  • Big table – Database สำหรับการ Scalable
    • Hadoop ( yahoo พัฒนา opensource )
]]>
https://blog.levelup.in.th/2009/05/26/scalable-architecture/feed/ 0
PHP APC Cache https://blog.levelup.in.th/2009/05/24/php-apc-cache/ https://blog.levelup.in.th/2009/05/24/php-apc-cache/#comments Sun, 24 May 2009 03:33:30 +0000 http://blog.levelup.in.th/?p=21 โดยปกติแล้วตัว Native PHP มี flow การทำงานดังนี้

  1. Scanning and Lexing : ตรวจสอบ syntax error ต่างๆ
  2. Parsing : อ่านความหมายของแต่ละคำสั่ง
  3. Compliation : แปลงเป็น run code
  4. Execution

APC PHP มี flow ดังนี้

  1. APC Hook เช็ค Opcode Cache (hit/miss)
  2. Scaning and Lexing
  3. Parsing
  4. Compilation
  5. APC Hook – store opcode (เก็บเข้า cache)
  6. Execution

Installation

  • http://pecl.php.net
  • (Ubuntu) apt-get install php5-apc

ส่วน Memcache มีทุกๆ ภาษาอยู่แล้ว

]]>
https://blog.levelup.in.th/2009/05/24/php-apc-cache/feed/ 0
Client Hacking https://blog.levelup.in.th/2009/05/24/client-hacking/ https://blog.levelup.in.th/2009/05/24/client-hacking/#comments Sun, 24 May 2009 03:29:57 +0000 http://blog.levelup.in.th/?p=19 XSS (Cross site script) คือมีผู้ฝัง script ไว้ที่ server แล้วมีผู้ใช้มาร้องขอข้อมูลจาก server จากนั้น script ใน server จะถือโอกาสขโมยข้อมูลของเครื่องผู้ใช้ไปเช่น cookie

Impact

  • Cookie Stealing
  • Phishing
  • Port Scanning – ไว้แอบสแกนพวก Private Network ที่อยู่หลัง NAT ได้
  • XSS Shell – hack shell

XSRF (Cross site Request Forgery) คือมีผู้ฝัง script ไว้ที่ server แล้วมีผู้ใช้มาร้องขอข้อมูลจาก server script นั้นจะแอบ request ข้อมูลไปยังอีกเว็บไซต์หนึ่ง โดยที่ผู้ใช้ไม่รู้ตัว (เช่นแอบฝัง iframe ไว้)

HttpOnly คือการกำหนดห้ามไม่ให้ server side script เรียก cookie มาใช้งานได้ สามารถเรียกมาใช้งานได้เฉพาะ static html ธรรมดาเท่านั้น

]]>
https://blog.levelup.in.th/2009/05/24/client-hacking/feed/ 0
Pair Programming https://blog.levelup.in.th/2009/05/24/pair-programming/ https://blog.levelup.in.th/2009/05/24/pair-programming/#comments Sun, 24 May 2009 03:28:21 +0000 http://blog.levelup.in.th/?p=16 Pair Programming เป็นการจับคู่กันเขียน code โดยมีผู้ code เพียงคนเดียว(Driver) ส่วนอีกคนคอยทำหน้าที่บางอย่างเพื่อสนับสนุนการทำงานของคน code(Navigator) แม้จะเป็นการใช้ man hour สองเท่า แล้ว productivity เพิ่มขึ้นไม่ถึง 2 เท่า แต่มีประโยชน์แอบแฝงอื่นๆ มากมาย มักมีเก้าอี้สองตัว จอสองจอช่วยกันดู แบ่งออกเป็น 3 ประเภทได้แก่

  1. Driver – Navigator : เป็นการจับคู่โดยมี Driver เป็นผู้ลงมือ coding และ Navigator เป็นผู้ Review code และ planning สิ่งที่จะต้องทำต่อไป
  2. Mouse-Keyboard : เป็นการจับคู่โดยมีคนหนึ่งจับ Mouse อีกคนจับ Keyboard เพื่อเป็นการเตือนสติว่า “อีกคนยังทำงานอยู่”
  3. Ping-Pong : เป็นการจับคู่โดยมี Driver เป็นผู้ลงมือ coding และ Navigator เป็นผู้ Review code + ทำ Unit Test ของ code ส่วนนั้น

ประโยชน์

  1. ช่วยเร่ง productivity ขึ้นเป็นประมาณ 1.6-1.8 เท่า (ไม่ถึง 2 เท่า) ในเวลาเท่าเดิม
  2. ช่วยลดเปอร์เซ็นต์การเกิด bug ที่จะต้องตามแก้ทีหลัง(โดยเฉพาะอย่างยิ่ง bug โง่) ลงได้เป็นอย่างมาก
  3. สร้างเสริมความสัมพันธ์ ความสามัคคีในองค์กร (Team work)
  4. ลดเวลาการ training Novice ลงเนื่องจากใช้ในการทำงานจริงเลย
  5. Novice จะมีความภาคภูมิใจที่ได้เป็นส่วนหนึ่งของการทำงานจริง และ code ของตัวเองได้ถูกนำไปใช้จริง ช่วยสร้างความฮึกเหิมและความมั่นใจได้ดี เพื่อส่งผลต่อการทำงาน และทัศนคติที่ดี ลดความกลัวที่จะทำพลาดลงในอนาคต
  6. เป็นเจ้าของ code ทั้งคู่ ทำให้เมื่อต้องเปลี่ยนแปลงแก้ไขในอนาคต ให้ 1 ใน 2 คน ใครก็ได้เป็นคนแก้ (ถึงจะหายตัวไปคนก็ไม่เป็นไร)
  7. ลดการ interrupt เช่นเล่น MSN, เล่นเกม ระหว่างการทำงาน ลงได้ เพราะต้องเกรงใจ partner ด้วย
  8. ป้องกันการหลับของ partner ได้ง่าย (ใครหลับ อีกคนก็ตบหัวให้ตื่นได้)

หลักปฏิบัติทั่วไป

  1. ควรสลับหน้าที่ระหว่าง Driver และ Navigator ทุกๆ 1 ชั่วโมงเพื่อไม่ให้ซ้ำซาก จำเจ เบื่อ แต่อาจสลับทุก 6-8 ชั่วโมงก็ได้ตามแต่ความเหมาะสม
  2. ควรเปลี่ยน partner (คนที่จับคู่ทำ Pair) ทุกๆ iteration (ในงาน ผู้พูดกล่าวว่า 1 iteration ของที่รอยเตอร์มีความยาว 2 อาทิตย์)
  3. เน้นการ Communication มากๆ ระหว่างคู่ จะต้องไม่มี Ego ต่อกัน ควรทำความตกลงเรื่องนิสัยส่วนตัวของแต่ละคนในขณะทำงาน ก่อนเริ่มใช้จริง เพื่อจะได้ไม่เกิดปัญหาภายหลัง
  4. หาก Expert คู่กับ Novice ควรเลือก feature ที่ง่ายๆ มาทำ และ Expert จะต้องไม่ข่ม Novice โดยระหว่างที่ Novice เป็นคน code Expert ก็แนะนำสิ่งที่จะต้องทำทั่วไป แต่ระหว่างที่ Expert เป็นคน code Novice จะต้องคอยถาม Expert อยู่ตลอดว่าตรงนี้ทำเพื่ออะไร หรือตรงนั้นอ่าน code แล้วไม่เข้าใจ อ่านยาก Expert จะต้องไม่มี Ego และต้องยอมปรับ code แบ่งสัดส่วนให้ Novice อ่านรู้เรื่อง เพื่อเป็นการบ่งบอกว่า “code ส่วนนั้น อ่านง่ายสำหรับคนทั่วไป ไม่ซับซ้อน”
  5. การจับคู่ทำงานใน 3-4 ครั้งแรกจะค่อนข้างทำงานได้ช้ากว่าแยกกันทำพอสมควร หลังจากนั้นไปแล้วจึงจะเห็นผลจากการจับคู่การทำงาน
]]>
https://blog.levelup.in.th/2009/05/24/pair-programming/feed/ 1