Print
Category: Computer Science

Nhân dịp chú Trần Quang Khải lại hỏi một câu hay hay, em lại phải viết một bài dài dài, có sắp xếp lại các ý hỏi cho nó hệ thống một tí:

 

1. Anh đã bao giờ làm các hệ thống có high load, high scale, nhiều data, nhiều concurrent request chưa? Nếu có dùng docker container, nếu không dùng k8s thì anh dùng tool gì?

 

Trả lời: Anh đã làm rất nhiều hệ thống như thế trong vòng gần 25 năm. Để anh kể cho chú về hai hệ thống tiêu biểu, mà khi anh trình bày về dung lượng load và concurrent request thì bọn kỹ sư của cả Gu gờ lẫn Phê tê bốc bảo là anh nói phét, vì ngay cả Gu gờ và Phê tê bốc cũng không có high load như thế . Cho đến khi nghe anh giải thích chi tiết load và request ở đâu ra thì chúng nó mới câm mõm.

 

Hai hệ thống đấy đều là anh làm mất mấy năm cho Cisco ở Headquarter của nó ở Milpitas, California khoảng 2014, sau đó có upgrade cho chúng nó vào khoảng 2018. 

 

- Cái thứ nhất là Cisco Internet of Things, kết nối tất cả các Internet devices của các khách hàng của Cisco, chỉ tính những thứ có kết nối với Cisco trên khắp thế giới như Internet camera, Weather Sensor, Robot trong một số hãng khách hàng như General Motor, General Electrics ...etc...

 

Nghĩa là có vô cùng nhiều device, truyền thông tin hình ảnh và đủ loại data về hệ thống Cisco IoT, 24/24.

 

- Cái thứ hai là Cisco Smart Licensing, là một hệ thống kết nối vào tất cả các Cisco Network Device đã từng bán ra khắp thế giới từ xưa đến nay như router, fastpad ...etc..., hàng trăm triệu thiết bị chạy gần như toàn bộ cơ sở hạ tầng của Internet lẫn private network của các nhà nước, công ty, tổ chức. Hệ thống này cứ X phút (bí mật cho bọn Cisco khỏi kiện) sẽ nhận được data từ tất cả các thiết bị này gửi về, phân tích thông tin về việc thiết bị được sử dụng như thế nào, dùng những hardware, firmware, software nào trên thỉết bị với bandwidth bao nhiêu, để tính tiền License hàng tháng.

 

Cả hai hệ thống này nhận hàng trăm triệu concurrent request từ các machine, device khắp nơi, với rất nhiều data, nghĩa là lớn hơn load của cả Gu gờ lẫn Phê tê bốc rất nhiều.

Bọn Gu gờ và Phê tê bốc tiếng là có mấy tỷ người dùng, nhưng họ không dùng 24/24, mà số người phân bố rải rác ra 24 giờ trong ngày, tại nhiều múi giờ khác nhau, mỗi thời điểm chỉ có một số ít người dùng. Hơn nữa trong số những người dùng Phê tê bốc đồng thời trong một giờ, không có quá nhiều người bấm phím hoặc bấm chuột cùng một lúc (tạo ra concurrent request). Do đó, concurrent request của bọn Gu gờ và Phê tê bốc chỉ khoảng vài triệu cho đến vài chục triệu request per second là nhiều.

 

Cả hai hệ thống này anh design và implement phần highload cũng gần gần giống nhau, nên anh nói qua qua thôi, với lại nói chi tiết thì bọn Cisco nó lại kiện anh chết.

 

Phần deployment của bọn nó lúc đầu anh dùng docker container, phần mềm container orchestration là Apache Mesos và dùng docker compose. Về sau thấy nó phiền phức quá, nên anh viết lại phần orchestration và load balancer dùng một thuật toán mà anh đặt tên là thuật toán Bánh Việt nam (để đối chọi với tên bài toán Tháp Hà nội).

 

Anh có viết qua qua về bài toán Bánh Việt nam này trong nick cũ của anh đã bị mất hồi 2020 bầu cử tổng thống Mỹ, vì anh chửi bọn deep gian lận bầu cử, có phân tích về máy bầu cử và Statistics. Tuy nhiên ở nick này, anh có post lại một ít vào năm 2023:

https://www.facebook.com/permalink.php?story_fbid=pfbid0FKKxECcJpF1HUKAPmM33FF6KF43uKXuGJCjQQr7jn6ky28MDX9WNG73kX3J1reXcl&id=100079575759287

 

Có cuốn sách đơn giản về thuật toán này trong ảnh, đọc cho vui cũng được. Bài toán "Bánh Việt nam" (tên do anh bịa) được coi là bài toán lý thú nhất trong toán học trong suốt 200 năm thể kỷ 19 và thế kỷ 20. Đến cuối thế kỷ 20, đầu thế kỷ 21 mới có lời giải.

 

Tóm lại, tools mình tự viết thì nó đỡ cồng kềnh, đỡ có các chức năng thừa và chạy nhanh hơn nhiều.

 

2. Dùng các tool truyền thống như nginx, apache làm load balancer, chạy thẳng trên Linux có ổn không?

 

Trả lời: Nếu không có hàng trăm triệu concurrent request và không có hàng petabyte data thì quá ổn.

 

- Hệ thống phân tán lớn đầu tiên mà anh làm khoảng 2001, cách đây 24 năm, là Windchill cho PTC (Parametric Technology Corp), là công ty làm phần mềm enterprise cho manufacturing corp lớn nhất thế giới. Hệ thống Windchill là core của các sản phẩm ProductLink, PDMLink, ProjectLink, dùng trong các công ty như Airbus, Boeing, Lockheed Martin, Mercedes-Benz, BMW, Rolls Royce ...etc... để sản xuất máy bay chiến đấu, máy bay dân dụng, ô tô, cho đến đủ các thứ sản xuất khác như Nike, Liz Clairbone, Adidas, Timberland .... thậm chí cả bọn sản xuất đồ lót nữ như Victoria Secrets cũng dùng.

 

Hệ thống điều khiển chiến trường dùng cyber warfare đầu tiên của Mỹ dùng ở chiến trường Iraq năm 2003 là Future Combat System (FCS) cũng dùng core là Windchill. 

Hệ thống sản xuất và simulation bay thử máy bay chiến đấu tàng hình Joint Strike Fighter của Mỹ cũng dùng Windchill, Pro/E Wildfire của PTC. Sản phẩm cuối cùng của project này là máy bay tàng hình F-35 hiện nay.

 

Toàn bộ hệ thống làm bằng Java, Oracle database, chạy Apache httpd làm load balancer, application server là Tomcat, chạy trên on-premise Linux server. Load vô cùng nhiều, data vô cùng nhiều.

 

- Hệ thống dùng AI để suggest Education plan: Ruby on Rails, PostgreSQL, dùng nginx làm load balancer, PhusionPassenger làm application runner, chạy trên 2 máy Linux on-premise. Hệ thống này có khoảng 10 triệu user.

Chi tiết xem ở một đoạn ngắn cuối bài này: Nhìn lại các giá trị công nghệ cuối thế kỷ 20, đầu thế kỷ 21

 

- Enterprise software cho Thyssend Krupp Elevator, công ty làm thang máy lớn thứ ba thế giới. Sau khi bọn này triển khai SAP và Oracle eBiz thất bại, chúng nó thuê anh làm lại từ đầu. Ruby on Rails, lúc đầu là Apache httpd, về sau là nginx làm load balancer, application server là mongrel, MySQL database, chạy trên 3 Linux virtual machine trong Oracle On Demand cloud. Hệ thống này dùng cho cả TKE lẫn khách hàng mua thang máy, cần bảo trì thang máy của nó nên có hàng chục triệu người dùng trên khắp thế giới.

 

- Hệ thống dùng Machine Learning để tìm kiếm alternative medication cho các bác sĩ, bệnh viện, các hãng bảo hiểm y tế, hãng dược Mỹ, chi tiết trong này: https://hanoian.com/content/index.php/literature/44-l-i-t-thu-c-a-m-t-th-ng-ngu 

Dùng ngôn ngữ Elixir, framework Phoenix, dùng nginx làm load balancer, về sau dùng HAProxy, application server là Erlang BEAM VM, PostgreSQL chạy trên 2 Linux virtual machine trong Flexential cloud.

Hệ thống này tính tất cả bác sĩ, phòng khám, bệnh viện, các văn phòng của các hãng bảo hiểm khắp nước Mỹ, các Pharmacy Benefits Manager (PBM) ...etc... thì có khoảng vài chục triệu user.

 

~~~~~

 

Còn một vài hệ thống khác ở quy mô nhỏ hơn vài chục triệu user nên anh không liệt kê thêm.

 

Chú để ý là anh chỉ dùng những web server/load balancer rất phổ biến như Apache httpd, nginx, HAProxy, những application server rất bình thường như Tomcat, PhusionPassenger, mongrel, Erlang BEAM VM, Puma ...etc... chạy trên Linux, không có gì fancy, mà cũng chỉ dùng 2 hoặc 3 machine / container để serve hàng chục triệu user.

 

*** Các hệ thống của các bọn công ty lớn khác, cả công ty công nghệ lẫn công ty kinh doanh, dịch vụ, khi chạy phải dùng rất nhiều virtual machine / container, phải hàng trăm, có khi hàng ngàn, hàng chục ngàn, để serve những load / concurrent thấp hơn những hệ thống anh kể ở trên nhiều.

 

Lý do thực ra rất đơn giản:

 

- Thiết kế database phò.

- Thiết kế component phò.

- Viết code phò.

 

Chả có cái mẹ gì đao to búa lớn như chúng nó vẫn đổ cho network latency, database latency với những thứ tương tự, thay vì thú nhận sự ngu xuẩn của bản thân mình.

Chúng nó chưa hề optimize và squeeze hết khả năng của code, software và hardware, mà đã nghĩ đến những thứ fancy như horizontal scale, auto-scaling, asynchronous processing, queuing, background jobs ...etc...

 

Tất nhiên là anh có dùng cả những thứ fancy kia trong những hệ thống vô cùng lớn như Cisco IoT hay Smart Licensing, hoặc một vài hệ thống cần fast, realtime control như hệ thống Virtual Workspace cho kỹ sư của Airbus ngồi ở Pháp và kỹ sư Rolls Royce ngồi ở Anh cùng làm việc realtime để thiết kế động cơ máy bay Airbus, hoặc hệ thống Remote Visual Therapy, dùng AI giúp bác sĩ detect khung xương và vận động của bệnh nhân điều trị physical therapy từ xa, qua webcam hoặc cellphone camera.

 

Còn bọn khác, vì chúng nó muốn giấu sự ngu xuẩn trong design, viết code và deployment, mặc dù hệ thống chả có gì gớm, thì an toàn nhất là quay ra dùng tool của bọn cloud provider và bọn deep, rồi có gì đổ mẹ cho tool và các công ty làm tool, khỏi chịu trách nhiệm. Tiền thì của công ty chứ của mình đéo đâu mà tiếc. Lâu lâu về sau nữa, thế hệ kỹ sư trẻ bây giờ chỉ còn biết mỗi tool, không biết khoa học cơ bản nữa, càng không có khả năng suy nghĩ và build tool của mình.

 

Thế kỷ trước, giới kinh doanh và công nghệ Mỹ có câu đùa "Nobody gets fired for choosing IBM", nghĩa là "Không có ai bị đuổi vì chọn sản phẩm của IBM". Trong khi đó các sản phẩm enterprise hardware lẫn enterprise software của IBM rất phò, ví dụ như máy mini AS400, WebSphere application server, hệ điều hành AIX, OS/2, IBM DB2 ...etc... và nhiều thứ ngu xuẩn khác.

Nhưng bọn sếp và nhân viên các công ty khách hàng vẫn mua đồ IBM, vì có gì còn đổ tội cho IBM và không bị đuổi việc.

 

Thế kỷ này, có khi câu đó phải đổi thành "Nobody gets fired for choosing AWS" (hoặc GCP, hoặc thô bỉ nhất là Azure). 

Và có thể liệt kê thêm tool nữa: "Nobody gets fired for using K8s" ...etc...

 

 

________

 

Đọc thêm:

 

DevOps is a huge Scam

 

Phiếm đàm về Cloud và DevOps