Xây dựng Website theo hướng dịch vụ (SaaS) sử dụng công nghệ điện

Một phần của tài liệu Tìm hiểu về điện toán đám mây và xây dựng ứng dựng web theo hướng dịch vụ (Trang 53)

nghệ điện toán đám mây là dịch vụ lưu trữ đơn giản của Amazon:

Dưới đây là những bước làm của em để xây dựng một trang Web đơn giản cho khách hàng đăng ký, truy cập và upload ảnh/tài liệu lên đám mây của Amazon S3 bằng ngôn ngữ PHP dùng Zend Framework. Trang Web này tuy đơn giản nhưng là một ví dụ điển hình về cách thức xây dựng và hoạt động của các mô hình trong điện toán đám mây.

Các mô hình dịch vụ của điện toán đám mây được ứng dụng như sau:

 Cơ sở hạ tầng là dịch vụ (IaaS): Amazon S3.

 Nền tảng là dịch vụ (PaaS): MySQL, Wamp server.

 Phần mềm là dịch vụ (SaaS): Website quản lý danh sách liên lạc và tài

liệu online.

a) Đăng ký tài khoản Amazon S3:

Bước đầu tiên để bắt đầu xây dựng trang Web quản lý danh sách liên lạc và tài liệu online đó chính là lựa chọn ra một nhà cung cấp cơ sở hạ tầng hợp lý, các tiêu chí để lựa chọn có thể kể đến như là: Tính bảo mật, tính ảo hóa, co giãn, chế độ hậu mãi khách hàng, tính phục vụ, tính phổ biến,... Sau khi tìm hiểu, em đã quyết định chọn dịch vụ lưu trữ đơn giản – Amazon Simple Storage Service (Amazon S3) để phục vụ cho đề tài của mình.

Hiện tại, Amazon S3 hỗ trợ cho những người dùng đăng ký mới 5GB dung lương lưu trữ, 20000 Request nhận và 2000 Request gởi trong vòng 1 năm. Nếu sử dụng vượt qua các mốc này thì nhà nhà cung cấp sẽ bắt đầu tính phí.

Để bắt đầu sử dụng dịch vụ Amazon S3, người dùng cần phải đăng ký một tài khoản trên trang chủ. Cũng giống như những nhà cung cấp cơ sở hạ tầng khác, việc đăng ký tài khoản yêu cầu phải trải qua các bước khá ngiêm ngặt, mỗi người dùng cần phải tiến hành các bước như sau:

 Đăng nhập vào trang chủ của dịch vụ Amazon S3 tại địa chỉ:

http://aws.amazon.com/s3/ và chọn Creat Free Account.

 Sau khi nhập Email và mật khẩu, người dùng phải nhập đầy đủ tất cả các

thông tin như: địa chỉ, số điện thoại, số thẻ tín dụng,...

 Bước cuối cùng là kích hoạt tài khoản, Amazon S3 sẽ xác nhận email và

53

mail người dùng và mã số đăng ký vào số điện thoại người dùng đã cung cấp. Người dùng phải trả lời để xác nhận hai thông tin này.

Sau khi hoàn tất quá trình đăng ký, người dùng sẽ nhận được 3 thông tin quan trọng, bao gồm:

 Một ID khóa(ID Number) an toàn định danh cho người dùng, khóa này

dùng để chứng thực người dùng khi đăng nhập vào trang quản lý của Amazon S3, có cấu trúc như sau: 3879-7308-4219

 Một cặp khóa truy cập bí mật(Access Key): để tạo chữ ký số cho người

dùng, khóa này dùng để chứng thực sự toàn vẹn của dữ liệu khi gửi hoặc nhận, có cấu trúc như sau: Access Key ID: AKIAJTJVJ7C4AVCOV26Q, Secret Access Key: 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

 Các chứng nhận x.509 riêng và công cộng dùng để xác thực các quyền

của người dùng đối với các dữ liệu trên Amazon S3[6]. b) Tạo ra các đối tượng để lưu trữ dữ liệu trên Amazon S3:

Sau khi đã có tài khoản và các khóa, người dùng đã có thể bắt đầu sử dụng dịch vụ của Amazon S3, tuy rằng việc tạo ra các đối tượng để lưu trữ là rất đơn giản nhưng nếu không biết cách tạo thì sẽ rất khó để quản lý, tốn kém về tiền bạc và thời gian.

Tạo các thùng (Buckets):

Việc đầu tiên là tạo ra các thùng (Buckets), mỗi người dùng chỉ được phép tạo ra tối đa 100 thùng với các quy ước đặt tên như sau:

 Tên phải bắt đầu bằng một số hoặc một chữ cái.

 Độ dài của tên tối thiểu là 3 và dài nhất là 255.

 Một tên có hiệu lực có thể chỉ chứa các ký tự viết thường, chữ số, dấu

chấm, dấu gạch chân, và gấu gạch ngang.

 Mặc dù tên có thể có chữ số và dấu chấm, nhưng chúng không được sử

dụng định dạng số IP. Khách hàng không thể có một thùng với tên là 192.168.1.254.

 Không gian tên thùng được chia sẻ giữa các thùng trong tất cả các tài khoản trong S3. Vì vậy, tên của khách hàng phải là duy nhất trong S3. Các thùng chứa các đối tượng mà sẽ được truy cập bởi các địa chỉ URLs phải tuân theo các yêu cầu phụ của S3 như sau:

 Tên của các thùng không được chứa dấu gạch dưới.

54

 Tên không thể kết thúc với một dấu gạch ngang. Ví dụ, tên mypicture-

.bucket.com là không hợp lệ.

 Không chứa dấu gạch ngang đứng ngay trước dấu chấm. Tên my-

.bucket.com là không hợp lệ.

Bên cạnh việc đặt tên thì việc chọn khu vực cho các thùng cũng rất quan trọng, bởi ở các vị trí khác nhau thì giá cả cũng khác và nếu đặt mỗi thùng ở một nơi sẽ khiến cho việc cập nhật, đồng bộ dữ liệu bị chậm.

Cấu hình cho các thùng:

 Sau khi đã tạo, việc tiếp theo là phải cấu hình cho các thùng để người dùng có thể đăng, tải hoặc xem tài liệu. Người dùng cần phải cấu hình 2 thẻ: Permission (Quyền hạn) và Static Website Hosting (Trạng thái Website).

 Trong thẻ Permission: Người dùng sẽ thiết lập các quyền cơ bản như: Xem danh sách lưu trữ, đăng tài liệu, tải tài liệu, xem quyền hạn, xóa quyền hạn. Nếu muốn thiết lập các quyền nâng cao khác, người dùng có thể tự thiết lập bằng cách tự viết ra theo quy ước có sẵn của Amazon.  Đối với thẻ Static Website Hosting (Trạng thái Website): Việc này rất

quan trọng vì nếu không Enable Website Hosting thì dữ liệu đó sẽ không ai biết đến ngoài người dùng đăng nhập vào Amazon S3. Để bật chế độ này, người dùng phải cung cấp 2 tài liệu là Index và Error. Sau khi cung cấp đầy đủ, các thùng sẽ trở nên công khai giống như 1 website đã upload hosting và mọi người đều có thể xem tài nguyên trên nó với địa chỉ: http://bucketname.s3-website-region.amazonaws.com[5].

Để phục vụ cho đề tài này, em sẽ sử dụng 1 thùng duy nhất để quản lý dữ liệu của người dùng, lấy tên là “mywebsiteinvietnam”

Tạo ra các thư mục con để quản lý dữ liệu (ảnh/tài liệu):

 Để dễ dàng quản lý các dữ liệu của mình, người dùng nên tạo ra các thư

mục con chứa bên trong các thùng, số lương thư mục con không bị giới hạn và cũng không cần phải cấu hình như các thùng.

 Nhiệm vụ chính của website là cho người dùng lưu trữ ảnh và tài liệu nên trong đề tài của mình, em đã tạo ra 2 thư mục con bên trong thùng mywebsiteinvietnam là: “image” (lưu trữ ảnh) và “file” (lưu trữ các tập tin).

55

Sau khi đã có tài khoản và cấu hình đầy đủ dịch vụ cơ sở hạ tầng (IaaS) của Amazon S3, vấn đề tiếp theo cần giải quyết là tìm ra một dịch vụ nền tảng (PaaS) dùng để tạo và quản lý cơ sở dữ liệu. Trong đề tài này, em chọn cơ sở dữ liệu MySQL của hãng Oracle để đáp ứng yêu cầu đó.

Trong mô hình phần mềm là dịch vụ (SaaS) sử dụng cơ sở dữ liệu cho nhiều bên thuê (Multi-tenant Database), chính vì thế nên với quy mô trang web nhỏ gồm 3 khách hàng, em sẽ tổ chức cơ sở dữ liệu theo hướng: Mỗi khách hàng dùng riêng một cơ sở dữ liệu (database1, database2 và database3) và một cơ sở dữ liệu chủ để quản lý các cơ sở dữ liệu của khách hàng (zf_social)

Cấu trúc 2 cơ sở dữ liệu này như sau:

 Cơ sở dữ liệu zf_social: Gồm 1 bảng ausers để quản lý khách hàng

Bảng ausers dùng để lưu trữ thông tin của khách hàng, cấu trúc bảng như sau:

Bảng 2.12: Cấu trúc bảng ausers

Giải thích về các trường: id(mã khách hàng), username(tên đăng nhập), password(mật khẩu), email(email khách hàng), full_name(tên đầy đủ), status(trạng thái đăng nhập:1 được phép, 0 không được phép).

Ba cơ sở dữ liệu còn lại là database1, database2 và database 3 sẽ có cấu trúc giống nhau gồm: 1 bảng users và 1 bảng files

Bảng users dùng để lưu trữ thông tin người dùng của khách hàng, cấu trúc bảng này như sau:

56

Bảng 2.13: Cấu trúc bảng users

Giải thích về các trường: user_id(mã người dùng), user_name(tên người dùng), user_email(email người dùng), user_image(ảnh người dùng), id_father(mã khách hàng).

Bảng files dùng để lưu trữ các tập tin: word (2003/207), exel (2003/2007), pdf... của người dùng. Cấu trúc bảng này như sau:

Bảng 2.14: Cấu trúc bảng files

Giải thích về các trường: id(mã tài liệu), file_name(tên tài liệu), file_date(ngày đăng), file_link(đường dẫn nơi lưu trữ của tài liệu).

e) Sử dụng thư viện Zend_Service_MultiDB để xây dựng cơ sở dữ liệu theo mô hình Multi-tenant Database của SaaS cho người dùng:

Khi đã có cơ sở dữ liệu và dịch vụ lưu trữ, bước tiếp theo em sẽ lập trình Zend Framework để xây dựng website. Lý do sử dụng Zend Framework là vì bộ thư viện của Zend có hỗ trợ kết nối đến các đám mây của Amazon, bao gồm cả: Amazon Simple Storage Service(S3), Amazon Elastic computing(EC2) và Amazon Simple Queue Service(SQS).

Để kết nối cơ sở dữ liệu MySQL vào Zend Framework, người dùng có thể dùng lớp Zend_DB hoặc Zend_DB_Table. Do website quản lý danh sách liên lạc và tài liệu online ứng dụng dịch vụ SaaS nên cơ sở dữ liệu phải được xây dựng cho nhiều

57

bên thuê (multi-tenant database), chính vì thế nên em đã sử dụng lớp Zend_Application_Resource_MultiDB để cấu hình theo hướng này.

Cách kết nối:

Cấu hình trong file application.ini của project:

resources.multidb.db1.adapter = "PDO_MYSQL" resources.multidb.db1.host = "localhost" resources.multidb.db1.username = "root" resources.multidb.db1.password = "" resources.multidb.db1.dbname = " database1" resources.multidb.db1.default = true resources.multidb.db1.charset = "utf8" resources.multidb.db2.adapter = "PDO_MYSQL" resources.multidb.db2.host = "localhost" resources.multidb.db2.username = "root" resources.multidb.db2.password = "" resources.multidb.db2.dbname = " database2" resources.multidb.db2.charset = "utf8" resources.multidb.db3.adapter = "PDO_MYSQL" resources.multidb.db3.host = "localhost" resources.multidb.db3.username = "root" resources.multidb.db3.password = "" resources.multidb.db3.dbname = "database3" resources.multidb.db3.charset = "utf8" Cách sử dụng:

Ứng với mỗi Module, nếu muốn sử dụng cơ sở dữ liệu nào thì chỉ cần truyền vào 2 biến:

protected $_schema = ' tên cơ sở dữ liệu'; protected $_name = 'tên bảng';

f) Sử dụng Zend Framework kết nối đến đám mây Amazon S3:

Amazon S3 quy ước mọi kết nối đến đám mây sẽ được chứng thực thông qua khóa truy câp (access key), khóa này được cung cấp cho người dùng khi đăng ký tài khoản trên Amazon S3. Cấu trúc khóa như sau:

58

$awsSecretKey = 'v9/8nhX6Drk60JJIO2VAdGulhzo0ASO5UMRE4Zxj';Lớp

được sử dụng để kết nối là Zend_Service_Amazon_S3. Ngoài ra, người dùng cũng cần phải cung cấp tên của các thùng(buckets) để thực hiện đăng tài liệu, ví dụ: $bucketName = 'mywebsiteinvietnam'. Như vậy, để kết nối đến đám mây, người dùng sẽ phải cung cấp khóa truy cập, tên thùng và gọi lớp cần thiết. Dưới đây là đoạn mã

mà em sử dụng để kết nối:

require_once('Zend/Service/Amazon/S3.php'); $awsKey = 'AKIAJTJVJ7C4AVCOV26Q';

$awsSecretKey = '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'; $s3 = new Zend_Service_Amazon_S3($awsKey, $awsSecretKey); $bucketName = 'mywebsiteinvietnam';

$s3 = new Zend_Service_Amazon_S3($awsKey, $awsSecretKey);

Lớp Zend_Service_Amazon_S3 cung cấp các hàm dưới đây để người dùng tương tác với các đối tượng trên dịch vụ lưu trữ:

Đối với các thùng (Buckets):

listBuckets: lấy danh sách các thùng. getBucket: lấy tên một thùng.

creatBucket: tạo mới một thùng.

cleanBucket: xóa dữ liệu trong một thùng. deleteBucket: xóa thùng.

getBucketLocation: lấy vị trí của thùng. Đối với các đối tượng (Objects):

copyObject: copy đối tượng. deleteObject: xóa đối tượng.

getObject: lấy dữ liệu cho đối tượng. getObjectInfo: lấy thông tin đối tượng. putFile: lấy file.

IsObjectAvailable: kiểm tra đối tượng có tồn tại hay không. getObjectsByBucket: lấy danh sách các đối tượng trong thùng. g) Xây dựng các chức năng cơ bản của trang web:

Chức năng đăng nhập: sử dụng lớp Zend_Auth_Adapter_DbTable để kiểm tra và cho phép người dùng đăng nhập vào website, đoạn mã như sau:

59

if ($this->_request->isPost()) {

$db = Zend_Registry::get('connectDB'); $auth = Zend_Auth::getInstance ();

$authAdapter = new Zend_Auth_Adapter_DbTable($db); $authAdapter->setTableName('ausers') ->setIdentityColumn('username') ->setCredentialColumn('password'); $uname = $this->_request->getParam('username'); $paswd = $this->_request->getParam('password'); $authAdapter->setIdentity($uname); $authAdapter->setCredential(md5($paswd)); $select = $authAdapter->getDbSelect(); $select->where('status = 1'); $result = $auth->authenticate($authAdapter); $flag = false; if ($result->isValid()){ $data = $authAdapter ->getResultRowObject(null, array('password')); $auth->getStorage()->write($data);

$authNamespace = new Zend_Session_Namespace('Zend_Auth'); $authNamespace->id =$auth->getIdentity()->id;

$authNamespace->username= $uname; $flag = true;

$this->_redirect('/user/index');}}}

Chức năng thêm mới người dùng: Sử dụng các lớp: Zend_Session_Namespace, Zend_Service_Amazon_S3, Zend_Form và Zend_Auth. Đoạn mã xử lý thêm như sau:

if($user_name!=NULL || $user_email!=NULL){ if ($form->images->isUploaded()){ $form->images->receive(); $b=$c=new Zend_Form_Element_Text('txt'); $b=basename($form->images->getFileName()); $c='C:/wamp/www/socialnetwork/public/images/'. basename($form->images->getFileName()); $s3->putFile($c,$bucketName . '/'.$b,'',array(Zend_Service_Amazon_S3::S3_ACL_HEADER=>

60

Zend_Service_Amazon_S3::S3_ACL_PUBLIC_READ));

$user_image='https://s3.amazonaws.com/mywebsiteinvietnam/'.$b; if($authNamespace->id % 2 != 0){

$class_post= new Default_Model_Db2();

$class_post->addPost($user_name, $user_email, $user_image, $auth->getIdentity()->id);}

else{

$class_post= new Default_Model_User();

$class_post->addPost($user_name, $user_email, $user_image, $auth->getIdentity()->id);}

$this->_helper->redirector('index');}

Else $this->view->note='Dữ liệu nhập vào không đúng!';

Chức năng xóa người dùng: Sử dụng lớp Zend_Auth để cho phép khách hàng xóa người dùng, đoạn mã như sau:

if ($del == 'Yes'){

$user_id = $this->getRequest()->getPost('user_id'); if($auth->getIdentity()->id % 2 != 0){

$class_user= new Default_Model_Db2(); $class_user->delPost($user_id);}

else{

$users = new Default_Model_User(); $users->delPost($user_id);}

$this->_helper->redirector('index');}

Chức năng sửa thông tin người dùng: Sử dụng các lớp:

Zend_Session_Namespace, Zend_Service_Amazon_S3, Zend_Form và Zend_Auth. Mã xử lý khá giống với chức năng thêm và bổ sung thêm phần xử lý ảnh, nếu đổi ảnh mới thì cập nhật, không có ảnh mới thì giữ nguyên ảnh cũ. Đoạn mã xử lý ảnh như sau: if($user_image !=""){ $data = array( 'user_name' => $user_name, 'user_email' => $user_email, 'user_image' => $user_image,);} else{ $data = array(

61

'user_name' => $user_name,

'user_email' => $user_email,);} $users->updatePost($user_id,$data); $this->_helper->redirector('index');

Chức năng đăng ký thành viên: Chỉ sử dụng lớp Zend_form để cho phép đăng ký thành viên mới, đoạn mã xử lý như sau:

if ($this->getRequest()->isPost()) { $formData = $this->getRequest()->getPost(); if ($form->isValid($formData)) { $username = $form->getValue('username'); $password = $form->getValue('password'); $email = $form->getValue('email'); $full_name = $form->getValue('full_name'); $posts = new Default_Model_Auser();

if($username!=NULL || $password!=NULL){ $mu= new Default_Model_UserDB();

$mu->creatDB($username);

$posts->addPost($username, $password, $email, $full_name); $this->_helper->redirector('hompage');}

Else $this->view->note='Dữ liệu nhập vào không đúng!';

Đối với các tài liệu, việc quản lý (thêm, xóa) cũng khá giống với cách quản lý và kết nối tới đám mây của người dùng nên em chỉ xin trình bày phần quản lý người dùng.

62

Chương 3: KẾT QUẢ CÀI ĐẶT 3.1 Giới thiệu chương trình:

Website quản lý danh sách người dùng và tài liệu online là một trang web quy mô nhỏ ứng dụng công nghệ điện toán đám mây, trong đó thành phần cơ sở hạ tầng là dịch vụ lưu trữ đơn giản của Amazon kết hợp với nền tảng cơ sở dữ liệu MySQL của Oracle. Trang Web cho phép khách hàng đăng ký và quản lý danh sách những người thân của mình cũng như những tài liệu cá nhân giống như một ổ cứng di động online mà khách hàng có thể truy cập từ bất kỳ đâu, bằng bất kỳ phương tiện gì chỉ cần có kết nối internet.

Hình 3.1: Giao diện trang chủ

Đến với Website quản lý danh sách liên lạc và tài liệu online, khách hàng sẽ được trải nghiệm một công nghệ lưu trữ dữ liệu hoàn toàn mới, thay vì hình ảnh và tài liệu lưu trữ trên Web server theo cách truyền thống thì ở website này, tất cả những hình ảnh và tài liệu của khách hàng sẽ được lưu trữ trên đám mây Amazon S3. Khách hàng có thể nhâp danh sách liên lạc và đăng lên tài liệu của mình một cách thoải mái mà không cần lo ngại đến một sự giới hạn nào cả, mọi thứ đều miễn phí.

3.2 Hướng dẫn sử dụng:

 Đăng ký tài khoản: Để bắt đầu sử dụng trang web, khách hàng cần phải đăng ký cho mình một tài khoản bằng cách nhấp vào nút “ĐĂNG KÝ TÀI KHOẢN” trên trang chủ. Giao diện trang đăng ký hiện ra, khách hàng chỉ cần nhập đầy đủ thông tin là nhấp vào nút “Đăng ký” để hoàn tất:

63

Hình 3.2: Giao diện trang đăng ký thành viên

 Đăng nhập: khi đã có tài khoản, khách hàng cần tiến hành đăng nhập để

sử dụng website bằng cách nhập Username và Password trên trang chủ website, sau đó chọn vào nút “Login” để đăng nhập:

Hình 3.3: Giao diện trang đăng nhập

 Lựa chọn giao diện quản lý: chức năng này giúp khách hàng có thể đi

64

liệu” để đến trang quản lý tài liệu online hoặc ấn vào nút “Danh Bạ” để đến trang quản lý người dùng online.

Hình 3.4 Trang lựa chọn giao diện quản lý

Một phần của tài liệu Tìm hiểu về điện toán đám mây và xây dựng ứng dựng web theo hướng dịch vụ (Trang 53)

Tải bản đầy đủ (PDF)

(75 trang)