Google bigtableappengine

49
Google Big Table and App Engine ผศ. ดร. กานดา รุณนะพงศา สายแก้ว ภาควิชาวิศวกรรมคอมพิวเตอร์ มหาวิทยาลัยขอนแก่น http://twitter.com/krunapon 1

description

 

Transcript of Google bigtableappengine

Page 1: Google bigtableappengine

Google Big Table and App Engine

ผศ. ดร. กานดา รุณนะพงศา สายแก้ว

ภาควิชาวิศวกรรมคอมพวิเตอร์ มหาวิทยาลัยขอนแก่น

http://twitter.com/krunapon1

Page 2: Google bigtableappengine

หัวข้อที่จะพูด

BigTableGoogle App Engine

2

Page 3: Google bigtableappengine

BigTable คืออะไร

BigTable คือระบบการเก็บขอ้มูลแบบกระจายตามเซิร์ฟเวอรน์ับพันตัวที่กูเกลิออกแบบเพ่ือเกบ็ข้อมลูขนาดใหญร่ะดับ Perabytes (10^15 หรือ 2^50 bytes) ได้

BigTable เป็นระบบที่ได้รับการพิสูจน์แล้วว่า

– สามารถเก็บข้อมูลจ านวนมากและคน้หาข้อมูลขนาดใหญ่ได้อย่างรวดเร็ว

– มีความยืดหยุ่นในการเก็บข้อมูลทีม่ีความหลากหลาย (URLs, เว็บเพจ, และรูปภาพถ่ายทางดาวเทียม)

3

Page 4: Google bigtableappengine

ประวัติของ Big Table

BigTable ถูกพัฒนาขึ้นมาในปี ค.ศ. 2004 โดยทีมนักวจิัยของกูเกิลซึ่งประกอบด้วย – Fay Chang, Jeffrey Dean, Sanjay Ghemawat, Wilson C. Hsieh,

Deborah A. Wallach, Mike Burrows, Tushar Chandra, Andrew Fikes, Robert E. Gruber

จุดประสงค์ของการพัฒนา BigTable– ประยุกต์ใช้งานได้กว้างขวาง (Wide applicability)– ปรับขนาดได้ตามภาระงาน (Scalability)– ประสิทธิภาพสูง (High performance)– คงอยู่สูง (High availability)

4

Page 5: Google bigtableappengine

แอปพลิเคชันที่ใช้ Bigtable

5

• ใช้ภายในกูเกิลกับผลิตภัณฑ์มากกว่า 60 ตัว

• ใช้โดยบุคคลหรือผลิตภัณฑ์ที่ไม่ใช่ของกูเกิลผ่านการใช้Google App Engine

Page 6: Google bigtableappengine

Traditional RDBMSs vs. BigTable

คุณลักษณะ Traditional

RDBMSs

BigTable

โมเดลการเก็บข้อมูล เป็นตาราง 2 มิติที่มีได้หลายแถว แต่ละแถวมีได้หลายคอลัมน์

เป็นตารางหลายมิติที่มิติหนึ่งเป็นมิติเกี่ยวกับเวลา

อินเดกซ์ที่ใช้ตาม ชื่อคอลัมน์ ชื่อแถวหรือชื่อคอลัมน์ที่เก็บข้อมูลส าหรับหนึ่งตาราง

เครื่องเดียวกันและอยู่ในฮาร์ดดิกส์

หลายเครื่องและสามารถเลือกได้ว่าจะเก็บไว้ที่ฮาร์ดดิกส์หรือที่หน่วยความจ า

6

Page 7: Google bigtableappengine

โมเดลการเก็บขอ้มูลของ BigTable

BigTable เป็นแม็ปแบบจัดเรียงข้อมูล (sorted map) หลายมิติซึ่งเก็บข้อมูลแบบกระจาย (distributed) แต่คงทน (persistent)

แต่ละค่าที่เก็บในแม็ปจะถูกเข้าถึงโดยใช้คีย์ตามแถว (row key) คีย์ตามคอลัมน์ (column key) และการประทับเวลา (timestamp)

ค่าที่ถูกเก็บเป็นอาร์เรย์ของไบต์

(row:string, column:string, time:int64) → string 7

Page 8: Google bigtableappengine

ตัวอย่างการเก็บขอ้มูลเว็บใน BigTable

8

• ชื่อของแถวจะเป็นชื่อที่อยู่ของเว็บโดยที่ชื่อโดเมนจะขึ้นมาก่อนเพื่อให้ชื่อ URL ที่มีโดเมนที่อยู่ที่เดียวกันอยู่ติดกันหรือใกล้เคียงกัน• คอลัมน์ contents: จะเป็นเว็บเพจใน www.cnn.com โดยที่จะมีเวอร์ชันที่เก็บในเวลา t3, t5, และ t6• คอลัมน์ anchor:* เก็บข้อความที่อ้างอิงถึงเว็บเพจ เช่น ที่เว็บ cnnsi.com มีการอ้างอิงถึงเว็บเพจใน www.cnn.com ด้วยข้อความ “CNN” ในเวลา t9 และที่เว็บ my.look.ca มีการอ้างอิงถึงเว็บเพจใน www.cnn.com ด้วยข้อความ “CNN.com” ในเวลา t8

Page 9: Google bigtableappengine

แถวของตาราง

คีย์ของแถว (row keys) จะเก็บเป็น string ความยาวได้สูงสุดถึง 64KB (โดยปกติจะยาว 10-100 Bytes)

การจัดเรียงข้อมูลในตารางของ BigTable จะจัดเรียงตามคีย์ของแถวหรือชื่อของแถว

แต่ละช่วงหรือกลุ่มของแถว (row range) จะเรียกว่า tablet

ซึ่งเป็นหน่วยเพื่อใช้ในการกระจายข้อมูลและโหลด (load balancing)

9

Page 10: Google bigtableappengine

ครอบครัวคอลัมน์ (Column Families)

คีย์ของคอลัมน์จะถูกจัดกลุ่มให้อยู่ในเซ็ตเดียวกันที่เรียกว่าครอบครัวคอลัมน์ (Column Families)

ข้อมูลที่อยู่ในครอบครัวคอลัมน์เดียวกันมีชนิดข้อมูลเหมือนกัน

จะมีจ านวนครอบครัวคอลัมน์ได้มากที่สุดในระดับร้อยเท่านั้นและมักไม่ค่อยเปลี่ยน

แต่ไม่มีการจ ากัดจ านวนคอลัมน์ในตาราง10

Page 11: Google bigtableappengine

การใช้ครอบครัวคอลัมน์

ครอบครัวคอลมัน์จะเป็นข้อมูลที่ใช้ในสิ่งต่อไปนี้

– การจัดการระดับของการเข้าถึงข้อมูล (access control)

– การคิดค่าบริการส าหรับการใช้ดิสก์และการใช้หน่วยความจ า (disk and memory accounting)

รองรับแอปพลิเคชันที่หลากหลาย

– บางแอปพลิเคชันมีการเพิ่ม base data

– บางแอปพลิเคชันอ่าน base data แล้วสร้างคอลัมน์เพิ่ม

– บางแอปพลิเคชันอนุญาตให้อ่านข้อมลูเท่านั้น11

Page 12: Google bigtableappengine

คีย์ของคอลัมน์ (Column Key)

คีย์ของคอลัมน์จะอยู่ในรูปแบบ family:qualifier

ในกรณีของการเก็บเว็บเพจ

– ตัวอย่างของชื่อ column family คือ anchor ซึ่งเป็นจุดอ้างอิงเว็บเพจ

– ตัวอย่างของ qualifier คือชื่อของเว็บไซต์ที่อ้างอิงเว็บเพจที่ถูกเก็บ

– เนื้อหาของข้อมูลทีเก็บคือข้อความที่สามารถถูกคลิกเพื่อไปยังลิงก์ของเว็บเพจที่ถูกเก็บ 12

Page 13: Google bigtableappengine

การประทบัเวลา (Timestamps)

ในแต่ละช่องของ BigTable สามารถมีข้อมูลได้หลายเวอร์ชันซึ่งแต่ละเวอร์ชันถูกอินเดกซ์ด้วยการประทับเวลา

ชนิดของข้อมูลที่ใช้ในการประทับเวลาใน BigTable คือ 64-bit integers

เวลาที่แสดงสามารถมีรายละเอียดในระดับ microseconds

13

Page 14: Google bigtableappengine

ตัวอย่างโค้ดในการเขียนข้อมลูที่ BigTable

// Open the table

Table *T = OpenOrDie(“/bigtable/web/webtable”);

// Write a new anchor and delete an old anchor

RowMutation r1(T, “com.cnn.www”);

r1.Set(“anchor:www.c-span.org”, “CNN”);

r1.Delete(“anchor:www.abc.com”);

Operation op;

Apply(&op, &r1);14

Page 15: Google bigtableappengine

ตัวอย่างโค้ดในการอ่านข้อมูลที่ BigTable

Scanner scanner(T);

ScanStream *stream;

stream = scanner.FetchColumnFamily(“anchor”);

stream->setReturnAllVersions();

scanner.Lookup(“com.cnn.www”);

for (; !stream->Done(); stream->Next()) {

printf(“%s %s %11d %s\n”, scanner.RowName(),

stream->ColumnName(), stream->MicroTimestamp(),

stream->Value());

}15

Page 16: Google bigtableappengine

รูปแบบไฟล์ที่เก็บขอ้มูล

BigTable ใช้ Google File System ในการเก็บไฟล์ล็อก (log files) และไฟล์ข้อมูล (data files)

Google SSTable เป็นรูปแบบไฟล์ที่ใช้ในการเก็บข้อมูล BigTable

SSTable 1 อันจะเป็นการแม็ปจากคีย์ (keys) ไปยังค่าข้อมูล (values) ที่เก็บโดยที่ทั้งคีย์และค่าข้อมูลเป็นสตริงที่มีความยาวเท่าไหร่ก็ได้

16

Page 17: Google bigtableappengine

ความเชื่อมโยงในการเก็บข้อมูล

โครงสร้างของ BigTable จะประกอบด้วย 3 ส่วนหลัก

– ไลบรารีที่ลิงก์กับไคลเอนต์ที่เก็บและค้นหาข้อมูล– เซิร์ฟเวอร์หลัก 1 ตัว (one master server)

– เซิร์ฟเวอร์แท็บเบล็กหลายตัว (many tablet servers)

แท็บเบล็กเซิร์ฟเวอร์หลายตัวสามารถถูกเพิ่มหรือเอาออกจากคลัสเตอร์ได้ตามการเปลี่ยนแปลงของภาระงาน (workload)

17

Page 18: Google bigtableappengine

หน้าที่ของเซิร์ฟเวอร์หลัก

ก าหนดว่าแท็บเบล็กไหนจะในอยู่ในแท็บเบล็กเซิร์ฟเวอร์ใด

ท าให้เกิดความสดุลในการท างานของแท็บเบล็กเซิร์ฟเวอร์

ขอพื้นที่หน่วยความจ าของไฟล์ที่ไม่ได้ใช้แล้ว

จัดการการเปลี่ยนแปลงของสกีม่าของตารางและครอบครัวคอลัมน์

18

Page 19: Google bigtableappengine

หน้าที่ของแท็บเบลก็เซิร์ฟเวอร์

จัดการกลุ่มของแท็บเบล็กตั้งแต่สิบตัวถึงพันตัวต่อแท็บเบล็กเซิร์ฟเวอร์

จัดการการอ่านและเขียนข้อมูลไปยังแท็บเบล็กและแยกแท็บเบล็กที่ใหญ่เกินไปออกเป็นหลายตัว

ไคลเอนต์จะท าการสื่อสารโดยตรงกับแท็บเบล็กเซิร์ฟเวอร์เพื่อจะร้องขอให้อ่านหรือเขียนข้อมูล ท าให้ในทางปฏิบัติภาระงานของเซิร์ฟเวอร์หลักมีไม่มาก

19

Page 20: Google bigtableappengine

สรุปโครงสร้างการเก็บข้อมูล

หนึ่ง BigTable คลัสเตอร์ (A BigTable cluster) จะประกอบไปด้วยหลายตาราง (table)

แต่ละตารางประกอบด้วยแท็บเบล็ก

แต่ละแท็บเบล็กประกอบด้วยข้อมูลทีม่ีความสัมพนัธ์และอยู่ในช่วงแถวเดียวกัน (row range)

ตอนแรก ตารางจะมีเพียงแค่หนึ่งแท็บเบล็ก ต่อมาเมื่อตารางใหญ่ขึ้นตารางก็จะแยกออกมาเป็นหลายแท็บเบล็ก

โดยปกติ 1 แท็บเบล็กจะมีขนาดข้อมูลประมาณ 100-200 MB20

Page 21: Google bigtableappengine

การประเมนิประสิทธิภาพ

การทดลองนั้นท ากับหนึ่ง BigTable คลัสเตอร์ที่ประกอบด้วย N แท็บเบล็กเซิร์ฟเวอร์

– มีวัตถุประสงค์เพื่อที่จะวัดประสิทธิภาพ (performance) และการปรับขนาดได้ตามภาระงาน (scalability) ของ BigTable ตามจ านวนแท็บเบล็กเซิร์ฟเวอร์ที่เพิ่มขึ้น

ทดสอบกับเครื่องคอมพิวเตอร์ทั้งหมด 1786 เครื่องโดยที่แต่ละเครื่องมีฮาร์ดดิกส์ 400 GB และมี CPU dual-core 2 GHz

21

Page 22: Google bigtableappengine

จ านวนของโอเปอเรชันต่อวินาทีต่อแท็บเบลก็เซิร์ฟเวอร์

22

Page 23: Google bigtableappengine

ผลการสรุปและวิเคราะห์

การอ่านข้อมูลแบบสุ่มใช้เวลามากที่สุดเนื่องจากต้องถ่ายโอนข้อมูล 64 KB SSTable ผ่านเครือข่ายจาก GFS ไปยังแท็บเบล็กเซิร์ฟเวอร์

การเขียนข้อมูลแบบสุม่หรือแบบตามล าดับใช้เวลาน้อยกว่าการอ่านข้อมูลแบบสุ่มเพราะแต่ละแท็บเบล็กเซิร์ฟเวอร์เอาสิ่งที่เขียนใส่ลงไปในล็อกเดียวกันและใช้การยืนยันการเขียน (commit) แบบกลุ่ม

23

Page 24: Google bigtableappengine

จ านวนโอเปอเรชันต่อวินาที

24

Page 25: Google bigtableappengine

ผลสรุปและวิเคราะห์

จ านวนโอเปอเรชันที่ท าเพิ่มตามจ านวนแท็บเบล็กเซิร์ฟเวอร์แต่ไม่ได้เพิ่มแบบเชิงเส้นซึ่งมีสาเหตุมาจาก

– การไม่สามารถท าให้ภาระงานของหลายเซิร์ฟเวอร์เกิดความสมดลุซึ่งส่วนหนึ่งมาจากการใช้ CPU และเครือข่ายของโปรเซสอื่น

– การปรับเปลี่ยนภาระงานเพื่อท าให้เกิดความสมดุลนั้นจะต้องใช้เวลาซึ่งอาจจะไม่ทันเวลาที่ภาระงานเปลี่ยนไป

25

Page 26: Google bigtableappengine

ข้อจ ากัดของ BigTable

BigTable มีข้อจ ากัดในเรื่องของการไม่สนับสนุนค าสั่งสอบถาม (query) บางประเภท เช่น– การเปรียบเทียบข้อมูลที่ใช้เครื่องหมายไม่เท่ากันนั้น ในค าสั่งสอบถามหนึ่งใช้ได้เฉพาะการเปรียบเทียบข้อมูลชนิดเดียวเท่านั้น

– ตัวอย่างค าสั่งสอบถามที่ท าไม่ได้SELECT * FROM Person WHERE birth_year >= :min_year

AND height >= :min_height # ERROR26

Page 27: Google bigtableappengine

หัวข้อที่จะพูด

BigTableGoogle App Engine

27

Page 28: Google bigtableappengine

Google App Engine คืออะไร

Google App Engine คือการบริการที่ท าให้ผู้ใช้สามารถพัฒนาเว็บแอปพลิเคชันโดยใช้เซริ์ฟเวอร์ของกูเกิลซึ่งเป็นเซิร์ฟเวอร์เดียวกับที่ใช้การรันแอปพลิเคชันต่างๆ ของกูเกิล

ผู้ใช้บริการจ่ายค่าบริการเฉพาะเท่าที่ใช้จริงและสามารถก าหนดว่าต้องการจะใช้มากเพียงใดด้วยตนเอง

ทุกแอปพลิเคชันสามารถใช้ได้ฟรีตราบใดที่ใช้พื้นที่ไม่เกิน 500 MB และมีจ านวนการเข้าเยี่ยมชมไม่เกิน 5 ล้านเพจต่อเดือน

28

Page 29: Google bigtableappengine

ข้อดีของ Google App Engine

ผู้ใช้บริการไม่ต้องติดต้ังหรือซ่อมบ ารุงดูแลรักษาซอฟต์แวร์และฮาร์ดแวร์ที่จ าเป็นต้องมีเพื่อรันแอปพลิเคชัน

ผู้ใช้บริการไม่ต้องกังวลวา่จะต้องท าอย่างไรบ้างเพื่อรองรับการขยายภาระงานที่เพิ่มขึ้นจากการใช้เว็บแอปพลิเคชันมากขึน้โดยที่กูเกิลใหบ้ริการโดยใช้เทคโนโลยี Cloud Computing

ผู้ใช้บริการสามารถก าหนดโดเมนของเว็บแอปพลิเคชันของตน

การพัฒนาแอปพลิเคชันท าได้ง่ายมาก และสามารถท าได้ใน 2 สภาพแวดล้อมคอื Java และ Python

29

Page 30: Google bigtableappengine

ข้อเสียของการใช ้Google App Engine

ข้อมูลที่เป็นความลับขององค์กรไม่ได้อยู่ในเซิร์ฟเวอร์ที่องค์กรสามารถบังคับควบคุมได้

มีข้อจ ากัดในเรื่องของการใช้บางภาษาเช่น VB, C#, และ PHP

มีความเสี่ยงในการพัฒนาเว็บแอปพลิเคชันเพราะกูเกิลไม่เคยรับประกันความเสี่ยงหรือรับประกันว่าจะให้บริการอย่างดีตลอดไป

30

Page 31: Google bigtableappengine

แนวทางการพัฒนาเว็บ

31

Page 32: Google bigtableappengine

สถาปัตยกรรมของ Google App Engine

32

Page 33: Google bigtableappengine

Google App Engine ในฐานะ Application Server

33

Page 34: Google bigtableappengine

การพฒันาเว็บแอปพลิเคชันบน GAEโดยใช้ Python

ดาวน์โหลดและติดตั้งเครื่องมือที่ใช้ในการพัฒนา

เรียนรู้การใช้เฟรมเวิร์ค webapp

เรียนรู้การใช้ Users Service

การจัดการฟอร์มโดยใช้ webapp

การใช้ Datastore

การใช้ Templates

การใช้ Static Files

การอัปโหลด Application34

Page 35: Google bigtableappengine

App Engine Python SDK

เราสามารถพัฒนาและอัปโหลดแอปพลิเคชัน Python ส าหรับ Google App Engine โดยใช้ App Engine Python software development kit (SDK)

The Python SDK สามารถท างานบนเครื่องคอมพิวเตอร์ที่มี Python 2.5 บนระบบปฏิบัติการ Windows, Mac OS X และ Linux

– ยังไม่สามารถท างานได้กับ Python 3

35

Page 36: Google bigtableappengine

การดาวน์โหลด Python SDK

ให้ไปที่ http://code.google.com/appengine/downloads.html

เลือกGoogle App Engine SDK for Python

เลือกดาวน์โหลดตามแพลตฟอรม์ที่ใช้

36

Page 37: Google bigtableappengine

การพฒันา Hello World Application

แตกไฟล์ google_appengine_1.3.8.zip

สร้างตัวจัดการการร้องขอแบบง่าย (Creating a Simple Request Handler)สร้างไฟล์ก าหนดค่า (Creating a Configuration File)ทดสอบแอปพลิเคชัน (Testing the application)

37

Page 38: Google bigtableappengine

สร้างตัวจัดการการร้องขอแบบง่าย

สร้างไดเรกทอรี helloworld ภายใต้ไดเรกทอรี google_appengine

สร้างไฟล์ helloworld.py ในไดเรกทอรี โดยที่เนื้อหาในไฟล์มีดังนี้

38ไฟล์นี้จะตอบสนองการร้องขอโดยการแสดงบรรทัดว่างและข้อความ “Hello, world!”

Page 39: Google bigtableappengine

สร้างไฟล ์Configuration

แอปพลิเคชัน App Engine มีไฟล์ configuration ที่ชื่อว่าapp.yamlไฟล์นี้อธิบายเกี่ยวกับสคริปต์ที่จะถูกเรียกเพื่อตอบสนอง URLs สร้างไฟล์ app.yaml ซึ่งมีเนื้อหาดังต่อไปนี้

39

Page 40: Google bigtableappengine

ทดสอบแอปพลเิคชัน

สั่งให้เว็บเซิร์ฟเวอร์เริ่มท างานโดยการใช้ค าสั่ง dev_appserver.py

ทดสอบแอปพลิเคชันโดยเปิดเบราว์เซอร์ที่ http://localhost:8080

40

Page 41: Google bigtableappengine

การใช้เฟรมเวิร์ก

หากผู้พัฒนาแอปพลิเคชันจะต้องเขียนโค้ดเยอะมากด้วยตนเอง ก็จะท าให้การพฒันาแอปพลิเคชันเป็นไปช้าและมีโอกาสมีข้อผิดพลาดเยอะGoogle App Engine สนับสนุนการใช้เฟรมเวิร์กซึ่งเขียนโดยใช้ Python และสนับสนุนการติดต่อแบบ CGI หลายตัว อาทิเช่น Django, CherryPy, Pylons, and web.pyGoogle App Engine มีเว็บแอปพลิเคชันเฟรมเวิร์กแบบง่ายที่เรียกว่า webapp

41

Page 42: Google bigtableappengine

การใช้เฟรมเวิร์ก webapp

แอปพลิเคชัน webapp มี 3 ส่วน– อย่างน้อยหนึ่ง RequestHandler คลาสที่ประมวลผลการร้องขอและการสร้างการตอบรับ

– อินสแตนท์ WSGIApplication ซึ่งเชื่อมโยงระหว่างการร้องขอที่เข้ามาและตัวจัดการโดยดูที่ URL

– เมธอดหลกัที่รัน WSGIApplication โดยใช้ CGI adaptor

42

Page 43: Google bigtableappengine

ลงทะเบียนแอปพลิเคชัน

ไปที่ https://appengine.google.com/

กูเกิลจะให้กรอกข้อมูลของแอปพลิเคชันและเบอร์โทรศัพท์เพื่อจะได้รับโค้ดยืนยันทาง SMS จากนั้น ผู้ใช้กรอกโค้ดที่ได้รับทาง SMS เปลี่ยนแปลงแก้ไขไฟล์ app.yaml เพื่อแก้ไขชื่อของแอปพลิเคชันตามที่กรอกในแบบฟอร์ม

43

Page 44: Google bigtableappengine

แก้ไขไฟล์ app.yaml

44

แก้ไขไฟล์ app.yaml โดยที่แก้ไขชื่อ application

Page 45: Google bigtableappengine

ท าการอัปโหลดขึ้นเว็บ appspot.com

45

ใช้สคริปต์ appcfg.py และค าสั่ง update ในการอัปโหลดขึนเว็บ

Page 46: Google bigtableappengine

เว็บแอปพลิเคชันที่อัปโหลดและลงทะเบียนแล้ว

46

Page 47: Google bigtableappengine

สรุป

Google App Engine เป็นการบริการที่ให้ผู้ใช้พัฒนาแอปพลิเคชันบนแพลตฟอร์มของ Google ที่มีความสามารถปรับขนาดได้ (scalability) โดยใช้เทคโนโลยี cloud computing และมีความปลอดภัยสูง (security)Google App Engine ใช้ Bigtable และ Google File System ในการเก็บและค้นหาข้อมลู Google App Engine ใช้งานได้ง่าย

47

Page 48: Google bigtableappengine

แหล่งข้อมูลอ้างอิง

http://labs.google.com/papers/bigtable.html

http://www.isriya.com/node/1896/bigtable-and-chubby-lock-service

http://www.thaijavadev.com/index.php?option=com_content&view=section&layout=blog&id=15&Itemid=112

48

Page 49: Google bigtableappengine

ขอขอบคุณ

http://twitter.com/krunapon

http://www.slideshare.net/krunapon

http://gear.kku.ac.th/~krunapon

[email protected]

49