Tag Archives: software architecture

Các Anti-Pattern nên tránh để code không biến thành đống rác

Cách đây không lâu, mình có giới thiệu về Design Pattern, những mẫu thiết kế code giúp giải quyết vấn đề, giúp code dễ bảo trì, dễ mở rộng hơn.

Kì này, ta sẽ nói về anti-pattern. Khác với design pattern, anti pattern cũng là những cách thiết kế để giải quyết vấn đề, nhưng sử dụng nó lại… gây ra nhiều vấn đề hơn.

Một anti-pattern được nhiều người biết đó là hút thuốc lào thay cho thuốc lá, cách này cai được thuốc lá nhưng sẽ gây ra nhiều vấn đề vệ sinh và môi trường hơn.

Trong bài này, mình sẽ chia sẻ những anti-pattern chúng ta hay .. lỡ để nhầm vào code, hậu quả và cách giải quyết nó nhé!

Từ hồi dùng thứ này bố bỏ hẳn thuốc lá nhá
Từ hồi dùng thứ này bố bỏ hẳn thuốc lá nhá

Continue reading Các Anti-Pattern nên tránh để code không biến thành đống rác

Thành công của một dự án công nghệ đôi khi lại … méo phải nhờ kĩ thuật

Truyện kể rằng, ngày xửa ngày xưa, có 2 cậu developer rất thân tên Tùng và Sơn. Dòng đời đưa đẩy, khi ra trường, cả 2 đều đầu quân vào làm cho 2 công ty startup.

  • Sơn vào làm cho TiKu, một startup nhỏ chuyên bán sách, bán giày, bán quần tà lỏn. Công ty nhỏ, cả team chỉ có 1 ông senior với vài bạn trẻ code. Cả dự án là nguyên một cục PHP + MySQL.
  • Tùng vào làm cho WeFack, một startup chuyên kết nối phòng chịch với người muốn chịch. Công ty đã gọi vốn được kha khá, team toàn mấy ông senior hầm hố, dùng đủ công nghệ xịn xò như React, NodeJS, Kafka, theo kiến trúc microservice.

Những tưởng, với công nghệ hiện đại, đội ngũ developer hầm hố, WeFack sẽ ngày càng phát triển, còn Taka thì sớm chết yểu.

Trớ trêu thay, mọi chuyện lại xảy ra ngược lại. 2 năm sau, WeFack phải giải thể, anh em dev phải ra đường Fack dạo, còn Tiku thì gọi được vốn trăm tỷ, càng ngày càng lớn mạnh!

Ủa, sao lạ vậy?? Các bạn đọc hết bài sẽ rõ.

Continue reading Thành công của một dự án công nghệ đôi khi lại … méo phải nhờ kĩ thuật

12 yếu tố tạo nên 1 web app xịn xò – Lược dịch và giải thích Twelve-Factor – Phần 3

Như đã giới thiệu ở bài trước, mình sẽ giới thiệu về twlve-factor app. Đây là 12 yếu tố cần thiết để xây dựng 1 ứng dụng “xịn xò”, ổn định, dễ mở rộng, dễ deploy.

Trong bài này, mình sẽ giải thích các yếu tố từ 8 tới 12 nhé:

  • 8. Concurrency: Một app nên được chia tách thành nhiều process nhỏ để tăng concurrency
  • 9. Disposability: Process của web app nên sống nhanh, chết nhẹ nhàng, để có thể dễ dàng chạy/kill process nhanh chóng
  • 10. Dev/prod parity: Các môi trường dev/staging/production nên giống nhau hết sức có thể
  • 11. Logs: Logs nên được viết ra dạng stream ở stdout
  • 12. Admin Processes: Một số task dạng admin (tạo database, fix dữ liệu) nên được chạy trong cùng môi trường với app đang chạy

 

Đây là phần 3 trong series 3 phần về Twelve-Factor App:

  1. Lược dịch và giải thích Twelve-Factor. Giải thích Codebase và Dependencies
  2. Giải thích Config, Backing Service, Build -> Release -> Run, Processes, Port Binding
  3. Giải thích Concurrency, Disposability, Dev/Prod Parity, Logs, Admin Processes

Continue reading 12 yếu tố tạo nên 1 web app xịn xò – Lược dịch và giải thích Twelve-Factor – Phần 3

12 yếu tố tạo nên 1 web app xịn xò – Lược dịch và giải thích Twelve-Factor – Phần 2

Như đã giới thiệu ở bài trước, mình sẽ giới thiệu về twlve-factor app. Đây là 12 yếu tố cần thiết để xây dựng 1 ứng dụng “xịn xò”, ổn định, dễ mở rộng, dễ deploy.

Trong bài này, mình sẽ giải thích các yếu tố từ 3 tới 7 nhé:

  • 3. Config: Lưu trữ thiết lập vào biến môi trường (environment variable)
  • 4. Backing services: Xem các service đi kèm (database, API, …) như là resource của app
  • 5. Build, release, run: Tách riêng quá trình release, build và run
  • 6. Processes: App nên chạy dưới dạng 1 (hoặc nhiều) stateless processes
  • 7. Port binding: Mỗi service có thể được truy cập thông qua 1 port cố định

 

Đây là phần 2 trong series 3 phần về Twelve-Factor App:

  1. Lược dịch và giải thích Twelve-Factor. Giải thích Codebase và Dependencies
  2. Giải thích Config, Backing Service, Build -> Release -> Run, Processes, Port Binding
  3. Giải thích Concurrency, Disposability, Dev/Prod Parity, Logs, Admin Processes

Continue reading 12 yếu tố tạo nên 1 web app xịn xò – Lược dịch và giải thích Twelve-Factor – Phần 2

Các hệ thống lớn sử dụng Rate Limiting để chống DDOS, hạn chế spam, bảo vệ hệ thống như thế nào? – Phần 2

Ở kì trước, mình đã giới thiệu với các bạn về kĩ thuật Rate Limiting – Một kĩ thuật đơn giản mà hay ho, được khá nhiều hệ thống lớn sử dụng.

Trong kì này, chúng ta sẽ đi sâu vào tìm hiểu cụ thể về cách các hệ thống lớn áp dụng Rate Limiting; cách áp dụng Rate Limiting để bảo vệ hệ thống của chúng ta nhé!

Continue reading Các hệ thống lớn sử dụng Rate Limiting để chống DDOS, hạn chế spam, bảo vệ hệ thống như thế nào? – Phần 2

Các hệ thống lớn sử dụng Rate Limiting để chống DDOS, hạn chế spam, bảo vệ hệ thống như thế nào? – Phần 1

Hôm nay, mình sẽ giới thiệu các bạn 1 kĩ thuật rất đơn giản nhưng cực kì hay ho:

  • Kĩ thuật này được 69.96% các hệ thống từ lớn đến nhỏ như Google, Facebook, LinkedIn, Youtube áp dụng
  • Kĩ thuật này giúp chúng ta ngăn chặn DDOS, chống spam, giữ cho hệ thống hoạt động trơn tru.

Thế nhưng, chúng ta ít người biết đến “người hùng”  thầm lặng này. Kĩ thuật này có tên là Rate Limiting.

Continue reading Các hệ thống lớn sử dụng Rate Limiting để chống DDOS, hạn chế spam, bảo vệ hệ thống như thế nào? – Phần 1

Messege Queue – Bộ phận không thể thiếu trong các hệ thống lớn và microservice architecture

Lâu rồi Code Dạo viết lại bài kĩ thuật cho bà con hóng nha!

Hôm nay, chúng ta cùng tìm hiểu về Message Queue. Đây là một thành phần cực kì quan trọng, không thể thiếu trong các hệ thống lớn (mình cá là Facebook, Google lẫn LinkedIn đều có nó trong hệ thống), trong kiến trúc microservice.

Tuy vậy, nếu không gặp các dự án lớn hoặc dự án đặc thù, các bạn sẽ không hề biết tới thứ này. Vậy Message Queue là gì, nó có gì hay ho mà được sử dụng nhiều như vậy?

Đọc xong bài này bạn sẽ biết ngay nhé!

Continue reading Messege Queue – Bộ phận không thể thiếu trong các hệ thống lớn và microservice architecture

Review sách: Site Reliability Engineering – How Google Run Production System

Bạn có biết rằng, design và code ra một hệ thống là chuyện khó, nhưng giữ cho hệ thống đó hoạt động, phát triển thêm chức năng mới là một chuyện còn … khó khăn hơn nữa!

Bạn có biết điều gì giúp cho những hệ thống lớn như Google, Gmail, Youtube hoạt động ổn định, ít gặp sự cố dù có đến hàng triệu hàng tỷ người dùng không?

Một trong những yếu tố quan trọng đó là Google có một đội ngũ SRE – Site Reliability Enginner, những người đứng phía sau theo dõi, bảo trì hệ thống, xử lý sự cố khi có vấn đề xảy ra.

Không chỉ Google, những công ty lớn như Facebook, Amazon, Netflix cũng đều có vị trí SRE, phụ trách những công việc tương tự, giúp hệ thống hoạt động ổn định.

Vì vậy, hôm nay mình sẽ giới thiệu cuốn Site Reliability Engineering – How Google Run Production System, một cuốn sách do các kĩ sư trong team SRE của Google viết ra nhé!

(Cảnh báo nhẹ, sách hơi khó đọc, chỉ nên đọc nếu bạn đã có ít nhất 1-2 năm kinh nghiệm nhé)

Continue reading Review sách: Site Reliability Engineering – How Google Run Production System

Học hỏi thông qua Best Practice – Đứng trên vai những người khổng lồ

Trong ngành phần mềm, có rất nhiều kiến thức cần học. Để trở thành một developer giỏi, chúng ta phải thường xuyên học hỏi, cập nhật những kiến thức này.

Tuy nhiên, sẽ có lúc bạn thắc mắc, những kiến thức dạng gì quan trọng nhất, mà chúng ta nên bỏ thời gian để học?

Theo mình, có 3 dạng kiến thức quan trọng:

  • Kiến thức nền tảng về khoa học máy tính, về kiến trúc phần mềm (software architecture), kiến thức hệ thống (system architecture)
  • Kiến thức về ngôn ngữ lập trình/công nghệ được dùng. Đây là những kiến thức thực tế, được áp dụng trong công việc hằng ngày.
  • Best practices, đây là những kiến thức rút được dựa theo kinh nghiệm của những người đi trước trong ngành, mà chúng ta nên biết và làm theo. Đây là những thứ trường học không hề dạy!

Trong bài này, mình sẽ chia sẻ về best pratices, cách học hỏi và những lợi ích của chúng nhé.

Continue reading Học hỏi thông qua Best Practice – Đứng trên vai những người khổng lồ

Review sách – Release It! – Xây dựng và thiết kế hệ thống trâu bò cho hàng triệu người dùng

Hôm nay chúng ta tiếp tục series sách thuần technical nhé. Kì trước, mình vừa review cuốn sách Ship It! – Làm phần mềm theo phong cách chất chơi người dơi. Kì này, mình sẽ giới thiệu cuốn sách cũng hay không kém mang tên Release It! – Xây dựng và thiết kế hệ thống trâu bò cho hàng triệu người dùng.

Giới thiệu

Đây là một cuốn sách trong bộ sách Pragmatic Programmer. Bộ sách này có nhiều cuốn sách rất hay, chuyên sâu về kĩ thuật mà lại dễ đọc, rất phù hợp với lập trình viên, điển hình là 3 cuốn sách SQL Anti-PatternThe Healthy Programmer, Ship It  mà mình từng review trước đây.

Cuốn sách này có thể coi là “đàn em” của cuốn sách Ship It mình đã giới thiệu kì trước. Continue reading Review sách – Release It! – Xây dựng và thiết kế hệ thống trâu bò cho hàng triệu người dùng