Distributed system là gì

Related Articles

Ngày xưa, lúc mới bắt tay vào làm dự án Penlook với mấy ông anh, khi bàn về kiến trúc có đặt ra chia tải cho nhiều server. Sau này đi làm có kinh nghiệm rồi mới biết nó là gì. Giờ đây quyết định ghi chú lại để dành đọc.

Bạn đang xem :

Dẫn nhập

Giả sử sau khi phát triển xong một website buôn bán nhạc cụ, ta sẽ nghĩ chỉ cần thuê 1 con server chạy là đủ rồi. Cấu hình tầm 1 CPU, 1GB RAM, 25GB SSD, 1TB băng thông là được. Và ta sẽ host lên server với domain là https://instruments.com.

Khoảng 3 tháng đầu làm ăn không phát triển lắm, tầm 1000 lượt truy cập/ngày, tương đương 2 lượt truy cập/phút. Bỗng một ngày đẹp trời, bạn nhập vè nhạc cụ mới quá hot đi, mọi người đổ xô vào web của bạn để đặt hàng. Có thời điểm lên tới 1000 lượt truy cập tại một thời điểm, rồi server bị sập. Sau đó, bạn bắt đầu tìm hiểu nguyên nhân và cách giải quyết cho vấn đề trên.

Tìm hiểu vấn đề

Công cụ đơn giản nhất để tìm hiểu số lượng requests dẫn đến sập server đó là Apache JMeter. Sau khi kiểm thử với nhiều khả năng thì đã phát hiện dấu hiệu của vấn đề. Vấn đề ở đây là đến 1000 requests tại một thời điểm là server sẽ sập.

Cảm thấy hoang mang, bạn lên Google tìm hiểu và ra được giải pháp. Đó là Scale Up (hay Scale Vertically) và Scale Out (hay Scaling Horizontally).

Scale Up – Mục đích là cải thiện performance của server hiện tại. Có 2 hướng tiếp cận đó là nâng cấp phần cứng hoặc tối ưu hoá mã nguồn. Scale Out – Mục đích là tăng số lượng server. Sau đó, dùng công cụ load balancing để điều phối đến nhiều server đã cấu hình.

Scale Up

Như đã nói, giải pháp Scale Up là tăng thêm tài nguyên ( RAM / CPU / DISK ) cho server. Phương pháp này khá tốn kém ngân sách. Do đó, người ta có một cách khác để tiết kiệm chi phí ngân sách đó là sử dụng công nghệ tiên tiến ảo hoá ( Virtualization ). Có 1 số ít loại công nghệ tiên tiến ảo hoá sau :

Hardware Virtualization OS-level Virtualization Desktop Virtualization Application Virtualization Network Virtualization

Scale Out

Phương pháp Scale Out là tăng thêm số lượng server. Phương pháp này khởi đầu hơi tốn kém so với Scale Up nhưng về sau sẽ tiết kiệm chi phí hơn. Đây là phiên bản đơn thuần của Distributed System. Vì nhu yếu của Distributed System phức tạp hơn nhiều và có nhiều yếu tố kỹ thuật cần chăm sóc hơn .

Tại sao cần Distributed System?

Hệ thống của bạn giải quyết và xử lý việc làm cần tốn nhiều tài nguyên. Đôi khi vượt quá năng lực của một server nên bạn sẽ cần phải Scale Out mạng lưới hệ thống. Lúc đó, mạng lưới hệ thống bạn cần bảo vệ những tiêu chuẩn sau :

Tốc độ của bộ nhớ Dung lượng lớn với vận tốc Input / Output cực nhanh Tốc độ xử lý tính toán ( 10, 100, .. thậm chí còn cả ngàn core ) Tin cậy, luôn sẵn sàng chuẩn bị, downtime gần bằng 0 Độ trễ thấp. Độ trễ được xác lập như sau : result = query ( all data in the system )

Do đó, với Distributed System thì bạn sẽ có chiêu thức tiến hành tương thích với việc làm hơn. Sau đây là định nghĩa .

A distributed system is a collection of independent computers that appears to its users as a single coherent system. Andrew S.Tanenbaum

Có hai công việc cơ bản của một hệ thống máy tính đó là Lưu TrữTính Toán. Distributed System là nghệ thuật giải quyết vấn đề của một máy tính trên nhiều máy tính.

Mục tiêu của Distributed System

Để làm gì, cũng cần phải có tiềm năng của nó. Dưới đây là 1 số ít tiềm năng mà tất cả chúng ta cần nỗ lực để triển khai nó .

Dễ dàng truy xuất tài nguyên

Cho phép người dùng ( ứng dụng ) thuận tiện truy xuất tài nguyên từ xa .

Tính trong suốt

Ẩn giấu sự rời rạc của mạng lưới hệ thống so với người dùng. Theo như Andrew S.Tanenbaum và Maarten Van Steen ra mắt trong “ Distributed Systems : Principles and Paradigms ”, tiêu chuẩn này được ghi rõ ràng trong đặc tả ISO, năm 1995. Cụ thể thì mình trong rõ phiên bản nào .

Access transparency – che giấu sự khác biệt về cách biểu diễn và cách truy cập tài nguyên Location transparency – che giấu vị trí của tài nguyên Migration transparency – che giấu khả năng chuyển vị trí của tài nguyên Relocation transparency – che giấu việc di chuyển của tài nguyên khi đang được sử dụng Replication transparency – che giấu tình trạng tình trạng sử dụng bản sao của tài nguyên Concurency transparency – che giấu sự chia sẻ tài nguyên đồng thời Failure transparency – che giấu lỗi hệ thống nếu có

Về mức độ của tính trong suốt, bạn nên xem xét thực thi nhưng không phải trọn vẹn ẩn hết với người dùng .

Xem thêm :

Người dùng ở các châu lục khác nhau, múi giờ sẽ khác nhau. Hoàn toàn ẩn các lỗi mạng là không thể (về thực tế lẫn lý thuyết), do: Không phân biệt máy tính chậm hay bị lỗi Không biết trước được máy tính có thực sự thực hiện xong một thao tác trước khi xảy ra sự cố Chi phí về hiệu năng nếu trong suốt hoàn toàn. Ví dụ, bạn muốn in tài liệu từ máy tính cá nhân. Máy tính của bạn kết nối với nhiều máy in. Nếu bạn biết máy in nào đang “rảnh” sẽ chọn để tiết kiệm thời gian hơn.

Tính mở

Tính mở của Distributed System hiểu là có thể tương tác với các dịch vụ khác từ những hệ thống mở khác, bất kể môi trường nền tảng.

Hệ thống nên tương hỗ tính di động của ứng dụng Hệ thống nên thuận tiện thích hợp. Cụ thể hơn là thuận tiện thông số kỹ thuật mạng lưới hệ thống ra khỏi những thành phần khác nhau ( should be easy to configure the system out of different components ). Cũng như thể thuận tiện thêm vào hoặc sửa chữa thay thế một component bất kể mà không gián đoạn mạng lưới hệ thống .

Để đạt được tính mở, tối thiểu làm cho Distributed System độc lập với tính không như nhau của thiên nhiên và môi trường nền tảng .

Phần cứng Platform Ngôn ngữ

Tính mở rộng

Khi nói về tính lan rộng ra, ta sẽ tối thiểu về 3 tiêu chuẩn sau :

Size scalability – thêm node vào hệ thống để tăng tốc độ xử lý nhưng không làm tăng độ trễ Geographic scalability – sử dụng nhiều data center ở nhiều nơi khác nhau để giảm thời gian phải hồi đến người dùng, tuy nhiên bạn phải xử lý độ trễ cực kỳ hợp lý (khá giống tư tưởng của CDN) Administrative scalability – thêm nhiều node, nhưng không làm tăng chi phí quản lý Những vấn đề khi mở rộng hệ thốngTập trung dịch vụ – Một server cho tất cả người dùng Sẽ gây nên tình trạng thắt cổ chai (bottleneck) Tập trung dữ liệu – Một cuốn sổ điện thoại trực tuyến Giả sử bạn lưu tên miền của tất cả các trang web hiện nay vào một table trong database, sẽ như thế nào nếu bạn gửi 1 request đến truy vấn thông tin? Một phiên bản thắt cổ chai khác tại database. Thuật toán tập trung Đặc điểm của thuận toán trong Distributed System khác với các thuật toán trong Centralized System ở chỗ cần tập trung dữ liệu sẽ gây quá tải một phần mạng. Các đặc điểm đó bao gồm: Không có máy nào có thông tin đầy đủ về trạng thái của hệ thống Máy móc đưa ra quyết định dựa trên thông tin cục bộ Thất bại của một máy không ảnh hưởng đến thuật toán Không có giả định ngầm rằng đồng hồ toàn cục tồn tại Các kỹ thuật mở rộng

Có 3 kỹ thuật cơ bản trong việc lan rộng ra Distributed System đó là : ẩn thời hạn chờ, phân tán và nhân bản .

Ẩn thời hạn chờ ( hiding communication latencies )

Tránh thời hạn chờ phản hồi quá lâu. Minh hoạ cho việc này là kiểm tra tài liệu của người dùng. Thay vì chờ phía server giải quyết và xử lý thì kiểm tra tại client bằng JavaScript sẽ tiết kiệm ngân sách và chi phí thời hạn hơn .

Hình ( a ) là kiểm tra tại phía server. Hình ( b ) là kiểm tra tại phía client .

Phân tán ( Distribution )

Ta có thể hiểu cách này là partition, tức là chia để trị. Ví dụ về DNS là rõ ràng nhất về tính phân tán trên mạng Internet. Những nhóm domain được chia ra thành từng vùng. Chẳng hạn, tên miền nl.vu.cs.flits. Ban đầu nó được xử lý ở vùng Z1, sau đó chuyển sang vùng Z2 để còn vu.cs.flits rồi đến Z3 thành cs.flits.

Nhân bản ( Replication )

Tức là ta sẽ sao chép dữ liệu ra nhiều nơi để tăng tốc độ xử lý. Điển hình là caching.

Tính sẵn sàng

Phần này mình thấy Mikito Takada có nhắc đến khá mê hoặc, nên thêm vào luôn. Tính chuẩn bị sẵn sàng biểu lộ ở tỷ suất thời hạn mạng lưới hệ thống trong trạng thái hoạt động giải trí. Nếu người dùng không hề truy vấn vào mạng lưới hệ thống, tức là nó không chuẩn bị sẵn sàng. Distributed System được cho phép ta đạt được những đặc tính mong ước mà một máy lẻ không cung ứng được. Vì nó là sự tích hợp từ nhiều máy nên có năng lực một máy trong mạng lưới hệ thống bị sập. Distributed System là sự tích hợp của nhiều mấy hoàn toàn có thể sập bất kỳ khi nào và ta phải kiến thiết xây dựng một cơ đáng đáng tin cậy bao quát chúng .

Tính sẵn sàng chuẩn bị nhìn ở góc nhìn kỹ thuật, đó là năng lực chịu lỗi. Bởi vì Phần Trăm xảy ra sự cố tỉ lệ thuận với số lượng thành phần. Ta hoàn toàn có thể làm phép đo đơn thuần về tính chuẩn bị sẵn sàng của mạng lưới hệ thống .

Công thức : Availability = uptime / ( uptime + downtime )

Cạm bẫy

Có 1 số ít giả định sai lầm đáng tiếc khi tăng trưởng Distributed System. Bạn hãy bỏ đi nhé .

Xem thêm:

Mạng là đáng đáng tin cậy Mạng là bảo mật thông tin Mạng là như nhau Cấu trúc link không đổi khác Độ trễ bằng không Băng thông là vô hạn giá thành luân chuyển bằng không Chỉ có một quản trị viên

Tổng kết

Ban đầu mình nghĩ Distributed System cũng chỉ là Scale Out hệ thống đơn thuần. Tuy nhiên, càng tìm hiểu thì càng rối nùi do để vận hành được hệ thống cần phải có một số tiêu chí nhất định. Mình tham khảo một số tài liệu để giản lược, tuy nhiên khó quá thì vẫn phải đọc “Distributed Systems: Principles and Paradigms” để khai sáng, và cuốn này khá khó nhai. Tuy nhiên, để dễ nắm được nội dung thì bạn có thể tham khảo “Distributed Systems for fun and profit”“CSE 660 – An Introduction to Distributed Systems”.

Chuyên mục :

More on this topic

Comments

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Advertismentspot_img

Popular stories