Lilotech

Làm thế nào để trở thành một kỹ sư hiệu suất phần mềm khác biệt?

Làm thế nào để trở thành một kỹ sư hiệu suất phần mềm khác biệt?

Làm thế nào để trở thành một kỹ sư hiệu suất phần mềm khác biệt? là bản dịch của bài viết How to become an exceptional Performance Engineer?  của Sandeep Deshmukh.  Tiến sĩ Sandeep Deshmukh là người sáng lập và CEO tại Workship . Ông có bằng tiến sĩ từ IIT Bombay, và đã làm việc trong Big Data,  Hadoop ecosystem, Distributed Systems, AI / ML,... trong hơn 12 năm. Ông đã từng là giám đốc kỹ thuật tại DataTorrent và nhà khoa học dữ liệu của Reliance Industries.

Bài viết được đăng trên packtpub vào ngày 14 tháng 12 năm 2019 với nội dung sau:

 

Bất cứ khi nào tôi nghĩ về kỹ thuật hiệu suất, tôi đều nhắc đến tuyên bố của CEO Jeff Bezos của Amazon: ”Tập trung vào khách hàng làm cho một công ty trở nên bền bỉ hơn”. Bất kỳ công ty nào theo phương pháp tập trung vào người tiêu dùng này đều có lĩnh vực kỹ thuật hiệu suất, mặc dù ở khả năng và hình thức khác nhau.

 

Kết nối internet rất đơn giản. Ngày càng có nhiều doanh nghiệp kinh doanh dựa trên web, có thể nói họ đang tương tác với khách hàng của họ bằng kỹ thuật số. Trong xu thế như vậy, họ phải cho khách hàng  trải nghiệm dịch vụ khác biệt, họ phải xây dựng các hệ thống và ứng dụng web có sức bật, ổn định, tập trung vào người dùng và hiệu suất cao. Và để làm điều đó, họ cần kỹ thuật hiệu suất.

 

Kỹ thuật hiệu suất là gì?

Hãy để tôi giải thích kỹ thuật hiệu suất với một ví dụ. Giả sử, nhóm của bạn đang xây dựng một cổng mua sắm trực tuyến. Các nhà phát triển ứng dụng sẽ xây dựng một hệ thống cho phép mọi người truy cập các sản phẩm và mua chúng. Họ sẽ đảm bảo rằng toàn bộ giao dịch được thông suốt, không phức tạp cho người dùng và có thể được thực hiện nhanh chóng.

 

Bây giờ hãy tưởng tượng rằng để quảng bá cổng thông tin, bạn thực hiện flash sale, cho nên 1000 người dùng nền tảng và bắt đầu thực hiện giao dịch cùng một lúc. Và rồi hệ thống của bạn, dưới lưu lượng tải này, bắt đầu hoạt động chậm hơn, rất nhiều giao dịch thất bại và người dùng của bạn bị từ chối giao dịch. Điều này ảnh hưởng trực tiếp đến hình ảnh thương hiệu, lòng trung thành của khách hàng và doanh thu của bạn.

 

Làm thế nào về chúng tôi sửa lỗi này trước khi một tình huống như vậy xảy ra? Đó là chính xác những gì kỹ thuật hiệu suất đòi hỏi. Một kỹ sư hiệu suất về cơ bản sẽ tính đến các kịch bản như vậy và tiến hành các thử nghiệm tải và kiểm tra hiệu năng của hệ thống trong giai đoạn phát triển. Bài kiểm tra tải kiểm tra hành vi của hệ thống của bạn trong các tình huống cụ thể. Tình huống liên quan đến “tải” xảy ra có thể ảnh hưởng đến hệ thống, ví dụ như ưu đãi giảm giá hoặc thời gian cao điểm. Nếu hệ thống có thể xử lý tải, kỹ sư hiệu suất sẽ kiểm tra xem nó có khả năng mở rộng không. Nếu hệ thống không thể xử lý tải, họ sẽ phân tích kết quả, tìm ra điểm gây nghẽn bằng cách kiểm tra mã và cố gắng khắc phục nó.

 

Vì vậy, với ví dụ trên, một kỹ sư hiệu suất sẽ kiểm tra hệ thống cho 100 giao dịch cùng một lúc, sau đó 500, rồi 1000 và thậm chí có thể lên tới một trăm nghìn.

 

Do đó, kỹ thuật hiệu suất đảm bảo hệ thống, phần mềm hoặc ứng dụng vận hành không có sự cố. Sử dụng các quy trình và kỹ thuật, thực hành và hoạt động có hệ thống, một kỹ sư hiệu suất đảm bảo rằng các yêu cầu về hiệu suất được đáp ứng trong chu kỳ phát triển.

 

Tuy nhiên, đây không phải là nhiệm vụ cố định. Nó sẽ thay đổi với lĩnh vực hoạt động của bạn. Công việc của một kỹ sư hiệu suất làm việc trên một ứng dụng web sẽ khác rất nhiều so với công việc của một kỹ sư hiệu suất cơ sở dữ liệu hoặc của một kỹ sư hiệu suất phát trực tuyến. Đối với mỗi trường hợp này, tải của bạn sẽ khác nhau nhưng mục tiêu của bạn là như nhau, đảm bảo rằng hệ thống của bạn đủ khả năng chịu được tải đó.

 

Trước khi tôi đi sâu hơn vào vai trò của một kỹ sư hiệu suất, tôi muốn làm rõ sự khác biệt giữa người kiểm tra hiệu suất (Performance Tester) và kỹ sư hiệu suất (Performance Engineer). (Vâng, hai vai trò không giống nhau!)

 

Người kiểm tra hiệu suất so với kỹ sư hiệu suất

Vâng, nhiều người nghĩ rằng 2-3 năm kinh nghiệm làm người kiểm tra hiệu suất có thể dễ dàng mang lại cho bạn một công việc kỹ thuật hiệu suất. Ồ không. Đó là một hành trình dài, đòi hỏi nhiều kiến ​​thức hơn những gì một người kiểm tra có.

 

Một người kiểm tra hiệu suất sẽ có kiến ​​thức kiểm tra và sẽ biết về phân tích hiệu suất và các khái niệm giám sát hiệu suất trên các ứng dụng khác nhau. Về cơ bản, họ sẽ tiến hành một thử nghiệm tải của người dùng để kiểm tra hiệu năng, tính ổn định và khả năng mở rộng của hệ thống và tạo ra các báo cáo nhằm chia sẻ với nhà phát triển để họ làm việc. Công việc của họ kết thúc ở đây. Nhưng đây không phải là trường hợp của một kỹ sư hiệu suất.

 

Một kỹ sư hiệu suất sẽ tìm kiếm nguyên nhân cốt lõi của vấn đề hiệu năng, hướng tới việc tìm giải pháp khả thi cho nó, sau đó điều chỉnh và tối ưu hóa hệ thống để sắp xếp vấn đề đã nói cho đến khi các thông số hiệu suất được đáp ứng.

 

Nói một cách đơn giản, kiểm tra hiệu suất có thể được coi là một phần của kỹ thuật hiệu suất nhưng không giống nhau.

 

Vai trò và trách nhiệm của một kỹ sư hiệu suất

Thiết kế các bài kiểm tra hiệu quả

Là một kỹ sư hiệu suất, nhiệm vụ đầu tiên của bạn là thiết kế một bài kiểm tra hiệu quả để kiểm tra hệ thống. Tôi tìm thấy danh sách kiểm tra này trên Dzone thực sự hữu ích cho việc thiết kế các bài kiểm tra:

 

Xác định mục tiêu, yêu cầu, mong muốn, mô hình khối lượng công việc và các bên liên quan.
Hiểu cách kiểm tra đồng thời, tỷ lệ truy cập và lên lịch.
Hiểu vai trò của khả năng mở rộng, sức tải và độ tin cậy cũng như các thuộc tính và yêu cầu chất lượng.
Hiểu cách thiết lập / tạo dữ liệu thử nghiệm và quản lý dữ liệu.

 

Viết script, chạy thử và phiên dịch kết quả

Có một số công cụ kiểm tra hiệu suất có sẵn trên thị trường. Nhưng bạn sẽ phải làm việc với các ngôn ngữ khác nhau tùy vào công cụ bạn sử dụng. Chẳng hạn, bạn phải xây dựng thử nghiệm của mình bằng C và Javascript khi làm việc với công cụ Microfocus Loadrunner. Tương tự, ngôn ngữ Java và Javascript cho Apache JMeter. Khi bài kiểm tra của bạn đã sẵn sàng, bạn sẽ chạy bài kiểm tra đó trên hệ thống của mình. Hãy chắc chắn rằng bạn sử dụng các số liệu nhất quán trong khi chạy các thử nghiệm này, nếu không kết quả của bạn sẽ không chính xác. Cuối cùng, bạn sẽ diễn giải những kết quả đó. Trong phần này, bạn phải tìm ra những điểm nghẽn và vị trí của chúng. Vì thế, bạn sẽ phải đọc kết quả và phân tích biểu đồ mà công cụ kiểm tra hiệu suất của bạn đã tạo ra và đưa ra kết luận.

 

Tinh chỉnh và tối ưu hóa hiệu suất

Một khi bạn biết chỗ nghẽn, bạn sẽ phải tìm một giải pháp để khắc phục nó nhằm nâng cao hiệu suất của hệ thống mà bạn đang thử nghiệm. (Điều mà người kiểm tra hiệu suất sẽ không làm!) Nhiệm vụ của bạn là đảm bảo rằng hệ thống / ứng dụng được tối ưu hóa đến mức mà nó hoạt động tối ưu ở mức tải tối đa. Tất nhiên, bạn có thể tìm kiếm sự trợ giúp từ nhà phát triển hệ thống/ ứng dụng (backend, frontend hoặc full-stack) (1) làm việc trong dự án để tìm ra giải pháp. Nhưng là một kỹ sư hiệu suất, bạn phải tham gia tích cực vào quá trình tinh chỉnh và tối ưu hóa này.

 

Có bốn kỹ năng / thuộc tính chính giúp phân biệt một kỹ sư hiệu suất đặc biệt so với một kỹ năng bình thường khác.

 

Chứng tỏ rằng kết quả tải của họ có thể mở rộng

Nếu bạn là một kỹ sư hiệu suất giỏi, bạn sẽ không phục vụ một bữa ăn nửa chín. Trước hết, hãy xem xét tất cả các khả năng. Lấy ví dụ về cùng một cổng mua sắm trực tuyến. Nếu bạn đang xem xét kiểm tra tải cho 1000 giao dịch đồng thời, hãy xem xét nó cho cả hai trường hợp trong đó các giao dịch đang diễn ra cho các sản phẩm khác nhau hoặc khi nó xảy ra cho cùng một sản phẩm. Nếu cổng thông tin của bạn thực hiện bán giảm giá cho một sản phẩm độc quyền, có sẵn, trong một thời gian giới hạn, có thể sẽ có quá nhiều người cố gắng mua nó cùng một lúc. Hãy tự hỏi liệu hệ thống của bạn có thể chịu được tải đó không?

 

Chứng minh rằng kết quả tải của họ là bền vững

Không chỉ vậy, bạn cũng nên xem xét liệu kết quả của bạn có bền vững trong một khoảng thời gian xác định hay không. Hệ thống nên hoạt động mà không gặp sự cố. Một bài kiểm tra tải thường được đề nghị chạy trong 30 phút. Mặc dù ba mươi phút sẽ đủ để phát hiện hầu hết các thay đổi hiệu suất mới, nhưng để làm cho các thử nghiệm này hợp pháp, cần phải chứng minh rằng chúng có thể chạy trong ít nhất hai giờ ở cùng một tải. Thời lượng này có thể khác nhau đối với các chương trình / hệ thống / ứng dụng khác nhau.

 

Sử dụng điểm chuẩn

Một điểm chuẩn về cơ bản là một điểm tham chiếu dựa trên đó bạn có thể so sánh và đánh giá hiệu suất của hệ thống của mình. Đó là một tiêu chuẩn được thiết lập để bạn có thể kiểm tra chất lượng sản phẩm / ứng dụng / hệ thống của mình. Đối với một số hệ thống, như cơ sở dữ liệu, điểm chuẩn có sẵn để bạn kiểm tra. Là một kỹ sư hiệu suất, bạn phải nhận thức được các điểm chuẩn hiệu suất trong lĩnh vực / miền của bạn. Ví dụ, bạn sẽ phải tìm điểm chuẩn để kiểm tra tường lửa, cơ sở dữ liệu và hệ thống lập trình từ đầu đến cuối. Các khung điểm chuẩn được sử dụng phổ biến nhất là Benchmark Framework 2.0  và TechEmpower .

 

Hiểu hành vi của người dùng

Nếu bạn không hiểu về phản ứng của người dùng trong các tình huống khác nhau, bạn không thể thiết kế thử nghiệm tải hiệu quả. Một kỹ sư hiệu suất giỏi sẽ biết nhân khẩu học, hiểu hành vi chính và biết cách người dùng sẽ tương tác với hệ thống. Tuy nhiên, mặc dù không thể dự đoán hoàn toàn hành vi của người dùng, việc bán hàng có thể dẫn đến 100.000 giao dịch mỗi giờ đến 100 giao dịch mỗi giờ, bạn nên kiểm tra thống kê người dùng, phân tích hoạt động của người dùng, tiến hành và chuẩn bị hệ thống của bạn để  nó tối ưu hóa việc sử dụng.

 

Nói chung, bên cạnh các kỹ năng chuyên môn điêu luyện, là một kỹ sư hiệu suất, bạn phải luôn có tầm nhìn xa trông rộng. Bạn phải có khả năng nhìn xa hơn những gì mắt người có thể nhìn thấy và nắm bắt những điểm người khác bỏ lỡ. Vai trò này luôn luôn đòi hỏi rất nhiều Kỹ năng chuyên môn. Nhưng nó cũng đòi hỏi các kỹ năng khác như giải quyết vấn đề, chú ý đến chi tiết và sâu sắc.

Nhà phát triển Front End là người tập trung tập trung vào mảng phát triển xây dựng giao diện và trải nghiệm cho người dùng.

Nhà phát triển Back End là người xử lý mọi logic nghiệp vụ phức tạp ở ẩn ở phía sau, giúp cho hệ thống hoạt động trơn tru.

Full Stack là làm đủ cả Front End lẫn Back End.

Yến Nhi dịch