#90 - Quản lý bộ nhớ trong Java
Để giúp cải thiện chất lượng nội dung của newsletter, mong bạn dành ít thời gian phản hồi cũng như đóng góp ý tưởng giúp team thông qua link khảo sát hàng tuần tại đây nhé.
Và cũng đừng quên đón đọc những bài viết hay được đăng mỗi ngày tại https://www.facebook.com/grokking.vietnam/
Monitor Java memory management with runtime metrics, APM, and logs — www.datadoghq.com
Một trong những điểm nổi bật của Java so với các ngôn ngữ trước đó là bởi Garbage Collector (GC), nó giúp cho việc quản lý bộ nhớ được dễ dàng hơn tránh được những rủi ro do rò rỉ bộ nhớ (memory leak). Nhưng đôi khi ta vẫn bắt gặp tình huống ứng dụng bị treo do exception java.lang.OutOfMemoryError hay bị gián đoạn trong quá trình GC "dọn rác". Hãy cùng xem qua JVM quản lý bộ nhớ heap như thế nào và cách quan sát các chỉ số, log giúp cho việc theo dõi cũng như đưa ra phương án tối ưu hay cảnh báo khi cần thiết.
Những bài viết hay
Pegasus — Catalog Product API Architecture — engineering.tiki.vn
Với những hệ thống thương mại điện tử lớn như Shopee, Lazada, Tiki... thì luôn phải đảm bảo phục vụ được nhu cầu cơ bản nhất của người dùng đó là tìm kiếm thông tin sản phẩm. Hệ thống của Tiki phải đáp ứng nhu cầu tìm kiếm sản phẩm tại một thời điểm có thể lên hàng trăm nghìn lượt truy cập. Do vậy, yêu cầu đặt ra cho những API liên quan đến thông tin sản phẩm là phải xử lý được với throughput ~10k request/s và có latency T95 < 5ms . Và Pegasus được thiết kế để giải quyết bài toán này bằng những kỹ thuật caching trên memory và xử lý non-blocking.
How to Get Stronger Consistency Out of a Datastore — blog.sentry.io
Trong bài viết về CAP theorem đã giới thiệu ở newsletter #88, Coda Hale đã rút ra nhận xét: Đa số startup sẽ đề cao Availability hơn vì nó liên quan trực tiếp đến doanh thu. Do đó hệ thống chính sẽ áp dụng mô hình Eventual Consistency. Tuy nhiên đôi lúc chúng ta lại cần ưu tiên hơn cho Consistency. Bài viết sau sẽ giới thiệu cách team Sentry đạt được Strong Consistency mà không làm tech stack hiện tại phức tạp hơn.
Identifying the dirt in our code — dev.to
Clean code (tạm gọi là code sạch) luôn là một phần rất quan trọng đối với bất kì một dự án nào, nó giúp chúng ta không còn ngại change request nữa. Nhưng để viết ra được code sạch cũng không phải là điều dễ dàng. Một trong những gợi ý để có được code sạch đó là dùng Test Driven Development (TDD)
Viết unit tests
Viết code chạy đúng
Refactor code
Bài viết sau tác giả chia sẻ cách xác định bad code (nói nôm na là code bẩn...) cũng như gợi ý cách để tạo ra code sạch.
Có thể bạn chưa biết
Single-file executable
.NET Core 3.0 chính thức release vào ngày 23/09. Từ phiên bản này lệnh "dotnet publish" hỗ trợ đóng gói ứng dụng trong một file duy nhất thay vì copy tất cả các *.dll vào thư mục "publish" như trước. Tính năng này rất hữu ích trong trường hợp bạn muốn triển khai ứng dụng nội bộ, bằng cách gửi một file duy nhất cho khách hàng, khách hàng chỉ cần chạy file này là được.
Khi app được chạy lần đầu, nó sẽ extract tất cả các files cần thiết vào một thư mục, do đó lần chạy đầu tiên sẽ tốn thời gian hơn so với những lần chạy tiếp theo vì không cần phải extract file nữa.
Để publish ứng dụng thành một file duy nhất, bạn cần phải cấu hình PublishSingleFile trong project của bạn như sau
<PropertyGroup>
<RuntimeIdentifier>win10-x64</RuntimeIdentifier>
<PublishSingleFile>true</PublishSingleFile>
</PropertyGroup>
Hoặc dùng lệnh
dotnet publish -r win10-x64 /p:PublishSingleFile=true
Thông tin chi tiết về single-file publishing bạn có thể xem tại đây.
Code & Tools
Replacing redux with react hooks and context — medium.com
Nếu bạn là một Front-end developer làm việc với ReactJS thì chắc hẳn sẽ nghe tới Redux. Redux rất hữu ích tuy nhiên nó hơi khó hiểu, đặc biệt là những người mới bắt đầu vì có một vài khái niệm lạ như reducers, actions, action creators ... Với sự ra đời của react hooks và context api chúng ta có thể không cần tới redux mà vẫn có những tính năng hữu ích của nó. Ở bài viết này tác giả sẽ hướng dẫn cách thay thế redux bằng cách sử dụng react hooks và context api.
The Many Meanings of Event-Driven Architecture - Martin Fowler — www.youtube.com
Event-Driven Architecture ngày càng phổ biến và đóng vai trò quan trọng trong các ứng dụng lớn đặc biệt là các ứng dụng được triển khai theo mô hình micro-services. Tuy nhiên event-driven không có một khái niệm cụ thể, mỗi công ty implement theo một cách khác nhau. Martin Fowler đã đưa ra các patterns phổ biến trong event-driven architecture.
This week sponsor
KMS Technology
Thành lập năm 2009 với trụ sở chính tại Atlanta (US), KMS Technology cung cấp 3 dịch vụ chính: Gia công phần mềm (Software Outsourcing), đầu tư & phát triển sản phẩm công nghệ (Tech-Startup incubator), tư vấn dịch vụ giải pháp kỹ thuật. Với đội ngũ hơn 1000 nhân viên, KMS hướng đến khách hàng toàn cầu, từ các công ty startup đến các tập đoàn công nghệ lớn. Một số sản phẩm từ KMS đã được tín nhiệm trên thị trường thế giới: QASymphony, Katalon Studio, Kobiton. KMS Technology xây dựng một nơi làm việc năng động sáng tạo, chọn con người làm nền tảng văn hoá, nhiều năm liên tiếp nằm trong danh sách các nơi làm việc tốt nhất tại Việt Nam và Atlanta (Mỹ).
Góc tuyển dụng
Cơ hội việc làm tại KMS Technology:
Fresher Software/Test Engineer: http://bit.ly/KMS-Fresher-Jobs
Senior Software Engineers (.NET./Java/Front-end): http://bit.ly/KMS-SE-Jobs
Quote
“Falling in love with code means falling in love with problem solving and being a part of a forever ongoing conversation.”
Kathryn Barrett