ทำความรู้จักกับความสามารถของ HTTP/2

ทำความรู้จักกับความสามารถของ HTTP/2

HTTP/2 เป็น HTTP โปรโตคอลแบบใหม่ที่ทำมาเพื่อวัตถุประสงค์เรื่องความเร็ว(ลด latency) เป็นหลักเมื่อเทียบกับ HTTP/1.1 ซึ่งโปรโตคอลใหม่ที่ว่านี้ได้ต้นแบบมาจาก SPDY โปรโตคอลของ google ซึ่งตอนนี้หยุดการพัฒนาไปแล้วและทีมพัฒนาได้ย้ายมาช่วยกันทำ HTTP/2 เป็นที่เรียบร้อย โดยที่ HTTP/2 นั้นมีความสามารถเพิ่มจาก /1.1 มากมายแต่ก็ยังทำงานร่วมกับ /1.1 แบบเดิมได้ดี (semantically compatible)

ในบทความนี้จะเริ่มต้นกล่าวถึงความสามารถใหม่ๆ ที่ได้จาก HTTP/2 ให้รู้จักกันเบื้องต้นก่อนจะลงลึกในระดับรายละเอียดการเชื่อมต่อ และการใช้งานตลอดจนถึงการเขียนโปรแกรมให้รองรับความสามารถของโปรโตคอลใหม่นี้

เป้าหมายหลักของ HTTP/2 มุ่งเน้นไปที่
1. ลด Latency ของการเชื่อมต่อระหว่าง client กับ server
2. ลดจำนวนการเปิดการเชื่อมต่อของ TCP connection
3. ทำให้เว็บมีความปลอดภัยมากขึ้น
4. ยังคงทำงานร่วมกับโปรโตคอลแบบเก่าได้ดี (compatibility with HTTP/1.1)

ความสามารถหลักๆที่ เทียบกับ HTTP/1.1

ข้อแรกคือ Binary Protocol(HTTP/2 is binary protocol whereas HTTP/1.1 is text protocol)
HTTP/2 เป็นการส่งข้อมูลระหว่าง Client กับ Server ด้วยข้อมูลชุดไบนารี่ ซึ่งต่างจาก HTTP/1.1 ที่เป็น text protocol ซึ่งหมายความว่าเวอร์ชั่นใหม่จะมีประสิทธิภาพในการรับส่งข้อมูลดีกว่าแต่ก็แลกมากับการที่เราไม่สามารถอ่านด้วยตาเปล่าได้ ต้องใช้เครื่องมือ decode ข้อมูลไบนารี่นี้อีกขั้นตอนนึงซึ่งก็คิดว่าไม่นานก็น่าจะมีเครื่องมือพวกนี้มาให้ใช้กันแพร่หลาย

อย่างที่สองคือ Multiplexing(Multiple asynchronous requests over a single TCP connection)
ข้อนี้ถือว่าเป็นหัวใจของ HTTP/2 ซึ่งหมายถึงความสามารถในการรองรับการทำ Multiplexing ของ streams หลายๆ แบบในการเชื่อมต่อเพียงแค่ครั้งเดียว (single TCP/connection) wow!. ซึ่งหมายความว่าเครื่อง Client สามารถส่งคำขอไปหลายๆ ครั้งได้ในการสร้างการเชื่อมครั้งเดียวกัน และขณะเดียวกัน server ก็สามารถตอบกลับการร้องขอนั้น ๆ ในลำดับใด ๆ ก็ได้เมื่อ Server อยู่ในสถานะพร้อมตอบกลับ ซึ่งในภาษานักพัฒนาโปรแกรมเรียกมันว่า การรับและการส่งแบบ Asynchronous

ข้อต่อมาคือ Header Compression(Compress HTTP headers along with content)
ในโปรโตคอล HTTP/1.1 แบบเก่านั้นจะไม่มีการบีบอัดข้อมูลส่วน HEADER ทำให้ข้อมูลส่วนนี้มีขนาดใหญ่และซ้ำซ้อนซ้ำซากเพราะมีการส่งกลับไปมาแม้จะเป็นข้อมูลเดียวกัน ซึ่งใน HTTP/2 จะแก้ปัญหาในส่วนนี้โดยจะใช้การบีบอัดด้วยวิธี HPACK(RFC 7541) ที่มีออกแบบมาเพื่อการบีบอัดข้อมูลส่วนหัวของ HTTP ได้อย่างดีเยี่ยมซึ่งจะกว่าวในบทความอื่นต่อไป

ข้อที่สี่คือ Request prioritization (While making multiple HTTP requests to a same domain they can be prioritized.)
Prioritization จากการร้องของฝั่ง Client ทำให้ Server สามารถตัดสินใจได้ว่าควรจะจัดการกับข้อมูลเพื่อเตรียมการส่งกลับไปตามลำดับแบบใด Server สามารถตัดสินใจได้ว่าควรใช้ CPU memory หรือแบนวิชเท่าไหร่ในการจัดการชุดข้อมูลกลุ่มๆนี้เพื่อจัดเรียงกลับไปหา Client ได้อย่างเหมาะสมและ Utilize มากที่สุด ซึ่งต่อไปเราก็จะเห็นเว็บเซิร์ฟเวอร์หลายๆ ยี่ห้อที่มีการเพิ่มความสามารถต่างๆ เหล่านี้หลากหลายมากขึ้น

ข้อสุดท้ายคือ Server Push(Multiple response for single request)
ความสามารถในข้อนี้ทำให้เรานึกถึง HTTP5 web socket​ (SSE) ที่ทำให้ Server สามารถส่งข้อมูลจาก server ไปหา client ได้โดยที่ Client ไม่ต้อง request มา แต่ถึงอย่างนั้นสองอย่างนี้ก็ยังมีความแตกต่างกันโดยการออกแบบ เช่น Header ของ server push จะเป็นแบบบีบอัดส่วนของ SSE จะไม่มีและการทำงานของ Server push จะยังคงอาศัยการทำงานแบบ client/server ตามปกติแต่เพิ่มเติมส่วนของการส่งข้อมูลจาก server ไปที่ client cache ของการเชื่อมต่อเท่านั้น

ทำความรู้จักกับความสามารถของ HTTP/2

Spring Boots Integration test with postgres using Docker

I use CentOS7 on vagrant to prepare docker environment. let’s start with install docker on CentOS

  • Install Epel Release

  • $sudo yum -y install epel-release
    $sudo yum -y update

  • Check linux kernel
  • I use docker 1.12rc which require linux minimum 3.10.

    $uname -r
    3.10.0-327.22.2.el7.x86_64

  • Add Docker Repository
  • Install docker

  • $sudo yum -y install docker-engine

    Some case you will be installed previous version of docker (1.11xx) because you have some dependency package that pre-installed with previous version.
    To check and remove that package use following command line.

    $sudo yum -y remove $(rpm -qa|grep docker)
    $sudo yum -y install docker-engine

    Spring Boots Integration test with postgres using Docker

    Install Ansible Centos7

    Prerequisites:

    – 2 nodes of CentOs7 pre-installed (use vagrant) to simulate how Ansible are working on multiple host
    – Python 2.6+

    Install latest Epel Repo from
    #rpm -iUvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

    Update Yum
    #yum -y update

    Install Ansible
    #yum -y install ansible

    Install Ansible Centos7

    มงคลชีวิต ข้อที่ 28 เป็นผู้ว่าง่าย

    วันนี้มีปัญหาเรื่องการทำงาน และเราก็มี conflict กันกับรุ่นน้อง เพราะอาจจะเป็นมุมมองที่ไม่เหมือนกัน (มองคนละด้าน)
    ก็เลยมีการ protect ตัวเองและโยนความผิดให้อีกฝ่าย ผมมองว่า conflict เป็นเรื่องเกิดขึ้นได้ แต่ไม่ควรจะมองว่าเป็นความผิดของอีกฝ่าย เพราะมันไม่มีใครถูกใครผิด หลายๆสิ่งผมอยากสอนและบอกเค้า แต่ทุกครั้งที่สอนหรือแนะนำ จะโดนโต้แย้ง เหมือนว่าชีวิตเค้าไม่เคยไม่มีอะไรสมบูรณ์
    พอถึงตรงนี้ก็เลยลองมาย้อนกลับมาดูธรรมขององค์สมเด็จพระสัมมาสัมพุทธเจ้าดูว่า พระองค์เองสอนคนมากมาย ทั้งเทวดาและมนุษย์ เพราะองค์ทรงสอน พูดตรัส หรือเลือกลักษณะคนว่าง่ายไว้ยังไงบ้าง

    อันนี้เป็นกลอนที่คัดมาจากเว็บ ธรรมะไทย
    ควรเป็นคน สอนง่าย ไม่ตายด้าน
    ก่อรำคาญ ค่ำเช้า ไม่เข้าไหน
    ไม่ซัดโทษ ของตน ให้คนใด
    เมื่อมีใคร สอนพร่ำ ให้นำมา.

    สำหรับมงคลชีวิตข้อที่ 28 เป็นผู้ว่าง่ายสอนง่าย มีดังนี้

    ท่านว่าผู้ว่าง่ายนั้นมีลักษณะที่สังเกตได้ดังนี้คือ

    ๑.ไม่พูดกลบเกลื่อนเมื่อได้รับการว่ากล่าวตักเตือน คือการรับฟังด้วยดี ไม่ใช่แก้ตัวแล้วปิดประตูความคิดไม่รับฟัง

    ๒.ไม่นิ่งเฉยเมื่อได้รับการเตือน คือการนำคำตักเตือนนั้นมาพิจารณาและแก้ไขข้อบกพร่องนั้นๆ

    ๓.ไม่จับผิดผู้ว่ากล่าวสั่งสอน คือการที่ผู้สอนอาจจะมีความผิดพลาด เนื่องจากความประมาท เราควรให้อภัยต่อผู้สอน เพราะการจับผิดทำให้ผู้สอนต้องอับอายขายหน้าได้ ซึ่งเป็นสิ่งที่ไม่ดีงาม

    ๔.เคารพต่อคำสอนและผู้สอน คือการรู้จักสัมมาคารวะต่อผู้ทำให้คำสอน และเคารพในสิ่งที่ผู้สอนได้นำมาแนะนำ

    ๕.มีความอ่อนน้อมถ่อมตน คือไม่แสดงความยะโส ถือตัวว่าอยู่เหนือผู้อื่นเพราะสิ่งที่ตัวเองเป็นตัวเองมี

    ๖.มีความยินดีต่อคำสอนนั้น คือยอมรับในคำสอนนั้นๆ ด้วยความยินดีเช่นการไม่แสดงความเบื่อหน่ายเพราะเคยฟังมาแล้ว เป็นต้น

    ๗.ไม่ดื้อรั้น คือการไม่อวดดี คิดว่าของตัวเองนั้นผิดแต่ก็ยังดันทุรังทำต่อไปเพราะกลัวเสียชื่อ เสียฟอร์ม

    ๘.ไม่ข้ดแย้ง เพราะว่าการว่ากล่าวตักเตือนหรือสั่งสอนนั้นก็คือ สิ่งที่ตรงข้ามกับที่เราทำอยู่แล้ว เราควรต้องเปิดใจให้กว้างไม่ขัดแย้งต่อคำสอน คำวิจารณ์นั้นๆ

    ๙.ยินดีให้ตักเตือนได้ทุกเวลา คือการยินดีให้มีการแสดงความคิดเห็น ตักเตือนได้โดยไม่มีข้อยกเว้นเรื่องเวลา

    ๑๐.มีความอดทนต่อการเป็นผู้ถูกสั่งสอน คือการไม่เอาความขัดแย้งในความเห็นเป็นอารมณ์ แต่ให้เข้าใจเจตนาที่แท้จริงของผู้สอนนั้น

    การทำให้เป็นคนว่าง่ายนั้นทำได้ดังนี้

    ๑.ลดมานะของตัว คือการไม่ถือดี ไม่ถือตัว ความไม่สำคัญตัวเองว่าเป็นอย่างโน้นอย่างนี้ อาทิเช่นถือตัวว่าการศึกษาดีกว่าเป็นต้น

    ๒.ละอุปาทาน คือการไม่ยึดถือในสิ่งที่เรามี เราเป็น หรือถือมั่นในอำนาจกิเลสต่างๆ

    ๓.มีสัมมาทิฏฐิ คือมีปัญญาที่เห็นชอบ การเห็นถูกเห็นควรตามหลักอริยสัจ ๔ เชื่อเรื่องความไม่เที่ยง เชื่อในเรื่องบุญเรื่องบาปเป็นต้น

    มงคลชีวิต ข้อที่ 28 เป็นผู้ว่าง่าย

    การตรวจสอบคูปอง ดิจิตอล ทีวี กสทช

    สำหรับคูปปอง ดิจิตอลทีวี ในปีที่แล้วถูกส่งออกไปแล้วสองรอบ อาจจะมีบางบ้านที่อยู่ในแต่ละรอบการส่งแต่ไม่ได้รับคูปอง

    เราสามารถตรวจสอบเลข RU ที่ทางไปรษณีออกให้แต่ละเจ้าบ้าน
    เตรียมรหัสประจำตัวบ้าน 11 หลักแล้ว ค้นหารหัส RU ได้ตามลิงค์

    http://dtvcoupon.nbtc.go.th/searchphp.php

    แล้วนำรหัส RU ไป track การส่งของไปรษณีไทยตามลิงค์

    http://track.thailandpost.co.th/tracking/default.aspx

    เป็นอันว่ารู้ว่าไปรษณีนำส่งให้เราหรือป่าว ถ้ายังไม่ถึงมือให้ ตรวจสอบกับทางไปรษณีไทย ทางสายด่วน 1545

    การตรวจสอบคูปอง ดิจิตอล ทีวี กสทช