Kiến trúc multitenant trong Oracle database là gì

   Kiến trúc Multitenant trong Oracle Database là gì?

 

Kiến trúc Multitenant của phiên bản Oracle 12c là một sự thay đổi cực kỳ lớn so với bản 11g.

Để dễ hình dung, mình sẽ so sánh kiến trúc của Oracle 11g với 12c ở 1 vài điểm chính. Trong bài viết này có sử dụng 1 số thuật ngữ cơ bản nhưng nếu bạn chưa biết có thể đọc các bài viết này để hiểu rõ hơn.

Đọc thêm  Tổng quan về kiến trúc Oracle Database
Đọc thêm  Kiến trúc Memory Oracle Database - SGA và PGA
Đọc thêm  Các pha khởi động trong Oracle database

   Vấn đề ở các phiên bản Oracle Database cũ

Từ bản 11g trở về trước, mỗi instance chỉ phục vụ cho 1 database. Như vậy n database cần tối thiểu n instance. Bạn hình dung điều đó giống như mỗi khách hàng sẽ được phục vụ riêng bởi 1 nhân viên. Bất cứ database nào cũng như thế, không phân biệt database quan trọng hay không quan trọng.

Với kiến trúc như vậy, chúng ta sẽ nhận thấy ngay, trong tình huống, nếu có nhiều database trên cùng 1 máy chủ, sẽ có khá nhiều tài nguyên bị dư thừa, lãng phí

   Các background process: Mỗi instance sẽ có riêng các background process như DBW, LGWR, CKPT, SMON, PMON…

   Các phân vùng Memory: SGA, PGA.

   Dữ liệu metadata

oracle database 11g

Ngoài ra, trong phiên bản 11g, nhiều tác vụ quản lý database như: Cấp phát lại tài nguyên cho instance, di chuyển các database từ chỗ này sang chỗ khác, clone database từ một database sẵn có,… thường khá phức tạp và mất nhiều thời gian. Đơn giản như việc bạn muốn tạo 1 database mới, cũng mất của bạn 30 đến 40 phút rồi.

(Nếu có thời gian, mình sẽ làm 1 buổi livestream để demo về cách phương pháp di chuyển database, các bạn có thể tham gia group https://www.facebook.com/groups/khotailieukienthucdatabase để đón xem nhé)

  Cách giải quyết ở bản 12c

Với bản 12c, tất cả những điều trên đã thay đổi!

Ở bản 12c, Oracle đưa ra kiến trúc Multitenant, có thể coi là một sự lột xác. (Thực ra, kiến trúc này cũng gần giống kiến trúc của các RDBMS khác như SQL Server, PostgreSQL, chứ không phải Oracle là hãng đầu tiên đưa ra).

oracle database 12c

Trong kiến trúc Multitenant này, chúng ta sẽ có 1 database mẹ, hay còn gọi là Container Database (CDB). Database này là database khởi thủy, bắt buộc phải có trong kiến trúc. Nó có nhiệm vụ lưu trữ, quản lý các thông tin điều khiển chung. Nó cũng sẽ có các background process để xử lý các công việc chung.

Ngoài ra, chúng ta sẽ có các database con, gắn vào database mẹ, gọi là các Pluggable database (PDB). Đây mới chính là nơi lưu trữ các dữ liệu thực sự của người dùng.

   Ghi chú: Thực ra, CDB cũng có thể lưu trữ dữ liệu thực sự, nhưng Oracle khuyến nghị không nên lưu dữ liệu trong CDB để tối ưu cũng như tránh các xung đột ảnh hưởng đến hiệu năng.

Đối với người dùng, PDB hoàn toàn giống với các database bình thường, từ cách kết nối đến các đối tượng bên trong như user, bảng, view, procedure. Còn xét sâu hơn ở kiến trúc phía dưới, các PDB sống dựa vào CDB. CDB cung cấp các process, memory để giữ cho PDB hoạt động.

Có một PDB đặc biệt được sinh ra khi mới tạo CDB, nó gọi là PDB hạt giống (PDB$SEED). Nó giống như 1 mẫu (hay template) để mỗi khi cần tạo ra một PDB mới, Oracle sẽ sử dụng PDB$SEED này để làm mẫu.

Hình ảnh bên trên là danh sách các PDB đang có trong CDB, trong đó PDB$SEED là PDB hạt giống, nó chỉ có thể đọc, chứ không thể sửa đổi.


   Lợi ích khi sử dụng mô hình Multitenant

   Linh động

Kiến trúc này khiến cho Oracle Database trở nên rất linh động trong nhiều tính huống.

Giả sử bây giờ phòng nghiệp vụ yêu cầu bạn tạo một user mới chẳng hạn. Thay vì, bạn phải dùng dbca tạo database, chọn nơi lưu datafile, thiết lập các tham số, cấp phát Memory, …, và phải đợi khoảng 30, 40 phút, như trong bản 11g, bây giờ bạn chỉ cần đúng 1 câu lệnh duy nhất, và chỉ mất có 1 đến 2 phút là có ngay 1 database đã sẵn sàng để sử dụng rồi.

Hay một bài toán khác:

Bạn muốn di chuyển 1 database từ nơi này sang nơi khác. Cách làm rất đơn giản, tôi sẽ nói một cách hình tượng quy trình chỉ có 3 bước thế này, còn ở 1 bài khác tôi sẽ làm thành câu lệnh cụ thể cho các bạn

   Unplug (rút) PDB khỏi CDB cũ.

   Di chuyển datafile của PDB sang chỗ mới

   Plug (gắn) PDB vào CDB mới

Nguyên tắc giống y như việc bạn chuyển 1 quyển sách từ tủ này sang tủ khác. Rất rõ ràng và đơn giản!

   Tận dụng tối đa tài nguyên

Thêm nữa, kiến trúc Multitenant cũng giúp tận dụng tối đa hóa tài nguyên. Như tôi đã đề cập ở bên trên, kiến trúc cũ gây ra rất nhiều vấn đề về dư thừa tài nguyên, thì với kiến trúc mới này,  tài nguyên xử lý sẽ được tái sử dụng liên tục (VD: 1 background process phục vụ cho nhiều PDB)

   Quản lý tập trung

Và lợi ích lớn cuối cùng mà kiến trúc Multitenant mang lại, đó là, khả năng quản lý tập trung rất tốt. Bây giờ bạn có thể thực thi 1 chính sách gì đó (VD: nâng cấp phiên bản chẳng hạn), bạn chỉ cần thực hiện ở mức CDB thì tất cả PDB cũng sẽ được áp dụng theo.


   Demo

Bạn có thể xem video dưới đây để hình dung dễ hơn: Trên thực tế, CDB và PDB sẽ trông như thế nào nhé.

Nguồn: https://dangxuanduy.com/

Xin cho tôi được biết, bạn cảm thấy bài viết này như thế nào? Ý kiến của bạn sẽ giúp tôi nâng cao chất lượng bài viết của mình.

    Hãy chia sẻ bài viết này nếu bạn thấy có ích nhé
    0 0 votes
    Article Rating
    Subscribe
    Notify of
    guest
    0 Comments
    Inline Feedbacks
    View all comments