#143 - Từ Monolith cho đến Event-driven Microservices
Những bài viết hay
Getting Started with Python Internals | by Daw-Ran Liou | Medium — medium.com
Python là một trong những ngôn ngữ phổ biến hiện nay. Do Python là một ngôn ngữ interpreter nên Python code thường được chuyển hóa và compile xuống bytecode bằng CPython. Bài viết sau đây được tác giả giới thiệu và giải thích cách mà bạn có thể đọc và phân tích những bytecode này khi mà Python interpreter được khởi động để chạy code của bạn.
Tác giả dùng một ví dụ Python program nhỏ để hướng dẫn chúng ta cách disassemble code và hiểu sâu cách CPython hoạt động như thế nào. Với những kiến thức này, chúng ta có thể hiểu rõ hơn về luồng đi của ngôn ngữ Python để từ đó tối ưu hóa Python code của chúng ta một cách hiệu quả hơn.
Nemo: Data discovery at Facebook — engineering.fb.com
Ở Facebook, dữ liệu được chứa ở data warehouse rất là lớn và đa dạng ở nhiều lĩnh vực khác nhau. Do đó, việc tìm dữ liệu chính xác và phù hợp ở trong warehouse trở thành một vấn đề nan giải. Nếu data engineer hay data scientist ở một nhóm không rành về data ở một mảng khác, việc xác định dữ liệu hay tìm đội ngũ nhân viên biết về mảng đó sẽ tốn nhiều thời gian hơn.
Do đó, đội ngũ kỹ sư ở Facebook đã phát triển một hệ thống search nội bộ được đặt tên là Nemo. Nemo giúp người dùng tìm data một cách dễ dàng hơn để giảm thời gian tìm kiếm và mày mò dữ liệu ở những lĩnh vực khác nhau. Bài viết sau đây của Facebook giới thiệu và nói cụ thể hơn cách mà Nemo xây dựng như thế nào.
Event-Driven Microservices with Apache Kafka — medium.com
Event-Driven Architecture là một khái niệm không mới, và ngày càng đạt được nhiều sự tương thích do nhu cầu đổi mới khi tích hợp các hệ thống doanh nghiệp, đặc biệt là khi nói về sự phức tạp ngày càng tăng trong cách thiết lập Microservice.
Với kiến trúc này, các services sẽ giao tiếp với nhau qua các events được gửi đến một event store (ví dụ như Kafka). Mỗi khi một service thay đổi, một event sẽ được gửi và được đọc bởi các services khác thông qua event store.
Qua bài viết, tác giả sẽ đưa ra một ví dụ điển hình về cách phát triển một hệ thống event-driven từ một ứng dụng legacy với thiết kế monolith, vấn đề mà có lẽ rất nhiều công ty gặp phải. Từ đó, chúng ta sẽ thấy được tiềm năng thật sự của kiến trúc Event-driven trong Microservice.
Một vài lợi ích của Event-driven Architecture được tác giả đề cập:
Các components ở trạng thái loosly-coupling với nhau và location của components không ảnh hưởng đến nhau.
Phân chia Domain và System events sẽ giảm nguy cơ data coupling không mong muốn
Việc dễ dàng tích hợp thêm một component vào hệ thống giúp các developers có thể tập trung vào phát triển các tính năng liên quan đến business.
Việc thêm một microservice mới sẽ hoàn toàn không ảnh hưởng đến các component khác trong hệ thống.
Event Sourcing (ví dụ như Kafka Source Connector từ Confluent) có khả năng ghi lại đầy đủ các thay đổi trong quá khứ của dữ liệu, giúp việc phân tích và audit data sau này trở nên dễ dàng hơn.
Việc các services giảm thiểu dependency vào nhau sẽ làm giảm tính phức tạp của hệ thống, giúp các service scale và maintain dễ dàng hơn, đồng thời việc chọn lựa công nghệ của mỗi service cũng trở nên thuận tiện hơn.
Góc Distributed System
Grokking Lab là một chương trình được xây dựng tại Grokking với mục tiêu tạo ra một nơi để các bạn trao đổi về các kiến thức nền tảng trong lĩnh vực computer science cũng như những kiến thức thực tiễn trong quá trình làm việc của các thành viên, khách mời,..
Lab Checkpoint là giai đoạn các thành viên thuộc nhóm Lab của Grokking cùng present lại những kiến thức tìm hiểu được trong suốt giai đoạn 9 tháng đầu tiên của hoạt động Lab.
Mời các bạn cùng xem lại nội dung ngày thứ 3 của Checkpoint gồm 2 chủ đề Clock synchronization và Mutual Exclusion do các thành viên nhóm Distributed System trình bày.
Góc Database
Mời các bạn đọc bài báo:
Nếu bạn đã từng có cơ hội vọc máy tính từ hơn một thập kỷ trước khi các ổ đĩa chỉ có 1-2GB và bộ nhớ bổ sung chỉ là những thanh USB 128MB, 256MB, ... thì chắc cũng không lạ gì cảm giác tiếc nuối không biết cái gì nên giữ, cái gì nên xoá khi lâu lâu lại phải xoá bớt dữ liệu để làm trống ổ đĩa. Mới chỉ cách đây hơn 10 năm, lượng dữ liệu 1TB có thể nói là một con số còn rất xa lạ.
Tương ứng với những giới hạn về bộ nhớ là những thiết kế trong kiến trúc chú trọng nhiều trong việc tiết kiệm dung lượng lưu trữ. Các phần mềm cũng phải nhỏ, tinh gọn.
Dần dần khi công nghệ ngày càng phát triển, chi phí các phần cứng bộ nhớ ngày càng rẻ, đặc biệt là khi có kho lưu trữ cloud đang trở nên phổ biến khiến chi phí lưu trữ đang dần tiến đến "storage for free". Song song với những tiến bộ này là rất nhiều điều chỉnh về mặt công nghệ cả ở khâu hiện thực cũng như triết lý thiết kế, trong số đó là "Immutability". Một trong những khái niệm có tác động rất nhiều đến kiến trúc trong các hệ thống mới.
Trong bài báo được đưa ra năm 2016 này, tác giả đưa chúng ta lên một chuyến xe đi vòng qua những thay đổi trong giới công nghệ xoay quanh khái niệm Immutability này, mời các bạn cùng tham khảo: link
Code & Tools
OBS Studio - Free and open source software for live streaming and screen recording (github repo)
Airbnb Visx - A collection of reusable low-level visualization components
Quotes
The trouble with programmers is that you can never tell what a programmer is doing until it’s too late.
- Seymour Cray