2 điểm bởi GN⁺ 2023-07-07 | 1 bình luận | Chia sẻ qua WhatsApp

"Bạn có biết backend của #MetaThreads được xây dựng bằng #Python 3.10 không?

Nó đang chạy trên bản fork #Cinder của Instagram, trong đó có nhiều tính năng thú vị khác với Python 3.10 thông thường, như trình biên dịch JIT, module tải lười, module tĩnh được biên dịch sẵn, v.v."

1 bình luận

 
GN⁺ 2023-07-07
Ý kiến trên Hacker News
  • Khá mỉa mai đối với phe cho rằng “Python không đủ nhanh cho backend production”. Vì chính công ty đó đã vận hành mạng xã hội quy mô lớn nhất được xây bằng PHP + MySQL

    • Về mặt kỹ thuật thì đúng, nhưng từ lâu họ đã không chạy PHP nguyên bản như vậy nữa. Họ dùng HHVM JIT để chuyển thành mã x86 và chạy native trên máy, đồng thời cũng tối ưu hóa rất nhiều
      Máy ảo thực hiện JIT cũng hoàn toàn viết bằng C++, và bản phân phối MySQL của họ cũng là một fork nội bộ được chỉnh sửa mạnh để mở rộng quy mô. Trong đó có tách lưu trữ/tính toán, sharding, engine lưu trữ dựa trên RocksDB thay cho InnoDB, Raft cho sao chép đồng bộ, v.v.
      Đã có rất nhiều kỹ thuật xuất sắc được đầu tư để làm cho hạ tầng backend có khả năng mở rộng
      Tài liệu đáng tham khảo:
      [1] https://engineering.fb.com/2016/08/31/core-data/myrocks-a-sp...
      [2] https://research.facebook.com/file/529018501538081/hhvm-jit-...
      [3] https://research.facebook.com/file/700800348487709/HHVM_ICPE...
    • Tôi từng là kỹ sư Facebook thời kỳ đầu; PHP của Facebook thuở ban đầu hoàn toàn khác PHP dùng cho template website. Có đủ loại thư viện chuyên dụng cho phép phong cách lập trình tinh vi hơn nhiều
      Có thể hình dung như các helper kiểu functional, thực thi bất đồng bộ trên hàng nghìn core, spanning tree xuyên qua các datacenter bằng SSH. Nói thêm, khá nhiều thứ hay ho tôi từng dùng là do Evan Priestley tạo ra; anh ấy cũng tạo ra Phabricator và nhiều hệ thống mạnh mẽ khác
    • Đúng vậy. Python nguyên bản không đủ nhanh nên họ cần làm thêm nhiều việc
      “Nó chạy trên fork Cinder của Instagram, bao gồm JIT, module lazy-loading, module tĩnh được biên dịch trước và nhiều thay đổi thú vị so với Python 3.10 nguyên bản”
      Đó là nội dung trong tweet
      Cá nhân tôi không quan tâm mọi người dùng ngôn ngữ nào. Ai cũng biết nếu có tiền thì cứ thêm server là được. Chỉ là cho đến khi CFO và CTO, lấy lý do suy thoái, chọn “cắt giảm chi phí” làm ưu tiên lớn tiếp theo
      Thật ngạc nhiên là đến năm 2023 người ta vẫn tranh luận về “mức độ sẵn sàng cho production” của các ngôn ngữ lập trình chủ đạo. Cứ như một cuộc thi xem ai là “đứa ngầu” vậy
    • Ý là công ty đã thực sự phải tạo ra hai implementation PHP và một bộ chuyển đổi sang C++ để mở rộng quy mô ấy hả?
    • Việc chọn ngôn ngữ thường là nhìn cây mà không thấy rừng. Chọn C++ thay vì Python để tiết kiệm nano giây hay vài cycle sẽ trở nên mờ nhạt so với việc mất mili giây ở ranh giới mạng khi đọc cache service hoặc database
  • Những phần thực sự cần nhiều hiệu năng nằm ở nhiều dịch vụ tổng hợp và gợi ý dựa trên C++. Nhưng webserver thì đúng là Django

    • Tôi rất quan tâm đến chủ đề này. Tôi tò mò làm sao biết được webserver là Django. Tôi đã tìm nhưng không thấy
      Vì sao lại dùng Django? Tôi từng dùng trong dự án nhỏ, nhưng nó không nhanh lắm và tôi nghĩ không hợp với một ứng dụng lớn như thế này. Muốn biết ưu và nhược điểm
      Vì sao không làm bằng C++ hoặc Rust? Dù các phần nặng được viết bằng ngôn ngữ biên dịch, Python không giới hạn tốc độ phản hồi sao? Có thể là câu hỏi ngây thơ của người nghiệp dư
    • Việc họ quyết định dùng Django vừa thú vị vừa đáng mừng, nhưng tôi muốn biết nguồn
    • Django không phải webserver mà là framework WSGI/ASGI. Tôi tò mò thực tế họ xử lý HTTP termination bằng gì
    • Tôi tò mò codebase dùng type annotation và kiểm tra kiểu nhiều đến mức nào
    • Nếu tôi sai thì mong được sửa, nhưng Django không phải webserver. Nó là một framework dùng cùng app server như gunicorn và webserver như nginx
  • “Nó đang chạy trên fork Cinder của Instagram, bao gồm JIT, module lazy-loading, module tĩnh được biên dịch trước và nhiều thay đổi thú vị so với Python 3.10 nguyên bản”
    Vậy nên không hoàn toàn chỉ là Python 3.10 đơn thuần

    • Tôi từng port code từ Cinder sang CPython. Fork này có một số tối ưu hóa có thể đưa vào CPython khá dễ, và Facebook cũng cởi mở với việc port tính năng
      Tôi không biết Facebook có muốn tiếp tục duy trì fork hay không, nhưng phía CPython sẵn sàng merge các tính năng như vậy nếu chúng hợp lý
    • Cũng nên nhớ rằng Python 3.10 đi trước 3.1 tới 9 phiên bản major
    • Nói cho đúng thì Python là đặc tả, không phải implementation
  • Thật mỉa mai khi bài viết về backend của Threads lại được đăng trên Twitter

    • Nếu muốn tìm sự mỉa mai thật sự thì đây này. Một ứng dụng tên Threads lại được vận hành bằng Python, vốn có global interpreter lock khiến threading trở nên khó khăn
      Hiểu chứ? Threads, threading…? Được rồi, tôi tự đi ra
    • Threads giống Instagram, là ứng dụng chỉ dành cho di động. Trên trình duyệt desktop thực tế không dùng được Threads, nên có lẽ vì vậy nó được chia sẻ bằng bài đăng Twitter
      Ngay cả nếu đó là bài đăng Threads thì cũng không thể submit lên HN được
    • Chưa có web app. Có vẻ có thể liên kết trực tiếp đến một Thread, nhưng nó chỉ hiển thị nội dung được link và cũng không hiển thị cây thảo luận hay gì tương tự
      Hiện vẫn chưa mở cho web. Nghe nói rồi sẽ mở vào một ngày nào đó
    • Sao lại downvote cái này? Đây là một nhận xét công bằng mà
    • Hiện Threads có phiên bản nền web không, hay chỉ có app?
  • Rõ ràng backend có chồng lấn ở một mức độ nào đó. https://www.threads.net/t/C là bài đăng Instagram đầu tiên, nhưng cũng hiện trên Threads và có đúng cùng số lượt thích như trên Instagram
    Tuy nhiên https://www.threads.net/@kevin lại hiển thị là không có thread nào

  • Python chỉ là web server thôi. Các thành phần thực sự nhạy cảm về hiệu năng như edge proxy, load balancer, dịch vụ backend, cơ sở dữ liệu, cache và dịch vụ lưu trữ phần lớn đều là C++

    • Tôi cho rằng web server xử lý tất cả hoặc hầu hết request là phần nhạy cảm về hiệu năng trong hệ thống. Chỉ cần viết lại đơn giản từ Python sang Go, trong nhiều trường hợp đã có thể tăng hiệu năng 2–3 lần, và ở quy mô FAANG điều đó có thể tạo ra khác biệt lớn về chi phí phần cứng
    • Đó chính xác là cách Python được thiết kế để sử dụng, và từ trước đến nay nó vẫn luôn được dùng như vậy
  • Tôi đã làm việc với Cinder và web server. Nếu có câu hỏi kỹ thuật thì tôi có thể trả lời :)

    • Tôi tò mò liệu Cinder có thể giúp tối ưu streaming thời gian thực không. Chúng tôi nhận stream UDP, đưa qua nhiều phép màu gstreamer và nvidia deepstream, rồi thực hiện suy luận machine learning theo thời gian thực trên stream đó. Theo tôi biết thì lập trình viên senior đã triển khai bằng Python
      Nhưng ở đây độ trễ là vấn đề lớn, và như thường lệ, để đạt MVP thì ưu tiên tối ưu hóa bị hạ xuống
      Vì vậy tôi muốn biết liệu Cinder có thể dùng để tối ưu streaming dữ liệu thời gian thực không, hay bản thân câu hỏi này đã cho thấy tôi không hiểu đúng use case
      Nhân tiện, chúng tôi cũng dùng Django, và giờ nhìn lại tôi cũng tự hỏi lẽ ra có nên chuyển sang FastAPI không. Đó là một câu hỏi riêng
    • Tôi tò mò trong các tính năng mà bạn hy vọng sẽ được merge vào CPython, tính năng nào có tác động lớn nhất và khả năng xảy ra cao nhất
    • Tôi muốn biết bạn có khuyến nghị dùng Cinder cho stack gồm Django, Cython và Numpy không
    • Bạn có thể giải thích chi tiết hơn về phía web server không? Nó có triển khai WSGI không?
    • Ai sẽ được lợi từ Cinder? Nó phù hợp với loại workload nào? Chỉ đọc README thì hơi thiếu
  • Tôi muốn biết chi tiết hơn về rollout. Mỗi giờ đang có hơn rất nhiều 1 triệu người dùng mới được thêm vào, khá là khủng

    • Tôi nghĩ hiện tại họ hẳn đã provision dư thừa rất lớn để chịu được vài tuần đầu, thậm chí vài tháng đầu của mức tăng trưởng dự kiến
      Dù vậy chắc chắn vẫn có nhiều chi tiết thú vị đáng nghe
    • Tổng số người dùng hoạt động hằng tháng trên toàn bộ sản phẩm Meta là 3,8 tỷ
      Vài triệu người dùng mới thậm chí còn chưa tới 0,1% tổng số. Vẫn nằm trong biên độ dao động hoàn toàn có thể dự đoán
    • Nó chỉ đang chạy trên hạ tầng Meta dùng chung vốn được xây để xử lý quy mô đó
  • https://github.com/twitter/the-algorithm/pull/447 là thứ tuyệt đối không nên quên

    • Cuối cùng thì cũng có một điểm khác biệt giữa hai bên rồi
  • Threads tái sử dụng backend/API của Instagram. Instagram ngay từ đầu đã dựa trên Python, nên Threads cũng dùng Python
    Điều đó không có nghĩa là khi xây một ứng dụng mới như thế này, bạn nên chọn Python trong bối cảnh đã có các lựa chọn thay thế không cần fork nội bộ. Đọc toàn bài thì khá dễ hiểu, nhưng có lẽ UI “chỉ xem tiêu đề” của Hacker News đang làm méo mó vấn đề

    • Bình tĩnh nào. Python là một ngôn ngữ đủ tốt