Chương 1 : H Hình 3: minh họa về khả năng mở rộng của KVS Hiệu năng cao Khả năng đạt được hiệu u năng cao nhất nh cho một cấu hình. Sự mở rộng Khả năng cung cấp dịch ch vvụ hiệu quả ở các mức độ mở rộng ng khác nhau nhau. Sự mềm dẻo Khả năng thích ứng ng và thay đđổi quy mô đơn giản.3 Hỗ trợ mạnh nh giao tác ACID @fdb @fdb.transactional def example(tr): # Read two values from the database a = tr.get('b') # Write two key-value pairs to the database tr.set('d', a+b) example(db) Giao tác ACID là mô hình lập trình đơn giản và mạnh mẽ nhất để giải quyết các vấn đề liên quan đến tính đồng thời. KVS là một trong số ít CSDL phân tán cung cấp đầy đủ giao tác ACID với hiệu năng cao.
Giao tác Một giao tác được định nghĩa là một tập các thao tác đọc ghi vào CSDL được xử lý như một thao tác với một vài thuộc tính quan trọng. Thứ nhất tất cả các thao tác đọc đều đọc vào một ảnh của CSDL(không thấy được thay đổi của dữ liệu khi có các giao tác thực thi đồng thời). Thứ hai các thao tác ghi trong cùng một giao tác thì tất cả đều thành công hoặc tất cả đều thất bại. Cuối cùng khi giao tác hoàn thành(commit) những thay đổi dữ liệu do thao tác ghi đều được lưu trữ vĩnh viễn vào CSDL.Mọi ứng dụng đều có nhu cầu hỗ trợ nhiều người dùng đồng thời, nên cần được xây dựng để sử dụng các giao tác có đầy đủ tính ACID.
Giao tác ngày càng đóng vai trò quan trọng trong sự phát triển của NoSQL. Giao tác giải quyết sự đồng thời Sự đồng thời (Concurrency) xảy ra khi có nhiều người dùng, hay một phần của ứng dụng đọc và ghi vào cùng một dữ liệu cùng một lúc. Giao tác giúp cho việc quản lý sự đồng thời đơn giản hơn cho nhà phát triển. Thuộc tính chính của giao tác dễ đạt được là tính cô lập (Isolation).
Khi một hệ thống đảm bảo rằng giao tác thực sự được cô lập, nhà phát triển có thể coi mỗi giao tác là thực thi tuần tự dù thực sự chúng đang thực thi đồng thời.Một vài hệ thống chỉ cung cấp các giao tác ACID cho một tập hạn chế các chế độ hoạt động, thông thường bị giới hạn bởi cấu trúc của mô hình dữ liệu. Tuy nhiên, sức mạnh thật sự của giao tác nằm ở chỗ chúng có thể được định nghĩa bởi nhà phát triển trên bất cứ tập yếu tố dữ liệu nào. Một nhà phát triển làm việc với KVS có thể định nghĩa các giao tác đọc và ghi bất cứ số lượng bộ key-value. Khi nhà phát triển có thể tự do định nghĩa các giao tác mà không gặp rào cản nào, họ có thể sử dụng giao tác như các khối cơ bản của ứng dụng.
Giao tác tăng khả năng trừu tượng Giao tác cho phép xây dựng các lớp trừu tượng một cách đơn giản và hiệu quả cung cấp khả năng mở rộng để hỗ trợ đa dạng mô hình dữ liệu. Mô hình dữ liệu được z 18 tối ưu hóa cho biểu đồ, tài liệệu, dữ liệu tổ chức theo cột, hay dữ liệuu quan hhệ đều có thể được cài đặt ở các lớp p bên trên ccủa KVS. Trong hầu hết các trường ng hhợp, một đối tượng dữ liệu đơn lẻ trong mmột mô hình cao cấp hơn sẽ được sắp xếpp trên nhi nhiều bộ khóa-giá trị. Giao ao tác làm cho nó đơn giản gi để thực hiện các ánh xạ này bbằng cách đóng gói các thao tác cập nhậật vào các bộ khóa –giá trị trong các đơn vvị nguyên tử (Atomic units).Những lợii ích mà giao tác mang lại l còn lớn hơn là một lự ựa chọn linh hoạt về mô hình dữ liệu cấp p cao.
Chúng có thể th cho phép một đại diện dữ liliệu hiệu quả hơn trong một mô hình cụ thể.4 Đa dạng mô hình dữ li liệu Chương 1 : Hình H 4: Đa dạng mô hình dữ liệu Kiến trúc lớp độcc đáo của c KVS tách riêng công nghệ lưu trữ và mô hình dữ liệu của nó. Điều u này cho phép các nhà phát triển tri tạo ra các lớp mà họ ccần trong khi vẫn tiếp tục lưu trữ dữ liệu u trong m một hệ thống có khả năng mở rộng. z 19 Chương 1 : Hình 5: mô hình tích hợp ứng dụng với FDB Lớp ứng dụng có thể thao tác trực tiếp với KVS thông qua api. SQL layer hoặc Your Layer mô hình dữ liệu mới có khả năng tương thích với hệ thống có sẵn hoặc phục vụ như một framework.
Lớp dưới cùng là KVS tất cả dữ liệu được lưu trữ ở đây. z 20 Chương 1 : Hình 6: Mô hình logic của KVS z 21 1.3 Sql Layer SQL layer là một lớp phần ph mềm trung gian(engine) nó lưu dữ liệuu ở KVS, kế thừa các đặc tính củaa KVS. SQL layer là phù h hợp nhất cho các ứng dụng ng OLTP giải gi quyết bài toán nhiều ngườii dùng đồng thời. Đặc biệt SQL layer là mộột phần mềm nguồn mở.
Chống chịu lỗii (Fault tolerance) Mở rộng đượcc (Scalable) 1.1 Kiến trúc vật lý Chương 1 : Hình H 7: Kiến trúc vật lý đơn giản của SQL layer Một hệ thống đượcc xây dựng d với FoundationDB thường bao gồm m ba llớp: Trên cùng là lớp ứng ng d dụng (Application Layer) bao gồm nhiềuu máy chủ ch ứng dụng, máy chủ web đây là nơi ứng dụng triển khai và chạy. Ở giữa là lớp p SQL layer bao g gồm nhiều tiếnn trình SQL layer cung cấp c giao tiếp SQL hoặc truy cập đốii tưtượng vào lớp ứng dụng. SQL layer lưu ddữ liệu trong FoundationDB Cluster. Một phần ứng dụng có thể nhúng vào lớp p này như các thủ tụcc hay các hàm (Stored Procedure, Functions).
z 22 Dướii cùng là FoundationDB cluster (KVS cluster) xử x lý tất cả các trạng tr thái của hệ thống. Nó nên được đư cấu hình một chế độ dự phòng phù hhợp cho các mức chống chịu lỗii mong mu muốn. Kiến trúc vật lý đượcc đ đề nghị một bộ SQL layer và ứng dụng ng nên nnằm trên cùng một máy vật lý hoặcc máy ảo: Chương 1 : Hình H 8: Kiến trúc SQL layer được khuyến nghị Độ trễ thấp do hai lớp ứ ứng dụng và SQL layer nằm trên cùng mộtt máy. Khả năng chống lỗii đơn giản: gi do chỉ có giao tiếp giữaa các máy là FoundationDB client và FoundationDB cluster mà giao tiếp ti p này là ch chống chịu lỗi.
Nếu một máy cài lớ ớp ứng dụng bị lỗi hay hỏng hóc nó sẽ kéo theo ccả SQL layer và không ảnh nh hưởng hư đến các tiến trình ứng dụng đang chạy y ở các máy khác. Dễ dàng cân bằng tảii do FoundationDB client quản qu lý cân bằng tảải giữa tất cả FoundationDB client vàà FoundationDB cluster. Cân b bằng tải củaa yêu ccầu người dùng cho một máy chủ ứng dụng cụ thể là không thay đổi. z 23 Chia sẻ bộ xử lý đa nhân hiệu quả do lớp ứng dụng thường là đa luồng và có thể chia sẻ các nhân của vi xử lý với SQL layer.
Điều này lại trái ngược với việc mỗi tiến trình FoundationDB server chỉ sử dụng một nhân của bộ xử lý.2 Các tính năng chính Khác biệt so với các hệ quản trị CSDL: Tính năng RDBMS SQL Layer Mở rộng theo chiều dọc(Scale up) Mở rộng theo chiều Mở rộng như tăng cường hiệu năng máy ngang như thêm các node chủ. xử lý vào cluster Sử dụng sự nhân rộng(replication) Một Cluster bao gồm 5 Chống lỗi và cơ chế chống chịu lỗi cấu hình nodes trở lên KVS có sức thủ công. chống lỗi rất tốt. Phụ thuộc vào tổng số dữ liệu truy Batch pipelining để thực Hiệu năng truy cập, tốt khi tất cả dữ liệu nằm thi các câu truy vấn song vấn trong bộ nhớ chính.
song Timeout truy Cấu hình được Tối đa 5 giây vấn Đỗ trễ Thấp một vài ms Thấp một vài ms Mở rộng tuyến tính theo Thông lượng Giới hạn số node và nhân xử lý Tính cô lập của Cấu hình được thông thường SERIALIZABLE giao tác là READ COMMITTED Timeout giao tác Cấu hình được Tối đa 5 giây Những tính năng chính: Tính sẵn sàng cao (Highly avaiable) Khả năng mở rộng(Stateless scalability) Giao tác (Truly transactionnal) z 24 Lược đồ phân cấp (Hierarchical schema) SQL và JSON (SQL and JSON) Chỉ mục Truy vấn song song (Batch pipelining for parallel query execution) Một số hạn chế: Thời gian chạy giao tác không được vượt quá 5 giây 1.3 Tích hợp ORM SQL layer hộ trợ rất nhiều ORM phụ thuộc và ngôn ngữ xây dụng ứng dụng như: ActiveRecord Django Doctrine Hibernate Sequel SQLAlchemy Waterline 1.3 Quản trị FoundationDB[4] FoundationDB KVS cung cấp cho chúng ta một môi trường quản trị bằng dòng lệnh.1 Khởi động và dừng Trên môi trường linux sử dụng các câu lệnh sau để khởi động và dừng dịch vụ: user@host$ sudo service foundationdb start user@host$ sudo service foundationdb stop 1.2 Tập tin Cluster FoundationDB server và client sử dụng tập tin cluster (thường đặt tên fdb.cluster) để kết nối đến một cluster. Nội dung của tệp này là giống nhau cho các tiến trình cùng kết nối vào một cluster. Tệp này được tạo ra ngay khi cài đặt FoundationDB server và cập nhật tự động khi chúng ta thay đổi máy chủ điều phối. z 25 Để có thể kết nối đến cluster từ máy trạm (client) cần phải sao chép tệp cluster từ máy chủ điều phối vào đúng thư mục của FoundationDB client trên máy trạm.
Linux: /etc/foundationdb/fdb.3 Thêm node vào cluster Các bước để thêm một máy vào cluster(FoundationDB chỉ hỗ trợ xây dựng cluster với phiên bản trên hệ điều hành họ linux) Cài đặt FoundationDB vào máy tính muốn thêm vào cluster. Cấu hình để mỗi tiến trình FDB servers chạy trên một nhân của vi xử lý VD: CPU có 4 nhân thì chúng ta nên cấu hình chạy 4 tiến trình FDB servers để tận dụng tối đa hiệu năng của máy(lưu ý là mỗi tiến trình cần 4GB bộ nhớ RAM). Cấu hình có thể thay đổi trong file:foundationdb. Sao chép tệp cluster từ một máy(node) trong cluster vào đúng đường dẫn trên máy mới cài đặt Khởi động lại dịch vụ FDB servers trên máy mới user@host2$ sudo service foundationdb restart Chương 1 : Hình 9: Cấu hình cluster cơ bản bao gồm hai nodes z 26 1.4 Loại bỏ node từ cluster Lựa chọn chế độ dự phòng thích hợp với số node còn lại trong cluster.
Nếu máy cần loại bỏ đang là một trong nhưng máy điều phối cần thiết lập lại để máy này không là máy chủ điều phối.