Nền tảng nội bộ cho service (đường ray chung)

Chủ đề Dành cho thành viên
Bài đọc thử: 1/3 · còn 2 bài miễn phí · Xem gói thành viên

Bài toán

Tách hệ thống thành nhiều phần (service, hoặc component trong một monolith) giải được bài toán tổ chức. Nhưng nếu mỗi team tự làm RPC, retry, log, metric, contract theo cách riêng, thì ta chỉ đổi một kiểu hỗn loạn lấy một kiểu khác. Câu hỏi: cần xây gì chung, và xây lúc nào?

Diễn tiến theo thời gian

  • 2006 · Google: chọn làm dịch vụ khoá thay vì thư viện đồng thuận nhúng vào app: dễ gắn vào hệ có sẵn, app không phải tự giữ quorum. Dịch vụ này dần thành name service chính và nơi lưu cấu hình cần HA của Google; cell dùng chung phải tự bảo vệ trước client hành xử sai (retry vô hạn, poll bằng mở-đóng file). Google 2006

  • 2010→2013 · Twitter: khi tách monolith Ruby sang JVM, mỗi team làm concurrency và networking một kiểu, dẫn tới retry storm và không có back-pressure. Họ xây:

    • Finagle + Futures: thư viện client/server chung có pool kết nối, failover, load balancing;
    • Viz (metric) và Zipkin (tracing) tích hợp sẵn trong Finagle;
    • Decider để bật/tắt tính năng runtime, thay cho phối hợp deploy giữa các team.

    Twitter 2013

  • 2011 · Netflix: đã có Chaos Monkey và load balancer tầng giữa tự viết (cân bằng theo instance, không theo zone). Bài học từ sự cố AWS: công cụ cấu hình chỉ đổi được từng phần nhỏ, nên rút khỏi zone phải nhờ từng team làm tay. Cần thao tác hàng loạt "một nút bấm". Netflix 2011

  • 2012→2017 · LinkedIn (Couchbase): hệ mã nguồn mở thành nền tảng chung nhờ tooling bao quanh: cài bằng SaltStack + kho cấu hình range, client bọc metric, dashboard/alert tự sinh, công cụ Macy's báo cụm lệch chuẩn. LinkedIn 2017

  • 2013→2021 · SoundCloud: vài chục BFF dùng chung một thư viện edge (rate limit, xác thực, cache control), bản mới được rollout bán tự động tới mọi BFF trong vài giờ; BFF bảo trì theo inner source với Core team duyệt. SoundCloud 2021

  • 2013 · Quora: cron phân tán dùng chung: worker cài một package, giữ job trong bảng trung tâm, mỗi job chạy trong process con riêng. Quora 2013

  • 2013 · LinkedIn: Rest.li: REST+JSON, IDL, batch, kiểm tương thích API; D2 trên ZooKeeper cho discovery và cân bằng tải phía client; LinkedIn chuyển toàn bộ service sang. LinkedIn 2013

  • 2014 · Amazon: các team tự viết automation deploy riêng, lặp lại công sức và khó làm đúng trên fleet nhiều data center; Amazon dựng Apollo làm dịch vụ deploy dùng chung (sau này thành nền cho AWS CodeDeploy). Amazon 2014

  • 2014→2021 · ByteDance: Go vào công ty năm 2014 cho push service nhiều kết nối; 2016 có framework RPC Kite và HTTP Ginex; Kite gắn chặt Thrift nên từ nửa sau 2019 viết lại thành Kitex + thư viện mạng Netpoll, nội bộ từ 10/2020, tới 9/2021 hơn 30.000 microservice dùng. Mở mã nguồn (CloudWeGo) theo nguyên tắc một bộ code: lõi ra ngoài, phần nối governance nội bộ giữ làm extension; ở chế độ service mesh, Kitex gỡ governance của mình. ByteDance 2022

  • 2014→2015 · LinkedIn: Rest.li 2.0 không tương thích ngược được rollout bằng cấu hình D2 (phiên bản cao nhất server hiểu), không cần chủ service tham gia: khoảng 100 service trong Q4/2014. LinkedIn 2015

  • 2015 · Uber: hơn 500 service với contract lỏng; một kỹ sư gọi đó là "API monolith phân tán". Họ chọn Thrift làm IDL (contract chặt, sinh client đa ngôn ngữ), phát hành client qua pip/npm, và viết thư viện chịu lỗi theo mẫu Hystrix/Finagle. Uber 2015

  • ~2015 · Allegro: có team kỹ thuật lo event bus, discovery, thư viện chung; bài học là phần kỹ thuật dùng chung (job nền, cache) phải có chủ sở hữu rõ. Allegro 2015

  • 2015 · Yahoo: log nhân bản (BookKeeper) thành dịch vụ dùng chung cho WAL của file system và queue messaging đa tenant. Yahoo 2015

  • 2016 · Uber (qua HighScalability): những thứ ước gì làm sớm: truyền context xuyên ngôn ngữ, tracing, log có cấu trúc kèm back-pressure và "tính tiền" theo lượng log, dashboard chuẩn tự sinh. Nguyên tắc: chỉ dùng cà rốt, không dùng gậy. Uber 2016

  • 2016 · Ele.me: cụm RabbitMQ dùng chung nhiều nghiệp vụ, cộng client tự đóng gói hiểu sai tham số, làm sập cả cụm. Hệ "đơn hàng ảo" (bảng cơ bản + bảng mở rộng) cho phép nghiệp vụ mới tích hợp trong 2–3 ngày: nguyên mẫu của một PaaS giao dịch. Ele.me 2020

  • 2016 · SoundCloud: chính sách chịu lỗi (failure accrual, phân loại phản hồi, load balancing phía client) ghép từ module của Finagle vào client HTTP chung. SoundCloud 2016

  • 2017–2018 · Grab: Grab-Kit sinh service Go từ file .proto; middleware chuẩn (log, circuit breaker, stats, profiling); dashboard DataDog tự sinh từ metrics.yaml. Theo Grab, GrabFood tiết kiệm tới 70% thời gian dựng service. Grab 2018

  • 2017 · Segment: biến tối ưu chi phí thành mặc định: module Terraform (cluster, service, worker, auto-scaling) cho mọi service mới, "cách dễ là cách đúng". Segment 2017

  • 2017 · Yahoo: Screwdriver là điểm vào chung cho build và deploy toàn công ty; pipeline sống trong repo nên self-service. Yahoo 2017

  • 2017 · Swiggy: logic gửi push/SMS/email rải trong service của từng team được gom thành nền tảng Kabootar: 8 microservice nối qua RabbitMQ (pull thay vì push), message tự chứa mọi thứ kể cả kế hoạch retry/fallback, scheduler nhúng dạng jar vào mọi service; nền tảng không biết nghiệp vụ, dữ liệu user lấy qua một dịch vụ tổng hợp mà các team đăng ký API. Swiggy 2017

  • 2018 · Segment (phản ví dụ): có thư viện chung nhưng không có công cụ test/deploy hàng loạt, nên mỗi service mắc kẹt ở một phiên bản khác nhau và lợi ích của thư viện chung đảo ngược. Họ giải bằng cách gom về một service, một phiên bản cho mỗi dependency, và Traffic Recorder cho test. Segment 2018

  • 2018→2021 · OpenAI: Kubernetes làm nền cho nghiên cứu, từ 2.500 lên một cụm 7.500 node. etcd phải chạy trên SSD cục bộ (bị giới hạn bởi latency chứ không phải IOPS); API server và etcd chạy ngoài cụm; quota theo team bằng taint và admission webhook; gang scheduling; preflight test GPU trước khi node nhận việc. OpenAI 2018 OpenAI 2021

  • 2018 · Medium: khi chuyển sang microservice, tách "xây service" khỏi "chạy service": Istio + Envoy cho mạng, gRPC cho giao tiếp, container trên ECS chuyển dần sang Kubernetes, hệ build/deploy BBFD (service chỉ khai cổng và lệnh build/test/start), mỗi service tự có dashboard, alert, log search Datadog đồng nhất. Medium 2018

  • 2018 · Kubernetes: kube-proxy dùng iptables (danh sách luật thiết kế cho firewall) là nút cổ chai thật của cụm 5.000 node dù control plane đã hỗ trợ: 2.000 Service × 10 pod là ít nhất 20.000 luật trên mỗi node. Chế độ IPVS (bảng băm trong kernel) lên GA ở 1.11. Kubernetes 2018

  • 2018→2019 · LinkedIn (Nuage): một cổng self-service cho hơn 15 hệ hạ tầng (Espresso, Kafka, Venice, Pinot...): tích hợp bằng template + SDK; ACL bắt buộc khi tạo tài nguyên, quota cấu hình tập trung nhưng thực thi trong thư viện; từ kiến trúc tập trung sang các microservice quản lý, từ bị động sang dự đoán (hot partition, khủng hoảng capacity). LinkedIn 2019

  • 2018 · Dropbox: Service proxy Bandaid (Go) đẩy nhanh chuyển sang SOA: nhiều thuật toán LB, retry loại host đã thử, cô lập route quan trọng với route phụ trên cùng host bằng hàng đợi có priority và rate limit. Dropbox 2018

  • 2019 · Grab: load balancing phía client tự xây (CSDP, dùng etcd); Grab-Kit có sẵn fallback trả cache khi service phía dưới không phản hồi. Grab 2019

  • 2019 · Atlassian: sidecar client cho Tenant Context Service (cache dài + invalidate qua SNS, gọi song song nhiều region), vì người làm service biết cách gọi tốt nhất. Atlassian 2019

  • 2019 · Disney Hotstar: core image theo ngôn ngữ, thư viện deploy nhận config JSON, logging mặc định; developer chỉ khai tên team. Disney Hotstar 2020

  • 2019→2021 · SoundCloud: VAS là điểm vào chuẩn cho mỗi aggregate (Track, Playlist), gom logic fetch và phân quyền trước đây nằm rải ở các BFF; contract qua IDL (Twinagle). SoundCloud 2021

  • 2019 · Atlassian: tính năng realtime cho Jira chỉ cần một service mỏng ghép các khối nền tảng có sẵn: event bus StreamHub (mỗi consumer một SQS), FPS (pub/sub frontend), Permissions service, ID chuẩn ARI/AVI. Jira và StreamHub không phải sửa gì. Atlassian 2019

  • 2019 · Booking.com: mặc định team sản phẩm tự lo độ tin cậy (mức 3), nên team reliability phải làm tài liệu, công cụ tự động và đào tạo cho từng mục việc vận hành để team sản phẩm tự làm được. Booking.com 2019

  • 2019→2022 · Spotify: năng lực điều phối phát hành dạng thư viện (Luigi, Flo) không nâng cấp được cho hơn 1.000 repo; chuyển sang dịch vụ (Flyte) với SDK mỏng để nền tảng tự cập nhật cho mọi người và nhìn được workflow. Spotify 2022

  • 2019 · Monzo: cơ chế secret an toàn nhưng khó dùng thì bị né; nền tảng làm nó dễ dùng: công cụ shipper secret, thư viện đọc secret giống đọc cấu hình, vùng đọc mặc định cho mỗi service, nên không cần key ceremony cho việc thường ngày. Monzo 2019

  • 2019 · Dropbox (Courier): gRPC gắn với identity (cert nội bộ, mTLS bắt buộc), ACL/rate limit theo method, stats và tracing sẵn có, deadline bắt buộc, stub tự sinh có panic handler dừng process; theo Dropbox, framework RPC là nơi đặt cải tiến độ tin cậy cho cả hạ tầng, lấy từ báo cáo sự cố gom theo quý. Dropbox 2019

  • 2019 · Dropbox: Cải thiện LB L7 bằng thông tin tải gắn vào response thay vì controller tập trung; rollout theo service từ ít rủi ro nhất, dự định áp cho client-side LB của khung SOA. Dropbox 2019

  • 2019→2020 · Netflix: Schema Registry của Studio Edge kiểm schema mỗi DGS hợp lệ, ghép được và tương thích ngược trong CI/CD rồi ghép thành schema thống nhất cho gateway; chất lượng schema do máy gác thay vì một đội. Netflix 2020

  • 2020 · Shopify (trong monolith): "đường ray" cho component: Rails Engines, contract bằng Sorbet, Packwerk kiểm tra phụ thuộc tĩnh ngay trong PR. Bài học họ nêu: ép pattern đồng loạt mà không giải bài toán thật thì phản tác dụng. Shopify 2020

  • 2020 · Uber: ở mức ~2.200 service, "đường ray" là cấu trúc: domain, layer, gateway làm điểm vào duy nhất, extension để mở rộng mà không sửa lõi. Uber 2020

  • 2020 · GitHub: deploy bằng chatops qua một kênh Slack vỡ khi số developer gấp đôi; chuyển sang hệ thống deploy dạng máy trạng thái có UI. Xem Deploy và release an toàn. GitHub 2021

  • 2020 · Airbnb: framework mock phụ thuộc bằng fixture YAML cho shallow integration test; pipeline riêng cho mỗi service. Airbnb 2020

  • 2020 · Pinterest: cache cung cấp như một dịch vụ: mcrouter sidecar cạnh mỗi service, cấu hình tập trung (một thay đổi áp lên hàng chục nghìn máy cùng lúc là một rủi ro), observability có sẵn. Pinterest 2020

  • 2020 · Reddit: chuyển từ EC2 ASG + sidecar (Terraform, Puppet) sang Kubernetes nhưng giữ trừu tượng dev đã quen: namespace theo service, Deployment tương ứng ASG, sidecar trong pod; manifest sinh bằng Starlark thay helm chart. Reddit 2020

  • 2020 · Monzo: autoscaling là việc của nền tảng: ba chế độ (Manual, Vertical mặc định, Horizontal) ghép VPA và HPA, envoy sidecar tự scale trong suốt. Bài học: VPA bật Auto evict hàng nghìn pod không giới hạn (Monzo đóng góp rate limit), cần Pod Disruption Budget, HPA tính trên cả pod nên envoy kích scale. Monzo 2020

  • 2020 · Yelp: Cassandra lên PaaSTA (Kubernetes) bằng operator; spec tối thiểu đã cho cụm cấu hình tốt có TLS, EBS gắn lại được để tách compute khỏi storage. Yelp 2020

  • 2020 · Gojek: team Engineering Platform nâng cấp GKE mỗi quý; mặc định của nền tảng quyết định nâng cấp có làm down service không: cụm regional, replica tối thiểu bằng số zone, pod anti-affinity; script báo trạng thái pod kèm team sở hữu tra từ service registry. Gojek 2020

  • 2020 · Disney Hotstar: Platform Team dựng CI/CD tự phục vụ trên GoCD: developer tự sửa pipeline YAML trong repo của mình, agent profile tách quyền theo môi trường (agent dev chỉ đọc secret dev), cả hệ dựng lại được trong vài phút vì cấu hình là code. Disney Hotstar 2020

  • 2020→2023 · Fly.io: từ driver Nomad sang orchestrator tự viết flyd: theo Fly.io, bin packing hợp người sở hữu cụm chứ không hợp nhà cung cấp đã mua dư máy; scheduling bất đồng bộ không scale từ 0 theo request được. Mô hình thị trường (khớp được thì chạy, không thì thất bại ngay), mỗi worker là nguồn sự thật với BoltDB, không đồng thuận, trạng thái toàn hệ qua gossip (Corrosion), chính sách (deploy nhiều region, dự phòng) đẩy ra client. Fly.io 2023

  • 2020 · Wix: cổng CI Lifecycle cho khoảng 1.000 developer: một chỗ thấy mọi build, phiên bản ở từng bậc, sự kiện production, và bấm RC/GA/rollback. Wix 2020

  • 2020 · CapitalOne: một DevOps/SRE hỗ trợ sáu team, hơn 75 microservice trên ECS (tới khoảng 100 deploy non-prod một ngày) bằng Infrastructure-Application pattern: hạ tầng chung do nền tảng giữ, ứng dụng đi qua module Terraform có chủ kiến mang sẵn mã hoá, security group, IAM; tra dữ liệu bằng data source thay danh sách tay; state locking. CapitalOne 2020

  • 2020→2021 · Dropbox: Atlas đưa trải nghiệm "serverless" cho tính năng nhỏ, tự đủ: developer viết endpoint, nền tảng sinh cấu hình (dưới 50 dòng), đẩy hằng ngày, canary tự động, autoscale giữ trên 40% headroom theo hàng đợi request của Envoy; hệ lớn (chia sẻ file) vẫn là service riêng. Dropbox 2021

  • 2020 · Zillow: Data Streaming Platform: team chỉ gọi REST API, nền tảng lo stream, routing, schema và quản trị; dùng Terraform tạo Kinesis theo yêu cầu không scale nên chuyển sang tạo topic Kafka bằng CI/CD. Zillow 2020

  • 2020 · Zillow: Kafka self-service qua Terraform provider riêng (chặn topic quá nhiều partition), metadata bắt buộc khi tạo topic nối với Data Portal, dịch vụ cấu hình tiêm sẵn config client. Zillow 2020

  • 2020→2023 · Zillow: ZGCP tạo cụm Kubernetes với CI/CD, observability, chi phí theo team và archetype dựng service trong vài phút; ZACS đưa Spark lên Kubernetes sau một SDK, chuyển job chỉ cần đổi plugin. Zillow 2023

  • 2021 · SoundCloud: gateway cho mỗi domain gom phân quyền và query/command (theo tinh thần CQRS) ở một chỗ, bớt logic trùng lặp ở các BFF. SoundCloud 2021

  • 2021→2022 · Yelp: đưa Kafka từ EC2 + Puppet lên PaaS nội bộ PaaSTA (Kubernetes) bằng operator tự viết và Cruise Control: dùng chung CLI, config và quy trình với service, thời gian dựng cụm mới giảm một nửa. Yelp 2021 Yelp 2022

  • 2021→2022 · Fly.io: không làm managed database mà làm "automated database": Postgres là một app chạy trên nền tảng như mọi app khác. Theo Fly.io, phần lớn việc "làm Postgres" thực ra là việc nền tảng (volume, snapshot block device, health check) dùng được cho mọi app. Fly.io 2022

  • 2021 · Grammarly: tài khoản AWS mới (đủ dịch vụ cấu hình sẵn) tạo tự động qua một form trong khoảng 2 giờ bằng Terraform + Go, để migration nhiều region không thành gánh nặng cho developer. Grammarly 2021

  • 2021 · Monzo: phi tập trung on-call ("On-call 3.0"): alert định tuyến thẳng tới team sở hữu; nền tảng lo monitoring, alerting và định tuyến để team nào cũng trực được. Monzo 2022

  • 2021→2022 · Mercari: chuyển monolith PHP từ GCE lên GKE để dùng chung công cụ của microservice; k8s-kit (CUE) gói cách sửa lỗi đã biết vào mặc định: một dòng workloadIdentity: true sinh luôn initContainer chờ metadata server, team không cần biết lỗi timeout đó. Mercari 2022

  • 2021 · Spotify: khi team hạ tầng giữ cluster Kubernetes ở nhiều region, người sở hữu service phải đổi nhiều context để xem service của mình; plugin Kubernetes cho Backstage gom trạng thái theo service (lỗi, mức gần trần autoscaler, restart) từ mọi cluster vào service catalog. Spotify 2021

  • 2021→2022 · Grab: search làm lại thành framework do nền tảng giữ (boosting → multi-recall → ranking) cộng plugin do team service viết, ghép bằng cấu hình; team chưa từng làm search vẫn dựng được luồng mới, plugin dùng lại giữa Food, Mart, quảng cáo. Grab 2022

  • 2021 · Riot Games: môi trường test tạm theo nhánh lúc đầu mỗi cái một game server, nhiều tới mức làm sập cụm dev; chuyển sang một server chứa nhiều môi trường, dọn tự động theo vòng đời ticket; công cụ GUI riêng gói Git + JIRA + Jenkins cho người không phải kỹ sư. Riot Games 2021

  • 2021 · ByteDance: framework HTTP nội bộ từ lớp bọc Gin chuyển sang Hertz tự viết trên Netpoll (1.0 nội bộ 7/2021); tới 2022 là hơn 10.000 service, đỉnh hơn 40 triệu QPS, mở mã nguồn với một codebase chung cho trong và ngoài. Cái giá: không dùng net chuẩn nên phải dựng lại middleware hệ sinh thái. ByteDance 2022

  • 2021 · Netflix: team Prodicle Distribution giao workflow bất đồng bộ, watermark và việc chịu tải bùng nổ cho nền tảng Cosmos và team khác; lý do chọn gồm cả cổng quan sát có sẵn. Netflix 2021

  • 2021 · Loveholidays: "you build it, you run it" nhưng nền tảng cấp sẵn rule alert mặc định; team chỉ gắn nhãn team lên resource (ép bằng GitOps + Conftest) là alert tự tới mình. Loveholidays 2021

  • 2021→2023 · Spotify: Fleet Management đổi trách nhiệm của team hạ tầng: Fleetshift do một team giữ, các team khác dùng để gửi thay đổi cho code của người khác; hạ tầng khai báo trên Kubernetes (hơn 3.000 project GCP, khoảng 20 operator) với quyền mặc định chỉ đọc và break-glass. Spotify 2023 Spotify 2023

  • 2021 · Pinterest: CI chung cho mọi repo dùng Bazel; developer chỉ khai báo trong file BUILD (rule test, release rule riêng, tag no-ci), không cần biết artifact đi đâu. Pinterest 2021

  • 2021 · Wix: Velo cho hàng chục triệu site nhỏ: Kore trên Kubernetes giữ pool pod ấm, gắn tạm một pod cho site khi có request, thu hồi sau vài phút; site lớn có số pod tối đa, thêm từng pod một ngoài đường request. Wix 2021

  • 2021 · Netflix: xác thực dời ra edge (Zuul + Edge Authentication Services); service phía sau chỉ đọc Passport có HMAC qua thư viện, không còn tự xử lý token. Netflix 2021

  • 2021 · Loveholidays: để developer tự sở hữu hạ tầng mà một đội hạ tầng nhỏ không phải duyệt mọi PR: pipeline Terraform chung (Atlantis) và policy as code chạy trong bước plan, thông báo vi phạm link tới tài liệu của policy; module nội bộ ép phiên bản tối thiểu bằng policy. Loveholidays 2021

  • 2021 · Alibaba: kế hoạch Dubbo 3.0 hợp nhất HSF nội bộ với Dubbo mã nguồn mở: khám phá service theo ứng dụng thay theo interface (100 interface × 100 máy: 10.000 thay đổi mỗi lần release còn 100, bộ nhớ giảm ít nhất một nửa theo Alibaba), giao thức Triple trên HTTP/2 tương thích gRPC, hai cách vào mesh (Thin SDK có sidecar, Proxyless không sidecar) dưới một control plane. Alibaba 2021

  • 2021 · Two Sigma: Platform Engineering biến migration thành sản phẩm (ADMIRE): phạm vi bằng code, ticket tự động, service tra chủ sở hữu dùng khắp công ty; số ticket thành thước đo chi phí để chọn chỗ tự động hoá nền tảng. Two Sigma 2021

  • 2022 · Twitter: từ "mỗi team tự ingest dữ liệu" (~2 tuần mỗi dataset) sang framework cấu hình hoá trên Dataflow/Airflow: hơn 1.000 dataset, mỗi dataset mới chỉ mất 1 giờ. Twitter 2022

  • 2022 · Monzo: rollback tự động trở thành mặc định cho mọi service, giữ nguyên CLI và Slack quen thuộc. Monzo 2022

  • 2022→2024 · Cloudflare: thay truy cập DB trực tiếp bằng một gRPC API do team DNS sở hữu (rate limit, cache, audit ở một chỗ). Đây là điều kiện để cutover không downtime. Cloudflare 2024

  • 2022 · Doximity: gem nội bộ dox-messaging có factory và object cấu hình chung nên thay client Kafka bên dưới (ruby-kafka → rdkafka) mà mọi app giữ nguyên interface. Doximity 2022

  • 2022 · Railway: log của hơn 500.000 deployment từ polling Docker mỗi 2 giây sang Vector cục bộ → Vector trung tâm (filesystem cho vài giờ, GCS cho lâu dài) và gRPC stream tới frontend, để Docker daemon chỉ lo giữ deployment chạy. Railway 2022

  • 2022 · Achievers: service mesh Istio thay Kong làm gateway và mesh; sidecar thành một phần của mọi pod nên các mặc định của nền tảng (thứ tự khởi động, ngưỡng autoscaling, xử lý tín hiệu tắt) phải sửa theo. Achievers 2022

  • 2022 · Monzo: hơn 2.000 service, hơn 100 deploy/ngày; một review là được deploy, bù bằng guardrail dựng sẵn (chặn deploy chưa qua staging, metric và alert mặc định, cảnh báo migration chưa chạy, tier service), CLI có chủ kiến che Kubernetes, công nghệ đồng nhất để guardrail dùng lại được. Monzo 2022

  • 2022 · Tinder: hơn 500 microservice, mỗi team một API gateway bên thứ ba khác nhau. TAG (trên Spring Cloud Gateway): framework chung, mỗi team dựng instance riêng bằng cấu hình; session, auth, quét schema, phát hiện bot là filter chung. Tinder 2022

  • 2022 · Mercari: tách platform engineering (công cụ cho team sản phẩm tự đi hết vòng đời, khoảng 80% vấn đề chung) khỏi SRE (20% riêng theo service); SRE là khách hàng của team Platform và phản hồi để cải tiến công cụ. Mercari 2022

  • 2022 · Shopify: Airflow đa tenant: manifest khai báo namespace và chủ sở hữu, DAG policy từ chối DAG vi phạm (tiền tố namespace, queue và pool được phép, namespace Kubernetes được phép) thay vì admin review từng job; giữ metadata 28 ngày; DAG đồng bộ từ GCS sang NFS trong cluster thay vì mount GCS ở mỗi pod. Shopify 2022

  • 2022 · eBay: release hơn 3.000 thư viện sau khi chuyển từ Ant sang Maven: service trung tâm dựng DAG phụ thuộc và hàng đợi ưu tiên; đổi từ push (kích một job Jenkins cho mỗi thư viện, 2–3 ngày) sang pull (20 job trên một node tự lấy việc kế tiếp, khoảng 2 giờ). eBay 2022

  • 2022 · Alibaba: framework RPC nội bộ HSF và hệ microservice của Ele.me hội tụ về Dubbo3 mã nguồn mở; service discovery theo ứng dụng chữa việc đẩy địa chỉ suy giảm lúc đỉnh (theo Alibaba). Alibaba 2023

  • 2022 · Netflix: Data Mesh như nền tảng: control plane nhận khai báo pipeline, processor do team khác viết đăng ký vào là có alert và dashboard mặc định, schema bắt buộc. Netflix 2022

  • 2022 · ByteDance: framework RPC Kite (2016) không theo kịp nên viết Kitex (2019, hơn 10.000 service cuối 2020); chia Core/Tool/extension nội bộ để mở mã (7/2021) mà nội bộ vẫn dùng chung một codebase; người ngoài kéo theo Protobuf/gRPC, proxyless xDS. ByteDance 2022

  • 2022→2024 · Fly.io: thay hệ phân quyền định nghĩa sẵn vai trò bằng Macaroon: nền tảng mô hình hoá tài nguyên + thao tác, user tự ghép vai trò bằng caveat; caveat bên thứ ba thành hệ plugin cho chính sách (SSO, duyệt qua bot). Fly.io 2024

  • 2022 · Meta: onboarding ACS ban đầu cần một người trong đội ngồi giải thích và cấu hình tay; chuyển sang cổng tự phục vụ, SDK Android/iOS với hàm cấp cao (fetch-acs-token), wiki và codegen để đội khác dùng mà không cần hiểu mật mã. Meta 2022

  • 2023 · Railway: PaaS thêm replica cho service: đổi mô hình dữ liệu từ một deployment sang nhiều deployment instance, orchestrator riêng trên Temporal, control plane mạng theo sự kiện đẩy IPv6 mới tới proxy và DNS trong vài mili giây; mở mọi thứ qua API để người dùng tự viết autoscaler (theo Railway). Railway 2023

  • 2023 · Slack: team Cloud Foundations cung cấp module Terraform chuẩn (AutoScaling group, S3, RDS) cho team service; đổi mặc định bảo mật (IMDSv2) ở một chỗ là mọi team nhận, kèm module danh sách ngoại lệ cho team chưa sẵn sàng. Slack 2023

  • 2023 · Fly.io: Fly Machines API cố ý đơn giản và có thể thất bại; FKS đặt K8s lên trên như plugin: K3s (kine/SQLite) + Virtual Kubelet trên một Fly Machine, mỗi Pod là một Machine, không cần node, kube-proxy, CNI. Fly.io 2023

  • 2023 · Uber: Charter quản lý policy phân quyền tập trung, thư viện authfx thực thi tại chỗ; ABAC với attribute store dạng plugin và CEL, 70 service dùng. Uber 2023

  • 2023 · Uber: Container Platform (hơn 100 cụm, khoảng 4.000 service, 3 triệu core, 1,5 triệu pod mỗi ngày): ý định scale của nhiều orchestrator được lưu ngay trong Kubernetes để kiểm tra được, không thêm DB hay dịch vụ điều phối; rollout một năm với integration test bằng kind (bài 9/2026). Uber 2026

  • 2024→2025 · Uber: tầng Federator phía trên các cụm Kubernetes: workload gửi vào region chứ không vào cụm, nên chịu được cụm hay zone hỏng, cân tải giữa cụm, và thêm, bớt cụm mà team ứng dụng không phải biết. Họ giữ cả UI quan sát cũ bằng cách nhân bản trạng thái từ etcd sang Cassandra. Uber 2025

  • 2024 · Monzo: một client library biến Kafka thành queue cho hơn 400 service và 2.500 topic: bỏ thứ tự để có dead letter riêng mỗi consumer group và xử lý song song trong partition (commit theo watermark, giới hạn "max runaway"); tổ hợp tuỳ chọn sai thì lỗi biên dịch. Monzo 2024

  • 2024 · Allegro: hơn 2.000 repo; breaking change của thư viện nội bộ được migrate tự động: Dependabot mở PR, GitHub App chạy recipe OpenRewrite và commit vào chính PR; tự động khoảng 90% là đủ, có hạn chót và force-merge PR build xanh. Người gây breaking change viết cách sửa. Allegro 2024

  • 2024→2025 · Grab: data mesh: chủ sở hữu được gán tự động theo team người tạo bảng rồi cho người rà lại; dashboard chỉ cho từng team bảng nào dùng nhiều nhất để chứng nhận trước, chỉ số chung kéo cả bên sản xuất lẫn bên dùng. Grab 2025

  • 2024 · Cozystack (blog Kubernetes): PaaS triển khai mọi ứng dụng bằng HelmRelease nhưng RBAC không lọc được list theo chart, và không thể cho user tạo HelmRelease tuỳ ý. Viết extension API server (API aggregation layer, không etcd) đăng ký động hơn 20 kind theo tên chart (Postgres, Kafka, VirtualMachine...) từ ConfigMap, proxy hai chiều sang HelmRelease, không cần controller đồng bộ. Đổi lại API phụ chậm hay chết có thể chặn cả xoá namespace. Kubernetes 2024

  • 2024 · GitHub: chương trình Fundamentals: mỗi service khai tier, QoS, chủ sở hữu trong YAML ở repo; scorecard (ownership, code/secret scanning, incident readiness, accessibility) đọc YAML để tự áp yêu cầu theo tier và mở issue có SLA khi chưa đạt. GitHub 2024

  • 2024→2026 · Airbnb (sitar-agent): sidecar giao config cho hàng chục nghìn pod: preload snapshot từ S3 khi khởi động, poll 10 giây với cache phía server TTL 10 giây và token gia tăng thay vì chuyển sang push; giữ sidecar thay vì library vì fleet có 5 ngôn ngữ; kho local Sparkey → SQLite (WAL, binding cho mọi ngôn ngữ) qua shadow read. Airbnb 2026

  • 2024 · Zillow: chọn thư viện consumer chuẩn (zkafka) thay vì service proxy như Uber Consumer Proxy: theo Zillow, service thêm một hệ phân tán phải vận hành, cần tầng lưu trạng thái riêng và thêm hop mạng. Zillow 2024

  • 2025 · Stack Overflow: thành phần hạ tầng mã nguồn mở bị khai tử (Ingress-NGINX) buộc đánh giá thay thế theo lịch của người khác; tiêu chí conformance, không phụ thuộc một cloud, và test lấy từ cấu hình production. Stack Overflow 2026

  • 2025 · Railway: builder của nền tảng che công cụ bên dưới; theo Railway, cố che những gì làm nên bản chất của Nix (phiên bản theo commit nixpkgs) là thất bại, nên viết lại trên BuildKit. Railway 2025

  • 2025 · Mercari: công cụ chẩn đoán sâu (bắt gói tin) đưa vào tầm tay developer bằng Ephemeral Container + quyền tạm, cân bằng với Zero Touch Production. Mercari 2025

  • 2025 · Uber: quản lý secret thành nền tảng: một đội sở hữu kho (25 → 6), metadata cho mọi secret, API cho nhà cung cấp secret và nền tảng deploy, xoay vòng tự động 20.000 secret/tháng; đội 10 kỹ sư nhân rộng qua chương trình toàn công ty. Uber 2025

  • 2025 · Mercari: nền tảng toàn cầu "lai": mở rộng các nền tảng dùng chung đủ lớn và độc lập (cỡ "thay được bằng SaaS": ID, thanh toán Merpay nối Stripe, search, marketing), xây lại phần gắn với thị trường Nhật (giao dịch, vận chuyển, sản phẩm); không phụ thuộc vào microservice nhỏ hay monolith. Tenet "Design for two": luôn thiết kế cho ít nhất hai nước. Mercari 2025

  • 2025 · Mercari: nền tảng Elasticsearch nội bộ (EaaS) chạy gần như mọi search của tập đoàn nhưng chỉ cấp engine; tính năng search nằm trong service Go của sản phẩm Nhật nên sản phẩm mới (quảng cáo, Global App) không lấy được. Lớp tính năng dùng chung mới đặt hai nguyên tắc: không chặn bớt khả năng của phần mềm bên dưới, và mỗi domain dùng độc lập, mở đóng góp qua plugin để tránh tranh giành ưu tiên. Mercari 2025

  • 2026 · Stripe: nền tảng tự sửa DB mô phỏng bằng chính code thực thi (interface bọc Temporal có bản thật và bản trong bộ nhớ), nên kế hoạch không lệch khỏi thực tế; thêm kiểu bố trí shard mới không cần sửa code. Stripe 2026

  • 2026 · Notion: DLQ Explorer cho kỹ sư giao diện có kiểm soát thay cho quyền S3 trực tiếp: query dead task theo cell, re-enqueue có lý do và vết kiểm toán. Notion 2026

  • 2026 · Uber: cấp phát CPU lai (riêng + chia sẻ) làm ở agent trên host; Kubernetes chưa hỗ trợ nên tách code cgroups thành thư viện và bọc thành plugin CRI để giữ hiệu quả khi chuyển sang Kubernetes. Uber 2026

  • 2026 · LINE (LY Corp): gộp hai private cloud thành Flava; DBaaS dựng bằng operator trên Kubernetes, tách infra operator biểu diễn VM/volume/DNS thành resource để code DBaaS chỉ lo logic database; mọi DBMS chung một UI và quy trình; migration là công cụ tự phục vụ cho developer. LINE (LY Corp) 2026

  • 2026 · Coinbase: một cụm Temporal dùng chung tự host (persistence tự viết) giúp áp dụng nhanh rồi thành nút thắt: latency phụ thuộc hàng xóm, on-call riêng, nâng cấp chậm, blast radius lớn; chuyển hơn 300 namespace sang Temporal Cloud, giữ seam trong thư viện client dùng chung. Coinbase 2026

  • 2026 · Notion: gom mọi job Spark về một nền Kubernetes chung (EMR on EKS) để tối ưu chi phí một lần cho tất cả; đánh đổi chi phí/độ tin cậy đưa ra cho chủ job dưới dạng vài mức đặt tên thay vì con số. Notion 2026

  • 2026 · PlanetScale: theo tác giả, Kubernetes nên được đọc là framework cho feedback controller: kubelet, scheduler, CSI và operator cùng đọc ghi object chung, liên kết qua ownerReference, mỗi vòng lo một tầng (cascade control: operator ghi spec của PVC, CSI hội tụ theo spec đó); không ai điều phối tổng. PlanetScale 2026

  • 2026 · Mercari: runner CI tạm trên GKE trả 2–3 phút kéo image 2,4 GiB mỗi job. Chuyển ARC sang Kubernetes mode để image cache trên node, rồi gặp OutOfPods vì pod đặt nodeName bỏ qua scheduler. Sửa bằng device plugin quảng bá tài nguyên giả runner-quota để scheduler và autoscaler cùng thấy ràng buộc; pipeline nhanh hơn 30–40%. Mercari 2026

  • 2026 · Slack: trách nhiệm phân lớp trên Shipyard: team Compute, Security, Monitoring giữ AMI base; team service build lớp của mình và phải rebuild khi base đổi; inventory Peekaboo lấy từ sự kiện cloud thay cho Chef Server. Slack 2026

  • 2026 · Stripe: credit trả phí dựng trên nền tảng Money Movement and Storage có sẵn thay vì hệ số dư riêng: thêm biến thể financial account chỉ là logic, chuyển giá trị qua quy trình OMT ba pha sẵn có, nền tảng chặn mọi chuyển giữa tài khoản logic và thật, loại bút toán logic khỏi sweep tiền mặt. Được luôn audit và tích hợp với kế toán, data warehouse. Cùng năm, CI chọn test theo file mà mỗi test đã mở (khoảng 5% bộ test mỗi build). Stripe 2026 Stripe 2026

  • 2026 · Coinbase: "tập trung kiểm soát, phân tán năng lực": lớp chung lo authz, audit, rate limit, phê duyệt; team sản phẩm tự thêm năng lực bằng cấu hình (role, ngưỡng duyệt, luật rate limit) hoặc một công thức code cố định (contract → handler → permission → audit), để platform team không thành hàng đợi. Theo Coinbase, mỗi loại client mới (UI, batch, agent) là chi phí governance liên tục. Coinbase 2026

  • 2026 · Spotify: Backstage mở cho coding agent qua MCP/CLI (tra chủ, đọc tài liệu, nhắn team); golden state + Soundcheck + lint thành phản hồi tức thì cho cả người lẫn agent. Spotify 2026

  • 2026 · Uber: rate limit thành tính năng của service mesh: mọi service có bảo vệ quá tải mà không sửa code (trước đó nhiều service nhỏ không có limiter nào), và là công cụ playbook để áp limit có mục tiêu trong vài giây lúc sự cố. Uber 2026

  • 2026 · Uber: MCP Gateway (hơn 800 server, hơn 5.000 tool): AutoCrawler sinh tool MCP từ IDL registry (mô tả do LLM viết), mọi tool sinh ra ở trạng thái tắt cho tới khi team sở hữu duyệt; data plane dịch MCP ↔ HTTP/gRPC/TChannel qua Muttley, không đổi service hạ nguồn; Omni MCP khám phá dần, response projection kiểu GraphQL, code mode qua CLI là mặc định cho coding agent. Uber 2026

  • 2026 · Stripe: Thay Envoy (gần 10 năm) bằng mesh-proxy tự viết bằng Go: mỗi kết nối một goroutine đọc + một ghi, multiplex nên mỗi host một kết nối thay vì mỗi worker/core một kết nối (service hạ tầng từng phải giữ hàng trăm nghìn kết nối); nối thẳng service registry thay xDS. Khoảng một nửa CPU, latency giảm khoảng 50%, làm được định tuyến riêng cho backend Ruby. Stripe 2026

Các lựa chọn và đánh đổi

Thứ được chuẩn hoá Ví dụ Lợi ích Rủi ro
Contract / IDL Thrift (Uber), proto (Grab), Sorbet (Shopify) Deploy độc lập, sinh client Công cụ non cho một số ngôn ngữ (Uber nêu với Python/Node)
Thư viện RPC + chịu lỗi Finagle (Twitter), thư viện resilience (Uber) Retry/back-pressure nhất quán Mọi service phụ thuộc một thư viện
Observability mặc định Viz/Zipkin, dashboard Grab-Kit Có metric mà không phải nhớ thêm Phải giữ đồng bộ khi metric đổi
Feature flag runtime Decider (Twitter) Tách deploy khỏi release Thêm trạng thái phải quản lý
Kiểm tra ranh giới tự động Packwerk, linter của GitHub (GitHub 2021) Chặn vi phạm trước khi merge Cần cả văn hoá, không chỉ công cụ
Cấu trúc tổ chức service Gateway + layer (Uber DOMA) Migrate phía sau gateway Thêm một tầng phải duy trì

Quy tắc rút ra

  1. Đường ray phải có trước, hoặc cùng lúc, với làn sóng tách. Twitter và Uber đều xây thư viện chung trong lúc tách; Segment thiếu công cụ hàng loạt nên phải quay lại.
  2. Thư viện chung mà không cập nhật hàng loạt được thì còn tệ hơn không có, vì các phiên bản sẽ trôi lệch nhau (Segment).
  3. Contract chặt là điều kiện để deploy độc lập thật sự (Uber 2015).
  4. Công cụ nhanh, tĩnh, nằm trong PR được dùng; công cụ chậm, nhiễu bị bỏ (Shopify bỏ Wedge chuyển sang Packwerk).
  5. Công cụ không thay được việc thuyết phục người dùng: Shopify chuyển từ ép luật sang tăng khả năng và động lực cho developer.
  6. "Chỉ dùng cà rốt, không dùng gậy" (Uber 2016): làm công cụ dễ tới mức không ai muốn làm cách khác; chỉ ép buộc khi liên quan bảo mật hay tuân thủ.
  7. Sidecar để đưa client và cache chuẩn vào mọi service bất kể ngôn ngữ (Pinterest mcrouter, Atlassian TCS client).
  8. Microservice đẩy nút cổ chai sang deploy; dịch vụ deploy chung là nền tảng nội bộ đầu tiên đáng làm (Amazon Apollo, trước 2014). Amazon 2014
  9. Module hạ tầng dùng chung là đòn bẩy để đổi mặc định cho mọi team ở một chỗ, kèm cơ chế ngoại lệ cho team chưa sẵn sàng (Slack 2023); gom workload về một nền tảng trước rồi tối ưu chi phí một lần cho tất cả (Notion 2026). Slack 2023 Notion 2026
  10. Tách làm công cụ chung (platform) khỏi áp dụng vào từng service (SRE); xem Mô hình tổ chức SRE. Mercari 2022
  11. Nền tảng đa tenant cần sổ đăng ký chủ sở hữu và policy chặn lúc nạp thay vì review tay từng job (Shopify 2022 Airflow); framework của nền tảng + plugin của team (Grab 2022 search). Shopify 2022 Grab 2022
  12. Dịch ràng buộc của mình sang thứ nền tảng đã quản lý (extended resource cho scheduler và autoscaler, Mercari 2026) thay vì viết scheduler riêng mà chỉ một thành phần hiểu. Mercari 2026
  13. Chính sách đặt việc là lõi sản phẩm của nhà cung cấp nền tảng: scheduler mặc định (bin packing) tối ưu cho người sở hữu cụm; khi mục tiêu khác (dùng đều máy đã mua, thất bại nhanh và đồng bộ) thì tự viết primitive đơn giản và đẩy chính sách ra client (Fly.io 2023). Fly.io 2023
  14. Với tenant đuôi dài, pool tài nguyên ấm + gắn tạm theo nhu cầu là điểm giữa giữa cold start và giữ một đơn vị cho mỗi tenant (Wix 2021 Velo). Wix 2021
  15. Framework nội bộ nên có lõi + extension tách khỏi hạ tầng công ty để dùng được ở nơi khác và để nội bộ cùng chạy một codebase với bản mở (ByteDance 2022). ByteDance 2022
  16. Ranh giới hạ tầng chung / hạ tầng của ứng dụng là ranh giới quyền: nền tảng giữ phần chung và đóng gói mặc định đúng (mã hoá, security group, IAM) vào module bắt buộc dùng; dữ liệu tra từ API lúc chạy thay vì danh sách người phải tự cập nhật. CapitalOne 2020

Câu hỏi mở