#154 - OAuth không được thiết kế cho user authorization
Công nghệ blockchain được tiên phong bởi sự ra đời của đồng tiền mã hoá bitcoin đang ngày càng phổ biến và được ứng dụng rộng rãi hơn. Điều này mở ra thêm nhiều cơ hội việc làm hơn cho các kỹ sư phần mềm ở tất cả mọi nơi trên thế giới.
Để có thể nắm bắt được những cơ hội này và trở thành một blockchain engineer thì cần phải làm gì? Webinar này sẽ cho chúng ta câu trả lời từ speakers là những blockchain engineers nhiều kinh nghiệm.
Thông tin chi tiết về sự kiện này bạn có thể tham khảo tại đây.
Những bài viết hay
Optimizing data warehouse storage — netflixtechblog.com
Data Warehouse tại Netflix chứa hàng trăm Petabyte dữ liệu được lưu trữ trong AWS S3 và mỗi ngày lượng data được tạo ra và thêm vào cũng lên đến hàng Petabyte. Ở quy mô này, việc tối ưu hoá hệ thống data warehouse (bản ghi, đối tượng, phân vùng) có thể mang đến một số lợi ích đáng kể về hiệu suất và chi phí như tiết kiệm dung lượng lưu trữ, thời gian truy vấn nhanh hơn, xử lý downstream rẻ hơn và tăng năng suất quá trình phát triển bằng cách loại bỏ các ETL được viết chỉ để cải thiện hiệu suất truy vấn.
Nhận thấy các giá trị mang lại, Netflix đã xây dựng hệ thống AutoOptimize để tối ưu hóa data warehouse một cách hiệu quả và minh bạch. Mục tiêu của AutoOptimize là giúp data engineer loại bỏ một số công việc trùng lặp và thực hiện nó hiệu quả hơn so với các ETL đơn thuần. Một số use cases của AutoOptimize:
- Merge: data được ingest vào data warehouse trong các process real-time thường có các kích thước khác nhau. Điều này dẫn đến số lượng tệp nhỏ trên các phân vùng ngày càng tăng liên tục. Việc hợp nhất nhiều tệp nhỏ hơn đó thành một số tệp lớn hơn có thể giúp xử lý truy vấn nhanh hơn và giảm dung lượng lưu trữ.
- Sort: data được sắp xếp trước trong phân vùng sẽ giúp quá trình truy vấn nhanh hơn và tiết kiệm đáng kể dung lượng lưu trữ vì nó cho phép mức độ nén cao hơn.
- Compaction: giảm thiểu số lượng file dữ liệu và kích thước mỗi file giúp tối ưu hoá quá trình đọc.
- Metadata Optimization: sắp xếp và index metadata giúp quá trình scan file hiệu quả hơn
Bài viết của Netflix sẽ đi sâu hơn vào các thiết kế của AutoOptimize và những lợi ích mà AutoOptimize như tăng hiệu suất xử lý và lưu trữ dữ liệu, giảm latency, hay query dữ liệu nhanh hơn, ...
OAuth is Not User Authorization
Khi nhắc đến OAuth, hầu hết mọi người đều biết nó là giao thức uỷ quyền (authorization protocol) được sử dụng rộng rãi ngày nay. Tuy nhiên vì có "dính" tới authorization nên rất dễ nhầm lẫn dẫn tới sử dụng sai mục đích.
Cần phải nhấn mạnh rằng OAuth không phải là user authorization (quyền của user) và cũng không phải là authentication (định danh user là ai), nói cách khác OAuth không cho ta biết user được làm gì hay được phép truy cập vào những tài nguyên (API) nào.
Để tránh nhầm lẫn, chúng ta nên định nghĩa OAuth là một Delegation Protocol (Client Authorization). Nó cho phép một ứng dụng (client application) request quyền truy cập vào tài nguyên được bảo vệ (Protected Resource - API) bởi resource server thay mặt cho chủ sở hữu tài nguyền resource owner thường người dùng, hoặc tổ chức. Quá trình này thường trải qua 4 bước:
Ứng dụng XYZ yêu cầu người dùng cấp quyền truy cập vào protected resources (scopes)
Người dùng nhận dạng với authorization server (nhập username/password)
Người dùng xác nhận quyền truy cập cho ứng dụng XYZ (consent process)
Ứng dụng XYZ được cấp một access token
Access token thể hiện rằng ứng dụng XYZ đã được cấp phép bởi người dùng tuy nhiên điều đó không đồng nghĩa sử access token, ứng dụng có quyền truy cập vào protected resource. Để truy cập được vào protected resources cần cần phải thông qua user authorization.
Ở bài viết này, tác giả Scott Brady giải thích rõ hơn OAuth không phải là user authorization và tại sao nó không nên được xây dựng tích hợp bên trong OAuth authorization server.
Nhật ký hốt sh*t—Chuyện về cái service A
Monitoring và debugging lúc service gặp sự cố là một trải nghiệm mà mỗi developer đều phải trải qua ít nhất một lần trong đời. Nó đem lại những trải nghiệm không thể nào quên.
Bài viết này tác giả kể lại trải nghiệm thú vị của bản thân trong quá trình phân tích nguyên nhân làm crash một backend service được viết bằng Elixir và đưa ra giải pháp khắc phục. Hy vọng bài viết sẽ mang lại những kiến thức hữu ích cho độc giả.
Góc Distributed System
Bạn có biết facebook có hệ thống public time server và không sử dụng ntpd?
Trong các hệ thống phân tán, vấn đề đồng bộ thời gian giữa các server là quan trọng. Bạn có thể gặp vấn đề sai lệch về transaction, hoặc thứ tự xảy ra của events (và nhiều vấn đề khác nữa) nếu thời gian bị sai lệch dù chỉ vài giây. Trong kỷ nguyên Internet, có một dịch vụ nền tảng đã ra đời và được công nhận là có thời gian online liên tục lâu nhất trong lịch sử tính tới thời điểm này, đó là dịch vụ NTP (network time protocol). Hiểu nôm na, NTP là một giao thức giúp các máy client có thể đồng bộ thời gian từ các máy NTP server public khi có kết nối internet. NTP servers là "rất nhiều" máy chủ public, có kết nối trực tiếp hoặc gián tiếp tới "một số" máy chủ private để đồng bộ thời gian (máy chủ private có thiết bị nhận tín hiệu thời gian từ các trạm không gian quay quanh Trái Đất, nơi có đặt đồng hồ vật lý được công nhận là chính xác tuyệt đối tới thời điểm này (atomic clock).
Hệ thống Facebook ban đầu cũng có xây dựng một số NTP public server có địa chỉ tại: time.facebook.com và hệ thống của Facebook cũng đồng bộ thời gian dựa vào giao thức NTP. Tuy nhiên, độ sai lệch vẫn ở mức cao tầm 100ms giữa hai máy chủ ngẫu nhiên. Facebook đã chuyển từ NTPD (NTP daemon) sang Chrony - là một phiên bản daemon khác được phát triển bởi Miroslav Lichvar, RedHat sử dụng chung giao thức NTP, giúp giảm thiểu độ sai lệch xuống dưới 10ms. Bài báo dưới đây mô tả cách Facebook sử dụng Chrony cũng như cách họ làm benchmark để so sánh với NTP. Nội dung bài báo cũng đề cập một số thông tin cơ bản về giao thức NTP cũng như bài toán leap-second smearing, là bài toán chủ đạo trong vấn đề đồng bộ thời gian với đồng hồ atomic.
Tham khảo:
Góc Database
Facebook đã đạt tới gần hai tỉ rưỡi MAU (monthly active user) vào cuối quý 3/2020 (link) một con số đáng kinh ngạc các bạn nhỉ. Các bạn có tự hỏi về mặt lưu trữ thì lượng dữ liệu tạo ra bởi số người dùng khổng lồ này được lưu trữ và truy vấn như thế nào không?
Về mặt logic, hệ thống dữ liệu của facebook được lưu trữ dưới dạng đồ thị (graph) có hướng, trong đó các đỉnh là các loại đối tượng (object), và các cạnh là các loại mối quan hệ (association). Ví dụ như ở hình bên dưới, một hoạt động check-in của user Alice và vài phản hồi của các người bạn (hình a) sẽ được biểu diễn dưới dạng đồ thì với các cạnh có kiểu định sẵn như AUTHORED_BY, AUTHORED, TAGGED, TAGGED_AT, …
Vậy làm sao để tổ chức dữ liệu dạng đồ thị này ở tầng lưu trữ? Có lẽ bạn sẽ ngạc nhiên khi ở tầng lưu trữ, các kỹ sư ở facebook lại sử dụng một công nghệ “cũ”, đó là MySQL kết hợp với Memcache và kỹ thuật sharding, partition replication, …
Mời các bạn cùng đọc bài báo chia sẻ bởi đội ngũ kỹ sư ở Facebook để hiểu thêm đội ngũ Facebook đã thiết kế hệ thống này như thế nào nhé: link
Code & Tools
This Week Sponsors
POPS is a creative, innovative & hyper-growth working environment where storytelling meets technology.
POPS is the leading digital entertainment company in Southeast Asia. With over 12 years in entertainment, we provide thousands of exclusive, high-quality, carefully curated local and international contents and bring a unique entertainment experience through POPS Original series, concerts, movies, comics, esports and more.
We are on a journey to find talents who are passionate about technology and love to develop POPS APP_the digital entertainment product with the latest technologies such as: OTT, Video On Demand, Microservices, etc. to give end users in the region great experiences with an all-inclusive digital entertainment platform.
Góc Tuyển Dụng
Visit https://popsww.com/en/careers for current job openings.
Quotes
Code is like humor. When you have to explain it, it’s bad.
– Cory House