#181 - Monitoring hiệu quả trong Microservices
Những bài viết hay
Cloud Data Lake vs Cloud Data Warehouse
Với sự phát triển và tiện dụng của Cloud Computing, ngày càng có nhiều hơn các doanh nghiệp migrate các services của họ lên các nền tảng này. Việc triển khai các dịch vụ phân tích dữ liệu lên Cloud cũng không phải ngoại lệ. Qua bài viết, tác giả đưa ra các so sánh và phân tích giữa Cloud Data Lake và Cloud Data Warehouse.
Những điểm mạnh chung:
Cả 2 đều có khả năng scale storage ở mức rất cao
Đều tạo ra hiệu suất rất cao về tốc độ nhập và xuất dữ liệu
Cả hai đều có sự tách biệt giữa việc tính toán và lưu trữ, cho phép mở rộng quy mô linh hoạt hơn
Cả hai đều có khả năng chịu lỗi và cung cấp tính khả dụng cao
Những điểm mạnh của Cloud Data Lake:
Có thể dễ dàng lưu trữ bất kỳ loại dữ liệu nào, đặc biệt là dữ liệu phi cấu trúc
Có thể lưu trữ dữ liệu ở định dạng gốc của nó
Cung cấp các cách xử lý dữ liệu không giới hạn, về cơ bản bạn có thể sử dụng công cụ computing mà bạn muốn (Spark, Flink, ...)
Chi phi thường thấp hơn so với Cloud Data Warehouse
Những điểm mạnh của Cloud Data Warehouse:
Sử dụng schema để đảm bảo cấu trúc dữ liệu
Triển khai Data Governance sẽ dễ dàng hơn
Hỗ trợ ACID. Với Cloud Data Lake bạn phải sử dụng một công cụ quản lý khác như Delta Lake
Hỗ trợ một số Constraints nhất định
Data versioning dễ dàng hơn
Phổ biến, dễ học và sử dụng hơn với Data Analyst nhờ cung cấp SQL-like interface
Dễ dàng thực thi transform Data với khả năng cung cấp resource cho computing một cách linh hoạt
The State of Developer Ecosystem in 2021
Đây là bản report kết quả của survey về developer ecosystem hàng năm lần thứ năm do JetBrains thực hiện. Tổng cộng có 31.743 developers từ 183 quốc gia đã tham gia vào bản report này. Bạn có thể tìm thấy những xu thế mới nhất trong thế giới lập trình cũng như các con số thú vị về các ngôn ngữ lập trình, technologies, công cụ và các khía cạnh khác trong ngành.
Sau đây là một số key takeaways:
Javascript là ngôn ngữ phổ biến nhất.
Python được sử dụng nhiều hơn Java nói chung, nhưng Java phổ biến hơn với vai trò là ngôn ngữ chính.
Top 5 ngôn ngữ mà các lập trình viên có kế hoạch sử dụng hoặc chuyển sang là: Go, Kotlin, TypeScript, Python và Rust.
Top 5 ngôn ngữ đang được các lập trình viên học trong năm 2021 là: Javascript, Python, TypeScript, Java, Go.
Sự phổ biến của Ruby, Objective-C và Scala đang có xu hướng giảm.
Top 5 ngôn ngữ có tốc độ phát triển nhanh nhất là: Python, TypeScript, Kotlin, SQL và Go.
Trong report còn có rất nhiều thông tin chi tiết, phong phú và hữu ích về từng khía cạnh của ngành. Mời mọi người click vào link để xem thêm.
Monitoring Microservices the Right Way
Nếu bạn đã từng migrate 1 hệ thống monolithic sang microservice bạn có thể nhận thấy rằng: Hệ thống hiện đại ngày nay ngày càng phức tạp hơn để monitor. Thách thức của hệ thống hiện đại thời nay gồm:
Tích hợp nhiều giải pháp mã nguồn mở và dịch vụ đám mây hơn so với thời trước, dẫn đến việc phải tích hợp với số lượng nền tảng lớn đó để monitor
Xu hướng microservices thay vì monolithic, dẫn đến số lượng lớn component cần phải monitor
Kiến trúc cloud-native và Kubenetes dẫn đến thêm nhiều layer để monitor hơn: số liệu về infrastructure (vd: CPU,RAM,...) , số liệu về container runtime và Kubenetes (vd: các pod đang chạy, độ tận dụng tài nguyên node,...) , số liệu về ứng dụng (vd: tần suất request, ...)
Khi chọn giải pháp monitor ta cần phải xem xét các yêu cầu mới thời nay, bao gồm khả năng mở rộng, tính linh hoạt của query và khả năng thu thập số liệu (metrics) theo pull mode. Các công cụ và phương thức monitor thông thường trước đây không đáp ứng được các yêu cầu mới đó, nhưng có những công cụ mới đã xuất hiện, đáng chú ý nhất là dự án mã nguồn mở Prometheus đã được áp dụng rộng rãi, hỗ trợ metrics scraping và ngôn ngữ truy vấn linh hoạt với tag.
Tuy nhiên, khả năng mở rộng là điểm yếu của Prometheus vì mặc định chỉ deploy trên 1 node và lưu trữ data trên local storage. Việc giám sát hiện tại cần một giải pháp cluster có thể lưu giữ dữ liệu lịch sử lâu dài mà không phải hi sinh độ chi tiết của dữ liệu bằng cách gộp mẫu (downsampling). Vấn đề này có thể giải quyết nhờ các thế hệ time-series database mã nguồn mở mới (TSDB) đang trở nên phổ biến hiện nay với khả năng mở rộng và lưu trữ lâu dài.
Sử dụng kết hợp Prometheus, Grafana với time series database giúp tối ưu được ưu điểm của các giải pháp này.
Các quan điểm trên được tác giả mô tả chi tiết hơn ở bài viết, mời bạn truy cập để hiểu rõ hơn.
Góc Distributed System
Spanner, TrueTime and the CAP Theorem
Khi nhắc tới định lí CAP, chắc hẳn các bạn engineer đều sẽ biết vì phát biểu đơn giản, nhưng ấn tượng: trong một hệ thống database, chỉ được chọn 2 trong 3 thuộc tính: Consistency; Availability; và Partitioning. Do vậy, một hệ thống database có thể được chia thành 3 dạng CA / CP và AP. Tuy nhiên, theo như lời giới thiệu về paper Spanner, database dường như đảm bảo được cả 3 thuộc tính CAP, hay cách khác, vi phạm định lí CAP - đã được chứng minh?
Spanner is Google's highly available global-scale distributed database. It provides strong consistency for all transactions. This combination of availability and consistency over the wide area is generally considered impossible due to the CAP Theorem
Giải thích ngắn gọn cho điều trên, Availability trong định lí CAP là 100% availability, một giả định không tưởng trên hầu hết các hệ thống chạy thực tế (cho dù single node hoặc multiple node). Tuy vậy, Spanner là một database chạy hoàn toàn bên trong cơ sở hạ tầng của Google (máy tính / đường dây mạng giữa các datacenter xuyên suốt các lục địa/ …). , cho nên Google có thể quản lí và tối ưu cho từng network packet chạy trong hệ thống. Spanner, do vậy, đảm bảo được 5 nines (99.999%) availability - 5 phút downtime/year. Từ đấy ta thấy, dưới góc độ của end-user khi sử dụng Spanner, hệ thống hầu như availability và không có downtime. Hiểu cách khác, Spanner là hệ thống CP, và rất highly-available. Chi tiết về nhận định trên có thể tham khảo qua bài viết sau từ Eric Brewer - tác giả của chính định lí CAP.
Góc Lập Trình
Đề ra tuần này:
Tìm k
số gần x
nhất
Cho một mảng đã được sắp xếp tăng dần arr
, hai số nguyên dương k
và x
. Viết chương trình trả lại k
số gần x
nhất. Kết quả trả về phải được sắp xếp theo thứ tự tăng dần.Một số a
gần với số x
hơn số b
nếu:
|a - x| < |b - x|
, hoặc |a - x| == |b -x|
và a < b
Ví dụ 1:
Input: arr = [1,2,3,4,5], k = 4, x = 3
Output: [1,2,3,4]
Rằng buộc: 1 <= k <= arr.length; 1 <= arr.length <= 10^4
Các bạn có thể thử sức tại đây.
Lời giải tuần trước:
Chúng ta có thể giải bài toán này bằng nhiều cách, từ brute force, quy hoạch động, greedy, hoặc sử dụng stack. Chúng tôi xin đưa ra một lời giải tương đối đơn giản, dễ hiểu, đồng thời cũng tiết kiệm bộ nhớ như sau.
Ý tưởng cơ bản sẽ là chúng ta cần theo dõi các dấu "*"
, đồng thời là khi sử dụng các dấu "*"
sử dụng như một ")"
.
Nếu gặp một dấu ")"
và phía trước nó có một dấu "("
hoặc "*"
thì đây có thể coi là hợp lệ. Còn nếu trước đó không có gì thì chắc chắn là lỗi.
Nếu gặp một dấu "*"
và phía trước nó có một dấu "("
, ta có thể dùng "*"
như một dấu ")"
, nhưng nó có thể phá vỡ một cặp hợp lệ trong chuỗi ban đầu, do đó ta cần tăng giá trị biến đếm cho "*"
.
Thay vì sử dụng stack, ta có thể chỉ cần các biến đếm cho các ký tự "("
và "*"
để tiết kiệm bộ nhớ.
Các bạn có thể xem thêm lời giải sau đây để hiểu hơn về cách làm.
Code & Tools
This Week Sponsors
KMS Technology là một trong những công ty dịch vụ phần mềm hàng đầu, với 12 năm hoạt động và phát triển trên thị trường Châu Âu, Mỹ, và khu vực APAC; hiện có 05 văn phòng tại Atlanta (Mỹ), TP.HCM và Đà Nẵng.
Số lượng KMSer hiện tại đã lên đến 1000+ và vẫn đang trên đà phát triển, mở rộng cho nhiều dự án lớn, quy mô toàn cầu với các chiến dịch tuyển dụng hấp dẫn, phúc lợi ấn tượng.
Nếu bạn đang tìm kiếm một cơ hội mới, thì đây là thời điểm khó bỏ lỡ với nhiều vị trí hấp dẫn cùng 1 tháng “joining bonus” dành cho ứng viên ứng tuyển và gia nhập trước 31/8/2021.
Khám phá ngay tại đây:
KMS Jobs with 1-month joining bonus
Quotes
Before software can be reusable it first has to be usable.
– Ralph Johnson