54 คะแนน โดย xguru 2022-09-26 | 8 ความคิดเห็น | แชร์ทาง WhatsApp
  • รันแอป SaaS หลายตัวอยู่บนเซิร์ฟเวอร์ใหญ่เครื่องเดียวของ OVH Cloud
    • ประมวลผลรีเควสต์ที่ไม่ถูกแคชประมาณ 6 ล้านครั้งต่อวัน
    • แบ็กเอนด์คือ Django/Python + MySQL + Redis + WebSocket(Pub/sub)
    • ความลับของฉันคือ OpenResty (Dynamic web platform based on NGINX and LuaJIT)
      • ใช้ Lua script เพื่อจัดการ page caching ที่ซับซ้อน, ป้องกัน DDoS, จัดการเว็บซ็อกเก็ต และ offload รีเควสต์ที่รันระยะยาว
      • เป็น "Cloudflare สำหรับคนงบน้อย" ที่ประกอบด้วยโค้ด Lua 1500 บรรทัด
    • แอปเหล่านี้ถูกสร้างก่อนยุค Docker เลยรันเป็นโปรเซสตรง ๆ (systemd)
    • ตอนแรกใช้ uwsgi แต่ gunicorn มีประสิทธิภาพดีกว่ามาก ตอนนี้เลยย้ายหมดแล้ว
    • SPOF ของฉันคือ DNS ฉันมีความสัมพันธ์ที่ดีกับ DNSMadeEasy เลยไม่กังวลเรื่องโดนแบนอัตโนมัติ แต่ตอนนี้ DigiCert เข้าซื้อกิจการไปแล้ว เลยกลายเป็นปัญหา
    • รับชำระเงินผ่าน Stripe และ Paypal ถึงจะไม่ชอบ Paypal ก็ต้องเพิ่มไว้ เพราะไม่รู้ว่า Stripe จะบล็อกโดยไม่เตือนเมื่อไร
    • อัปโหลดของผู้ใช้จะถูกส่งผ่านเซิร์ฟเวอร์ aiohttp Python ไปยัง Wasabi และ Backblaze แล้วแคชที่ nginx ทำให้ค่า bandwidth บนคลาวด์เป็น 0
    • เลเยอร์เว็บซ็อกเก็ตยังค่อนข้างไม่เสถียร ตอนแรกใช้ไลบรารี Python websocket asyncio จัดการทุกอย่าง ซึ่งก็พอใช้ได้ระดับหนึ่ง แต่พอต้องรองรับแบบหลายโปรเซสในภายหลังก็กินทรัพยากรมหาศาล
    • เลยตัดสินใจใช้เว็บซ็อกเก็ตของ OpenResty แทน แต่ก็ไม่อยากเขียนโลจิกซับซ้อนเป็น Lua
      • จึงเปลี่ยนให้ใช้ Redis Pub/Sub ส่งข้อความไปยังโปรเซส Python
    • แต่ฉันจะไม่บอกชื่อบริการของฉันหรอกนะ (ไม่อยากมีคู่แข่งเพิ่ม!)
  • ฉันมักจะเลือกตัวเลือกที่ไม่ค่อยดัง แต่คิดว่ามันช่วยให้ solo developer ทำงานได้มีประสิทธิภาพ
    • PostgreSQL + SQLite
    • ภาษาหลักคือ Rust
    • ฟรอนต์เอนด์คือ htmx + tailwindcss
    • โฮสติ้งใช้ CloudFlare + Vultr
    • nginx + nixos + circle ci
  • บางคนอาจไม่ชอบ แต่สำหรับฉันการเลือก Wordpress คือทางเลือกที่ดีที่สุด
    • ฟอรัมใช้ bbPress
    • คอมมูนิตี้ที่สมาชิกโพสต์กันเองใช้ buddyPress
    • จดหมายข่าวใช้ปลั๊กอิน mailster.co ราคาย่อมเยา (ใช้ Critsend.com) แทน SaaS ราคาแพงมาก
    • ฟีเจอร์ส่วนใหญ่ที่ต้องการมีปลั๊กอินให้ครบอยู่แล้ว: FAQ แบบค้นหาได้, Captcha, โฆษณา, โพสต์ไป Discord, ระบบรายงานผู้ใช้ ฯลฯ
    • กำลังรัน https://rpgplayground.com/
  • รันบริการ https://text-generator.io ที่เป็นคู่แข่งกับ OpenAI
    • เดิมใช้ Kubernetes บน GCP แต่ตอนนี้ย้ายมารันด้วย GPU ที่บ้านผ่าน Cloudflare Tunnel ทำให้ต้นทุน GPU ถูกลง 10 เท่า
    • วิเคราะห์ลิงก์หรือรูปภาพที่ป้อนเข้ามาด้วย Tesseract / Unified IO / OFA / Beautiful Soup ฯลฯ และตอบคำถามเกี่ยวกับภาพ/ใบเสร็จได้
    • ตัวเว็บไซต์เองอยู่บน AppEngine ด้วย Python + Stripe + Firebase UI เลยมีค่าใช้จ่ายรายสัปดาห์ต่ำ
  • โฮสต์อยู่บน Render
    • PostgreSQL + Rails + Hotwire
    • ชอบ Stimulus กับ Turbo Frames มาก
    • UI ใช้ Tailwind และ Tailwind UI
    • APM ใช้ https://skylight.io และ https://sentry.io
  • กำลังรัน https://allaboutberlin.com
    • รันด้วย Craft CMS บน Docker ของ DigitalOcean
    • Craft ทำให้สร้าง custom post type พร้อม custom fields ได้ง่าย ซึ่งทำใน WordPress ได้ยาก
    • แต่เพราะไม่ใช่ WordPress เลยไม่มีปลั๊กอินที่จำเป็นมากนัก
    • ใช้ nginx ทำแคชและจัดการอีกหลายอย่าง
  • ถ้าอยากทำงานได้มีประสิทธิภาพ ลอง PETAL ดู
    • Phoenix + Elixir + Tailwind + Alpine.js + LiveView
  • Rails + Postgres + Redis + SideKiq
    • โฮสต์บน Herokus, ติดตามข้อผิดพลาดด้วย Sentry, มอนิเตอร์ประสิทธิภาพด้วย New Relic, อีเมลใช้ Send Grid
    • เพิ่งเปลี่ยน Google Analytics เป็น Plausible และใช้ Ahoy(Rails Middleware) เพื่อทำการวิเคราะห์เชิงลึกภายใน
    • ฝั่งซัพพอร์ต/แชตลูกค้าใช้งาน Intercom อยู่ แต่มีแผนจะเปลี่ยนเป็น Chatwoot
    • กำลังจะย้ายออกจาก Heroku แต่ Render ซึ่งเป็นตัวเลือกยอดนิยมยังไม่มีตัวเลือก HA Postgres ที่ failover อัตโนมัติ
    • ถ้า push ไปที่ master branch บน GitHub ก็จะ deploy production อัตโนมัติ
      • merge เข้า master branch ได้ผ่าน PR เท่านั้น และต้องผ่าน Linter(Rubocop) + Tests(Rspec on CircleCI) + 100% coverage(codecov.io) เป็นสีเขียวทั้งหมด
    • UI เป็น Bootstrap และกำลังเรนเดอร์ฝั่งเซิร์ฟเวอร์ด้วย JavaScript
      • สำหรับ UI ที่ต้องมี interaction มากขึ้น กำลังชั่งใจระหว่าง Hotwire/Turbo vs. Alpine vs. Stimulus vs. React
  • กำลังพัฒนาแพลตฟอร์ม Agtech
    • แบ็กเอนด์: Rust, Rocket, sqlx, Postgres, Ansible เล็กน้อย
    • ฟรอนต์เอนด์: Rescript + React ใช้ Rust/WASM ค่อนข้างเยอะ ซึ่งเป็นการตัดสินใจที่พลาด และกำลังพยายามย้อนกลับ
      • มีคอมเมนต์ที่อธิบายละเอียดว่าทำไมการเลือก WASM ถึงเป็นความผิดพลาด: https://news.ycombinator.com/item?id=32965809

8 ความคิดเห็น

 
qkreoaksn 2022-09-29

โห คนเดียวจัดการทั้งหมดนี้ได้ยังไงกันครับ/คะ สุดยอด

 
galadbran 2022-09-27

สงสัยมากเหมือนกันว่าการ offload คำขอเว็บที่ใช้เวลาประมวลผลนาน ๆ นี่เขาทำกันอย่างไร เพราะแทบไม่มีการอธิบายอะไรไว้เลย ^^;

 
bohblue23 2022-09-26

Dammm

 
yshrust 2022-09-26

โห ใช้กันหลากหลายจริง ๆ,, ผมเพิ่งเคยเห็นการจับคู่แบบ PETAL แบบนี้ครั้งแรกเลย เยี่ยม

 
kandk 2022-09-26

👍

 
jujumilk3 2022-09-26

บทความนี้มีประโยชน์มากจริง ๆ ขอบคุณมากครับ!

 
xguru 2022-10-02

ลองดูโพสต์เก่า ๆ ที่เคยขึ้นบน HN ด้วย
ปี 2021 https://news.ycombinator.com/item?id=28299053
ปี 2020 https://news.ycombinator.com/item?id=25465582
ปี 2019 https://news.ycombinator.com/item?id=21024041