Google bigtableappengine
-
Upload
kanda-runapongsa-saikaew -
Category
Documents
-
view
1.240 -
download
1
description
Transcript of Google bigtableappengine
Google Big Table and App Engine
ผศ. ดร. กานดา รุณนะพงศา สายแก้ว
ภาควิชาวิศวกรรมคอมพวิเตอร์ มหาวิทยาลัยขอนแก่น
http://twitter.com/krunapon1
หัวข้อที่จะพูด
BigTableGoogle App Engine
2
BigTable คืออะไร
BigTable คือระบบการเก็บขอ้มูลแบบกระจายตามเซิร์ฟเวอรน์ับพันตัวที่กูเกลิออกแบบเพ่ือเกบ็ข้อมลูขนาดใหญร่ะดับ Perabytes (10^15 หรือ 2^50 bytes) ได้
BigTable เป็นระบบที่ได้รับการพิสูจน์แล้วว่า
– สามารถเก็บข้อมูลจ านวนมากและคน้หาข้อมูลขนาดใหญ่ได้อย่างรวดเร็ว
– มีความยืดหยุ่นในการเก็บข้อมูลทีม่ีความหลากหลาย (URLs, เว็บเพจ, และรูปภาพถ่ายทางดาวเทียม)
3
ประวัติของ 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
แอปพลิเคชันที่ใช้ Bigtable
5
• ใช้ภายในกูเกิลกับผลิตภัณฑ์มากกว่า 60 ตัว
• ใช้โดยบุคคลหรือผลิตภัณฑ์ที่ไม่ใช่ของกูเกิลผ่านการใช้Google App Engine
Traditional RDBMSs vs. BigTable
คุณลักษณะ Traditional
RDBMSs
BigTable
โมเดลการเก็บข้อมูล เป็นตาราง 2 มิติที่มีได้หลายแถว แต่ละแถวมีได้หลายคอลัมน์
เป็นตารางหลายมิติที่มิติหนึ่งเป็นมิติเกี่ยวกับเวลา
อินเดกซ์ที่ใช้ตาม ชื่อคอลัมน์ ชื่อแถวหรือชื่อคอลัมน์ที่เก็บข้อมูลส าหรับหนึ่งตาราง
เครื่องเดียวกันและอยู่ในฮาร์ดดิกส์
หลายเครื่องและสามารถเลือกได้ว่าจะเก็บไว้ที่ฮาร์ดดิกส์หรือที่หน่วยความจ า
6
โมเดลการเก็บขอ้มูลของ BigTable
BigTable เป็นแม็ปแบบจัดเรียงข้อมูล (sorted map) หลายมิติซึ่งเก็บข้อมูลแบบกระจาย (distributed) แต่คงทน (persistent)
แต่ละค่าที่เก็บในแม็ปจะถูกเข้าถึงโดยใช้คีย์ตามแถว (row key) คีย์ตามคอลัมน์ (column key) และการประทับเวลา (timestamp)
ค่าที่ถูกเก็บเป็นอาร์เรย์ของไบต์
(row:string, column:string, time:int64) → string 7
ตัวอย่างการเก็บขอ้มูลเว็บใน 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
แถวของตาราง
คีย์ของแถว (row keys) จะเก็บเป็น string ความยาวได้สูงสุดถึง 64KB (โดยปกติจะยาว 10-100 Bytes)
การจัดเรียงข้อมูลในตารางของ BigTable จะจัดเรียงตามคีย์ของแถวหรือชื่อของแถว
แต่ละช่วงหรือกลุ่มของแถว (row range) จะเรียกว่า tablet
ซึ่งเป็นหน่วยเพื่อใช้ในการกระจายข้อมูลและโหลด (load balancing)
9
ครอบครัวคอลัมน์ (Column Families)
คีย์ของคอลัมน์จะถูกจัดกลุ่มให้อยู่ในเซ็ตเดียวกันที่เรียกว่าครอบครัวคอลัมน์ (Column Families)
ข้อมูลที่อยู่ในครอบครัวคอลัมน์เดียวกันมีชนิดข้อมูลเหมือนกัน
จะมีจ านวนครอบครัวคอลัมน์ได้มากที่สุดในระดับร้อยเท่านั้นและมักไม่ค่อยเปลี่ยน
แต่ไม่มีการจ ากัดจ านวนคอลัมน์ในตาราง10
การใช้ครอบครัวคอลัมน์
ครอบครัวคอลมัน์จะเป็นข้อมูลที่ใช้ในสิ่งต่อไปนี้
– การจัดการระดับของการเข้าถึงข้อมูล (access control)
– การคิดค่าบริการส าหรับการใช้ดิสก์และการใช้หน่วยความจ า (disk and memory accounting)
รองรับแอปพลิเคชันที่หลากหลาย
– บางแอปพลิเคชันมีการเพิ่ม base data
– บางแอปพลิเคชันอ่าน base data แล้วสร้างคอลัมน์เพิ่ม
– บางแอปพลิเคชันอนุญาตให้อ่านข้อมลูเท่านั้น11
คีย์ของคอลัมน์ (Column Key)
คีย์ของคอลัมน์จะอยู่ในรูปแบบ family:qualifier
ในกรณีของการเก็บเว็บเพจ
– ตัวอย่างของชื่อ column family คือ anchor ซึ่งเป็นจุดอ้างอิงเว็บเพจ
– ตัวอย่างของ qualifier คือชื่อของเว็บไซต์ที่อ้างอิงเว็บเพจที่ถูกเก็บ
– เนื้อหาของข้อมูลทีเก็บคือข้อความที่สามารถถูกคลิกเพื่อไปยังลิงก์ของเว็บเพจที่ถูกเก็บ 12
การประทบัเวลา (Timestamps)
ในแต่ละช่องของ BigTable สามารถมีข้อมูลได้หลายเวอร์ชันซึ่งแต่ละเวอร์ชันถูกอินเดกซ์ด้วยการประทับเวลา
ชนิดของข้อมูลที่ใช้ในการประทับเวลาใน BigTable คือ 64-bit integers
เวลาที่แสดงสามารถมีรายละเอียดในระดับ microseconds
13
ตัวอย่างโค้ดในการเขียนข้อมลูที่ 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
ตัวอย่างโค้ดในการอ่านข้อมูลที่ 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
รูปแบบไฟล์ที่เก็บขอ้มูล
BigTable ใช้ Google File System ในการเก็บไฟล์ล็อก (log files) และไฟล์ข้อมูล (data files)
Google SSTable เป็นรูปแบบไฟล์ที่ใช้ในการเก็บข้อมูล BigTable
SSTable 1 อันจะเป็นการแม็ปจากคีย์ (keys) ไปยังค่าข้อมูล (values) ที่เก็บโดยที่ทั้งคีย์และค่าข้อมูลเป็นสตริงที่มีความยาวเท่าไหร่ก็ได้
16
ความเชื่อมโยงในการเก็บข้อมูล
โครงสร้างของ BigTable จะประกอบด้วย 3 ส่วนหลัก
– ไลบรารีที่ลิงก์กับไคลเอนต์ที่เก็บและค้นหาข้อมูล– เซิร์ฟเวอร์หลัก 1 ตัว (one master server)
– เซิร์ฟเวอร์แท็บเบล็กหลายตัว (many tablet servers)
แท็บเบล็กเซิร์ฟเวอร์หลายตัวสามารถถูกเพิ่มหรือเอาออกจากคลัสเตอร์ได้ตามการเปลี่ยนแปลงของภาระงาน (workload)
17
หน้าที่ของเซิร์ฟเวอร์หลัก
ก าหนดว่าแท็บเบล็กไหนจะในอยู่ในแท็บเบล็กเซิร์ฟเวอร์ใด
ท าให้เกิดความสดุลในการท างานของแท็บเบล็กเซิร์ฟเวอร์
ขอพื้นที่หน่วยความจ าของไฟล์ที่ไม่ได้ใช้แล้ว
จัดการการเปลี่ยนแปลงของสกีม่าของตารางและครอบครัวคอลัมน์
18
หน้าที่ของแท็บเบลก็เซิร์ฟเวอร์
จัดการกลุ่มของแท็บเบล็กตั้งแต่สิบตัวถึงพันตัวต่อแท็บเบล็กเซิร์ฟเวอร์
จัดการการอ่านและเขียนข้อมูลไปยังแท็บเบล็กและแยกแท็บเบล็กที่ใหญ่เกินไปออกเป็นหลายตัว
ไคลเอนต์จะท าการสื่อสารโดยตรงกับแท็บเบล็กเซิร์ฟเวอร์เพื่อจะร้องขอให้อ่านหรือเขียนข้อมูล ท าให้ในทางปฏิบัติภาระงานของเซิร์ฟเวอร์หลักมีไม่มาก
19
สรุปโครงสร้างการเก็บข้อมูล
หนึ่ง BigTable คลัสเตอร์ (A BigTable cluster) จะประกอบไปด้วยหลายตาราง (table)
แต่ละตารางประกอบด้วยแท็บเบล็ก
แต่ละแท็บเบล็กประกอบด้วยข้อมูลทีม่ีความสัมพนัธ์และอยู่ในช่วงแถวเดียวกัน (row range)
ตอนแรก ตารางจะมีเพียงแค่หนึ่งแท็บเบล็ก ต่อมาเมื่อตารางใหญ่ขึ้นตารางก็จะแยกออกมาเป็นหลายแท็บเบล็ก
โดยปกติ 1 แท็บเบล็กจะมีขนาดข้อมูลประมาณ 100-200 MB20
การประเมนิประสิทธิภาพ
การทดลองนั้นท ากับหนึ่ง BigTable คลัสเตอร์ที่ประกอบด้วย N แท็บเบล็กเซิร์ฟเวอร์
– มีวัตถุประสงค์เพื่อที่จะวัดประสิทธิภาพ (performance) และการปรับขนาดได้ตามภาระงาน (scalability) ของ BigTable ตามจ านวนแท็บเบล็กเซิร์ฟเวอร์ที่เพิ่มขึ้น
ทดสอบกับเครื่องคอมพิวเตอร์ทั้งหมด 1786 เครื่องโดยที่แต่ละเครื่องมีฮาร์ดดิกส์ 400 GB และมี CPU dual-core 2 GHz
21
จ านวนของโอเปอเรชันต่อวินาทีต่อแท็บเบลก็เซิร์ฟเวอร์
22
ผลการสรุปและวิเคราะห์
การอ่านข้อมูลแบบสุ่มใช้เวลามากที่สุดเนื่องจากต้องถ่ายโอนข้อมูล 64 KB SSTable ผ่านเครือข่ายจาก GFS ไปยังแท็บเบล็กเซิร์ฟเวอร์
การเขียนข้อมูลแบบสุม่หรือแบบตามล าดับใช้เวลาน้อยกว่าการอ่านข้อมูลแบบสุ่มเพราะแต่ละแท็บเบล็กเซิร์ฟเวอร์เอาสิ่งที่เขียนใส่ลงไปในล็อกเดียวกันและใช้การยืนยันการเขียน (commit) แบบกลุ่ม
23
จ านวนโอเปอเรชันต่อวินาที
24
ผลสรุปและวิเคราะห์
จ านวนโอเปอเรชันที่ท าเพิ่มตามจ านวนแท็บเบล็กเซิร์ฟเวอร์แต่ไม่ได้เพิ่มแบบเชิงเส้นซึ่งมีสาเหตุมาจาก
– การไม่สามารถท าให้ภาระงานของหลายเซิร์ฟเวอร์เกิดความสมดลุซึ่งส่วนหนึ่งมาจากการใช้ CPU และเครือข่ายของโปรเซสอื่น
– การปรับเปลี่ยนภาระงานเพื่อท าให้เกิดความสมดุลนั้นจะต้องใช้เวลาซึ่งอาจจะไม่ทันเวลาที่ภาระงานเปลี่ยนไป
25
ข้อจ ากัดของ BigTable
BigTable มีข้อจ ากัดในเรื่องของการไม่สนับสนุนค าสั่งสอบถาม (query) บางประเภท เช่น– การเปรียบเทียบข้อมูลที่ใช้เครื่องหมายไม่เท่ากันนั้น ในค าสั่งสอบถามหนึ่งใช้ได้เฉพาะการเปรียบเทียบข้อมูลชนิดเดียวเท่านั้น
– ตัวอย่างค าสั่งสอบถามที่ท าไม่ได้SELECT * FROM Person WHERE birth_year >= :min_year
AND height >= :min_height # ERROR26
หัวข้อที่จะพูด
BigTableGoogle App Engine
27
Google App Engine คืออะไร
Google App Engine คือการบริการที่ท าให้ผู้ใช้สามารถพัฒนาเว็บแอปพลิเคชันโดยใช้เซริ์ฟเวอร์ของกูเกิลซึ่งเป็นเซิร์ฟเวอร์เดียวกับที่ใช้การรันแอปพลิเคชันต่างๆ ของกูเกิล
ผู้ใช้บริการจ่ายค่าบริการเฉพาะเท่าที่ใช้จริงและสามารถก าหนดว่าต้องการจะใช้มากเพียงใดด้วยตนเอง
ทุกแอปพลิเคชันสามารถใช้ได้ฟรีตราบใดที่ใช้พื้นที่ไม่เกิน 500 MB และมีจ านวนการเข้าเยี่ยมชมไม่เกิน 5 ล้านเพจต่อเดือน
28
ข้อดีของ Google App Engine
ผู้ใช้บริการไม่ต้องติดต้ังหรือซ่อมบ ารุงดูแลรักษาซอฟต์แวร์และฮาร์ดแวร์ที่จ าเป็นต้องมีเพื่อรันแอปพลิเคชัน
ผู้ใช้บริการไม่ต้องกังวลวา่จะต้องท าอย่างไรบ้างเพื่อรองรับการขยายภาระงานที่เพิ่มขึ้นจากการใช้เว็บแอปพลิเคชันมากขึน้โดยที่กูเกิลใหบ้ริการโดยใช้เทคโนโลยี Cloud Computing
ผู้ใช้บริการสามารถก าหนดโดเมนของเว็บแอปพลิเคชันของตน
การพัฒนาแอปพลิเคชันท าได้ง่ายมาก และสามารถท าได้ใน 2 สภาพแวดล้อมคอื Java และ Python
29
ข้อเสียของการใช ้Google App Engine
ข้อมูลที่เป็นความลับขององค์กรไม่ได้อยู่ในเซิร์ฟเวอร์ที่องค์กรสามารถบังคับควบคุมได้
มีข้อจ ากัดในเรื่องของการใช้บางภาษาเช่น VB, C#, และ PHP
มีความเสี่ยงในการพัฒนาเว็บแอปพลิเคชันเพราะกูเกิลไม่เคยรับประกันความเสี่ยงหรือรับประกันว่าจะให้บริการอย่างดีตลอดไป
30
แนวทางการพัฒนาเว็บ
31
สถาปัตยกรรมของ Google App Engine
32
Google App Engine ในฐานะ Application Server
33
การพฒันาเว็บแอปพลิเคชันบน GAEโดยใช้ Python
ดาวน์โหลดและติดตั้งเครื่องมือที่ใช้ในการพัฒนา
เรียนรู้การใช้เฟรมเวิร์ค webapp
เรียนรู้การใช้ Users Service
การจัดการฟอร์มโดยใช้ webapp
การใช้ Datastore
การใช้ Templates
การใช้ Static Files
การอัปโหลด Application34
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
การดาวน์โหลด Python SDK
ให้ไปที่ http://code.google.com/appengine/downloads.html
เลือกGoogle App Engine SDK for Python
เลือกดาวน์โหลดตามแพลตฟอรม์ที่ใช้
36
การพฒันา Hello World Application
แตกไฟล์ google_appengine_1.3.8.zip
สร้างตัวจัดการการร้องขอแบบง่าย (Creating a Simple Request Handler)สร้างไฟล์ก าหนดค่า (Creating a Configuration File)ทดสอบแอปพลิเคชัน (Testing the application)
37
สร้างตัวจัดการการร้องขอแบบง่าย
สร้างไดเรกทอรี helloworld ภายใต้ไดเรกทอรี google_appengine
สร้างไฟล์ helloworld.py ในไดเรกทอรี โดยที่เนื้อหาในไฟล์มีดังนี้
38ไฟล์นี้จะตอบสนองการร้องขอโดยการแสดงบรรทัดว่างและข้อความ “Hello, world!”
สร้างไฟล ์Configuration
แอปพลิเคชัน App Engine มีไฟล์ configuration ที่ชื่อว่าapp.yamlไฟล์นี้อธิบายเกี่ยวกับสคริปต์ที่จะถูกเรียกเพื่อตอบสนอง URLs สร้างไฟล์ app.yaml ซึ่งมีเนื้อหาดังต่อไปนี้
39
ทดสอบแอปพลเิคชัน
สั่งให้เว็บเซิร์ฟเวอร์เริ่มท างานโดยการใช้ค าสั่ง dev_appserver.py
ทดสอบแอปพลิเคชันโดยเปิดเบราว์เซอร์ที่ http://localhost:8080
40
การใช้เฟรมเวิร์ก
หากผู้พัฒนาแอปพลิเคชันจะต้องเขียนโค้ดเยอะมากด้วยตนเอง ก็จะท าให้การพฒันาแอปพลิเคชันเป็นไปช้าและมีโอกาสมีข้อผิดพลาดเยอะGoogle App Engine สนับสนุนการใช้เฟรมเวิร์กซึ่งเขียนโดยใช้ Python และสนับสนุนการติดต่อแบบ CGI หลายตัว อาทิเช่น Django, CherryPy, Pylons, and web.pyGoogle App Engine มีเว็บแอปพลิเคชันเฟรมเวิร์กแบบง่ายที่เรียกว่า webapp
41
การใช้เฟรมเวิร์ก webapp
แอปพลิเคชัน webapp มี 3 ส่วน– อย่างน้อยหนึ่ง RequestHandler คลาสที่ประมวลผลการร้องขอและการสร้างการตอบรับ
– อินสแตนท์ WSGIApplication ซึ่งเชื่อมโยงระหว่างการร้องขอที่เข้ามาและตัวจัดการโดยดูที่ URL
– เมธอดหลกัที่รัน WSGIApplication โดยใช้ CGI adaptor
42
ลงทะเบียนแอปพลิเคชัน
ไปที่ https://appengine.google.com/
กูเกิลจะให้กรอกข้อมูลของแอปพลิเคชันและเบอร์โทรศัพท์เพื่อจะได้รับโค้ดยืนยันทาง SMS จากนั้น ผู้ใช้กรอกโค้ดที่ได้รับทาง SMS เปลี่ยนแปลงแก้ไขไฟล์ app.yaml เพื่อแก้ไขชื่อของแอปพลิเคชันตามที่กรอกในแบบฟอร์ม
43
แก้ไขไฟล์ app.yaml
44
แก้ไขไฟล์ app.yaml โดยที่แก้ไขชื่อ application
ท าการอัปโหลดขึ้นเว็บ appspot.com
45
ใช้สคริปต์ appcfg.py และค าสั่ง update ในการอัปโหลดขึนเว็บ
เว็บแอปพลิเคชันที่อัปโหลดและลงทะเบียนแล้ว
46
สรุป
Google App Engine เป็นการบริการที่ให้ผู้ใช้พัฒนาแอปพลิเคชันบนแพลตฟอร์มของ Google ที่มีความสามารถปรับขนาดได้ (scalability) โดยใช้เทคโนโลยี cloud computing และมีความปลอดภัยสูง (security)Google App Engine ใช้ Bigtable และ Google File System ในการเก็บและค้นหาข้อมลู Google App Engine ใช้งานได้ง่าย
47
แหล่งข้อมูลอ้างอิง
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
ขอขอบคุณ
http://twitter.com/krunapon
http://www.slideshare.net/krunapon
http://gear.kku.ac.th/~krunapon
49