#112 - Tối ưu bộ nhớ JVM cho HDFS
Những bài viết hay
Tuning JVM Memory for Large-scale Services — eng.uber.com
Gabage Collector trong JVM là một tiến trình đánh dấu những vùng nhớ trên Heap đã không còn được sử dụng đến, sau đó giải phóng vùng nhớ đó trả lại cho OS và nén vùng nhớ đang được sử dụng lại. Khi tiến trình GC hoạt động, nó sẽ phải yêu cầu tạm dừng ứng dụng Java lại để dọn dẹp vùng nhớ và chỉ cho phép ứng dụng hoạt động lại khi nó đã hoàn thành. Vì vậy nếu vùng nhớ Heap càng được sử dụng nhiều thì tiến trình GC sẽ mất nhiều thời gian hơn để quét dọn vùng nhớ. Có nhiều GC Engine khác nhau với cơ chế hoạt động khác nhau.
Uber có một hệ thống xử lý data trên HDFS hoạt động trên ứng dụng Java mà họ cần phải tối ưu hoá về GC để làm hệ thống hoạt động hiệu quả hơn và đây là những cách mà họ đã thử nghiệm.
11 Reasons Why You Are Going To Fail With Microservices — medium.com
Kiến trúc Microservices mang đến rất nhiều ưu điểm nhưng cũng có những nhược điểm nhất định. Do đó việc đưa ra quyết định chuyển đổi hay xây dựng mới theo kiến trúc này là một quyết định khó khăn. Và thậm chí sau khi đã đưa ra quyết định chuyển đổi thì quá trình xây dựng kiến trúc Microservices cũng không hề dễ dàng. Qua bài viết sau, tác giả Shekhar Gulati đưa ra 11 nguyên nhân mà ông cho là có thể dẫn đến thất bại trong quá trình xây dựng kiến trúc này.
Eventual Consistency: What, How, and Why — levelup.gitconnected.com
Theo CAP Theorem, một hệ thống phân tán chỉ có thể đạt được tối đa 2 trên 3 yếu tố là:
Consistency - Tất cả component trong hệ thống đều nhận được data giống nhau
Availibility - Tất cả request đều được xử lý và trả về response tương ứng dù có bất cứ lỗi gì.
Partition tolerance - Khi có lỗi xảy ra, hệ thống vẫn hoạt động ổn định.
Một khái niệm là Eventual Consistency nhằm xác định các hệ thống được cho là đảm bảo thoả mãn 2 tính chất là Availibity và Partition tolerance, nhưng không đảm bảo tính chất Consistency, tức là không phải lúc nào data cũng được đảm bảo là giống nhau với tất cả component.
How Spotify’s Algorithm Knows Exactly What You Want to Listen To — onezero.medium.com
Làm thế nào mà Spotify có thể biết được bạn muốn nghe bản nhạc nào? Để trả lời câu hỏi này là cả một bài viết dài với khá nhiều đường dẫn liên quan mà bạn có thể tham khảo trong bài blog trên. Tóm gọn vài ý chính trong bài viết:
- Đội ngũ Spotify đã đầu tư khá nhiều vào các thuật toán, các mô hình AI để cung cấp trải nghiệm mang tính cá nhân hoá cho người dùng. Trong đó có hệ thống BaRT chuyên tập trung vào tổ chức home screen cho mỗi người dùng, đưa ra các khuyến nghị mà hệ thống nghĩ là phù hợp và bạn sẽ thích.
- Hệ thống BaRT tập trung vào hai khái niệm chính: khai phá (exploit) và khám phá (explore). Trong chế độ khai phá, hệ thống sẽ dựa vào thông tin của cá nhân bạn như lịch sử nghe nhạc, những bài nhạc mà bạn đã bỏ qua, các hoạt động tương ứng, location, ... để đưa ra khuyến nghị. Còn trong chế độ khám phá, hệ thống sẽ sử dụng những thông tin như playlist, nghệ sĩ tương tự với "khẩu vị âm nhạc" của bạn để đưa ra khuyến nghị.
- Thành công của BaRT sẽ được đo bằng việc bạn có lắng nghe bài nhạc được đề nghị hay không, hoặc là bạn đã nghe trong bao lâu (theo nghiên cứu của Spotify thì thông thường nếu bạn bỏ qua bài nhạc dưới 30 giây được xem là tín hiệu bạn không thích bài đó).
- Một vấn đề khác mà team Spotify đã tìm cách giải quyết đó là "cold-start problem", tức là khi có một bài nhạc mới hoàn toàn được đưa lên và không phải được suggest bởi một ca sĩ đã biết đến thì làm sao để bài nhạc đó được đưa vào danh sách khuyến nghị? Lời giải được đưa ra đó là một thuật toán được dùng để phân rã bài nhạc mới thành các yếu tố như genre, phong cách, nhạc cụ, ... một cách tự động, để từ đó đưa nó vào các danh sách khuyến nghị tương ứng.
- Ngoài ra, còn nhiều tính năng khác đang có đằng sau Spotify mà bạn đang dùng cũng đang được phát triển bởi AI và các thuật toán thông minh như: sắp xếp playlist tự động, phân biệt giữa bài nhạc cover lại và bài gốc...
- Với việc đầu tư vào việc thu thập và phân tích dữ liệu người dùng, Spotify cũng thu được khá nhiều insight hữu ích về thị trường âm nhạc như: việc chuyển đổi vị trí sống có ảnh hưởng đến âm nhạc bạn nghe như thế nào? Những bài nhạc nào sẽ được lứa tuổi từ 10 đến 20 nghe nhiều nhất...
Góc Database
Knowledge Graph đang dần trở thành một trong những thành phần quan trọng của các doanh nghiệp trong thời gian gần đây, đặc biệt là khi các doanh nghiệp có lượng dữ liệu ngày càng lớn.
Khác với những cách thiết kế Information System truyền thống, khi hệ thống được tách nhỏ ra và lưu trữ theo từng "business" cụ thể, từ đó khiến tổng thể thông tin trong tổ chức trở nên rời rạc, thiếu tính kết nối để tạo ra insight.
Với cách tiếp cận xây dựng Knowledge Graph, dữ liệu được mô tả dưới dạng các đối tượng (object) và các mối liên hệ (relation) thuần tuý theo một cách tự nhiên với suy nghĩ của con người. Ví dụ như knowledge graph của Google có lưu trữ thông tin về các entity như James Cameron, TV Shows, phim Avatar, TED Talk, ... và các mối liên kết như (đạo-diễn-bởi, thuyết-trình-tại, ...) từ đó khi chúng ta truy vấn với từ khoá James Cameron, kết quả trả về không chỉ là thông tin về cá nhân ông mà còn có các thông tin về bộ phim do ông đạo diễn, bài thuyết trình của ông, ...
Các công ty như Microsoft, Google, Facebook, eBay, IBM đều đã và đang xây dựng một knowledge graph của riêng mình để phục vụ cho các hệ thống sản phẩm, các bộ máy tìm kiếm của họ. Tuy nhiên, ở mỗi công ty có business khác nhau thì chiến lược xây dựng cũng như các chủ đề được tập trung sẽ khác nhau.
Mời bạn cùng đọc bài viết sau để hiểu thêm các hệ thống Knowledge Graph ở các công ty lớn được xây dựng xoay quanh những chủ đề gì cũng như những thang đo gì sẽ được họ dùng để xây dựng và mở rộng hệ thống Knowledge Graph của họ: link
Ngoài ra, các bạn có hứng thú với chủ đề mã hoá trong MySQL có thể tham khảo series bài viết này:
Sách hay nên đọc
Working Effectively with Legacy Code — www.goodreads.com
Việc bảo trì hay nâng cấp các dự án cũ có lẽ là việc không mấy thích thú đối với các lập trình viên. Là một người có nhiều kinh nghiệm làm việc với các hệ thống cũ, tác giả Michael Feathers đã đưa ra nhiều phương pháp giúp cho việc đảm nhận dự án một cách hiệu quả từ việc đưa ra nguyên nhân thay đổi, cải tiến chức năng, hay tối ưu hóa hiệu năng cho đến việc viết tests.
Code & Tools
Tin tức khác
Tip & Trick
COVID-19: 8 Tips to Effectively Work from Home — medium.com
Làm việc tại nhà là một phương án tối ưu trong thời điểm dịch bệnh COVID-19 đã lan rộng trên toàn thế giới, và đang có chiều hướng xấu đi. Vậy làm sao để làm việc tại nhà hiệu quả trong mùa dịch? Cùng đọc bài viết sau để biết thêm 8 lời khuyên khi làm việc tại nhà.
This week sponsor
Ascenda is a global innovator in loyalty management, established 2014 and headquartered in Singapore with offices across Asia, Europe and the Americas. With a team of 80 full-time employees, we enable over 50 major financial services and travel brands worldwide with rewards technology, loyalty marketing, advisory and customer servicing.
We believe that nothing should stand in the way of brands who aim to deliver extraordinary moments for their customers. That’s why our solutions are beautifully simple to manage, easy and rapid to deploy, and always delivering exceptional value. In a world of increasingly complex enterprise software and proliferating buzzwords, we strip away the noise and take a fresh, practical approach to loyalty management.
Visit ascendaloyalty.com for more information and current job openings.
Góc tuyển dụng
Quote
One of my most productive days was throwing away 1000 lines of code
― Ken Thompson