54 điểm bởi xguru 2022-09-26 | 8 bình luận | Chia sẻ qua WhatsApp
  • Đang vận hành nhiều ứng dụng SaaS trên một máy chủ lớn của OVH Cloud
    • Xử lý khoảng 6 triệu request không được cache mỗi ngày
    • Backend là Django/Python + MySQL + Redis + WebSocket(Pub/sub)
    • Bí quyết của tôi là OpenResty (Dynamic web platform based on NGINX and LuaJIT)
      • Dùng script Lua để xử lý cache trang phức tạp, chặn DDoS, xử lý websocket và offload các request chạy dài
      • Một "Cloudflare cho nhà nghèo" được tạo từ 1500 dòng code Lua
    • Các app này được tạo từ trước thời Docker nên cứ chạy như các process bình thường (systemd)
    • Ban đầu dùng uwsgi, nhưng gunicorn hiệu quả hơn nhiều nên giờ đã chuyển hoàn toàn
    • SPOF của tôi là DNS. Tôi có quan hệ tốt với DNSMadeEasy nên không lo bị auto-ban, nhưng giờ DigiCert đã mua lại họ nên thành vấn đề
    • Thanh toán xử lý bằng Stripe và Paypal. Dù ghét Paypal nhưng vẫn thêm vào vì không biết khi nào Stripe có thể chặn mà không báo trước
    • Upload của người dùng được gửi tới Wasabi và Backblaze qua một server Python aiohttp, rồi cache ở nginx. Vì vậy chi phí băng thông cloud bằng 0
    • Lớp websocket hơi thiếu ổn định. Ban đầu tôi xử lý mọi thứ bằng thư viện websocket asyncio của Python, nó hoạt động ở mức nào đó nhưng khi cố chuyển sang multi-process thì bắt đầu ngốn tài nguyên khủng khiếp
    • Vì thế tôi quyết định dùng websocket của OpenResty, nhưng không muốn viết logic phức tạp bằng Lua
      • Đã đổi sang dùng Redis Pub/Sub để chuyển message tới process Python
    • Nhưng tôi sẽ không nói tên dịch vụ của mình đâu (tôi không muốn có thêm đối thủ cạnh tranh!)
  • Tôi có xu hướng chọn những lựa chọn ít nổi tiếng hơn, và nghĩ rằng như vậy hiệu quả hơn cho solo developer
    • PostgreSQL + SQLite
    • Ngôn ngữ chính là Rust
    • Frontend là htmx + tailwindcss
    • Hosting trên CloudFlare + Vultr
    • nginx + nixos + circle ci
  • Có người sẽ ghét, nhưng với tôi chọn Wordpress là quyết định tốt nhất
    • Diễn đàn dùng bbPress
    • Cộng đồng nơi thành viên tự đăng bài dùng buddyPress
    • Bản tin email dùng plugin mailster.co giá rẻ (dùng Critsend.com) thay vì SaaS cực đắt
    • Hầu hết tính năng tôi muốn đều có thể tìm thấy bằng plugin: FAQ có thể tìm kiếm, Captcha, quảng cáo, đăng bài lên Discord, hệ thống báo cáo người dùng, v.v.
    • Đang vận hành https://rpgplayground.com/
  • Đang vận hành https://text-generator.io, một dịch vụ cạnh tranh với OpenAI
    • Trước đây dùng Kubernetes trên GCP, giờ chạy từ nhà qua Cloudflare Tunnel với các GPU của tôi. Làm vậy giá GPU rẻ hơn 10 lần.
    • Phân tích link hoặc ảnh đầu vào bằng Tesseract / Unified IO / OFA / Beautiful Soup, v.v. rồi trả lời về hình ảnh/biên lai
    • Bản thân site chạy trên AppEngine với Python + Stripe + Firebase UI nên mỗi tuần tốn rất ít chi phí
  • Đang host trên Render
  • Đang vận hành https://allaboutberlin.com
    • Chạy bằng Craft CMS trên Docker của DigitalOcean
    • Craft cho phép dễ dàng tạo các custom post type có custom field, điều mà khó làm hơn trên WordPress
    • Nhưng vì không phải WordPress nên không có quá nhiều plugin cần thiết
    • Dùng nginx để xử lý cache và nhiều thứ khác
  • Nếu muốn làm việc hiệu quả hơn thì hãy thử PETAL
    • Phoenix + Elixir + Tailwind + Alpine.js + LiveView
  • Rails + Postgres + Redis + SideKiq
    • Host trên Herokus, theo dõi lỗi bằng Sentry, giám sát hiệu năng bằng New Relic, mail là Send Grid
    • Gần đây đã thay Google Analytics bằng Plausible, và dùng Ahoy(Rails Middleware) để phân tích chuyên sâu nội bộ
    • Hỗ trợ khách hàng/chat đang dùng Intercom nhưng dự định thay bằng Chatwoot
    • Dự định rời Heroku, nhưng Render là phương án thay thế nổi bật vẫn chưa có tùy chọn HA Postgres với automatic failover
    • Push lên nhánh master trên GitHub thì tự động deploy lên production.
      • Chỉ có thể merge vào master bằng PR, và phải Green trên Linter(Rubocop) + Tests(Rspec on CircleCI) + 100% coverage(codecov.io)
    • UI là Bootstrap, và đang server-side rendering bằng JavaScript
      • Với những UI cần nhiều tương tác hơn, đang cân nhắc Hotwire/Turbo vs. Alpine vs. Stimulus vs. React
  • Đang phát triển một nền tảng Agtech
    • Backend: Rust, Rocket, sqlx, Postgres, một ít Ansible
    • Frontend: Rescript + React. Đang dùng khá nhiều Rust/WASM, nhưng đó là một sai lầm. Đang cố quay lại

8 bình luận

 
qkreoaksn 2022-09-29

Wow, một mình mà quản hết đống này kiểu gì vậy trời, ghê thật

 
galadbran 2022-09-27

Thực sự tôi rất tò mò việc offload các yêu cầu web mất nhiều thời gian xử lý được thực hiện như thế nào, nhưng chẳng thấy nói gì nhiều cả ^^;

 
bohblue23 2022-09-26

Chết tiệt

 
yshrust 2022-09-26

Wow, mọi người dùng đa dạng thật,, đây là lần đầu tôi thấy tổ hợp như PETAL, tốt đấy

 
kandk 2022-09-26

👍

 
jujumilk3 2022-09-26

Bài viết này thật sự rất hữu ích, cảm ơn nhiều!

 
xguru 2022-10-02

Hãy tham khảo cả những bài viết cũ từng được đăng trên HN
năm 2021 https://news.ycombinator.com/item?id=28299053
năm 2020 https://news.ycombinator.com/item?id=25465582
năm 2019 https://news.ycombinator.com/item?id=21024041