Dich sach Building Scabable Web Sites Chương 1

Chương 1 Giới thiệu

Trước khi chúng ta đi sâu vào thiết kế và lập trình, chúng ta cần lùi lại một bước và định nghĩa một số thuật ngữ. Chúng ta đang muốn làm gì và khác gì với những thứ chúng ta đã làm trước đây? Nếu bạn đã xây dựng vài ứng dụng web, bạn có thể chuyển ngay sang chương tiếp theo (Nơi chúng ta sẽ đi vào một chút lý thuyết(nerdier))m nhưng nếu bạn thích việc xem chút tổng quan thì hãy bắt đầu từ trang này.

Web application là gì?

Nếu bạn đang đọc sách này, bạn có thể sẽ có khái niệm về ứng dụng web là gì, nhưng nó chưa thực chính xác. Một ứng dụng web không phải là một web site cũng không phải là một ứng dụng theo nghĩa là ứng dụng desktop. Một ứng dụng web là kết hợp cả hai.

Trong khi một website bao gồm các trang của dữ liệu, một ứng dụng web bao gồm dữ liệu được chia ra bởi các cơ chế. Trong khi người dùng web thích việc chia thành html vs css, web application designer thích việc chia dữ liệu: dữ liệu trong web application không làm gì với markup(mặc dù chúng có thể chứa markup). Chúng ta lưu trữ các tin nhắn tách biệt với markup. Đến khi muốn hiển thị dữ liệu tới người dùng, chúng ta sẽ lấy tin nhắn từ nơi lưu trữ dữ liệu (thường là csdl) và chuyển dữ liệu tới cho người dùng (điển hình là HTML thông qua HTTP). Chúng ta không nhất thiết phải chuyển dữ liệu sử dụng HTML, chúng ta có thể chuyển PDF qua email.

Web applications không có các trang theo cách các web site làm. Trong khi một web application chỉ có 10 trang, thêm dữ liệu vào đã lưu trữ và tăng các trang không cần thêm các trang hay source code. Với các tính năng search, nhập vào từ người dùng, một ứng dụng web có thể có số lượng trang không giới hạn mà không cần phải tạo các trang HTML. Một tập template nhỏ và chút logic cho phép chúng ta có thể tạo ra trang on the fly dựa vào các tham số từ URL hoặc POST data.

Đối với người dùng, ứng dụng web là không khác gì với một web site bình thường. Một blog đơn giản, chúng ta không thể đâu là trang được tạo ra từ dữ liệu hay được viết như một trang HTML tĩnh. Phần mở rộng file có thể giúp ta phân biệt được, nhưng cũng có thể làm giả được điều đó. MỘt ứng dụng web thường giống như một trang cho phép người dùng nhập dữ liệu. Điều này là thông thường, khong phải luôn luôn là thông qua giao diện HTML, nhưng có thể chỉ đơn giản là thông qua ứng dụng desktop để sửa dữ liệu trực tiếp hoặc remote.

Với AJAX, trước đây được coi như là remote scripting hay “remoting”, mô hình thao tác trên ứng dụng web đã được mở rộng, Trong quá khứ, người dùng thao tác với ứng dụng web sử dụng page-based model. Một người dùng gửi yêu cầu về trang web từ server, gửi lên các thay đổi thông qua HTTP POST, và nhận về một trang mới, xác nhận thay đổi hoặc xem dữ liệu đã thay đổi. Với Ajax, chúng ta có thể gửi dữ liệu đã thay đổi in the background mà không cần thay đổi trang người dùng trên đó, như là tương tác với giao diện desktop application.

Web application thay đổi một cách chậm chạp. Với ứng dụng giống như Google Gmail và Microsoft Office Live, chợ ứng dụng đã chuyển được điểm tốt của ứng dụng desktop lên môi trường web kết hợp với lợi ích của wbe applications. Trong khi ứng dụng desktop giàu tương tác và nhanh chóng, ứng dụng web lại có khả năng nâng cấp với zero-effort, hoàn toàn portable data, giảm client requerement.

Vậy xây dựng web application như thế nào?

Để xây dựng một web applications, chúng ta cần tạo ít nhất 2 components: hardware platform và software platform. Với ứng dụng đơn giản, phần cứng chỉ đơn giản là một máy chủ chia sẻ một web server và một database. Ở mức nhỏ chúng ta không cần nghĩ về hardware như một component của ứng dụng của chúng ta, nhưng nó lớn lên, nó trở thành một phần quan trọng. Trong cuốn sách này sẽ nhìn cả 2 phía của application design và engineering, cách chúng ảnh hưởng đến nhau, và kết hợp chúng để tạo nên một kiến trúc hiệu quả.

Lập trình viên những người làm việc với small scale có thể hỏi rằng tại sao chúng ta lại phải lo lắng về “platform desigin”. Chúng ta tiết kiệm thời gian và tiền bạc để làm việc với các ứng dụng servicable. Vấn đề sẽ xảy ra ở mức lớn - không có công cụ nào cho phép bạn xây dựng những thứ giống Amazon hoặc Friendster. Trong khi với chức năng bình thường, nhưng những chức năng đó làm việc cho hàng triệu sản phẩm, hàng triệu người dùng, không yêu cầu quá nhiều về phần cứng để có thể customized và optimized chính xác những gì chúng ta cần. There’s a good reason why the largest applications on the Internet are all bespoke creations: no other approach can create massively scalableapplications within a reasonable budget.

Chúng ta đã nói về core của web applications, chúng ta có tập dữ liệu có thể truy cập và có thể sửa chữa. Chúng ta cần quyết định phải lưu trữ dữ liệu như nào (a schema), và làm sao có thể truy cập vào sửa chữa nó (business logic), và trình bày chúng tới người dùng của chúng ta (interaction logic). Trong chương 2, chúng t asex xem các phần khác nhau, cách chúng tương tác. Một thiết kế tốt làm việc từ dưới lên, từ kiến trúc phần mềm và phần cứng.

Cuốn sách này nhắm đến thiết kế và xây dựng một large scale applications. Tới cuối cuốn sách, bạn sẽ có những ý tưởng về thiết kế ứng dụng và kiến trúc của nó, và làm sao để mở rộng hệ thống và đi vào cài đặt chi tiết và thực hiện các thiết kế.

Kiếm trúc là gì?

Chúng ta thích nói về architecting application, nhưng nó thực sự là gì? Khi nào một kiến trúc sư thiết kế một ngôi nhà, anh ấy có một nhiệm vụ cụ thể: thu thập nguyên vật liệu, cân nhắc các lựa chọn và tạo ra bản blueprint. Khi xây dựng blueprint cho một ngôi nhà, chúng ta mong muốn vài thứ, ngôi nhà nên đặt ở đâu, tránh được giỏ mưa, đủ ánh sáng. Nhưng architecting application không giống như thế.

Để bắt đầu, nếu ngôi nhà giống phần mềm, kiến trúc sư phải tham gia vào tiến trình xây dựng, từ móng đặt nội thất. Khi anh ấy thiết kế và xây dựng nhà

Bắt đầu như thế nào?

Để bắt đầu thiết kế và xây dựng large-scale web application, bạn cần 4 thứ. Đầu tiên, bạn cần một ý tưởng. Đây là thứ khó nhất và không thường làm với vai trò kỹ sư. Trong khi các kĩ thuật và công nghệ trong sách có thể áp dụng cho ứng dụng nhỏ, chúng có thể optimal cho dự án lớn với sự tham gia của nhiều lập trình viên và nhiều người sử dụng. Nếu bạn có một ứng dụng chưa được launched hoặc nhỏ và cần scaling, bạn đã hoàn thành phần khó nhất và bạn có thể bắt đầu thiết kế việc large scale. Nếu bạn đã có một large scale application, nó vẫn cần một ý tưởng tốt là thông qua sách có thể kiểm tra lại.

Mỗi lần bạn có ý tưởng, bạn cần tìm vài người để xây nó. Ứng dụng vừa và nhỏ có thể xây dựng bởi một kĩ sư, ứng dụng lớn cần một đội lớn hơn. Tháng 12 năm 2005, Flickr có hơn 100,000 dòng source code, 50,000 dòng template code, 10,000 dòng JavaScript. Quá nhiều để một kỹ sư maintain, vì thế cần có nhiều kĩ sư để cùng maintain. Chúng ta cũng xem vài kỹ thuật để quản lý phát triển với nhiều kỹ sư trong chương 3. Để xây dựng một ứng dụng với bất kỳ kích cỡ team, bạn sẽ cần một môi trường phát triển và một staging environment (giả sử bạn thực sự muốn release nó). Chúng ta nói về development và staging environment đi kèm các công cụ trong chương 3, nhưng ở mức cơ bản, bạn cần một máy tính chạy web server và database server.

Thứ quan trọng nhất bạn cần là phương pháp thảo luận và lưu trữ trong tiến trình phát triển. Các tài liệu chi tiết có thể là tẻ nhạt, nhưng không viết gì có thể sẽ là thảm họa. Một good pad hoặc paper có thể đủ với một team nhỏ, hoặc một whiteboard (sau đó chụp ảnh), Wiki cũng là một lựa chọn. Với một đội lớn Wiki là cách tốt cho việc ghi chú và viết tài liệu, cho phpes tất cả lập trình viên của bạn có thể thêm, sửa và xem tài liệu của những người khác.
….

Với bút và Wiki trong tay, chúng ta sẽ bắt đầu thiết kế kiến trúc ứng dụng của chúng ta và bắt đầu thay đổi thế giới ứng dụng.