Bạn có thể để pod tự bị kill đi bởi K8S bằng cách kill/evict trong trường hợp bạn rollout version mới hoặc khi worker node bị tình trạng memory memory pressure. Lúc này K8S đều action delete pod tới pod -> Case này không phải lo
1 vài trường hợp bắt buộc phải set memory limit hoặc app là Java Spring thường cũng set memory limit cho container sẽ cần tới K8S OOM Killer. Trong trường hợp container memory chạm limit hoặc Heap memory usage chạm max Heap -> Lúc container sẽ trả về code 137 hoặc java.lang.OutOfMemoryError: Java heap space. Đây là lỗi của Spring app và Cgroup đối với container. Đối với case thực tế sẽ bị fail phần health check và chắc chắn bị downtime
Khi bạn add thêm preStop hook vào container 1 action (sleep 30s) -> preStop hook sẽ được trigger chỉ khi có action delete pod. Lúc đó phần EndpointSlice không nhận request mới nữa và vẫn response request trước thời điểm delete pod đến khi pod bị gỡ ra khỏi EndpointSlice. Khi add preStop hook 30s sẽ giúp container khi nhận action delete pod sleep thêm 30s để xử lý nốt. Phần này giúp đồng bộ 2 phần network và phần xử lý trong container
Vậy nên mình quyết định delete pod trước khi các container trong pod gặp các vấn đề về memory (OOM thì downtime mất rồi) -> lúc này sẽ có log của service account xóa pod để đánh giá xem có nên tăng memory cho container hay không?
Về tool GRR:
Tool này mình lấy metrics của container rồi tính toán cho phù hợp thôi. Mình có update thêm vài tính năng để phù hợp với nhu cầu sử dụng:
VD: - như việc tính được lượng memory cần thiết để container boot lên và lượng memory để process data sẽ hợp lý để recommend memory cho các app Java đặc biệt là Spark bên mình đang sử dụng
Loại bỏ metrics cpu usage thời điểm Java app boot lên làm gây nhiễu data, vì recommend cho CPU lúc sử dụng để xử lý thôi chứ không nên cho phần boot vào
Và phải apply hợp lý HPA với đám thông số recommend sao cho scale hợp lý nữa. Trước mình có tham khảo VPA hoặc open-source khác nhưng không đáp ứng nhu cầu nên đành tự code
Tuy nhiên, cả khi đã xử lý data race, thì vẫn có thể bị tình trạng rút 2 lần 50k. Và lỗi rút 2 lần đó là do race condition. Vậy không thể nói là lỗi data race dẫn đến lỗi rút 100k.
Trên wiki ngta nói về data race rất phức tạp, liên quan đến memory model gì đó. Và ví dụ của ngta là về data corruption ở mức bit: vd ô nhớ đang là 1000, 1 ông ghi 1111, 1 ông cùng lúc đọc có thể đọc ra 1001 - chứa cả bit của trước và sau khi sửa.
Anh đã thử test với từng độ lớn của gói tin để test Batch insert chưa ví dự 100, 200,...500, 600,.. bản ghi 1 lần để đưa ra con số chính xác hoặc có cơ chế check các cấu hình của database để đưa ra con sổ chưa ạ?
có tgian a sẽ viết nhé, nhưng về cơ bản EC2 nó cũng là VPS (VM) như những chỗ khác, và cách setup thì cũng tương tự, e xem bài auto deploy với CICD của a sẽ thây nhé
THẢO LUẬN
Với mã hoá bất đối xứng client phải truyền thêm userid hả, không thì làm sao get được public key? Hay userid được lấy từ payload của token?
Về K8S OOM Killer:
Về tool GRR:
cảm ơn anh trai
leminh586.vn@gmail.com cho mình xin source tham khảo với ạ cảm ơn b
Cảm ơn bạn đã góp ý 🥰
welcome back, bro
Dạ cho em xin tên công cụ để làm những flow GIF như trên với ạ
Ý tưởng anh đưa ra trong bài rất hay! Em có một vài câu hỏi mong anh giải đáp
Cám ơn anh
hehe sorry mình ko tiện gửi CV cho bạn 🥹 nhưng mình có thể review và feedback CV của bạn nếu bạn cần qua fanpage 😉 https://www.facebook.com/comotdevthichviet/
Damn, damn, damn, bro cho t xin CV để tham khảo với đc k, chứ t viết CV trông a đùi quá 👀👀
Tuyet voi anh oi
bài viết quá hay admin
Em vẫn chưa hiểu sao ví dụ ATM được tính là data race mà KHÔNG có race condition.
Ví dụ code như sau:
Theo như bài này, có vẻ cũng nổi tiếng, thì để chặn data race, và chỉ data race, cần làm như sau:
Tuy nhiên, cả khi đã xử lý data race, thì vẫn có thể bị tình trạng rút 2 lần 50k. Và lỗi rút 2 lần đó là do race condition. Vậy không thể nói là lỗi data race dẫn đến lỗi rút 100k.
Trên wiki ngta nói về data race rất phức tạp, liên quan đến memory model gì đó. Và ví dụ của ngta là về data corruption ở mức bit: vd ô nhớ đang là
1000, 1 ông ghi1111, 1 ông cùng lúc đọc có thể đọc ra1001- chứa cả bit của trước và sau khi sửa.có ưu rủi rò gì khi tạo ở FE không nhỉ
@hungtreo tại sao nên tạo ở FE vậy bạn
Chưa cái này tuỳ tích hợp và độ lớn để quyết định thôi
a viết bài hay quá
Anh đã thử test với từng độ lớn của gói tin để test Batch insert chưa ví dự 100, 200,...500, 600,.. bản ghi 1 lần để đưa ra con số chính xác hoặc có cơ chế check các cấu hình của database để đưa ra con sổ chưa ạ?
có tgian a sẽ viết nhé, nhưng về cơ bản EC2 nó cũng là VPS (VM) như những chỗ khác, và cách setup thì cũng tương tự, e xem bài auto deploy với CICD của a sẽ thây nhé
😊😊Quá là hữu ích, cảm ơn bạn nha 😊