Posted in Khác

Design Pattern – Singleton Pattern

Gần đây , khi làm 1 job spark streaming . Mình được yêu cầu làm 1 job liên quan tới spark rồi tính toán lại 1 kết quả phần trăm công việc đó và hiển thị visualize lại cái phần trăm đó được theo mốc thời gian để có thể xem khi nào phần trăm đó đi lên hay đi xuống . Thường thì mọi người đã từng làm job này sẽ đẩy cái phần trăm này lên elasticsearch rồi dùng grafana để load cái phần trăm này lên và hiển thị .

 

maxresdefault

Một trong những vấn đề mình gặp phải , đó chính là mỗi batch streaming thì thường là vài giây là sẽ load data lại một lần . Với mỗi batch như thế , nếu mỗi lần đẩy dữ liệu vào elastic mà phải tạo một kết nối mới tới Elastic thì sẽ khá tốn thời gian và tài nguyên và cảm giác hơi ngu ngu . Quá nhiều connections cũng không phải hay ho gì .

Từ đó mình thấy có thể dùng Singeleton Pattern

1.Giới thiệu

Mọi người có thể đọc qua về singeleton ở trang này : http://code5s.com/ngon-ngu-lap-trinh/java/design-pattern-singleton.html

2. Code

Khởi tạo 1 class ESMoritoringService

public class ESMonitoringService {

    private static ESMonitoringService esMonitoringService;
// để hàm khởi tạo private để chỉ class này có thể khởi tạo 
chính nó 
    private ESMonitoringService(){
        // khoi tao
    }
//vì có thế có nhiều threads cùng gọi tới method getInstance để sử dụng 
object ESMonitoringService nên dùng từ khóa synchronized
    public static ESMonitoringService getInstance(){
        synchronized (esMonitoringService){
            if (esMonitoringService==null){
                // create instance
                esMonitoringService= new ESMonitoringService();
            }
            return esMonitoringService;
        }
    }
}

Khi đó trong job spark streaming , khi muốn đẩy dữ liệu vào elastic ta có thể :

ESMonitoringService esMonitoringService= ESMonitoringService.getInstance();
và gọi các method trong ESMonitoringService để index document vào elastic
Advertisements

Trả lời

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Đăng xuất / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Đăng xuất / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Đăng xuất / Thay đổi )

Connecting to %s