Chia để trị, Xu hướng phân tán – Một xu hướng đi đâu cũng gặp!

Chia để trị, Xu hướng phân tán – Một xu hướng đi đâu cũng gặp!

November 27, 2020 2 By Nam Vu

Nếu bạn quan sát một chút thì vài năm gần đây đang có một xu hướng phân tán không chỉ trong công nghệ. Ví dụ như các trang thương mại điện tử, tiki, shopee, lazada họ đều có những trạm phân phối hàng riêng rải khắp nơi, hay như điện toán đám mấy (cloud) cũng là một dạng phân tán dữ liệu, Blockchain hay Microservice cũng không ngoại lệ. 

Vậy tại sao lại có xu hướng này, cùng mình thử tìm hiểu nhé!

Bắt đầu từ công cuộc xâm lược của pháp ở nước ta. Chính sách cai trị của thực dân Pháp là chia để trị, giữa người lương và giáo, nội bộ từng dân tộc với nhau, giữa người Kinh với các dân tộc anh em khác. Sau khởi nghĩa Giáp Dần bọn chúng bắt người Tày đi đàn áp người Dao và xuyên tạc rằng người Dao nổi dậy giết người Tày lấy lúa, giết người Kinh lấy muối. Âm mưu của giặc là chia rẽ lực lượng, phá vỡ khối đoàn kết toàn dân, đoàn kết các dân tộc để chúng dễ bề đàn áp, thống trị.

Hay trung Quốc đang lợi dụng dịch COVID-19, thực hiện cách tiếp cận chia để trị để chinh phục châu Âu và có thể sớm khiến một số quốc gia nhất định “chia tay” với khối EU, một chuyên gia cảnh báo, theo tờ Daily Express.

Đó là 2 ví dụ điển hình cho cái phương pháp mà ngay tiêu đề bài viết mình đã nhấn mạnh. Nhưng bạn hỏi mình xu hướng phân tán kia thì liên quan gì đến phương pháp chia để trị này.

Thưa rằng, nó có liên quan đó. Cứ bình tĩnh đọc tiếp nào!

Thường một việc khó khăn trong quá trình thực hiện, hay một mục tiêu quá lớn, chúng ta có xu hướng chia nhỏ việc ra để làm. Việc xâm lược một quốc gia hay một liên minh khó khăn thì họ sẽ phải cắt nhỏ thành nhiều phần để có thể xử lý dễ dàng hơn.

Trong cuộc sống của bạn cũng vậy, bạn có những nhiệm vụ (task) lớn trong ngày thì bạn nên chia nhỏ chúng ra và xử lý từng nhiệm vụ một. Khá dễ dàng để hiểu đúng không!

Về sự phân tán kia cũng vậy, một máy tính dù có khỏe đến đâu cũng chỉ đạt một ngưỡng xử lý nhất định mà thôi, vậy để xử lý nhiều tác vụ máy tính cùng một lúc thì tất nhiên phải phân tán chúng ra rồi.

Trong thuật toán, có một phương pháp được gọi là chia để trị (Divide and Conquer). Nó là một phương pháp quan trọng trong thiết kế các giải thuật. Ý tưởng của phương pháp này đơn giản là chia một bài toán lớn thành những bài toán nhỏ, chia những bài toán nhỏ thành những bài toán nhỏ hơn nữa. Cứ tiếp tục chia cho đến khi các bài toán nhỏ này không thể chia thêm nữa, khi đó ta sẽ giải quyết các bài toán nhỏ nhất này và cuối cùng kết hợp giải pháp của tất cả các bài toán nhỏ để tìm ra giải pháp của bài toán ban đầu.
Ý tưởng này sẽ phân thành 3 bước chính đó là chia nhỏ, giải bài toán con và kết hợp lời giải.

Từ ý tưởng trong thuật toán như vậy mà Cloud ra đời. Đám mây phân tán đề cập đến việc phân phối các dịch vụ đám mây công cộng đến các địa điểm bên ngoài trung tâm dữ liệu vật lý của nhà cung cấp đám mây, nhưng vẫn được nhà cung cấp kiểm soát. Đám mây phân tán cho phép các trung tâm dữ liệu được đặt ở bất cứ đâu.
Việc internet ra đời kết hợp với một ý tưởng phân tán thic cloud giúp cho chúng ta không còn phải mang theo bất cứ công cụ lưu trữ dữ liệu nào trong người, bạn đi bất cứ đâu cũng có thể lấy được dữ liệu đó của mình mà chẳng quan tâm rằng dữ liệu đó của mình được lưu trên máy vật lý nào và nằm ở quốc gia nào.Các nhà phát triển cloud đã làm việc đó thay bạn rồi, chia mảnh dữ liệu theo vùng (location) khi bạn truy cập ở đâu thì đều có bộ định tuyến (router) điều hướng đến cùng dữ liệu mà họ chia sẵn đó để giúp bạn có được dữ liệu một cách nhanh nhất có thể.

Một công nghệ mới nổi lên gần đây Blockchain, cũng theo phương pháp chia nhỏ rồi phân tán như trên. No là một loại sổ cái phân tán, một danh sách mở rộng theo thứ tự thời gian của các hồ sơ giao dịch được ký bằng mật mã, không thể hủy ngang được chia sẻ bởi tất cả những người tham gia trong mạng.
Mô hình blockchain hoàn chỉnh bao gồm năm yếu tố: Một sổ cái được chia sẻ và phân phối, sổ cái bất biến và có thể theo dõi, mã hóa, mã thông báo và một cơ chế đồng thuận công khai phân tán.

Rồi, Tiki, shopee hay lazada cũng phát triển theo ý tưởng này, đúng hơn là từ Amazon (một trang thương mai điện tử sơ khai đã áp dụng, được nhắc đến trong cuốn sách “Amazon.com sự phát triển thần tốc”. Việc phát triển từ một mô hình không có kho bãi nào cố định cả, họ có thể phân phối tất cả các mặt hàng cho mọi người ở bất cứ đâu. Chỉ cần bạn đặt hàng ở một địa chỉ giao nào đó, họ sẽ phân loại và điều chỉ khu vực giao hàng gần bạn nhất có thể. Vừa tiết kiệm chi phí vận chuyển, vừa có tiết kiệm được thời gian chờ của khách hàng.

Cuối cùng là đến kiến trúc công nghệ cũng vậy, mình có nhắc tới trong bài viết kiến trúc theo hướng dịch vụ và kiến trúc microservice. Bạn đọc có thể tìm đọc lại tại
http://blog.ntechdevelopers.com/service-oriented-architecture-soa-kien-truc-huong-dich-vu/
http://blog.ntechdevelopers.com/microservices-architecture-kien-truc-microservices/

Điều đáng nói ở đây là sự dịch chuyển từ kiến trúc một khối (monolithic) sang các kiến trúc trên bắt nguồn từ việc giải quyết vấn đề một cách độc lập hơn với ý tưởng chia để trị mà mình nói từ đầu tới giờ. Đầu tiên, người thiết kế chia các nhiệm vụ thành từng nhóm độc lập, ví dụ như là quản lý người dùng, quản lý bán hàng… với mỗi nhóm nhiệm vụ đó sẽ hoạt động độc lập với nhau, khi đội ngũ phát triển có thể cũng chia ra thành từng nhóm để phát triển. Nhóm A thì làm phần quản lý người dùng, nhóm B thì làm phần quản lý bán hàng. Đến khi tích hợp lại thì bạn sẽ có một hệ thống hoàn chỉnh.
Từ việc chia nhiệm vụ như thế họ sẽ đặt câu hỏi nếu sản phẩm quản lý bán hàng bị lỗi ngừng hoạt động thì sao, không lẽ cả hệ thống sẽ ngừng hoạt động luôn à! Vậy là một ý tưởng đẩy những nhóm nhiệm vụ kia ra những service hay server riêng biệt nhằm mục đích không những độc lập về tác vụ xử lý mà còn độc lập được đến cả hoạt động vận hành vật lý nữa.

Mọi ý tưởng trong công nghệ đều bắt nguồn từ cuộc sống mà ra thôi. Việc giải quyết vấn đề theo hướng chia để trị này thật sự rất hay và đáng để mở rộng ra những công việc bên ngoài cuộc sống.

Còn bạn, bạn nghĩ sao về điều này! Hãy đưa ra ý kiến của mình bên dưới phần bình luận nhé!


P/s: Đây là bài viết làm tiền đề cho loạt bài viết tiếp theo của mình về microservice và distributed data via citus. Hi vọng các bạn đón đọc.