Làm cho việc phát triển phần mềm trở nên xanh hơn | Máy tính hàng tuần

  • Post category:computer


Nhu cầu phát triển phần mềm hiện đại có nghĩa là các lập trình viên đang được yêu cầu viết nhiều mã hơn và cung cấp chức năng mới nhanh hơn bao giờ hết. Câu ngạn ngữ “không phát minh lại bánh xe” đã đưa ra nhiều lối tắt mà họ cần để phân phối mã một cách nhanh chóng và trong hầu hết các trường hợp là đáng tin cậy.

Thay vì viết một cái gì đó từ đầu, một nhà phát triển phần mềm buộc phải tìm thứ gì đó phù hợp trong thư viện lập trình hoặc kho lưu trữ mã nguồn. Ngày nay, các nhà phát triển cũng có tùy chọn tận dụng sức mạnh có trong microservice.

Shaun O’Meara, giám đốc công nghệ tại Mirantis giải thích: “Trước đây, bạn thường có một nhà phát triển hoặc một nhóm nhỏ các nhà phát triển phát triển các dịch vụ vi mô thay đổi hoàn toàn mối quan hệ giữa nhà phát triển phần mềm và mã cần thiết để đạt được chức năng mong muốn. mọi thành phần của hệ thống, mỗi thành phần đồng ý làm việc trên các thành phần khác nhau.”

Ông nói, nhóm phải xây dựng mọi thứ từ đầu, nhưng khi có sẵn thư viện phần mềm, nhà phát triển có thể tận dụng chức năng dựng sẵn. Thay đổi lớn với microservice là tâm lý của các nhà phát triển phần mềm đã thay đổi – giờ đây họ có thể sử dụng công việc do người khác phát triển và có thể đạt được mức tăng năng suất lớn bằng cách làm điều này.

Ông nói, tác động là mã sử dụng microservice có xu hướng tiêu thụ lượng cơ sở hạ tầng CNTT lớn hơn so với mã được phát triển theo kiểu truyền thống hơn.

Sự gia tăng của sự kém hiệu quả trong mã hóa

Sự kém hiệu quả hiện nay là điều phổ biến trong phát triển phần mềm. Andy Powell, giám đốc công nghệ tại Đại học Canterbury Christ Church, cho biết: “Các công cụ hiện đại đã khiến con người trở nên lười biếng. “Khi tôi viết trang web – đó là trước khi .Net xuất hiện và trong ASP cổ điển (các trang máy chủ đang hoạt động) – bạn phải viết tất cả các đối tượng của riêng mình.”

Khi mọi người thường truy cập các trang web thông qua kết nối modem quay số, băng thông thấp, anh ấy nói: “Bạn phải lưu ý về kích thước của hình ảnh, biểu định kiểu và kích thước trang; bạn phải ý thức được lượng dữ liệu bạn đang gửi xuống đường truyền vì thời gian tải rất quan trọng.”

Đối với Powell, từ góc độ phát triển ứng dụng, điều này có nghĩa là các nhà phát triển đã cân nhắc tính hiệu quả của mã. Ông nói: “Bạn phải thực sự hiệu quả với lớp cơ sở dữ liệu và lớp API (giao diện lập trình ứng dụng) của mình.

Các truy vấn tới các hệ thống giao dịch được viết theo cách trả về tập hợp dữ liệu khả thi tối thiểu, trong khi hiện tại, ông nói: “Bạn nhận được 100.000 bản ghi hoặc bộ dữ liệu và bạn tiếp tục chọn những gì bạn muốn từ (tập dữ liệu) này trong bộ nhớ vì bộ nhớ đã trở nên quá rẻ.”

Xử lý sự phình to của mã

Ngày nay, các nhà phát triển coi băng thông gần như là một nguồn tài nguyên và sức mạnh xử lý không giới hạn, đồng thời bộ nhớ và dung lượng lưu trữ rẻ và dồi dào. Điều này đã dẫn đến sự phình to của mã, trong đó các nhà phát triển không còn tập trung vào việc viết phần mềm chạy hiệu quả nhất có thể và sử dụng ít dung lượng lưu trữ, bộ nhớ và sức mạnh xử lý nhất.

Mav Turner, giám đốc chiến lược và sản phẩm tại Tricentis, chỉ ra rằng tình trạng phình to mã thường xuất phát từ một số nguyên nhân, chẳng hạn như cú pháp quá dài dòng, các tính năng dư thừa hoặc không được sử dụng cũng như thiếu tối ưu hóa trong quá trình phát triển. Ngoài ra, ông cho biết các cơ sở mã cũ có thể tích lũy nợ kỹ thuật theo thời gian, dẫn đến việc triển khai cồng kềnh và phức tạp.

Tuy nhiên, như Turner giải thích: “Bằng cách áp dụng các phương pháp mã hóa sạch, nguyên tắc thiết kế mô-đun và tái cấu trúc thường xuyên, các nhà phát triển có thể giảm thiểu tình trạng cồng kềnh mã và duy trì các cơ sở mã gọn gàng hơn, dễ quản lý hơn”.

Các nhà lãnh đạo CNTT cần xem xét các yếu tố và động lực khiến các nhà phát triển mã viết kém hiệu quả hơn. “Không ai có ý định để mã trở nên cồng kềnh. Các nhà phát triển không cố gắng hủy hoại môi trường,” Maurice Kalinowski, giám đốc sản phẩm tại Qt, cho biết.

Tuy nhiên, như Kalinowski lưu ý, có rất nhiều yếu tố gây ra sự thiếu hiệu quả ngoài ý muốn. Lấy một ví dụ, ông nói: “Rất thường xuyên, các nguyên mẫu kết thúc trong một sản phẩm do áp lực về thời gian buộc các nhóm phát triển phải thực hiện chu kỳ phân phối ngắn. Điều này dẫn đến nợ kỹ thuật sau này trong vòng đời phát triển, và điều này lại gây ra tác động dây chuyền làm tổn hại đến hiệu quả.”

Theo Kalinowski, điều quan trọng là phải xem xét lĩnh vực ứng dụng và trường hợp sử dụng mã đang được phát triển. “Nếu bạn đang phát triển mã cho ‘mục đích chung’, dữ liệu đầu vào có cần kiểm tra ngữ nghĩa không? Mã có bao gồm tất cả các tình huống có thể xảy ra, bao gồm cả những tình huống có thể không bao giờ xảy ra không?”

Ngay cả mã hiệu quả cao cũng có thể gặp phải các trường hợp sử dụng bổ sung cần kiểm tra và xử lý khác. Kalinowski cảnh báo, điều này dẫn đến ngày càng nhiều trường hợp mã được viết để hỗ trợ các ngoại lệ này. Khi những thứ này tích tụ, mã đạt đến điểm mà các lợi ích về hiệu suất được thiết kế ban đầu có thể đã bị mất đi.

Kalinowski nói rằng các nhà lãnh đạo CNTT nên xem xét việc tái cấu trúc những phần mã bị cồng kềnh. “Tất nhiên, trước tiên bạn cần phải biết dự án nào của mình đang quá tải. Đây là lúc rất nhiều công cụ dành cho nhà phát triển phát huy tác dụng, như phân tích mã tĩnh và động, lập hồ sơ và lấy mẫu nâng cao,” ông nói thêm.

Sự thiếu hiệu quả trong thử nghiệm

Turner của Tricentis kêu gọi những người ra quyết định về CNTT áp dụng phương pháp phát triển dựa trên thử nghiệm (TDD) như một phương pháp CNTT bền vững. Theo kinh nghiệm của mình, TDD đưa ra một kỹ thuật mạnh mẽ có thể góp phần đáng kể vào việc tạo ra mã xanh, đặc trưng bởi chất lượng và hiệu quả cao hơn.

Turner cho biết: “Bằng cách nhấn mạnh việc tạo các thử nghiệm trước khi viết mã, TDD đảm bảo rằng các nhà phát triển hiểu rõ về hành vi và chức năng mong đợi của mã của họ ngay từ đầu”.

Nhìn vào thử nghiệm trong quá trình phát triển ứng dụng, Ved Sen, người đứng đầu bộ phận đổi mới tại TCS Vương quốc Anh và Ireland, cho biết các nhà lãnh đạo CNTT cũng nên xem xét tác động môi trường của thử nghiệm hồi quy.

Ông nói: “Khi bạn chạy thử nghiệm hồi quy, cuối cùng bạn phải thử đi thử lại rất nhiều thứ chỉ để xem liệu chương trình có bị hỏng hay không. “Nhưng mỗi khi bạn thực hiện kiểm tra hồi quy, bạn đang tiêu tốn nhiều tài nguyên hơn và mỗi tài nguyên đó đều tạo ra một chút dấu chân carbon.”

Theo Sen, có thể xây dựng các cách thử nghiệm thông minh hơn để các nhà phát triển không cần phải thử đi thử lại cùng một trường hợp sử dụng.

Sen chỉ ra rằng nếu các nhà phát triển phần mềm tránh thực hiện thử nghiệm cưỡng bức, họ có thể giảm dấu chân của môi trường phát triển và thử nghiệm CNTT xuống một lượng nhỏ nhưng đáng kể, điều này tích lũy sẽ tạo ra tác động lớn hơn trong việc làm cho CNTT xanh hơn và ít thải carbon hơn.

Ngoài mã hóa, các nhà lãnh đạo CNTT cũng có thể xem xét việc giải quyết tác động môi trường tổng thể của môi trường thử nghiệm và phát triển phần mềm mà các nhà phát triển của họ yêu cầu.

Phát biểu tại KubeCon + CloudNativeCon ở Paris vào tháng 3, Gualter Barbas Baptista, cố vấn chính về chiến lược và hỗ trợ nền tảng tại Deutsche Bahn, đã thảo luận về những nỗ lực không ngừng của nhà điều hành đường sắt nhằm giám sát và giảm thiểu tác động sinh thái của các ứng dụng dựa trên đám mây. Baptista đã nói về việc trao quyền cho nhà phát triển, mô tả các nhà phát triển phần mềm là “những người ra quyết định hàng ngày một cách hiệu quả” về những gì được đưa vào phần mềm.

Ông nói: “Nếu chúng tôi không thu hút các nhà phát triển và cung cấp cho họ các công cụ, chúng tôi sẽ không thể tạo ra sự thay đổi trong cách chúng tôi phát triển mã và cách chúng tôi quản lý cơ sở hạ tầng”.

Trong vài năm qua, Deutsche Bahn đã tập trung vào việc tập hợp toàn bộ các công ty con để thực thi tiêu chuẩn hóa. Ông nói, điều này có nghĩa là “chúng tôi có thể tận dụng các hiệu ứng và cung cấp mức độ tiêu chuẩn hóa cao hơn”.

Kubernetes là công cụ xây dựng nền tảng được sử dụng tại Deutsche Bahn. Việc giám sát cho phép quản trị viên CNTT xem việc sử dụng bộ xử lý và tự động điều chỉnh khối lượng công việc của bộ chứa, tối ưu hóa chúng theo nhu cầu của khối lượng công việc.

Việc lập lịch cũng đang được sử dụng để giúp Deutsche Bahn đảm bảo môi trường dành cho nhà phát triển và thử nghiệm có thể chuyển sang chế độ ngủ khi nhà phát triển không làm việc, giúp tiết kiệm năng lượng xử lý.

Xanh hóa AI

Bối cảnh CNTT không ngừng phát triển, điều đó có nghĩa là tính bền vững của CNTT là mục tiêu luôn chuyển động. Trong một cuộc thảo luận tại sự kiện KubeCon + CloudNativeCon, Chuck Dubuque, người đứng đầu bộ phận tiếp thị sản phẩm trực tiếp cho OpenShift tại RedHat, đã cảnh báo rằng trí tuệ nhân tạo (AI) đang đưa Kubernetes đến một nơi nào đó mà trước đây nó chưa từng đến.

Ông nói: “Khi bạn thêm AI vào một ứng dụng, bạn sẽ tăng mức sử dụng năng lượng của nó lên gấp 10 lần.

Nhìn vào các phương pháp làm cho AI xanh hơn, Oliver King-Smith, Giám đốc điều hành của SmartR AI, cho biết các nhà nghiên cứu đang phát triển các phương pháp hiệu quả để tạo và sử dụng AI, chẳng hạn như tái sử dụng mô hình, mô hình ReLora, Hỗn hợp các chuyên gia (MoE) và lượng tử hóa.

Thảo luận về việc tái sử dụng mô hình, King-Smith cho biết kỹ thuật này bao gồm việc đào tạo lại một mô hình đã được đào tạo cho mục đích mới, tiết kiệm thời gian và năng lượng so với đào tạo lại từ đầu. Ông nói: “Cách tiếp cận này không chỉ bảo tồn tài nguyên mà còn thường mang lại những mô hình hoạt động tốt hơn”. “Cả Meta và Mistral đều rất giỏi trong việc phát hành các mô hình có thể tái sử dụng.”

Nhìn vào ReLora và Lora, King-Smith cho biết chúng được thiết kế để giảm số lượng tính toán cần thiết khi đào tạo lại các mô hình cho mục đích sử dụng mới. Điều này giúp tiết kiệm năng lượng và cho phép sử dụng các máy tính nhỏ hơn, ít ngốn điện hơn. “Điều này có nghĩa là thay vì dựa vào các hệ thống lớn, tiêu tốn nhiều năng lượng như DGX của Nvidia, một card đồ họa khiêm tốn thường có thể đủ để đào tạo lại,” ông nói.

Các mẫu MoE, chẳng hạn như những mẫu do Mistral phát hành gần đây, có ít thông số hơn các mẫu thông thường. King-Smith cho biết điều này dẫn đến việc tính toán ít hơn và giảm mức tiêu thụ năng lượng. “Các mẫu MoE chỉ kích hoạt các khối cần thiết khi sử dụng, giống như tắt đèn ở những phòng không sử dụng, giúp giảm 65% mức sử dụng năng lượng.”

King-Smith mô tả lượng tử hóa là một kỹ thuật làm giảm kích thước của các mô hình AI. “Bằng cách lượng tử hóa một mô hình, số lượng bit cần thiết để biểu diễn từng tham số sẽ giảm đi. Điều này làm giảm kích thước mô hình, cho phép sử dụng phần cứng ít mạnh hơn và tiết kiệm năng lượng hơn,” ông nói.

Trong khi lượng tử hóa có thể có tác động nhỏ đến độ chính xác của mô hình, King-Smith khẳng định rằng đối với nhiều ứng dụng thực tế, sự đánh đổi này là không đáng kể.

Việc giải quyết vấn đề phình to mã và các mức độ kiểm tra hồi quy không cần thiết giúp làm cho việc viết mã trở nên xanh hơn. Ngoài ra còn có các tùy chọn để sử dụng các vi dịch vụ hoặc thuật toán hiệu quả hơn. Nhưng sự đồng thuận chung giữa các chuyên gia trong ngành là rất khó để thay đổi điều gì đó mà các nhà phát triển phần mềm đã quen thuộc.

O’Meara của Mirantis nhìn thấy cơ hội giải quyết vấn đề CNTT xanh trong phát triển phần mềm từ góc độ cơ sở hạ tầng CNTT. Ông nói: “Nếu chúng tôi có thể loại bỏ sự phức tạp và chỉ cung cấp các thành phần cơ sở hạ tầng CNTT cần thiết thì chúng tôi có thể tạo ra một lớp mỏng trên tất cả cơ sở hạ tầng CNTT”.

Kubernetes cũng có thể được sử dụng để đảm bảo môi trường thử nghiệm và phát triển phần mềm không sử dụng tài nguyên CNTT một cách không cần thiết.

Những kỹ thuật như vậy cho phép cơ sở hạ tầng CNTT nhẹ và tiết kiệm năng lượng. Một kỹ thuật tương tự, như Kalinowski của Qt đã chỉ ra, có thể được sử dụng trong mã hóa để giảm số lượng các tình huống khác nhau dẫn đến các ngoại lệ mà mã đang được phát triển cần xử lý.

Trả lời