1. Trang chủ
  2. » Luận Văn - Báo Cáo

Luận văn thạc sĩ Khoa học máy tính: Tích hợp dịch vụ chia sẻ dữ liệu phân tán vào hệ thống quản lý dữ liệu mở

82 0 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Cấu trúc

  • I. GIỚI THIỆU (13)
    • 1. Giới thiệu bài toán (13)
    • 2. Phạm vi và kết quả cần đạt được (13)
      • 2.1. Tích hợp Data Distributed vào hệ thống quản lý dữ liệu mở (14)
      • 2.2. Chuyển đổi dữ liệu từ Interface Definition Language sang chuẩn JSON (16)
      • 2.3. JSON tối ưu cho dữ liệu streaming (16)
    • 3. Các bài toán khác có liên quan trong bối cảnh hiện nay (17)
      • 3.1. Tính riêng tư của dữ liệu (17)
      • 3.2. Quyền sở hữu dữ liệu (17)
      • 3.3. Kiểm tra và đánh giá chất lượng của dữ liệu (18)
  • II. CƠ SỞ TRI THỨC VÀ CÔNG NGHỆ LIÊN QUAN (19)
    • 1. Dữ liệu mở - Open Data (19)
      • 1.1. Giới thiệu (19)
    • 2. Hệ thống quản lý dữ liệu mở CKAN (20)
    • 3. Dữ liệu Streaming (22)
      • 3.1. Giới thiệu (22)
      • 3.2. Lợi ích của dữ liệu Streaming (23)
      • 3.3. So sánh xử lý bó và xử lý luồng (24)
    • 4. Dịch vụ chia sẻ dữ liệu phân tán - Data Distributed Service (24)
      • 4.1. Giới thiệu (24)
      • 4.2. Các thành phần cơ bản (28)
      • 4.3. Luồng dữ liệu trong Data Distributed Service (29)
      • 4.4. Các tính năng quan trọng của DDS (30)
      • 4.5. Quality of Service – QoS (31)
    • 5. Kiểu dữ liệu trong Distributed Data Service (36)
      • 5.1. Type System (37)
      • 5.2. Type Representation (38)
      • 5.3. Data Representation (40)
      • 5.4. Language Binding (41)
    • 6. JSON (42)
      • 6.1. Lịch sử - Tiêu chuẩn (42)
      • 6.2. Cấu trúc - cú pháp (43)
      • 6.3. Ứng dụng - Cộng đồng (43)
      • 6.4. Binary JSON (BSON) (43)
      • 6.5. Cách lưu trữ dữ liệu streaming bằng JSON (44)
    • 7. MongoDB (44)
      • 7.1. Giới Thiệu (44)
      • 7.2. Các thành phần chính của kiến trúc MongoDB (45)
      • 7.3. Ưu điểm của MongaDB (46)
      • 7.4. Nhược điểm của MongoDB (47)
    • 8. Docker (47)
      • 8.1. Giới thiệu (47)
      • 8.2. Kiến trúc Docker Engine (48)
      • 8.3. Ưu đểm của Docker Container (49)
    • 9. Redis (49)
      • 9.1. Giới thiệu – Lịch sử phát triển (49)
      • 9.2. Tính năng (50)
      • 9.3. Ứng dụng (52)
      • 9.4. Ưu điểm (54)
      • 9.5. Nhược điểm (54)
  • III. NỘI DUNG GIẢI PHÁP ĐỀ XUẤT (56)
    • 1. Bài toán tích hợp (56)
      • 1.1. Cơ chế nhập dữ liệu trong hệ thống dữ liệu mở CKAN (56)
      • 1.2. Chức năng mở rộng - Plugin (57)
      • 1.3. Công việc chạy nền - Background jobs (57)
    • 2. Bài toán chuyển đổi (58)
      • 2.1. Chuyển đổi từ Plain Language Object thông qua IDL file (61)
    • 3. Bài toán lưu trữ và chia sẻ (62)
    • 4. Cơ chế tự động sinh mã và biên dịch tập tin thực thi (63)
    • 5. Cơ chế cập nhật dữ liệu nhận được vào datastore của CKAN và MongoDB (63)
    • 6. Tích hợp các thành phần tạo thành giải pháp hoàn chỉnh (64)
    • 7. Đánh giá khả năng của giải pháp (64)
  • IV. HIỆN THỰC GIẢI PHÁP (65)
    • 1. Môi trường hiện thực và công cụ sử dụng (65)
    • 2. Thiết lập vận hành nền tảng CKAN (65)
    • 3. Xây dựng plugin trong CKAN (67)
    • 4. API để cập nhật dữ liệu vào DataStore của MongoDB và CKAN (68)
    • 5. API để lưu các tập tin cấu hình mạng và mô tả kiểu dữ liệu (69)
    • 6. Thiết lập môi trường cho OpenDDS (70)
    • 7. Xây dựng bộ sinh mã để chuyển đổi (72)
    • 8. Xây dựng hệ thống hoàn chỉnh (74)
    • 9. Kiểm tra và đánh giá (74)
      • 9.1. Phương pháp và tiêu chí (74)
      • 9.2. Tiến hành cài đặt và kiểm tra (75)
    • 10. Kết luận (76)
  • V. TỔNG KẾT (77)
    • 1. Tổng kết nội dung (77)
    • 2. Hướng phát triển (77)
  • PHỤ LỤC (79)

Nội dung

GIỚI THIỆU

Giới thiệu bài toán

Dữ liệu ngày càng thể hiện vai trò cực kỳ quan trọng cho sự phát triển của rất nhiều lĩnh vực như: giáo dục, y tế, khoa học và kỹ thuật Góp phần thúc đẩy sự phát triển của kinh tế, nâng cao chất lượng cuộc sống và tạo ra những tri thức hoàn toàn mới cho nhân loại Sự ảnh hướng này kéo theo sự phát triển của lĩnh vực phân tích dữ liệu nhằm tận dụng tối đa giá trị mà dữ liệu mang lại Hạt nhân của các hệ thống phân tích dữ liệu chính là dữ liệu Dữ liệu càng nhiều thì độ chính xác của các hệ thống phân tích càng cao Do đó chia sẻ dữ liệu là môt xu hướng hiện nay Một mô hình được tạo ra từ xu hướng này đó chính là dữ liệu mở Hệ thống dữ liệu mở là một hệ thống cho phép xuất bản, phân loại, tìm kiếm và trực quan dữ liệu Người dùng có thể thao tác với hệ thống thông qua cổng dữ liệu mở

Thông thường, một hệ thống dữ liệu mở sẽ có rất nhiều bên tham gia đóng góp dữ liệu Các tổ chức xây dựng các hệ thống dữ liệu mở cũng mong muốn có càng nhiều bên tham gia càng tốt vì càng có nhiều bên tham gia đóng góp dữ liệu thì dữ liệu càng phong phú, đa dạng góp phần làm tăng độ chính xác cho các hệ thống phân tích Ngày nay, dữ liệu tồn tại ở rất nhiều dịnh dạng và từ nhiều nguồn khác nhau trong đó bao gồm: dữ liệu điện toán đám mây, mạng xã hội, Database, NoSQL data, dữ liệu từ điện thoại di động, các thiết bị cá nhân, và dữ liệu streaming, … Trong đó dữ liệu Streaming đóng vai trò quan trọng và hết sức phổ biến trong rất nhiều lĩnh vực như: ứng dụng di động hoặc web, giao dịch mua bán trên các sàn thương mại điện tử, hoạt động của người chơi trong trò chơi, thông tin từ các mạng xã hội, sàn giao dịch tài chính hoặc dịch vụ không gian địa lý và đo từ xa từ các thiết bị được kết nối hoặc thiết bị đo trong trung tâm dữ liệu,… các dữ liệu này có thể được chia sẻ vào các hệ thống quản lý dữ liệu mở và tạo rất nhiều lợi ích cũng như góp phần xây dựng, phát triển tập dữ liệu của hệ thống dữ liệu mở Do đó cần phát triển một phương pháp để có thể trao đổi dữ liệu dạng này ở các hệ thống quản lý dữ liệu mở

Quá trình xử lý dữ liệu streaming thường yêu cầu hai lớp: lớp lưu trữ và lớp xử lý Lớp lưu trữ cần hỗ trợ thứ tự bản ghi và tính nhất quán mạnh mẽ để cho phép đọc và ghi các luồng dữ liệu lớn, nhanh chóng, ít tốn kém và có thể đọc lại Lớp xử lý có nhiệm vụ tiêu thụ dữ liệu từ lớp lưu trữ, chạy các tính toán trên dữ liệu đó, sau đó thông báo cho lớp lưu trữ xóa dữ liệu không còn cần thiết Ngoài ra cần có khả năng mở rộng, độ bền của dữ liệu và khả năng chịu lỗi trong cả lớp lưu trữ và lớp xử lý Do đó ta cần một dịch vụ cho phép chia sẻ dữ liệu đảm bảo được các yêu cầu bên trên.

Phạm vi và kết quả cần đạt được

Để chia sẻ dữ liệu streaming thì có thể kể đến một số dịch vụ như sau: Amazone Kinesis, Apache Kafka, ActiveMQ, RabbitMQ, ZeroMQ, DDS, … Trong đó Trong đó Data Distributed Service – DDS có thể giải quyết vần đề về lưu trữ, xử lý, khả năng mở rộng cũng như khả năng xử lý lỗi Data Distributed Service – DDS được sử dụng

2 rộng rãi, phổ biến tại rất nhiều cơ quan tổ chức như: ADLINK Technology, eProsima, Hamersham, Kongsberg Gallium, MilSOFT, OCI, Remedi, RTI, Twin Oaks Computing, … [1]

Sản phẩm của những công ty này nằm trong rất nhiều lĩnh vực như: Thành phố thông minh, Năng lượng thông minh, Chăm sóc sức khỏe, y tế, Giao thông vận tải, Tự động hóa công nghiệp, Khai thác, … Do đó khi tích hợp DDS và hệ thống dữ liệu mở sẽ mở ra cơ hội nhận được dữ liệu từ nhiều bên khác nhau trong nhiều lĩnh vực khác nhau Do đó thúc đẩy sự phát triển của hệ thống dữ liệu mở

Ngoài ra, để thuận tiện cho việc xử lý cũng như lưu trữ thì dữ liệu trên các hệ thống quản lý dữ liệu mở thường được đưa về một hoặc một vài định dạng chung như: XML, JSON, YAML, CSV, … Do đó khi tích hợp các dịch vụ chia sẻ dữ liệu streaming thì cũng cần một bộ chuyển đổi để đưa dữ liệu về một trong những định dạng mà hệ thống quản lý dữ liệu hiện tại hỗ trợ

Vì vậy trong phạm nghiên cứu của đề tài này sẽ giải quyết cách vấn đề dưới đây

2.1 Tích hợp Data Distributed vào hệ thống quản lý dữ liệu mở

Thông thường, một hệ thống dữ liệu mở thường có rất nhiều bên tham gia đóng góp dữ liệu Các tổ chức xây dựng các hệ thống dữ liệu mở cũng mong muốn có càng nhiều bên tham gia càng tốt vì càng có nhiều bên tham gia đóng góp dữ liệu thì dữ liệu càng phong phú, đa dạng góp phần làm tăng độ chính xác cho các hệ thống phân tích Khi đó sẽ có một vấn đề xảy ra đó là dữ liệu sẽ có nhiều định dạng, nhiều kiểu khác nhau Do đó thông thường người ta sẽ dựng một hệ thống chuyển đổi để có thể lấy được những dữ liệu đa dạng này

Hình 1: Mô hình hệ thống chuyển đổi dữ liệu mở (1) Đây là một mô hình rất cơ bản, trong đó mỗi nguồn dữ liệu khác nhau sẽ có một bộ chuyển đổi để đưa về cùng một kiểu dữ liệu và cho vào hệ thống để lưu trữ Mô hình này đơn giản, dễ thực hiện, tuy nhiên khả năng mở rộng không cao Mỗi khi có thêm một kiểu dữ liệu mới thì lại cần phải có thêm một bộ chuyển đổi tương ứng cho kiểu dữ liệu mới đó Điều này làm mất đi tính linh động của hệ thống Giới hạn số lượng các tổ chức tham gia đóng góp dữ liệu vào hệ thống dữ liệu mở khi chưa có bộ

3 chuyển đổi tương ứng với dữ liệu hiện tại của tổ chức đó Điều này đi ngược lại mục tiêu ban đầu của hệ thống dữ liệu mở

Dưới đây là một mô hình khác cũng có thể giải quyết bài toán này

Hình 2: Mô hình hệ thống chuyển đổi dữ liệu mở (2)

Mô hình này khác với mô hình trước đó Các bộ chuyển đổi thay vì được hiện thực cố định trong hệ thống quản lý dữ liệu mở thì nó được hiện thực bằng một trong hai cách sau: o Hiện thực và chuyển đổi từ dữ liệu nguồn Việc chuyển đổi sẽ được thực hiện từ phía tổ chức cho dữ liệu Hệ thống quản lý dữ liệu mở sẽ nhận dữ liệu ở đúng kiểu mà nó cần o Hệ thống quản lý dữ liệu cung cấp một cơ chế cho phép các bên tham gia đóng góp dữ liệu có thể gắn các bộ chuyển đổi tương ứng đối với dữ liệu mà bên đó sẽ cho Hệ thống quản lý dữ liệu mở sẽ nhận dữ liệu từ bên và thực hiện chuyển đổi bằng các bộ chuyển đổi đã được gắn vào tương ứng

Hai cách trên đều có một điểm yếu chung đó là nó yêu cầu các bên tham gia phải hiểu được dữ liệu mà hệ thống dữ liệu mong muốn và có khả năng hiện thực các bộ chuyển đổi này Trong thực tế thì không nhiều bên tham gia có thể làm được và sẵn sàng làm hai việc trên Điều này cũng làm giảm số lượng các bên tham gia vào quá trình chia sẻ dữ liệu Do đó đề tài sẽ đề xuất một mô hình giúp khắc phục điểm yếu của những mô hình trên Mô hình này được mô tả trong hình dưới đây:

Hình 3: Mô hình hệ thống dữ liệu mở kết hợp với DDS

Mô hình này bản chất là Data Distribted Servive đóng vai trò như bộ chuyển đổi

Dữ liệu sẽ được đưa về cùng một kiểu mà chuẩn DDS quy định Mô hình này phần nào khắc phục được những yếu của các mô hình phía trên do DDS là một chuẩn mở và phổ biến nên nó làm cho các bên tham gia dễ dàng hơn trong việc tích hợp Ngoài ra DDS còn hỗ trợ một số tính năng khác như dữ liệu streaming, hiệu năng cao Điều này sẽ góp phần làm cho hệ thống dữ liệu mở tiếp cận được nhiều bên tham gia hơn

2.2 Chuyển đổi dữ liệu từ Interface Definition Language sang chuẩn JSON

Do hệ thống dữ liệu mở hiện tại quy ước JSON làm dữ liệu chuẩn Do đó tất cả dữ liệu phải được chuyển đổi về JSON trước khi lưu vào hệ thống Vì vậy khi tích hợp DDS vào hệ thống quản lý dữ liệu mở, ta cần phải chuyển đổi dữ liệu của chuẩn DDS là Interface Definition Language sang chuẩn JSON Trong đó ta cần chuyển đổi một số dạng dữ liệu được mô tả bởi IDL như sau [2]:

 Primitive Types: Boolean, byte, int8, uint8, int16, uint16, int32, uint32, int64, uint64, float32, float64, float128, char8, char16

2.3 JSON tối ưu cho dữ liệu streaming

Khi tích hợp Data Distributed Service vào hệ thống quản lý dữ liệu mở giúp cung cấp một cơ chế cho phép hệ thống quản lý dữ liệu mở nhận dữ liệu dạng streaming Như vậy ta đã giải quyết được đầu vào của dữ liệu streaming Tuy nhiên do hệ thống quản lý dữ liệu mở hiện tại đang lưu trữ dữ liệu dạng JSON và cung cấp cho người dùng dạng dữ liệu JSON Do đó để tương thích với hệ thống hiện tại ta cần nghiên cứu

5 một phương pháp để chuyển đổi dữ liệu từ Interface Definition Language (kiểu dữ liệu của DDS) qua JSON sao cho hiệu quả Như đã nói trước đó thì JSON được sử dụng trong dữ liệu streaming bằng cách truyền đi các JSON object Các JSON object được ngăn cách và định dạng bằng một trong những cách sau: o Không chứa ký tự xuống dòng trong JSON object và sử dụng ký tự này làm dấu phân cách [3] o Một ký tự điều khiển phân tách được gửi kèm với JSON object và được dùng làm dấu phân cách [4] o Các JSON object không có dấu phân cách và dựa vào các parser để trích xuất chúng o Các JSON object không có dấu phân cách nhưng có tiền tố chứa thông tin về độ dài của chúng và dựa vào các parser để trích xuất chúng

Mỗi cách trên đều có ưu nhược điểm riêng Bài toán đặt ra đó là tìm ra cách phù hợp nhất cho dữ liệu streaming của hệ thống dữ liệu hiện tại.

Các bài toán khác có liên quan trong bối cảnh hiện nay

Ngoài các vấn đề được trình bày trong luận văn, vẫn còn rất nhiều khía cạnh cần phải giải quyết khi tích hợp dữ liệu streaming trong bối cảnh cảnh dữ liệu mở hiện nay như o Tính riêng tư của dữ liệu (Data Privacy) o Quyền sở hữu dữ liệu (Data ownership) o Kiểm tra và đánh giá chất lượng của dữ liệu

3.1 Tính riêng tư của dữ liệu

Một số dữ liệu được chia sẻ mang tính định danh cá nhân, có thể bị lợi dụng vào các mục đíchkhông rõ ràng Trách nhiệm đảm bảo an toàn dữ liệu thuộc về cả 2 bên: chủ sở hữu dữ liệucũng như phía khai thác dữ liệu Vì vậy, về phía nhà khai thác dữ liệu, trước khi được đưa dữliệu vào sử dụng cho các mục đích công cộng, các dữ liệu cần phải được xử lý và làm mờ, loại bỏ các yếu tố có thể xác định được cá nhân và đảm bảo không tái định danh được thông tin cánhân Ngoài ra, không lưu trữ và truyền tải các dữ liệu khác với các mục đích đã thoả thuận.Để giải quyết bài toán này, hiện nay các hệ thống đang sử dụng các kỹ thuật nặc danh hoá(anonymize) và mã hoá dữ liệu

3.2 Quyền sở hữu dữ liệu

Trong thời đại số ngày nay, dữ liệu là tài sản, và tài sản thì phải có chủ sở hữu, từ đó hìnhthành vấn đề quan trọng là việc trao quyền sử dụng từ người sở hữu cho người sử dụng Đâylà một vấn đề phức tạo và mang tính nhiều chiều.Ví dụ, xem xét sự tồn tại của hai dạng cơ sở dữ liệu khác nhau về tính nguyên gốc của dữ liệu hay tư liệu thành phần của chúng Loại thứ nhất là các cơ sở dữ liệu gồm tập hợp các thôngtin do chính tác giả tổng hợp nên mà có, ví dụ như cơ sở dữ liệu về báo cáo kiểm toán củamột doanh nghiệp được gọi là sưu tập dữ liệu có tính nguyên gốc (original database) Loạithứ hai là cơ sở dữ liệu gồm tập hợp của các

6 thông tin/ dữ liệu công khai, thuộc về công chúng, được gọi là sưu tập dữ liệu không có tính nguyên gốc (non-original database) Tuỳtheo từng loại khác nhau mà quyền sở hữu dữ liệu sẽ mang tính bao hàm cho các thành phầnbên trong hoặc chỉ dừng lại ở mức bên ngoài Ngoài ra, cùng một nội dung có thể được sởhữu bởi nhiều cá nhân khác nhau, cần có các cơ chế giải quyết tranh chấp hoặc đồng sở hữudữ liệu

3.3 Kiểm tra và đánh giá chất lượng của dữ liệu

Là quá trình đảm bảo dữ liệu đạt tiêu chuẩn, phù hợp với mục tiêu, có khả năng đem lại lợiích khi đưa vào sử dụng phân tích Dữ liệu trước khi đưa vào sử dụng, trải qua các bước tiềnxử lý, rút trích thông tin nhằm bảo mật và đảm bảo an toàn thông tin cá nhân Quá trình này ít nhiều đã thay đổi bản chất và giá trị của dữ liệu, cần phải có một độ đo về tính khả dụng, chấtlượng thông tin, độ an toàn cũng như đảm bảo việc tuân thủ các cam kết, quy trình của hệthống Một số tiêu chuẩn đưa ra như độ chính xác, tính khách quan, độ tin cậy, giá trị có đượctừ dữ liệu, mức độ liên quan, phù hợp với mục đích, tính kịp thời, tính đầy đủ …

CƠ SỞ TRI THỨC VÀ CÔNG NGHỆ LIÊN QUAN

Dữ liệu mở - Open Data

Dữ liệu ngày càng thể hiện vai trò cực kỳ quan trọng cho sự phát triển của rất nhiều lĩnh vực như: giáo dục, y tế, khoa học và kỹ thuật Góp phần thúc đẩy sự phát triển của kinh tế, nâng cao chất lượng cuộc sống và tạo ra những tri thức hoàn toàn mới cho nhân loại Sự ảnh hướng này kéo theo sự phát triển của lĩnh vực phân tích dữ liệu nhằm tận dụng tối đa giá trị mà dữ liệu mang lại Hạt nhân của các hệ thống phân tích dữ liệu chính là dữ liệu Dữ liệu càng nhiều thì độ chính xác của các hệ thống phân tích càng cao Do đó chia sẻ dữ liệu là môt xu hướng hiện nay Một mô hình được tạo ra từ xu hướng này đó chính là dữ liệu mở Hệ thống dữ liệu mở là một hệ thống cho phép xuất bản, phân loại, tìm kiếm và trực quan dữ liệu Người dùng có thể thao tác với hệ thống thông qua cổng dữ liệu mở Một hệ thống dữ liệu mở phải đảm bảo các yêu cầu sau: o Dữ liệu phải đầy đủ và cập nhật o Mỗi bộ dữ liệu phải có định danh số và phiên bản dữ liệu khác nhau nếu có cập nhật, thay đổi theo thời gian o Không có các thông tin định danh mà ảnh hưởng đến mỗi con người cụ thể (ví dụ không được có dữ liệu mở về lịch sử bệnh tật một người có tên, tuổi thật) o Luôn online và miễn phí, không yêu cầu đăng ký, không bị gắn với bản quyền, phát minh sáng chế o Nguồn dữ liệu phải tin tưởng và có tổ chức chịu trách nhiệm với mỗi bộ dữ liệu, có chữ ký điện tử, xuất xứ, thời gian của bộ dữ liệu o Có thể hỗ trợ API để truy cập và tìm kiếm, lọc dữ liệu cần lấy o An toàn: không chứa mã độc, mã lệnh thực hiện trên máy người lấy hay dùng dữ liệu, không quá lớn để gây nghẽn mạng o Có tài liệu mô tả về dữ liệu đi kèm, Có danh sách các ứng dụng liên quan đã sử dụng dữ liệu

Lợi ích của dữ liệu mở

Dữ liệu mở có rất nhiều lợi ích, một trong số đó là: o Cho phép các tổ chức, chính phủ điều hành đưa ra những sáng tạo trong kinh doanh, dịch vụ cung cấp giá trị cho xã hội và thương mại o Là chìa khóa để nâng cao chất lượng dịch vụ và cuộc sống o Đẩy nhanh tiến độ lan truyền các dịch vụ kỹ thuật số trên web và nền tảng di động o Trao quyền và thu hút sự tham gia của người dùng o Là đầu vào cho các ngành quan trọng như nghiên cứu và giáo dục o Giúp cải thiện được tính minh bạch và công bằng

8 o Giúp làm giảm chi phí và tăng hiệu quả hoạt động cho các cơ quan tổ chức, cụ thể: Để giải quyết một vấn đề mang tính đa ngành, cần phải thu thập đầy đủ những dữ liệu, thông tin cần thiết từ tất cả các ngành liên quan, do đó sẽ phải cần rất nhiều người, đồng thời phải thực hiện hàng loạt những cuộc liên lạc và trao đổi Khi có Dữ liệu mở thì các vấn đề này đều được giải quyết nhanh chóng, kịp thời và chính xác

Một số hệ thống quản lý dữ liệu mở

Có rất nhiều hệ thống quản lý dữ liệu cho phép xây dựng hệ thống dữ liệu mở có thể kể đến như: o CKAN (The Comprehensive Knowledge Archive Network) [5] - là một DMS (data management system) mã nguồn mở cho phép các tổ chức xuất bản, chia sẻ, tìm kiếm và trực quan hóa dữ liệu cho những người dùng muốn tiếp cận dữ liệu o DKAN (The Drupal Knowledge Archive Network) [6] - là một DMS (data management system) mã nguồn mở với một bộ đầy đủ các tính năng biên mục, xuất bản, tìm kiếm và trực quan hóa cho phép các tổ chức dễ dàng chia sẻ dữ liệu với công chúng DKAN có nhân là CKAN và sự khác biệt so với CKAN nằm ở việc DKAN hỗ trợ khả năng danh mục dữ liệu thông qua việc sử dụng thêm CMS (Content management system) o OGPL (The Open Government Platform) [7] - cũng là một DMS (data management system) mã nguồn mở có nhân là CKAN được thực hiện dưới sự hợp tác của Ấn độ và Hoa Kỳ nhằm tạo ra một nền tảng nguồn mở để thúc đẩy tính minh bạch, trách nhiệm giải trình của chính phủ và sự tham gia của công dân lớn hơn bằng cách cung cấp thêm dữ liệu của chính phủ, tài liệu, công cụ và quy trình o Một số DMS khác như Junar [8], Socrata [9] - cũng là những hệ thống mạnh mẽ cho các hệ thống dữ liệu mở.

Hệ thống quản lý dữ liệu mở CKAN

CKAN viết tắt của Comprehensive Knowledge Archive Network là một hệ thống quản lý nguồn mở dựa trên web để lưu trữ và phân phối dữ liệu mở CKAN đã phát triển thành một hệ thống danh mục dữ liệu mạnh mẽ, chủ yếu được sử dụng bởi các tổ chức công cộng đang tìm cách chia sẻ dữ liệu của họ với công chúng Hiện nay CKAN đang được sử dụng rộng rãi trên nhiều quốc gia, trong đó chủ yếu là có tổ chức từ chính phủ CKAN được cộng đồng đánh giá rất cao về những khả năng của nó trong việc tổ chức dữ liệu, khả năng mở rộng và khả năng tương thích với các hệ thống khác Các phiên bản phát hành của CKAN được phối hợp, thử nghiệm và triển khai bởi đội ngũ công nghệ làm việc lâu năm trong lĩnh vực open data Là một dự án nguồn mở, CKAN và các phần mở rộng của nó được phát triển bởi một cộng đồng lớn

Một vài tính năng cơ bản của CKAN: o CKAN có đầy đủ các chức năng và giải giáp để quản lý dữ liệu mở thông qua open portal o CKAN cung cấp một cách hợp lý các công cụ để làm cho dữ liệu của người dùng có thể dễ dàng khám phá và trình bày Mỗi tập dữ liệu được cung cấp trang riêng để liệt kê tài nguyên dữ liệu và bộ sưu tập siêu dữ liệu phong phú, làm cho nó trở thành một danh mục dữ liệu có giá trị và dễ dàng tìm kiếm o Chức năng cốt lõi của CKAN cung cấp nhiều tính năng và có hơn 200 tiện ích mở rộng cộng đồng có thể lấp đầy hầu hết mọi khoảng trống tính năng

CKAN có một số ưu điểm như sau: o Mã nguồn mở, cộng đồng lớn và có nguồn tính năng mở rộng phong phú o Có khả năng lưu trữ dữ liệu lớn, dữ liệu streaming, dữ liệu có cấu trúc lẫn không có cấu trúc với nhiều nhiều định dạng phong phú o Tìm kiếm dữ liệu đơn giản và hiệu quả nhờ search engine và metadata o Có khả năng mở rộng và tích hợp với các hệ thống khác o Quản lý dữ liệu và người dùng thông hệ thống quyền truy cập

Khác với những framework khác, CKAN là phần mềm nguồn mở, vì vậy nó miễn phí và có tính linh hoạt cao, cho phép bạn tránh bị khóa lâu dài và tự do điều chỉnh mã nếu cần Nó cũng nổi bật với các tính năng phong phú cho nhà xuất bản và người dùng dữ liệu, chẳng hạn như thu thập dữ liệu, tìm kiếm theo đặc điểm và theo từng loại thiết bị; CKAN còn cho phép bạn chia sẻ dữ liệu công khai của mình với các trang web CKAN khác

Phía Backend của CKAN, phần chạy trên máy chủ Web, được viết chủ yếu bằng Python Các trang web cung cấp cho trình duyệt người dùng bao gồm JavaScript CKAN quản lý thông tin về các bộ dữ liệu sẽ được cung cấp cho người dùng trong cơ sở dữ liệu PostgreSQL Tìm kiếm được thực hiện bởi Solr Việc cài đặt CKAN có thể được truy vấn thông qua API Web Nền tảng có thể cài đặt, sử dụng CKAN là: Linux

Hình 4: kiến trúc code của ckan o Routes định nghĩa các đường dẫn URL và view, chúng sẽ có nhiệm vụ xử lý yêu cầu và phản hồi đến user o Views dùng để xử lý request từ user, module này sẽ đọc và cập nhật dữ liệu thông qua các action và trả về cho người dùng html được render bởi Jinja2 template o Jinja2 là 1 template engine hỗ trợ trên ngôn ngữ Python Jinja2 đơn giản, dễ sử dụng và có cộng đồng lớn Bên cạnh đó còn có nhiều biến thế khác như sử dụng CMS thay thế hoặc sử dụng song song giữa CMS và DMS o Logic bao gồm action functions, auth functions, background tasks and business logic Phần logic là phần module giúp cho CKAN thích ứng với tùy điều kiện và đặc điểm của các tổ chức khác nhau Thông qua interfaces.IActions người dùng có thể thêm các actions vào hệ thống Những action được khai bao trong CKAN có thể được gọi thông qua RESTful API hoặc người dùng có thể gọi thao qua ckanapi module o Model: Vì CKAN sử dụng Postgresql cho nên framework phù hợp nhất với database này là SQLAlchemy Các thực thể trong CKAN được tổ chức theo dạng class các model và thao tác với database thông qua session, điều này sẽ giúp cho hệ thống kiểm soát dòng lệnh được tốt hơn

Dữ liệu Streaming

Dữ liệu streaming là dữ liệu được tạo ra liên tục bởi hàng nghìn nguồn dữ liệu, các nguồn này thường gửi các bản ghi dữ liệu đồng thời và có kích thước nhỏ (theo thứ tự Kilobyte) Dữ liệu truyền trực tuyến bao gồm nhiều loại dữ liệu như tệp nhật ký được tạo bởi khách hàng bằng cách sử dụng ứng dụng web hoặc di động của, mua hàng thương mại điện tử, hoạt động của người chơi trong trò chơi, thông tin từ mạng

11 xã hội, sàn giao dịch tài chính hoặc dịch vụ không gian địa lý và đo từ xa từ các thiết bị được kết nối hoặc thiết bị đo đạc trong trung tâm dữ liệu

Dữ liệu này cần được xử lý tuần tự và tăng dần trên cơ sở từng bản ghi hoặc qua cửa sổ thời gian trượt và được sử dụng cho nhiều loại phân tích bao gồm tương quan, tổng hợp, lọc và lấy mẫu Thông tin thu được từ phân tích như vậy cung cấp cho các công ty khả năng hiển thị về nhiều khía cạnh của hoạt động kinh doanh và khách hàng của họ như –sử dụng dịch vụ (để đo lường / thanh toán), hoạt động của máy chủ, số lần nhấp vào trang web và vị trí địa lý của thiết bị, con người và hàng hóa vật chất –và cho phép họ để phản ứng kịp thời với các tình huống phát sinh Ví dụ: các doanh nghiệp có thể theo dõi những thay đổi trong tình cảm của công chúng đối với thương hiệu và sản phẩm của họ bằng cách liên tục phân tích các luồng truyền thông xã hội và phản hồi kịp thời khi cần thiết Ngoài ra còn có rất nhiều tình huống thể hiện vai trò của dữ liệu streaming như sau: o Các cảm biến trong phương tiện vận tải, thiết bị công nghiệp và máy móc nông trại gửi dữ liệu đến một ứng dụng phát trực tuyến Ứng dụng giám sát hiệu suất, phát hiện trước mọi khiếm khuyết tiềm ẩn và tự động ngăn chặn mọi nguy cơ dẫn đến sự ngưng hoạt động của thiết bị o Một tổ chức tài chính theo dõi những thay đổi trên thị trường chứng khoán trong thời gian thực, tính toán giá trị rủi ro và tự động cân đối lại danh mục đầu tư dựa trên biến động giá cổ phiếu o Trang web bất động sản theo dõi một tập hợp con dữ liệu từ thiết bị di động của người tiêu dùng và đưa ra các đề xuất về bất động sản theo thời gian thực về các bất động sản tiềm năng dựa trên vị trí địa lý của họ o Một công ty điện mặt trời phải duy trì sản lượng điện cho khách hàng của mình hoặc phải trả tiền phạt Nó đã triển khai một ứng dụng dữ liệu trực tuyến giám sát tất cả các bảng tại hiện trường và lên lịch dịch vụ trong thời gian thực, do đó giảm thiểu thời gian thông lượng thấp từ mỗi bảng và các khoản thanh toán phạt liên quan o Một nhà xuất bản phương tiện truyền phát hàng tỷ bản ghi dòng nhấp chuột từ các sản phẩm trực tuyến của mình, tổng hợp và làm phong phú dữ liệu với thông tin về người dùng và tối ưu hóa vị trí nội dung trên trang web của mình, mang lại mức độ liên quan và trải nghiệm tốt hơn cho khán giả o Một công ty trò chơi trực tuyến thu thập dữ liệu phát trực tuyến về tương tác giữa người chơi với trò chơi và cung cấp dữ liệu vào nền tảng trò chơi của họ Sau đó, nó phân tích dữ liệu trong thời gian thực, cung cấp các ưu đãi và trải nghiệm năng động để thu hút người chơi

3.2 Lợi ích của dữ liệu Streaming

Quá trình xử lý dữ liệu truyền trực tuyến có lợi trong hầu hết các trường hợp mà dữ liệu động mới được tạo liên tục Nó áp dụng cho hầu hết các phân khúc ngành và các trường hợp sử dụng dữ liệu lớn Các công ty thường bắt đầu với các ứng dụng đơn

12 giản như thu thập nhật ký hệ thống và xử lý thô sơ như thực hiện các phép tính tối thiểu Sau đó, các ứng dụng này phát triển để xử lý thời gian thực tinh vi hơn Ban đầu, các ứng dụng có thể xử lý các luồng dữ liệu để tạo ra các báo cáo đơn giản và thực hiện các hành động đơn giản để đáp ứng, chẳng hạn như phát ra cảnh báo khi các biện pháp chính vượt quá ngưỡng nhất định Cuối cùng, các ứng dụng đó thực hiện các hình thức phân tích dữ liệu phức tạp hơn, như áp dụng các thuật toán học máy và trích xuất thông tin chi tiết sâu hơn từ dữ liệu Theo thời gian, các thuật toán xử lý sự kiện, luồng và phức tạp, như cửa sổ thời gian giảm dần để tìm các bộ phim nổi tiếng gần đây nhất, được áp dụng, làm phong phú thêm thông tin chi tiết

3.3 So sánh xử lý bó và xử lý luồng

Trước khi xử lý dữ liệu streaming, cần so sánh và đối chiếu giữa xử lý luồng và xử lý hàng loạt Xử lý hàng loạt có thể được sử dụng để tính toán các truy vấn tùy ý trên các tập dữ liệu khác nhau Nó thường tính toán các kết quả thu được từ tất cả dữ liệu mà nó bao gồm và cho phép phân tích sâu các tập dữ liệu lớn Các hệ thống dựa trên MapReduce, như Amazon EMR, là ví dụ về các nền tảng hỗ trợ các công việc hàng loạt Ngược lại, xử lý luồng yêu cầu nhập một chuỗi dữ liệu và cập nhật từng bước các chỉ số, báo cáo và thống kê tóm tắt để đáp ứng với mỗi bản ghi dữ liệu đến

Nó phù hợp hơn cho các chức năng giám sát và phản hồi theo thời gian thực

Xử lý bó Xử lý luồng

Truy vấn hoặc xử lý trên tất cả hoặc hầu hết dữ liệu trong tập dữ liệu

Truy vấn hoặc xử lý dữ liệu trong khoảng thời gian luân phiên hoặc chỉ trên bản ghi dữ liệu gần đây nhất

Kích thước dữ liệu Một tập hợp dữ liệu lớn Các bản ghi riêng lẻ hoặc một bó nhỏ bao gồm một vài bản ghi

Hiệu suất Độ trễ tính bằng phút đến hàng giờ

Yêu cầu độ trễ theo thứ tự giây hoặc mili giây

Khả năng phân tích Phân tích phức tạp Chức năng phản hồi đơn giản, tổng hợp và chỉ số luân phiên.

Dịch vụ chia sẻ dữ liệu phân tán - Data Distributed Service

Trong các hệ thống phân tán, có các cách giao tiếp khác nhau tùy theo mục đích và yêu cầu Hầu hết các hệ thống phân tán có thể được xem là độc lập nhưng tương tác với nhau bằng các kiểu giao tiếp như máy khách-máy chủ, xuất bản-đăng ký, ngang hàng, cách định hướng dịch vụ, v.v [10]

Thông tin cho kiểu máy khách-máy chủ thường được quản lý và được trao đổi tập trung Thông tin liên lạc thường đạt được theo yêu cầu từ khách hàng đến máy chủ trung tâm với kết nối rõ ràng Hình 2 cho thấy kết nối kiểu máy khách-máy chủ

Hình 5: Kiểu máy khách - máy chủ

Khác với phong cách máy khách-máy chủ, ngang hàng thiết lập kết nối giữa các máy khách mà không cần máy chủ trung tâm Mọi nút trong mạng đều có thể cung cấp và tiêu thụ thông tin Ngoài ra, bất kỳ nút nào cũng có thể tham gia hoặc rời khỏi mạng bất kỳ lúc nào Từ không có máy chủ trung tâm nào được sử dụng, nó tránh được điểm lỗi duy nhất Hình 3 cho thấy kết nối của phong cách peer-to-peer Cũng có một số kết hợp giữa mạng ngang hàng và máy chủ khách hàng

Thay vì dựa trên các kết nối rõ ràng như các kiểu trên, kiểu đăng ký xuất bản sử dụng một cơ chế gọi ngầm là nhiều mạng Các nút (nhà xuất bản / người đăng ký)

14 được liên kết với nhau bằng các sự kiện thời gian chạy (chủ đề) và đây được gọi là đăng ký Nhiều hệ thống đăng ký xuất bản sử dụng môi giới trung gian để thực hiện đăng ký này Sự giao tiếp giữa các nhà xuất bản và người đăng ký có thể xảy ra khi sự kiện này diễn ra Hình 4 cho thấy cấu trúc của kiểu đăng ký xuất bản

Hình 7: Mô hình đăng ký- xuất bản

Tất cả các phong cách giao tiếp này đều có ưu và nhược điểm riêng khi áp dụng cho lĩnh vực cụ thể Đôi khi sự kết hợp giữa chúng có thể là một giải pháp hợp lý cho một vấn đề Tuy nhiên, giao tiếp socket dựa trên máy khách / máy chủ là lựa chọn phổ biến nhất trong ngành công nghiệp, đặc biệt là giao tiếp socket dựa trên TCP, có thể thiết lập giao tiếp tin cậy

Giao thức Đăng ký xuất bản theo thời gian thực (RTPS) [11] là một phần của

“Real-Time Industrial Ethernet Suite IEC-PAS-62030” đã được IEC phê duyệt Giao thức này đã được được sử dụng trong hàng ngàn ứng dụng công nghiệp Giao thức RTPS Wire chủ yếu bao gồm giao thức đăng ký xuất bản và giao thức Chuyển trạng thái hỗn hợp (CST) Các giao thức đăng ký xuất bản chuyển dữ liệu, trong khi CST chuyển trạng thái

Giao thức RTPS nhằm mục đích chạy qua phương thức truyền tải tốt nhất với sự hỗ trợ của multicast chẳng hạn như UDP/IP Nó hỗ trợ các yêu cầu duy nhất của hệ thống phân phối dữ liệu So với đăng ký xuất bản truyền thống, có nhiều yêu cầu về thời gian thực hơn Nó được chỉ định trong cả Mô hình độc lập nền tảng (PIM) và một tập hợp Mô hình nền tảng cụ thể (PSM), chỉ ra rằng RTPS có thể chạy trên các nền tảng truyền tải khác nhau Những nét đặc trưng riêng của RTPS được liệt kê dưới đây: o Thuộc tính Hiệu suất và QoS: Thuộc tính RTPS hỗ trợ RTPS chạy trên cả hai thông tin liên lạc đáng tin cậy và tốt nhất Chính sách QoS cung cấp cho người dùng sự linh hoạt và có thể kiểm soát các hành vi giao tiếp o Khả năng chịu lỗi: Thuộc tính này đảm bảo tính mạnh mẽ của hệ thống và tránh việc một nút bất kỳ trong hệ thống bị lỗi mà làm cho toàn bộ hệ thống không hoạt động được o Khả năng mở rộng: Một số phần của giao thức RTPS có thể được mở rộng o Kết nối plug-and-play: Tất cả các nút có thể tham gia hoặc rời khỏi mạng ở bất kỳ đâu và bất kỳ thời gian nào

15 o Khả năng mở rộng: Do đặc tính khám phá động và không kết nối, hệ thống có thể dễ dàng được mở rộng đến số lượng lớn các nút Các đặc tính này của RTPS đáp ứng hoàn hảo các yêu cầu của giao thức dây DDS [11] Được ra đời vào năm 2004 bởi tổ chức Object Management Group, Data Distributed Service (DDS) là một chuẩn middleware dựa trên thức RTPS, nó cho phép các ứng dụng chia sẻ dữ liệu phân tán có thể tương tác được với nhau - “Efficient and

Robust Delivery of the Right Information to the Right Place at the Right Time” [8] Thông thường các ứng dụng chia sẻ dữ liệu phân tán yêu cầu hiệu năng cao, sử dụng hiệu quả nguồn tài nguyên và có thể ước lượng trước được Để đạt được yêu cầu này DDS được thiết kế dựa trên các tiêu chí sau: o Cho phép middleware phân bổ trước các tài nguyên để có thể giảm việc phân bổ tài nguyên động xuống mức tối thiểu o Tránh các thuộc tính có thể yêu cầu sử dụng các tài nguyên mà không bị ràng buộc hoặc khó dự đoán o Giảm thiểu nhu cầu tạo bản sao của dữ liệu

DDS quy định các ràng buộc về kiểu dữ liệu Các interface được quy định rõ ràng về kiểu, điều này có các lợi ích sau: o Dễ sử dụng: lập trình viên có thể trực tiếp thao tác trên các cấu trúc dữ liệu một cách tự nhiên o An toàn: Một số lỗi liên quan đến kiểu được phát hiện tại thời điểm biên dịch o Hiệu quả: mã thực thi có thể dựa vào cấu trúc chính xác về loại dữ liệu Điều này giúp cho việc tối ưu hóa của các trình biên dịch, cũng như việc cấp phát trước tài nguyên sẽ hiệu quả hơn Đặc tả giao thức dây khả năng tương tác của DDS (DDSI) xác định giao thức khả năng tương tác cho DDS DDS sử dụng giao thức RTPS làm giao thức truyền tải dữ liệu cơ bản và tất cả các nhà cung cấp DDS đều tuân theo giao thức dây này, điều này đảm bảo rằng việc triển khai DDS của các nhà cung cấp khác nhau có thể tương tác với nhau

Tiêu chuẩn API DDS cung cấp giao diện tiêu chuẩn giữa DDS và các ứng dụng Tiêu chuẩn này đảm bảo tính khả chuyển của mã nguồn được triển khai dựa trên các nhà cung cấp khác nhau Hiện tại, OMG cung cấp giao diện API DDS tiêu chuẩn bằng các ngôn ngữ C, C ++ và Java Đăng ký xuất bản làm trung tâm dữ liệu (DCPS) cấp thấp hơn nhằm cung cấp thông tin hiệu quả DCPS giảm thiểu nhu cầu sao chép dữ liệu và phân bổ tài nguyên động, có thể dự đoán và hiệu quả Trên thực tế, lớp này xác định tất cả các hoạt động cho DDS giao tiếp, ví dụ, xác định chủ đề, tạo thực thể nhà xuất bản / người đăng ký, ghi / đọc dữ liệu, v.v

UDP / IP có được sử dụng làm phương tiện truyền tải cho DDS vì nó có các đặc điểm sau: tính khả dụng phổ biến, best-effort, không kết nối, hành vi có thể dự đoán

16 được, khả năng mở rộng và hỗ trợ multicast Mặc dù DDS cũng có thể được triển khai bằng cách sử dụng các giao thức khác, tuy nhiên nó được cho là hoạt động tốt nhất qua UDP / IP [10]

Hình 8: Cấu trúc OMG DDS

4.2 Các thành phần cơ bản

Hình 9: Không gian dữ liệu toàn cầu (GDS)

Không gian dữ liệu toàn cầu (GDS) [12]: GDS là một phần trừu tượng của không gian dữ liệu nơi tất cả dữ liệu có thể được lưu trữ Các ứng dụng muốn xuất bản hoặc sửa đổi dữ liệu cần phải là nhà xuất bản hoặc muốn nhận và sử dụng dữ liệu cần phải đăng ký Có nhiều miền khác nhau trong GDS và mỗi miền có thể được chia thành các phân vùng khác nhau một cách hợp lý Miền giữa chúng được tách biệt, vì vậy một thực thể (như chủ đề) chỉ có thể nằm trong một miền, nhưng có thể xuất hiện trong một số phân vùng GDS cần được phân phối đầy đủ để tránh các điểm đơn lẻ lỗi của hệ thống

Kiểu dữ liệu trong Distributed Data Service

Kiểu dữ liệu đóng một vai trò quan trọng trong việc phát triển hệ thống phần mềm, giúp cho hệ thống dễ mở rộng hơn, giảm chi phí bảo trì Vì DDS được thiết kế để nhắm mục tiêu đến các hệ thống quan trọng như kinh doanh, giao thông, y tế ,… nơi mà sự an toàn, khả năng mở rộng và khả năng bảo trì là cực kỳ quan trọng DDS đã áp dụng một hệ thống kiểu tĩnh để định nghĩa kiểu của một topic Kiểu tĩnh giúp

25 ngăn chặn một số lỗi trong thời gian chạy bằng cách phát hiện nó trong thời gian biên dịch Mục này sẽ cung cấp tổng quan về kiểu dữ liệu trong DDS

DDS định nghĩa một số khái niệm Type System, Type Representation, Language Binding, và Data Representation Mối quan hệ của chúng được mô tả dưới hình sau:

Hình 14: Mối quan hệ giữa Type System, Type Representation, Language Binding, và

Hình 15: Một ví dụ thể hiện mối quan hệ giữa Type System, Type Representation,

Language Binding, và Data Representation

Type System xác định các kiểu dữ liệu có thể được sử dụng cho các topic trong DDS và do đó quyết định loại dữ liệu có thể được publish hoặc subcribe qua DDS Trong đó bao gồm:

 Kiểu nguyên với số lượng bit là: 16,32,64 bao gồm cả có dấu và không có dấu

 Kiểu float với các độ chính xác như sau: chính xác đơn, chính xác kép và chính xác bốn

 Kiểu ký tự đơn và ký tự quốc tế

 Struct có thể kế thừa từ một struct khác

 Chỗi ký tự đơn và ký tự quốc tế

Type Representation là cách mà để biểu diễn các kiểu dữ liệu Type Representation phục vụ nhiều mục đích như:

 Cho phép người dùng mô tả và ghi lại kiểu dữ liệu

 Cung cấp đầu vào cho các công cụ sinh ra code với các cấu trúc phù hợp với ngôn ngữ lập trình để có thể lập trình và thao tác các đối tượng thuộc loại đó

 Cung cấp đầu vào cho các công cụ muốn “phân tích cú pháp” và diễn giải các đối tượng dữ liệu trong thời gian thực thi, mà không cần biết schema trước thời gian biên dịch

 Có thể trao đổi các thông tin về kiểu dữ liệu thông qua tin nhắn mạng để các ứng dụng có thể tự động phát hiện ra các kiểu của nhau từ đó đánh giá được việc trao đổi dữ liệu có hợp lệ hay không

Trong DDS có nhiều cách biểu diễn dữ liệu Do cùng chung một Type System của DDS nên những cách biểu diễn này đều tương đương nhau Tuy nhiên mỗi cách sẽ tối ưu cho một mục đích khác nhau như bảng dưới đây

Representation Điểm mạnh Điểm yếu

Ngôn ngữ nhỏ gọn, dễ đọc, dễ viết

Quen thuộc với các lập trình viên Sử dụng cấu trúc gần với những cấu trúc trong ngôn ngữ lập trình Có language bindings tiêu chuẩn với hầu hết các ngôn ngữ lập trình Được coi là một ngôn ngữ kế thừa bởi XML Không có nhiều công cụ có sẵn (phân tích cú pháp, biến đổi, nhận diện cú pháp) dưới dạng XML.Phân tích cú pháp rất phức tạp Yêu cầu tiện ích mở rộng để hỗ trợ tất cả khái niệm trong Type System, ví dụ: keys, optional members, map types, and member IDs

Nhỏ gọn, Dễ dàng đọc và viết Có thể định nghĩa phù hợp và chính xác tất cả các khái niệm trong Type system (bao gồm keys, optional member, map, v.v.) Cú pháp có thể được mô tả bằng XSD cho phép sử dụng các trình chỉnh sửa hỗ trợ và xác minh cú pháp của kiểu dữ liệu

Rất phù hợp với yêu cầu xử lý trong

Ngôn ngữ mới, Dựa trên XML nhưng với một schema là chưa được viết đến

27 thời gian thực thi do các gói phân tích cú pháp XML đã có sẵn

Tiêu chuẩn phổ biến Quen thuộc với nhiều người người dùng Con người có thể đọc được Cho phép sử dụng lại các kiểu dữ liệu được xác định cho các mục đích khác (ví dụ: web service)

Có sẵn các công cụ để thực hiện, kiểm tra, biên tập và tự động hoàn thành cú pháp

Cú pháp rườm rà, dài dòng, khó đọc đối với lập trình viên XSD là được hình thành như một cách để xác định cú pháp của XML, không phải như một cách để xác định kiểu dữ liệu Không hỗ trợ trực tiếp cho nhiều cấu trúc (ví dụ: key) hoặc các kiểu trong model type (ví dụ: arrays, unions, enums), do đó cần phải sử dụng các mẫu cụ thể khó nhớ và dễ bị lỗi

Bảng 1: So sánh cách phương thức biểu diễn kiểu Hiện tại bộ framework OpenDDS chỉ hỗ trợ biểu diễn kiểu bằng Interface Definition Language - IDL, do đó mục này sẽ trình bày cách mà những kiểu dữ liệu trong Type System được biểu diễn kiểu bằng IDL

IDL là ngôn ngữ đặc tả được sử dụng để mô tả Giao diện lập trình ứng dụng (API) của một thành phần phần mềm IDL mô tả giao diện theo cách độc lập với ngôn ngữ, cho phép giao tiếp giữa các thành phần phần mềm không dùng chung một ngôn ngữ Ví dụ: giữa những thành phần được viết bằng C ++ và những thành phần được viết bằng Java IDL thường được sử dụng trong Remote Procedure Call (RPC) Trong những trường hợp này, các máy ở một trong hai đầu của liên kết có thể đang sử dụng các hệ điều hành và ngôn ngữ máy tính khác nhau IDL cung cấp một cầu nối giữa hai hệ thống khác nhau Các node trong cùng một DDS global data space độc lập về ngôn ngữ cũng như nền tảng Do đó IDL phù hợp để biểu diễn kiểu trong DDS

Primitive Types được chỉ định trong Type System được biểu diễn bằng Primitive Types trong IDL như bảng dưới đây IDL:

Bảng 2: Các kiểu dữ liệu trong DDS IDL cũng cho phép biểu diễn kiểu dạng Struct, Unions, Array 1 hoặc nhiều chiều tương ứng trong Type System

Hệ thống chú thích của IDL rất giống với hệ thống có sẵn trong Java

Gosling et al (2005) Nó cũng xác định một tập hợp các chú thích tích hợp có thể được sử dụng để kiểm soát khả năng mở rộng của một kiểu, cũng như các thuộc tính của một kiểu nhất định Một số các chú thích tích hợp quan trọng được mô tả dưới đây:

 @ID có thể được sử dụng để gán một ID toàn cục duy nhất cho các thành viên dữ liệu của kiểu ID này được sử dụng để giải quyết hiệu quả với việc sắp xếp lại các thuộc tính

 @Key có thể được sử dụng để xác định loại thành viên cấu thành khóa của một loại chủ đề Dùng để phân biệt các data sample

JSON

JSON viết tắt của JavaScript Object Notion, được đề ra và phát triển bởi Douglas Crockfork vào đầu những năm 2000 Hiện tại, định dạng này là một trong những định dạng dữ liệu phổ biến, quan trọng nhất JSON được ứng dụng rộng rãi trong nhiều lĩnh vực khác nhau: trao đổi dữ liệu, lưu trữ thiết lập, cài đặt,…

JSON được thiết kế như là một ngôn ngữ trao đổi dữ liệu vừa dễ đọc, dễ hiểu với người dùng, vừa dễ xử lý cho máy tính Được xây dựng dựa trên chuẩn ECMA-262 của JavaScript [14], JSON sử dụng quy ước khá giống với những ngôn ngữ lập trình như C, C++, C#, Java, Javascript Tuy nhiên, JSON không bị phụ thuộc vào ngôn ngữ và có thể làm việc với nhiều ngôn ngữ khác nhau

Tuy được đề ra vào năm 2000 nhưng đến tận năm 2013, JSON mới lần đầu tiên được tổng hợp và phát hành thành chuẩn dưới tên ECMA-404 [15] Cũng trong năm đó, dựa trên ECMA-404, RFC 7158 [16] được phát hành Trong những năm tiếp theo, RFC 7159 trở thành nguồn tham khảo chính cho chuẩn của JSON thay cho RFC 7158 Đến năm 2017, tổ chức ISO phát hành chuẩn ISO/IEC 21778:2017 [17] cho JSON Cùng năm đó, RFC 8259 [18] cũng được ra đời Cả chuẩn RFC-8259 và ISO/IEC 21778:2017 gần tương tự giống nhau nhưng RFC-8259 có bổ sung thêm phần yêu cầu về bảo mật và khả năng tương thích Các chuẩn vừa được nêu trên chỉ định nghĩa mặt cú pháp của JSON chứ không định nghĩa về mặt ngữ nghĩa Các bên sử dụng phải tự định nghĩa các mặt ngữ nghĩa Ngoài ra, các chuẩn ra đời sau ECMA-404 không thêm các đặc tả mà chỉ giải thích rõ ràng hơn nhưng điểm mập mờ hay chưa được đề cập trong ECMA-404 chứ không có những điểm thay đổi thật sự Các cột mốc xuất bản của các chuẩn JSON được tóm tắt 73 sơ đồ sau:

Hình 16: Lịch sử phát triển của JSON

Cú pháp của JSON có tính dễ hiểu với con người Thông thường, một người có thể không cần phải có quá nhiều kiến thức về kĩ thuật, nghiệp vụ cũng có thể đọc hiểu được một đoạn thông tin được lưu trữ dưới dạng JSON JSON có các kiểu dữ liệu sau: o Dạng số o Dạng ký tự o Một trong 3 giá trị đặc biệt: true, false, null o Dạng dãy (array) o Dạng đối tượng (object)

Một đoạn thông tin JSON có cấu trúc tương tự như sau:

Tại thời điểm hiện tại (tháng 8/2020), JSON đang có cộng đồng sử dụng, phát triển mạnh mẽ Trên Github có trên 230000 repository có sử dụng JSON và trên 3000 người dùng Các ngôn ngữ sử dụng JSON phổ biến trên Github là: Javascript, Java, Python, PHP Được phát triển với mục tiêu trao đổi dữ liệu, ngày nay, JSON được sử dụng với nhiều mục đích khác nhau: trao đổi dữ liệu, lưu trữ dữ liệu, lưu trữ cài đặt hệ thống, Ngoài ra, nhiều chuẩn trao đổi dữ liệu cũng được xây dựng dựa trên JSON (Như chuẩn FHIR của Health Level 7 [19] – Một chuẩn giao tiếp trong y tế)

BSON là viết tắt của Binary JSON, là một dạng biểu diễn nhị phân của JSON Tuy ra đời sau JSON (BSON được đề ra vào 2009) nhưng BSON lại khái quát hơn JSON, bao gồm cả JSON: BSON có các loại dữ liệu mà JSON không có như dạng ngày tháng (Date) hay dạng nhị phân (BinData) Được các nhân viên của công ty MongoDB (Ảnh) thiết kế dựa trên tình hình công việc thực tế của công ty, BSON có các đặc điểm sau: o Gọn nhẹ: Dữ liệu được biểu diễn ở dạng gần với ngôn ngữ máy tính

32 o Khả năng duyệt tốt: Việc tìm kiếm dữ liệu được lưu trữ dưới dạng BSON là dễ dàng o Hiệu quả

Tuy nhiên, vì mục đích thiết kế của BSON là dùng để áp dụng cho hệ cơ sở dữ liệu nên dung lượng của BSON sẽ lớn hơn JSON một khoảng Sự chênh lệch này được sinh ra từ sự khác biệt giữa cấu trúc lưu trữ của JSON và BSON Sự khác biệt này sẽ được trình bày ở phần sau

6.5 Cách lưu trữ dữ liệu streaming bằng JSON

JSON là một định dạng phổ biến để trao đổi dữ liệu giữa các hệ thống Trong đó có rất nhiều cách để truyền dữ liệu dạng JSON theo kiểu streaming Thông thường dữ liệu được truyền theo dạng các JSON objects và được định dạng bằng các cách sau: o Không chứa ký tự xuống dòng trong JSON object và sử dụng ký tự này làm dấu phân cách [3] o Một ký tự điều khiển phân tách được gửi kèm với JSON object và được dùng làm dấu phân cách [4] o Các JSON object không có dấu phân cách và dựa vào các parser để trích xuất chúng o Các JSON object không có dấu phân cách nhưng có tiền tố chứa thông tin về độ dài của chúng và dựa vào các parser để trích xuất chúng.

MongoDB

MongoDB là một database hướng tài liệu (document), các dữ liệu được lưu trữ trong MongoDB thuộc kiểu BSON thay vì dạng bảng như cơ sở dữ liệu quan hệ nên truy vấn sẽ rất nhanh

Với cơ sở dữ liệu quan hệ chúng ta có khái niệm bảng, các cơ sở dữ liệu quan hệ (như MySQL hay SQL Server ) sử dụng các bảng để lưu dữ liệu thì với MongoDB chúng ta sẽ dùng khái niệm là collection thay vì bảng truyền thống

So với RDBMS thì trong MongoDB collection ứng với table, còn document sẽ ứng với row, MongoDB sẽ dùng các document thay cho row trong RDBMS

Hình 17: Mối quan hệ giữa Cơ sở dữ liệu quan hệ (RDBMS) và MongoDB

Các collection trong MongoDB được cấu trúc rất linh hoạt, cho phép các dữ liệu lưu trữ không cần tuân theo một cấu trúc nhất định Được tin dùng bởi hàng triệu người trên thế giới, bao gồm cả các công ty công nghệ lớn nhất thế giới như Google, Facebook,…

Hình 18: Các công ty sử dụng sản phẩm MongoDB

7.2 Các thành phần chính của kiến trúc MongoDB o _id - Đây là trường bắt buộc trong mọi tài liệu (document) MongoDB Trường _id đại diện cho một giá trị duy nhất trong tài liệu MongoDB Trường _id giống như khóa chính (primary key) của tài liệu Nếu bạn tạo một tài liệu mới mà không có trường _id, MongoDB sẽ tự động tạo trường MongoDB sẽ thêm số nhận dạng duy nhất gồm 24 chữ số vào mỗi tài liệu (document) trong bộ sưu tập(collection)

Hình 19: Một ví dụ thể hiện quan hệ giữa RDBMS và MongoDB o Bộ sưu tập(collection) - Đây là một nhóm các tài liệu MongoDB Tập hợp tương đương với một bảng được tạo trong bất kỳ RDMS nào khác như Oracle hoặc MS SQL Một bộ sưu tập tồn tại trong một cơ sở dữ liệu duy nhất Như đã thấy từ các bộ sưu tập giới thiệu không thực thi bất kỳ loại cấu trúc nào o Con trỏ(cursor) Đây là một con trỏ đến tập kết quả (result) của một truy vấn(query) Khách hàng (client) có thể lặp qua con trỏ để truy xuất kết quả o Cơ sở dữ liệu (Database) - Đây là vùng chứa cho các bộ sưu tập như trong RDMS, trong đó nó là vùng chứa cho các bảng (table) Mỗi cơ sở dữ liệu có một bộ tệp riêng trên hệ thống tệp Một máy chủ MongoDB có thể lưu trữ nhiều cơ sở dữ liệu o Tài liệu (Document) - Bản ghi trong bộ sưu tập MongoDB về cơ bản được gọi là tài liệu Đến lượt nó, tài liệu sẽ bao gồm tên trường và các giá trị o Trường - Một cặp tên-giá trị trong tài liệu Một tài liệu có không hoặc nhiều trường Các trường tương tự như các cột trong cơ sở dữ liệu quan hệ

7.3 Ưu điểm của MongaDB o Do MongoDB sử dụng lưu trữ dữ liệu dưới dạng Document JSON nên mỗi một collection sẽ có các kích cỡ và các document khác nhau, linh hoạt trong việc lưu trữ dữ liệu Ngoài ra MongoDB cũng không cần có Schema, do đó không cần thiết kế schema trước khi sử dụng MongoDB, chúng ta có thể định nghĩa schema sau bằng code

35 o Dữ liệu trong MongoDB không có sự ràng buộc lẫn nhau, không có các complex join như trong RDBMS nên khi insert, xóa hay update nó không cần phải mất thời gian kiểm tra xem có thỏa mãn các ràng buộc dữ liệu như trong RDBMS o MongoDB rất dễ mở rộng (Horizontal Scalability) Trong MongoDB có một khái niệm cluster là cụm các node chứa dữ liệu giao tiếp với nhau, khi muốn mở rộng hệ thống ta chỉ cần thêm một node với vào cluster o Ngôn ngữ truy vấn Document hỗ trợ bởi MongoDB rất đơn giản, đơn giản hơn rất nhiều so với SQL truyền thống o MongoDB hoàn toàn miễn phí, dễ dàng cài đặt và sử dụng trên toàn bộ các

OS phổ biến như Window/Linux/MacOS o Trường dữ liệu “_id” luôn được tự động đánh index (chỉ mục) để tốc độ truy vấn thông tin đạt hiệu suất cao nhất o Khi có một truy vấn dữ liệu, bản ghi được cached lên bộ nhớ Ram, để phục vụ lượt truy vấn sau diễn ra nhanh hơn mà không cần phải đọc từ ổ cứng o Hiệu năng cao: Tốc độ truy vấn (find, update, insert, delete) của MongoDB nhanh hơn hẳn so với các hệ quản trị cơ sở dữ liệu quan hệ (RDBMS) Với một lượng dữ liệu đủ lớn thì thử nghiệm cho thấy tốc độ insert của MongoDB có thể nhanh tới gấp 100 lần so với MySQL

7.4 Nhược điểm của MongoDB o Một ưu điểm của MongoDB cũng chính là nhược điểm của nó MongoDB không có các tính chất ràng buộc như trong RDBMS nên khi thao tác với MongoDB thì phải hết sức cẩn thận o Tốn bộ nhớ do dữ liệu lưu dưới dạng key-value, các collection chỉ khác về value do đó key sẽ bị lặp lại Không hỗ trợ join nên dễ bị dư thừa dữ liệu o Khi insert/update/remove bản ghi, MongoDB sẽ chưa cập nhật ngay xuống ổ cứng (không có transaction, tuy nhiên từ version 4.0 trở lên, MongoDB đã support transaction), mà sau 60 giây MongoDB mới thực hiện ghi toàn bộ dữ liệu thay đổi từ RAM xuống ổ cứng điều này sẽ là nhược điểm vì sẽ có nguy cơ bị mất dữ liệu khi xảy ra các tình huống như mất điện… o Có giới hạn cho document size (16mb) o MongoDB sử dụng nhiều bộ nhớ cho việc lưu trữ dữ liệu hơn rất nhiều so với RDBMS truyền thống.

Docker

Docker là một nền tảng cho phép đóng gói ứng dụng và thực thi chúng trong những môi trường cô lập với host gọi là container Ứng dụng được đóng gói có thể dễ dàng được chuyển giao và thực thi trên nhiều máy chủ khác nhau Docker sử dụng

36 nhiều tính năng của kernel Linux cho phép cô lập, giới hạn tài nguyên của các ứng dụng Docker rất phù hợp cho các hệ thống ứng dụng CKAN

Hình 21: Kiến trúc Docker Engine

Docker Engine sử dụng kiến trúc Client-Server Trong kiến trúc đó, Server là một chương trình nền (process daemon) làm mọi công việc cần thiết là client yêu cầu như xây dựng ảnh Docker (Docker Image) hay thực thi container cho một ứng dụng nào đó Docker Daemon sử dụng nhiều thư viện và tính năng trong kernel Linux để thực hiện những chức năng nền tảng mà Docker muốn cung cấp [20]

Khi đóng gói ứng dụng, ứng dụng và toàn bộ môi trường cần thiết để thực thi ứng dụng, bao gồm chương trình thực thi ứng dụng (như trình thông dịch của Python, máy ảo của Java), các thư viện cần thiết của ngôn ngữ, các tệp mã nguồn, tập thiết lập, dữ liệu, hình ảnh,… được gom thành một đơn vị gọi là ảnh Docker (Docker Image)

Docker Image cô lập ứng dụng với máy chủ Chuyển Docker Image tới một server khác và ứng dụng sẽ thực thi bình thường

Khi thực thi, Docker Daemon sẽ dùng Image của ứng dụng tạo ra môi trường cô lập và thực thi ứng dụng trong môi trường đó Thực chất container chỉ là một nhóm các chương trình (process) thực thi trong container thuộc về các không gian tên (namespace) và nhóm kiểm soát (cgroup) độc lập Trong đó, namespace dùng để giới hạn phần hệ thống mà ứng dụng có thể truy cập và cgroup dùng để giới hạn tài nguyên

8.3 Ưu đểm của Docker Container

Sử dụng tài nguyên hiệu quả: Docker Container chỉ chứa đúng những gì ứng dụng để thực thi Ứng dụng khi thực thi chỉ là một (hoặc nhiều) chương trình trong hệ thống, tài nguyên tiêu tốn chênh lệch tương đương với chính ứng dụng đó khi chạy trực tiếp trên hệ thống Việc tạo ra Container để thực thi ứng dụng và loại bỏ Container khi kết thúc tốn thời gian và tài nguyên nhiều hơn so với chương trình thông thường nhưng không hơn quá nhiều

Chia sẻ tài nguyên dễ dàng: Các Container khi thực thi sẽ cô lập với nhau Điều này cho phép nhiều Container cùng thực thi và chia sẻ tài nguyên hệ thống mà không ảnh hưởng lẫn nhau

Container có thể thực thi dễ dàng trên nhiều môi trường khác nhau: Docker Engine có thể cài đặt trên bất kỳ phần ứng, trên hệ điều hành Linux thông thường hoặc hệ điều hành Linux trên máy ảo hoặc Cloud [20] Ứng dụng nếu tương thích với phiên bản kernel Linux nơi Docker được cài đặt thì có thể thực thi bằng các lệnh cơ bản của Docker mà không cần cài đặt thêm gì cho ứng dụng.

Redis

9.1 Giới thiệu – Lịch sử phát triển

Hình 22: Sản phẩm Redis- Một trong những sản phẩm NoSQL phổ biến, nổi tiếng nhất hiện nay (tháng 8/2020)

Redis [21] (REmote DIctionary Server) là một dự án mã nguồn mở (chứng nhận bởi BSD),sử dụng bộ nhớ chính để lưu trữ và xử lý dữ liệu Redis thường được sử dụng như một

38 cơ sở dữ liệu, một bộ nhớ đệm hoặc message broker Dự án này chủ yếu được pháttriển bởi Salvatore Sanfilippo và tính đến năm 2019 thì Redis đang được tài trợ phát triển bởi Redis Labs Dự án Redis bắt đầu khi Salvatore Sanfilippo, có biệt danh antirez, chính là nhà phát triển đầu tiên của Redis, đang cố gắng cải thiện khả năng mở rộng của một dự án startup có mục tiêu là phân tích web log theo thời gian thực Sau khi gặp phải khá nhiều vấn đề trong việc thử nghiệm các hệ cơ sở dữ liệu truyền thống, Sanfilippo chọn hướng tiếp cận khác, ông bắt đầu viết prototype để tạo ra phiên bản đầu tiên của Redis Sau đó Sanfilippo đã dịch prototype đó sang ngôn ngữ C và hiện thực kiểu dữ liệu đầu tiên, làlist Sau một vài tuần sử dụng dự án trong nội bộ với thành công, Sanfilippo quyết định mở mã nguồn của nó, thông báo với cộng đồng về dự án trên Hacker News Dự án bắt đầu thu hút được nhiều sự chú ý trong cộng đồng Ruby, sau đó GitHub và Instagram là một trong những công ty đầu tiên sử dụng Redis o Tháng 3 năm 2010, Sanfilippo được thuê vào làm việc tại VMware o Tháng 5 năm 2013, Redis được tài trợ bởi Pivotal Software (thuộc VMware) o Tháng 6 năm 2015, việc phát triển Redis được Redis Labs tài trợ

Hình 23: redislabs nơi sản sinh ra Redis

Redis được viết bằng ANSI C và hoạt động trên hầu hết các hệ thống POSIX như Linux, * BSD, OS X Linux và OS X là hai hệ điều hành mà Redis được phát triển và thử nghiệm nhiều nhất, trong đó Linux được đội ngũ phát triển đề xuất người dùng nên sử dụng để triển khai Redis Redis có thể hoạt động trong các hệ thống có nguồn gốc từ Solaris như SmartOS, nhưng sự hỗ trợ cho các hệ điều hành này còn hạn chế Hiện nay Redis chưa có phiên bản chính thức nào dành cho Windows

Redis hỗ trợ các dạng cấu trúc dữ liệu như string, hash, list, set, sorted set với truy vấn range query, bitmap, hyperloglog, geospatial indexes với radius query và stream Một điểm khác biệt quan trọng giữa Redis và các hệ thống lưu trữ khác là Redis không chỉ hỗ trợ string mà còn có các kiểu dữ liệu trừu tượng, bao gồm: o Danh sách các chuỗi (Lists of strings) o Tập hợp các chuỗi (Sets of strings): tập hợp các phần tử không trùng lắp o Tập hợp các chuỗi được sắp xếp (Sorted sets of strings): tập hợp các phần tử không trùng lắp, được sắp xếp theo một số được gọi là score, có kiểu dữ liệu float o Bảng băm (Hash table) trong đó khóa và giá trị đều là string

39 o HyperLogLogs được sử dụng để ước tính kích thước của Set, khả dụng từ Redis 2.8.9 vào tháng 4 năm 2014 o Luồng (Stream): cho phép người dùng lưu trữ nhiều trường dữ liệu và giá trị string với thứ tự được tự động thiết lập dựa theo thời gian tại một khóa duy nhất, khả dụng kể từ Redis 5.0 vào tháng 10 năm 2018 o Dữ liệu không gian địa lý (Geospatial data): có được thông qua việc hiện thực geohash technique, khả dụng kể từ Redis 3.2

Redis có các tính năng như replication, Lua scripting, LRU eviction, transaction và các mức độ persistence khác nhau, đồng thời cung cấp tính sẵn sàng cao thông qua Redis Sentinel và phân vùng tự động với Redis Cluster Độ bền dữ liệu (persistence)

Redis thường giữ toàn bộ tập dữ liệu trong bộ nhớ chính Các phiên bản tính đến bản 2.4 có thể được cấu hình để sử dụng một kỹ thuật mà chúng ta gọi là bộ nhớ ảo, trong đó một số tập dữ liệu được lưu trữ trên đĩa, nhưng tính năng này đã bị loại bỏ Độ bền dữ liệu trong Redis có thể đạt được thông qua hai phương pháp khác nhau Đầu tiên bằng cách chụp lại tập dữ liệu (snapshotting), trong đó tập dữ liệu được truyền theo cách không đồng bộ từ bộ nhớ sang đĩa sau mỗi khoảng thời gian xác định, dưới dạng nhị phân, sử dụng định dạng dữ liệu Redis RDB Dump Ngoài ra, bằng cách ghi lại nhật ký (journaling), trong đó bản ghi của từng thao tác sửa đổi tập dữ liệu được thêm vào tệp chỉ được phép thêm vào (AOF, append-only file), tác vụ này được thực hiện ngầm Redis có thể viết lại AOF để tránh sự phình to của nhật ký Tính năng journaling đã được giới thiệu trong phiên bản 1.1 và thường được coi là cách tiếp cận an toàn hơn

Mặc định, Redis ghi lại dữ liệu vào tệp hệ thống ít nhất 2 giây một lần Trong trường hợp được cài đặt theo mặc định, và toàn hệ thống xảy ra lỗi, thì chỉ cần vài giây thì dữ iệu sẽ bị mất

Nhân rộng/Sao chép (replication)

Redis hỗ trợ master-replica replication Dữ liệu từ bất kỳ máy chủ Redis nào cũng có thể sao chép thành nhiều bản sao (replica) Một bản sao có thể được xem là bản chính (master) cho một bản sao khác Điều này cho phép Redis hiện thực một single-rooted replication tree Các bản sao có thể được cấu hình để thực hiện việc ghi dữ liệu, cho phép cố tình hoặc vô tình xuất hiện sự phi nhất quán trong dữ liệu giữa các bản sao Tính năng publish/subscribe đã được hiện thực hoàn chỉnh, vì vậy người dùng của bản sao có thể subscribe và nhận được nguồn cấp dữ liệu đầy đủ về các message được publish cho bản chính, ở bất kỳ đâu trên replication tree Việc nhân rộng rất hữu ích cho khả năng mở rộng các ứng dụng chủ yếu đọc dữ liệu (nhưng không hỗ trợ cho việc ghi dữ liệu) hoặc tính dư thừa dữ liệu

Khi độ bền của dữ liệu không cần thiết, tính chất lưu trữ dữ liệu trong bộ nhớ của Redis cho phép nó hoạt động tốt hơn so với các hệ cơ sở dữ liệu thực hiện việc ghi mọi thay đổi vào đĩa trước khi xem xét một transaction được ghi nhận Redis hoạt động như một quy trình đơn nhất, nó là đơn luồng hoặc luồng kép khi nó thực hiện việc viết lại AOF Do đó, một cá thể Redis duy nhất không thể sử dụng thực hiện song song các tác vụ như các thủ tục lưu trữ

Redis giới thiệu phân cụm vào tháng 4 năm 2015 với việc phát hành phiên bản 3.0 Đặc tả về cụm (cluster) hiện thực một tập hợp con các lệnh Redis: tất cả các lệnh single-key đều có sẵn, các thao tác multi-key (lệnh liên quan đến union và giao intersection) bị hạn chế đối với các khóa thuộc cùng một nút và các lệnh liên quan đến hoạt động lựa chọn cơ sở dữ liệu không khả dụng Một cụm Redis có thể mở rộng quy mô lên đến 1.000 nút, đạt được độ an toàn chấp nhận được khi ghi và tiếp tục hoạt động khi một số nút bị lỗi

Bên cạnh đó, Redis còn có các tính năng khác bao gồm: o Transactions o Pub/Sub o Lua scripting o Keys with a limited time-to-live o LRU eviction of keys o Automatic failover

9.3 Ứng dụng o Bộ nhớ đệm (Caching): Redis là một lựa chọn tuyệt vời để triển khai bộ nhớ đệm trong bộ nhớ chính với tính sẵn sàng cao nhằm giảm độ trễ truy cập dữ liệu, tăng thông lượng và giảm tải cơ sở dữ liệu và ứng dụng của bạn Redis có thể phản hồi các request với thời gian dưới mili giây và cho phép bạn dễ dàng mở rộng hệ thống để có tải cao hơn mà làm không tăng chi phí dịch vu cho backend

Bộ nhớ đệm cho kết quả truy vấn cơ sở dữ liệu, bộ nhớ đệm trang web và bộ nhớ đệm của các đối tượng được sử dụng thường xuyên như hình ảnh, tệp và siêu dữ liệu đều là những ví dụ phổ biến về việc sử dụng bộ nhớ đệm với Redis o Trò chuyện, nhắn tin và hàng đợi: Redis hỗ trợ tính năng Pub/Sub và nhiều cấu trúc dữ liệu khác nhau như lists, sorted sets, and hashes Những tính năng này cho phép Redis đạt hiệu năng cao trong việccung cấp các phòng trò chuyện, tính năng bình luận trong thời gian thực, là nguồn cấp dữ liệu cho các mạng xã hội và hỗ trợ việc giao tiếp giữa các máy chủ Cấu trúc dữ liệuList trong Redis giúp chúng triển khai một hàng đợi gọn nhẹ một cách dễ dàng. o Bảng thành tích game: Redis là một lựa chọn phổ biến của các nhà phát triển game muốn xây dựng bảng xếp hạng theo thời gian thực Chỉ cần sử dụng

41 cấu trúc dữ liệu Sorted Set của Redis, tạo ra danh sách người chơi được sắp xếp theo thứ tự điểm số Việc tạo danh sách xếp hạng theo thời gian thực cũng dễ dàng như việc cập nhật điểm của người dùng mỗi khi nó thay đổi Bạn cũng có thể sử dụng Sorted Set để xử lý dữ liệu thời gian bằng cách sử dụng mốc thời gian làm điểm số o Session Store: Redis như một kho lưu trữ dữ liệu trong bộ nhớ chính với tính sẵn sàng và độ bền cao là lựa chọn phổ biến giữa các nhà phát triển ứng dụng trong việc lưu trữ và quản lý dữ liệu phiên làm việc cho các ứng dụng trên internet Redis cung cấp giải pháp có độ trễ dưới mili giây, có khả năng mở rộng và khả năng phục hồi cần thiết để quản lý dữ liệu phiên làm việc cũng như hồ sơ người dùng, thông tin đăng nhập, trạng thái phiên và các nội dung được cá nhân hóa cho người dùng o Phát trực tuyến đa phương tiện: Redis cung cấp giải pháp nhanh và mạnh mẽ cho các bài toán phát nội dung trực tuyến Redis có thể được sử dụng để lưu trữ siêu dữ liệu về hồ sơ của người dùng và lịch sử em, thông tin xác thực / token của hàng triệu người dùng và tập manifest để cho phép CDNs có khả năng phát video tới hàng triệu người dùng di động và máy tính cùng một lúc o Geospatial: Redis cung cấp các cấu trúc dữ liệu và toán tử được xây dựng có mục đích để quản lý dữ liệu không gian địa lý theo thời gian thực một cách nhanh gọn Các lệnh như GEOADD, GEODIST, GEORADIUS và GEORADIUSBYMEMBER dùng để lưu trữ, xử lý và phân tích dữ liệu không gian địa lý trong thời gian thực giúp việc xử lý dữ liệu không gian địa lý trở nên dễ dàng và nhanh chóng với Redis Bạn có thể sử dụng Redis để thêm các tính năng dựa trên vị trí như thời gian lái xe, quãng đường lái xe và các điểm ưa thích vào ứng dụng của bạn o Học máy: Các ứng dụng hiện nay sinh ra lượng lớn dữ liệu yêu cầu máy học để xử lý nhanh chóng một khối lượng lớn, đa dạng với tốc độ sinh dữ liệu nhanh và phải tự động hóa việc ra quyết định Đối với các trường hợp sử dụng như phát hiện gian lận trong trò chơi và dịch vụ tài chính, đấu thầu trong thời gian thực, sắp xếp các cuộc hẹn hò, kết bạn và chia sẻ chuyến đi, khả năng xử lý dữ liệu trực tiếp và đưa ra quyết định trong vòng hàng chục mili giây là vô cùng quan trọng Redis cung cấp cho bạn một kho lưu trữ dữ liệu trong bộ nhớ nhanh chóng để xây dựng, đào tạo và triển khai các mô hình học máy một cách nhanh chóng o Phân tích dữ liệu trong thời gian thực: Redis có thể được sử dụng với các giải pháp phát trực tuyến như Apache Kafka và Amazon Kinesis như một kho lưu trữ dữ liệu trong bộ nhớ để nhập, xử lý và phân tích dữ liệu thời gian thực với độ trễ dưới mili giây Redis là một lựa chọn lý tưởng cho các trường hợp sử dụng phân tích thời gian thực như phân tích truyền thông xã hội, nhắm mục tiêu quảng cáo, cá nhân hóa và IoT

9.4 Ưu điểm o Redis cho phép lưu trữ các cặp khóa và giá trị lên tới độ lớn 512 MB, có nghĩa là Redis sẽ hỗ trợ tối đa 1GB dữ liệu cho một entry duy nhất o Redis sử dụng cơ chế băm riêng, được gọi là Redis Hashing Redis lưu trữ dữ liệu dưới dạng key và map, tức là các trường và giá trị dạng string o Redis cung cấp sao chép dữ liệu Sao chép là quá trình thiết lập các nút bộ nhớ đệm master-slave Các nút slave luôn lắng nghe nút master, có nghĩa là khi nút master được cập nhật, các nút slave cũng sẽ tự động được cập nhật Redis cũng có thể cập nhật nút slave không đồng bộ o Bộ nhớ đệm Redis có thể chịu được lỗi và cung cấp dịch vụ không bị gián đoạn Vì Redis có thể được sử dụng để thiết lập sao chép hiệu quả, nên tại bất kỳ thời điểm nào, bộ nhớ cache cũng sẽ hoạt động - ngay cả khi bất kỳ nút phụ nào bị lỗi Bên cạnh đó, các nút có khả năng khôi phục, sẽ tự động khắc phục sự cố và tiếp tục cung cấp dịch vụ o Redis hỗ trợ nhiều ngôn ngữ lập trình phổ biến Redis có các client API được phát triển bằng tất cả các ngôn ngữ phổ biến như C, Ruby, Java, JavaScript và Python Có thể tìm thấy danh sách đầy đủ các ngôn ngữ mà Redis hỗ trợ trên trang Wikipedia của Redis o Redis cung cấp hệ thống pub/sub messaging Bạn có thể phát triển một ứng dụng nhắn tin hiệu suất cao bằng cách sử dụng cơ chế Redis pub/sub bằng bất kỳ ngôn ngữ nào o Redis cho phép chèn một lượng lớn dữ liệu vào bộ nhớ đệm của nó rất dễ dàng Đôi khi, người dùng có nhu cầu tải hàng triệu phần dữ liệu vào bộ nhớ cache trong một khoảng thời gian ngắn Điều này có thể được thực hiện dễ dàng bằng cách sử dụng tính năng chèn hàng loạt, một tính năng được Redis hỗ trợ o Redis có thể được cài đặt trong các thiết bị Raspberry Pi và ARM Redis có bộ nhớ nhỏ và nó có thể được cài đặt trong Raspberry Pi để kích hoạt các ứng dụng dựa trên IoT o Redis protocol giúp việc triển khai một ứng dụng trở nên đơn giản Máy khách Redis giao tiếp với máy chủ của nó bằng cách sử dụng RESP (Redis Serialization Protocol) Giao thức này dễ thực hiện và con người có thể đọc được o Redis hỗ trợ transaction Redis hỗ trợ các giao dịch, có nghĩa là các lệnh có thể được thực hiện dưới dạng hàng đợi thay vì thực hiện từng lệnh một Thông thường, các lệnh sau MULTI sẽ được thêm vào một hàng đợi và khi EXEC được phát hành, tất cả các lệnh được lưu trong hàng đợi sẽ được thực thi cùng một lúc

NỘI DUNG GIẢI PHÁP ĐỀ XUẤT

Bài toán tích hợp

1.1 Cơ chế nhập dữ liệu trong hệ thống dữ liệu mở CKAN

Xét tới đối tượng cụ thể là CKAN, như đã trình bày ở chương 2, CKAN là một hệ thống dữ liệu mở hỗ trợ rất nhiều tính năng lưu trữ, chia sẻ và trích xuất các siêu dữ liệu về tập thông tin Đơn vị chia sẻ dữ liệu của CKAN là các tập dữ liệu - Dataset, nội dung bên trong một tập dữ liệu bao gồm rất nhiều tập tin có nội dung liên quan và dưới nhiều định dạng khác nhau

Hình 24: Mối quan hệ Dataset và Resources trong CKAN

Mối quan hệ và các thuộc tính của tập dữ liệu này được CKAN phân tích và lưu trữ trong hệthống cơ sở dữ liệu dưới dạng các bảng quan hệ, cụ thể là cơ sở dữ liệu Postgre Vì là một nềntảng dữ liệu mở phục vụ cộng đồng với nhiều mục đích khác nhau, CKAN hỗ trợ rất nhiều cơchế mở rộng và nhiều API phục vụ cho việc tích hợp giữ nhiều hệ thống Các cơ chế mở rộng trong CKAN rất đa dạng, cho phép can thiệp sâu và tuỳ chỉnh được quá trình vận hành của hệthống Giải pháp của luận văn tận dụng các chức năng này của CKAN thông qua một bộ connector để kết nối với Data Distributed Service Từ đó có thể trao đổi được dữ liệu từ Data Distributed Service

1.2 Chức năng mở rộng - Plugin

Hình 25: Plugin trong CKAN cho phép theo dõi lifecycle của các đối tượng

Mỗi plugin mở rộng trong CKAN sẽ được phép can thiệp vào quá trình vận hành của hệ thống thông qua các giao diện (interface) được CKAN định nghĩa Mỗi đối tượng trong CKAN sẽ có một vòng đời (life cycle) với nhiều giai đoạn khác nhau và với nhiều ngữ cảnh khác nhau, Ví dụ: giai đoạn được tạo mới, giai đoạn được chỉnh sửa, giai đoạn được kiểm tra, giai đoạn trước khi lưu trữ, giai đoạn lưu trữ, giai đoạn sau khi lưu trữ … Nhiều ngữ cảnh khác nhau như: được chỉnh sửa bởi người dùng nào, vào thời điểm nào, vai trò và hoàn cảnh của đối tượng được chỉnh sửa, chỉnh sửa gián tiếp bởi một hành động khác hay chỉnh sửa trực tiếp bởi người dùng, thông tin nào bị chỉnh sửa, dữ liệu trước khi chỉnh sửa là gì, sau khi chỉnh sửa như thế nào…

1.3 Công việc chạy nền - Background jobs

Trong CKAN, hệ thống hỗ trợ việc cho phép tạo racác công việc chạy nền, đồng bộ hoặc bất đồng bộ với hệ thống chính Có thể hiểu đơn giản,với mỗi thông tin thay đổi mà ta quan tâm vừa thu nhận được, ta tạo ra một tác vụ (job) và đưavào hàng đợi Một hệ thống vận hành song song với hệ thống chính có nhiệm vụ xử lý hàngđợi này và đưa thông tin lên Data Distributed Service thông qua connector Vì là hệ thống vận hành song song, nên việcxử lý các tác vụ trong hàng đợi hoàn toàn không ảnh hưởng đến hiệu suất vận hành của hệthống chính, quá trình đồng bộ hoá dữ liệu diễn ra hoàn toàn độc lập Ngoài ra CKAN cũng hỗtrợ rất nhiều trong việc quản lý các tác vụ nền như điều chỉnh thời điểm bắt đầu, kết thúc mộttask vụ, thời gian cho phép tối đa của tác vụ, cơ chế xử lý lỗi, cơ chế tái thực thi

Hình 26: Cơ chế đồng bộ hoá trong CKAN kết hợp plugin và background jobs

Giải pháp tích hợp DDS vào trong CKAN được thực hiện bằng cách xây dựng một plugin cho phép người dùng nhập các thông tin cần thiết cho việc kết nối đến một Global Data Space Sau đó đưa các thông tin đầu vào này vào hàng đợi Background Job trong CKAN Từ hàng đợi này, CKAN sẽ kết nối đến DDS thông qua Connector.

Bài toán chuyển đổi

Các kiểu dữ liệu primitive trong Type System được biểu diễn dưới dạng JSON có dạng như sau:

Type System JSON Schema Example boolean

Như thể hiện trong trên, các giá trị của hầu hết các kiểu primitive trong DDS có thể được biểu diễn bằng cách sử dụng các kiểu JSON gốc

Tuy nhiên, các kiểu primitive sau đây yêu cầu các quy tắc ánh xạ đặc biệt:

• byte sẽ được biểu diễn dưới dạng kiểu số nguyên trong phạm vi [0, 255] sử dụng cơ số 10

• int64 trong phạm vi [-2 53 + 1, 2 53 - 1] sẽ được biểu diễn dưới dạng kiểu số nguyên Các giá trị Int64 hợp lệ bên ngoài phạm vi đó sẽ được biểu diễn dưới dạng chuỗi bao gồm giá trị số trong cơ số 10 3

• Các giá trị uint64 trong phạm vi [0, 253 - 1] sẽ được biểu diễn dưới dạng kiểu số nguyên Giá trị uint64 hợp lệ bên ngoài phạm vi đó sẽ được biểu diễn dưới dạng chuỗi bao gồm giá trị số trong cơ số 10 3

• Các giá trị float128 phải được biểu diễn dưới kiểu chuỗi mã hóa sử dụng base64 theo [RFC-4648]

Các giá trị số, chẳng hạn như Infinity, -Infinity và NaN, như đã nêu trong [ECMA- 404] không thể được biểu thị bằng chuỗi các chữ số, sẽ được biểu diễn bằng các chuỗi JSON sau: "inf", "-inf" và "nan"

Ngoài các kiểu primitive thì những kiểu dữ liệu khác trong type system cũng được biểu diễn bằng JSON như bảng sau

Type System IDL Ví dụ khi chuyển qua JSON

KEEP_LAST_HISTORY_QOS, KEEP_ALL_HISTORY_QOS };

"kind": "KEEP_ALL_HISTORY_QOS"

"kind": "KEEP_LAST_HISTORY_QOS",

Array hoặc Sequences struct QosPolicyCount { long policy_id; long count;

String type struct MyStruct { wstring a_string; string another_string;

{ "a_string": "A string!", "another_string": "El r\u00EDo mi\u00F1o" }

Duration struct Duration_t { long sec; unsigned long nanosec;

Nested type struct InnerStruct { long x; long y;

Hiện tại, kiểu của dữ liệu có thể được biết trước thời gian compile bằng cách biểu diễn thông qua IDL hoặc chỉ được biết đến trong thời gian chạy thông qua một số API Điều này dẫn đến 2 phương pháp chuyển đổi khác nhau như trình bày dưới đây

2.1 Chuyển đổi từ Plain Language Object thông qua IDL file

Như đã trình bày trước đó, kiểu của dữ liệu có thể được biểu diễn thông qua IDL file Sau đó sẽ có một bộ code generator được gọi là opendds_idl sẽ sinh ra code được gọi là Type support Type Support chứa phần khai báo của những class chứa những kiểu dữ liệu của các topic được khai báo trong idl file Ngoài ra Type Support còn có chức năng deserialization dữ liệu từ DDS thành Plain Language Object và ngược lại serialization Plain Language Object thành dữ liệu có thể truyền thông qua DDS như hình dưới đây

Hình 27: Cơ chế hoạt động hiên tại của DDS

Do đó, để chuyển đổi dữ liệu trong DDS được biểu diễn bằng IDL thì giải pháp được đề xuất là sẽ chỉnh sửa bộ code generator để có thể xuất ra được dữ liệu JSON như hình dưới đây:

Hình 28: Thêm tính năng cho bộ sinh mã opendds_idl

Bài toán lưu trữ và chia sẻ

Khi tích hợp DDS vào hệ thống quản lý dữ liệu mở, ta cần chuyển đổi dữ liệu về chuẩn JSON để lưu trữ Ngoài ra cần phải lưu trữ các thông tin meta data như sau: o Tên của dữ liệu o Đường dẫn URL o Các tag có liên quan o Bản quyền o Tổ chức phát hành o Phiên bản o Thông tin về tác giả như: Tên, email liên hệ, … o Thông tin người bảo trì: Tên, email liên hệ, … o Thông tin mô tả về dữ liệu

Những thông tin này được lưu trữ trong datastore của CKAN và trong collection metadata của db tương ứng trong MongoDB Ngoài những thông tin trên Thì ta cần phải lưu trữ một số tập tin khác như: Tập tin đặc tả kiểu dữ liệu, tập tin đặc tả cấu hình để kết nối Các file nay sẽ được lưu vào filestore của CKAN Đối với MongoDB, do giới hạn về kích thước một node JSON trong MongoDB không vượt quá 16MB nên các file này sẽ được lưu vào GridFS trong MongoDB

Khi chia sẻ dữ liệu JSON, ta sẽ export dữ liệu từ MongoDB ra dạng JSON line và chia sẻ Điều này giúp cho việc xử lý dữ liệu trở lên dễ dàng hơn

Cơ chế tự động sinh mã và biên dịch tập tin thực thi

Như đã trình bày phía trên, opendds_idl sẽ sinh ra mã được gọi là Type support Type Support chứa phần khai báo của những class chứa những kiểu dữ liệu của các topic được khai báo trong idl file Ngoài ra Type Support còn có chức năng deserialization dữ liệu từ DDS thành Plain Language Object và ngược lại serialization Plain Language Object thành dữ liệu có thể truyền thông qua DDS Do đó giải pháp để chuyển đổi từ Plain Language Object sang JSON Object là ra sẽ hiện thực thêm phần sinh mã từ Abstract syntax tree sang JSON Object Mã được sinh ra sẽ chỉ được dùng cho một yêu cầu kết nối tương ứng Do đó ta cần phải hiện thực một cơ chế để mỗi khi có yêu cầu kết nối đến DDS thì bộ sinh mã opendds_idl sẽ được gọi tự động Sau đó cần phải thực hiện lại quá trình biên dịch đối với bộ mã vừa mới được sinh ra để tạo ra tập tin thực thi mới Tất cả các cơ chế này được hiện thực thông qua một bộ connector như sau:

Hình 29: Cơ chế tự động sinh mã và biên dịch

Cơ chế cập nhật dữ liệu nhận được vào datastore của CKAN và MongoDB

Datastore (Mongodb) bao gồm nhiều DB con Mỗi DB tương ứng vỡi mỗi tập dữ liệu đã convert Trong mỗi DB sẽ có các collection tương ứng với data trong DDS được chuyển đổi, và collection để lưu trữ id của các tập tin cấu hình kết nối mạng và tập tin mô tả kiểu dữ liệu Các tập tin này được lưu trong GridFS của MongaDB Ngoài ra, sẽ có 1 collection tên là metaData để lưu trữ các thông tin liên quan tới người dùng, các thông tin liên quan tới CKAN, các thông tin meta data khác

Ví Dụ: Topic Students trong sẽ lưu vào collection có tên là Student

Dữ liệu được cập nhật vào datastore của CKAN thông qua một số API của CKAN như: create_resource, update_resource

Tích hợp các thành phần tạo thành giải pháp hoàn chỉnh

Hình 30: Hệ thống tổng quát

Đánh giá khả năng của giải pháp

Giải pháp đề xuất có khả năng: o Tích hợp với các nền tảng dữ liệu mở, hoàn toàn không giới hạn bởi 1 nền tảng mà xâydựng cơ chế tổng quát cho nhiều nền tảng khác nhau. o Khả năng tương tích trên nhiều nền tảng khác nhau do toàn bộ phần connector được đóng gói thông qua docker nên độc lập hoàn toàn với hệ thống nền tảng. o Giải pháp này tích hợp DDS thông qua plugin, mà không tác động trực tiếp vào mã nguồn của CKAN, điều này cho phép plugin có thể hoạt động bình thường trên các phiên bản sau này của CKAN o Do các tác vụ kết nối, chuyển đổi dữ liệu được thực hiện thông qua cơ chế gọi tác vụ chạy ngầm Điều này cho phép giám sát thời gian cho phép tối đa của tác vụ, cơ chế xử lý lỗi, cơ chế tái thực thi, … o Cơ chế chuyển đổi dữ liệu tĩnh được biểu diễn thông qua IDL Mỗi khi có yêu cầu chia sẻ dữ liệu, bộ sinh mã lại tự động sinh ra các đoạn mã hỗ trợ việc chuyển đổi từ Plain Language Object qua JSON Object Điều này giúp cho giải pháp có khả năng đáp ứng mọi loại dữ liệu được trao đổi thông qua DDS hiện tại Ngoài ra cơ chế này giúp

53 cho bộ chuyển đổi đạt được hiệu suất rất cao Do việc chuyển đổi đã được xác định và tối ưu tại thời điểm biên dịch. o Các tập tin đặc tả kiểu dữ liệu, đặc tả cấu hình để kết nối đảm bảo được lưu trữ đầy đủ thông qua GridFS kể cả với kích thước lớn.

HIỆN THỰC GIẢI PHÁP

Môi trường hiện thực và công cụ sử dụng

Processor: 2.3 GHz, Dual-Core Intel Core i5

 CKAN open source, phiên bản 2.9

 Cơ sở dữ liệu PostgreSQL 2.5

 GCC phiên bản 10.2 o Docker, Docker Compose o MongoDB, Mongo Express

Thiết lập vận hành nền tảng CKAN

CKAN cung cấp các chức năng: o Giao diện Web người dùng, cho phép:

 Đăng ký, tạo mới, cập nhật thông tin người dùng

 Tạo các Dataset, cập nhật, thay đổi các thông tin liên quan đến Dataset

 Upload các File trong Dataset

 Tạo các Resource, cập nhật, thay đổi các thông tin liên quan đến Dataset o Lưu trữ các file upload lên địa chỉ server đã được cấu hình trước o Các module trực quan hoá dữ liệu o Các plugin mặc định liên quan hỗ trợ cho việc upload và trực quan hoá dữ như: datastore, datapusher, text_view, image_view, recline o Tạo các tác vụ ngầm, đồng bộ hoá dữ liệu

Nền tảng CKAN được thiết lập bao gồm các thành phần sau:

Hình 31: Cấu trúc vận hành thực nghiệm CKAN o CKAN source code 2.9 được viết bằng Python, chạy trên môi trường ảo của Python 3.8, host bởi Apache Server o Cơ sở dữ liệu trong CKAN là cơ sở dữ liệu quan hệ PostgreSQL o Quá trình tìm kiếm, đánh chỉ mục (indexing) của CKAN được thực hiện bởi máy chủ Sorl o Máy chủ FileStore làm nhiệm vụ là nơi lưu trữ các file được upload bởi người dùng o Các tác vụ chạy ngầm được quản lý và thực thi theo Queue bởi máy chủ Redis

Xây dựng plugin trong CKAN

Plugin được phát triển bằng ngôn ngữ Python, hiện thực các API interface hỗ trợ trong nềntảng, cho phép người dùng nhập vào các thông tin để tạo một dataset như: o Các thông tin theo yêu cầu mặc định cảu CKAN như: tên của dữ liệu, đường dẫn URL, các tag có liên quan, bản quyền, tổ chức phát hành, phiên bản, tên và email liên hệ với tác giả, người bảo trì, thông tin mô tả về dữ liệu, … o Các thông tin cần có để có thể tạo kết nối và nhận dữ liệu từ DDS như: tên chủ đề, tập tin chứa thông tin đặc tả về dữ liệu, tập tin chứa thông tin cấu hình để tạo ra kết nối

Các API cần được hiện thực trong plugin đó là: before_create, after_create Các bước thực thi trong plugin như sau:

56 o Nhận thông tin tạo dataset mới o Tải các tập tin cấu hình mạng, tập tin đặc tả kiểu dữ liệu o Kiểm tra cú pháp của các tập tin này Nếu các tập tin có cú pháp sai thì trả về thông báo yêu cầu người dùng kiểm tra và nhập lại o Khi các tập tin đầu vào có cú pháp hợp lệ thì tạo ra một tác vụ trong hàng đợi o Khởi tạo một dataset mới với thông tin được nhập vào từ CKAN o Lưu các tập tin cấu hình mạng, tập tin đặc tả kiểu dữ liệu vào filestore của CKAN

API để cập nhật dữ liệu vào DataStore của MongoDB và CKAN

Sau khi tạo ra kết nối thành công, nhận đc dữ liệu và chuyển đổi về chuẩn JSON, cần phải lưu dữ liệu này vào datastore của MongoDB và CKAN thông qua các API sau: o CKAN: ckanext.datastore.logic.action.datastore_upsert(context, data_dict)

API này có chức năng chèn hoặc cập nhật dữ liệu vào một bảng trong DataStore của CKAN datastore_upsert cho bạn thêm hoặc chỉnh sửa các bản ghi vào một resource trong DataStore hiện có Để các phương thức nâng cấp và cập nhật hoạt động, một khóa duy nhất phải được xác định thông qua hành động datastore_create Các phương thức hiện tại hỗ trợ là:

 Upsert: Cập nhật nếu bản ghi có cùng khóa đã tồn tại, nếu không thì chèn Yêu cầu khóa duy nhất

 Insert: Chỉ chèn Phương thức này nhanh hơn upert, nhưng sẽ không thành công nếu bất kỳ bản ghi nào được chèn khớp với bản ghi hiện có Không yêu cầu một khóa duy nhất

 Update: Chỉ cập nhật Một ngoại lệ sẽ xảy ra nếu khóa cần được cập nhật không tồn tại Yêu cầu khóa duy nhất

Hình 32: Các thông số đầu vào và kết quả trả về của datastore_upsert o MongoDB: Hiện thực một API cho phép lưu trữ dữ liệu vào một collection bất kỳ trong MongDB như sau:

Hình 33: API cho phép cập nhật dữ liệu vào collection trong MongoDB

API để lưu các tập tin cấu hình mạng và mô tả kiểu dữ liệu

Để lưu các tập tin chứa thông tin cấu hình mạng và tập tin mô tả kiểu dữ liệu, Tay sử dụng hoặc xây dựng các API sau: o CKAN: Để lưu các tập tin này vào CKAN, ta sử dụng API sau:

Hình 34: API cho phép lưu các tập tin vào filestore trong CKAN o MongoDB: Do giới hạn về kích thước một nút không vượt quá 16MB trong MongoDB nên ta không thể lưu trực tiếp nội dung các tập tin này vào một node trong MongoDB Thay vì vậy, ta lưu các tập tin này vào GridFS, sau đó lưu giá id được trả về từ GridFS của các tập tin này vào một collection trong MongoDB API cho phép lưu một tập tin bất kỳ vào GridFS có dạng như sau:

Hình 35: API cho phép lưu các tập tin vào GridFS

Thiết lập môi trường cho OpenDDS

Môi trường yêu cầu như sau: o OpenDDS 3.15 o C++ o CMake phiên bản 3.19 o RapidJSON o GCC phiên bản 10.2

Tiến hành cài đặt như sau: o Tải toàn bộ mã nguồn hiện tại của OpenDDS tại: https://github.com/objectcomputing/OpenDDS/ o Tiến hành biên dịch mã nguồn và cài đặt OpenDDS qua các bước sau:

59 o Chạy thử các ví dụ để kiểm tra OpenDDS đã được cài đặt thành công hay chưa

Xây dựng bộ sinh mã để chuyển đổi

Hình 36: Class diagram của rapidjson_generator

Bộ sinh mã để chuyển đổi từ Plain Language Object sang JSON Object được hiện thực thông qua việc khai báo class rapidjson_generator kế thừa từ class dds_generator Sau đó hiện thực các hàm ảo như: gen_enum, gen_struct, gen_typedef, gen_union, gen_includes

Sau đó một đối tượng được sinh ra bởi class rapidjson_generator sẽ được đưa vào bộ dds_visitor như sau:

Hình 37: Thêm bộ sinh mã cho JSON vào dds_visiter

Xây dựng hệ thống hoàn chỉnh

Hình 38: Hệ thống hoàn chỉnh

Hệ thống hoàn chỉnh sẽ bao gồm các thành phần sau: o Một Plugin trên CKAN cho phép người dùng tạo ra dataset mới và nhập vào các thông tin cần thiết cho DDS như: Tên chủ đề, tập tin mô ta kiểu dữ liệu, tập tin mô tả cấu hình mạng để tọa ra kết nối o Một bộ sinh mã để chuyển đổi JSON được gắn vào bộ sinh mã hiện tại của OpenDDS o Một bộ script giúp khởi tạo môi trường, tự động gọi bộ sinh mã và biên dịch o Một bộ connector chứa các API để giao tiếp với CKAN datastore, CKAN plugin, MongoDB, OpenDDS o Toàn bộ các thành phần này ngoại trừ Plugin trên CKAN thì được đóng gói lại bằng Docker để thuận tiện cho việc sử dụng cũng như deploy sau này.

Kiểm tra và đánh giá

9.1 Phương pháp và tiêu chí

Việc đánh giá hoạt động của hệ thống là một giai đoạn cần thiết vì kết quả phụ thuộc vào rất nhiều yếu tố khác nhau như: số lượng dữ liệu, kích thước của dữ liệu, tốc độ đường truyề, số lượng các node trong tham gia vào mạng DDS, thời gian hoạt động, khả năng cập nhật,khả năng đáp ứng, duy trì hệ thống… Tuỳ thuộc vào đặc tính của dữ liệu, hệ thống mà tính khả dụng của giải pháp được phát huy Bằng phương pháp thực nghiệm trên các tập dữ liệu, hoàn khác nhau, trên các hệ thống với số lượng node trong mạng là khác

63 nhau, thông qua các tiêu chí được đề xuất sau, ta có thể đánh giá được hiệu năng của giải pháp: o Tính đáp ứng - hệ thống vận hành liên tục và không bị gián đoạn:

Các nền tảng dữ liệu mở thường phải quản lý một số lượng lớn các tập dữ liệu, đồng thời dữ liệu cần phải cập nhật, lưu trữ liên tục, giải pháp đề xuất cần có khả năng đáp ứng liên tục với sự thay đổi đó Ta có thể tiến hành thực nghiệm bằng cách giả lập vận hành hệ thống với các yêu cầu thay đổi dữ liệu liên tục, đồng thời cũng như thay đổi về số lượng các bên tham gia vào mạng lưới chia sẻ dữ liệu dùng DDS, sau mỗi thay đổi kiểm tra độ sẵn sàngcủa hệ thống o Tính đúng đắn, chất lượng - hệ thống vận hành một cách chính xác: Ngoài khả năng đáp ứng nhanh các yêu cầu, ta phải đảm bảo độ chính xác trong quá trình vận hành Sau mỗi lần thay đổi các dữ liệu, thay đổi về số lượng các bên tham gia vào mạng lưới chia sẻ dữ liệu dùng DDS Ta cần có các bộ kiểm tra tính đúng đắn, chính xác bằng cách so sánh dữ liệu gốc và dữ liệu nhận được o Tính uyển chuyển - giải pháp có thể dễ dàng tích hợp với các nền tảng khác nhau: Bằng cơ sở lập luận logic, cũng như nghiên cứu các đặc tả chung của các nền tảng dữ liệu mở phổ biến hiện nay, ta có thể chứng minh được khả năng tích hợp của giải pháp Tích hợp khi hệ thống dữ liệu mở vừa bắt đầu hoạt động và Tích hợp với hệ thống dữ liệu mở đã có sẵn Từ đó cho thấy giải pháp là một hướng đi đúng trong xu thế dữ liệu mở. o Chi phí, thời gian xây dựng hệ thống cũng như bảo trì và vận hành hệ thống: Sử dụng Data Distributed Service trong hệ thống quản lý dữ liệu mở không phải là giải pháp duy nhất nhằm giải quyết bài toán được nêu ra Tuy nhiên mỗi phương pháp có những ưu điểm khuyết điểm riêng, khi đưa vào thực tế vận hành, chí phí, thời gian cũng đóng vai trò quan trọng trong việc đưa ra quyết định lựa chọn giải pháp Ta có thể tiến hành so sánh thời gian xây dựng, các yêu cầu kỹ thuật, độ phức tạp, chi phí ban đầu, chi phí vận hành … với các phương pháp hiện nay, từ đó có thể biết được gỉai pháp phù hợp với bối cảnh cụ thểnào.

9.2 Tiến hành cài đặt và kiểm tra

Ta thực hiện các bước sau để tiến hành kiểm tra kết quả của giải pháp: o Lấy dữ liệu từ các nguồn mở với định dạng CSV Dữ liệu đảm bảo đa dạng về kích thước cũng như kiểu của các trường thành phần o Hiện thực một publisher trong DDS o Dùng các thư viện đã được kiểm chứng như Boost để Parse dữ liệu đầu vào o Tạo ra các chủ đề và publish các dữ liệu này o Đăng nhập vào CKAN, tiến hành tạo dataset mới và nhập các thông tin cần thiết vào o Sau khi toàn bộ dữ liệu đã được nhận bởi CKAN và MongoDB thì tiến hành so trùng

Sau khi thực hiện toàn bộ các bước trên thì ta thấy dữ liệu nhận được hoàn toàn trùng khớp với dữ liệu ban đầu Ngoài ra, khả năng đáp ứng của hệ thống là tốt trong những trường hợp dữ liệu là rất lớn.

Kết luận

Sau quá trình xây dựng các thành phần cơ bản và tiền hành kết hợp lại thành một hệ thống hoàn chỉnh thì hệ thống đã vận hành thành công Người dùng CKAN thông qua giao diện web của CKAN có thể thực hiện việc thêm mới các tập dữ liệu DDS Toàn bộ dữ liệu nhận được từ DDS sẽ được lưu tại DataStore của CKAN và MongoDB Ngoài ra các thông tin meta data, schema cũng được lưu lại để đảm bảo các mối liên hệ của dữ liệu được toàn vẹn sau quá trình chuyển đổi Ngoài ra, việc lưu lại các thông tin meta data cũng như schema giúp cho các bài toàn khác như: tích hợp, tìm kiếm, chia sẻ có thể được giải quyết dễ dàng Quá trình vận hành của CKAN và bộ chuyển đổi được vận hành song song mà không ảnh hưởng đến những hoạt động bình thường của CKAN Không chỉ dừng lại ở việc thêm mới, Người dùng hoàn toàn có thể chỉnh sửa các thông tin, xóa dữ liệu, cũng như theo dõi, giám sát sự hoạt động của hệ thống thông qua giao diện của CKAN Dữ liệu được lưu ở cả DataStore của CKAN và MongoDB Điều này cho phép hệ thống có thể chuyển đổi từ CKAN sang các hệ thống quản lý dữ liệu mở khác, tăng tính linh hoạt cho hệ thống Ngoài ra, điều này còn giúp dễ dàng trong việc phát triển các ứng dụng sử dụng các dữ liệu mở này bằng cách truy xuất trực tiếp trong MongoDB thay vì DataStore của CKAN Quá trình thực nghiện cũng đã kiểm tra tính đúng đắn của bộ chuyển đổi Bộ chuyển đổi hoạt động chính xác đối với toàn bộ những dữ liệu được dùng để kiểm chứng Ngoài ra, hệ thống cũng có khả năng đáp ứng tốt, có thể chuyển đổi được lượng dữ liệu rất lớn

TỔNG KẾT

Tổng kết nội dung

Luận văn đề xuất giải pháp tích hợp dịch vụ chia sẻ dữ liệu phân tán vào hệ thống quản lý dữ liệu mở CKAN Việc tích hợp này giúp tạo ra một cơ chế để người dùng có thể chia sẽ các tập dữ liệu dạng stream cho các hệ thống quản lý dữ liệu mở Giải pháp đề xuất một hệ thống kết nối và chuyển đổi dữ liệu từ dịch vụ chia sẻ dữ liệu phân tán hoạt động hoàn toàn độc lập và không ảnh hưởng đến hoạt động bình thường của hệ thống quản lý dữ liệu mở Cơ chế này khiến cho giải pháp có thể được triển khai hoàn toàn dễ dàng trên các nền tảng quản lý dữ liệu khác CKAN Dữ liệu nhận được từ dịch vụ chia sẻ dữ liệu phân tán không những được lưu vào CKAN mà cả MongoDB Việc lưu thêm dữ liệu vào MongoDB có vai trò quan trọng, vì dữ liệu này có cấu trúc linh động phù hợp với sự thay đổi của dữ liệu được chia sẻ từ dịch vụ chia sẻ dữ liệu phân tán, tạo điều kiện cho nhiều loại ứng dụng có thể tiếp cận dữ liệu từ nguồn này để phục vụ nhiều mục đích cho phát triển sau này.

Hướng phát triển

Với giải pháp hiện tại, có thể phát triển để giải các vấn đề sau đây khi tích hợp dữ liệu streaming trong bối cảnh cảnh dữ liệu mở hiện nay như: o Tích hợp các dịch vụ chia sẻ dữ liệu khác như: Apache Kafka, MQTT, Amazone Kinesis, … o Tính riêng tư của dữ liệu (Data Privacy) o Quyền sở hữu dữ liệu (Data ownership) o Kiểm tra và đánh giá chất lượng của dữ liệu o Tích hợp dữ liệu, loại bỏ dữ liệu dư thừa

DANH MỤC CÁC TÀI LIỆU THAM KHẢO

[1] "The Data Distribution Service (DDS) Vendor Directory." Internet: https://www.dds-foundation.org/where-can-i-get-dds/, Jan 2020

[2] "DDS Consolidated JSON Syntax, Version 1.0 beta." Internet: https://www.omg.org/spec/dds-json/about-dds-json/, July 2019

[3] "JSON Lines." Internet: http://jsonlines.org/, May 2020

[5] “Ckan documentation.” Internet: https://docs.ckan.org/en/latest/contents.html, Jan 2020

[6] “DKAN Open Data Platform.” Internet: https://getdkan.org/, Feb 2020

[7] “The Open Government Platform.” Internet: http://ogpl.gov.in/, Feb 2020 [8] “Junar.” Internet: https://www.junar.com/, Mar 2020

[9] “Socrata Open Data Server.” Internet: http://open-source.socrata.com, Jan

[10] Oliver Vogel, Ingo Arnold et al, “Software Architecture: A Comprehensive Framework and Guide for Practitioners.” Springer, 2011, ISBN-13: 978-

[11] Object Management Group (OMG), “The Real-time Publish-Subscribe Wire Protocol DDS Interoperability Wire Protocol Specification.” OMG, 2009 [12] Object Management Group (OMG), “Data Distribution Service for Real-time Systems, Version 1.2.” OMG, 2007

[13] Twinoaks Computing Inc, “Interoperable DDS Strategies.” Dec 2011

[19] “Health Level 7.” Internet: https://www.hl7.org, Dec 2019

[20] “Introduction to Container Security.” Internet: https://www.docker.com/sites/default/files/WP_IntrotoContainerSecurity_08. 19.2016.pdf May 2019

[21] “Redis” Internet: https://redis.io/, Sep 2020

Ngày đăng: 03/08/2024, 13:18

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN