Tiểu dịch vụ - Xu hướng phát triển ứng dụng doanh nghiệp

  • SMAC - Xu thế hội tụ công nghệ và nền tảng mới
  • Sự phát triển điện toán đám mây Azure ở Việt Nam
  • Windows Server 2016: Đột phá về bảo mật đám mây
  • 12 rủi ro bảo mật của dịch vụ đám mây
  • Điện toán đám mây lai

Trong xu hướng phát triển của nền kinh tế kỹ thuật số, việc doanh nghiệp tạo các ứng dụng sử dụng dịch vụ luôn là nhu cầu cấp thiết. Doanh nghiệp sẽ phải làm gì với các ứng dụng mới, lập trình từ đầu hay sử dụng các API có sẵn? Ngoài việc tiện lợi cũng như yêu cầu phát triển nhanh chóng thì doanh nghiệp còn đòi hỏi những hiệu quả kinh tế khi mở rộng quy mô cũng như dịch vụ của mình.

Trước đây, doanh nghiệp thường sử dụng các mẫu kiến trúc ứng dụng một khối (Monolithic) hay hướng dịch vụ (Service Oriented Architecture - SOA). Trong đó Monolithic tích hợp các dịch vụ, thuật toán..  vào một khối tổng thể để từ đó dễ dàng phát triển các ứng dụng nhỏ khác. Tuy nhiên hệ thống này quá cồng kềnh và rất khó khăn trong việc thay đổi công nghệ. SOA cũng là một hệ thống lớn tương tự Monolithic nhưng các dịch vụ được phát triển độc lập. Kiến trúc cũng rất phiền toái khi một trong các dịch vụ bị lỗi và khả năng mở rộng gặp nhiều hạn chế.

Từ những vấn đề nan giải trên, liệu doanh nghiệp có thể xây dựng và duy trì ứng dụng dễ dàng hơn khi chúng được chia thành các ứng dụng nhỏ kết nối với nhau? Đó là lý do tại sao kiến trúc tiểu dịch vụ (Microservice) ra đời, đây là những chương trình nhỏ truy cập qua API và đơn năng. Chúng được triển khai ở mức độ cơ bản và có thể tái sử dụng cho nhiều mục đích khác nhau.

Những người ủng hộ Microservice cho rằng kiến trúc này cho phép doanh nghiệp tạo ra các ứng dụng linh hoạt, khả năng mở rộng nhanh hơn và đẩy nhanh quá trình phát triển. Nhiều tập đoàn như Amazon, eBay, Netflix đã giải quyết vấn đề ứng dụng một khối bằng kiến trúc Microservice với ý tưởng là chia nhỏ ứng dụng lớn ra thành các dịch vụ nhỏ kết nối với nhau.

Mỗi dịch vụ nhỏ thực hiện một tập các chức năng chuyên biệt như quản lý đơn hàng, quản lý khách hàng... Mỗi dịch vụ là một ứng dụng nhỏ có kiến trúc đa diện lõi có thể  kết nối với bộ phận chuyển đổi khác nhau. Khi vận hành, mỗi dịch vụ nhỏ được chạy trong một máy ảo (virtual machine) hoặc Docker container (ảo hóa tầng ứng dụng).

Mỗi vùng chức năng giờ được thực thi bởi một dịch vụ nhỏ. Ứng dụng web cũng có thể chia nhỏ hơn, tập trung cho từng đối tượng người dùng, nhờ đó thiết kế giao diện người dùng sẽ tối ưu trải nghiệm tốt hơn, tốc độ nhanh hơn, dễ tương thích hơn trong khi chức năng tối giản hơn.

Theo nhà cung cấp máy chủ web NGINX, hiện có tới 68% các tổ chức đang sử dụng hoặc tiếp cận Microservice. Và một nghiên cứu riêng của Evans Data Corporation cho thấy 90% các nhà phát triển đám mây đã và đang sử dụng Microservice trong sản xuất hoặc dự định sẽ làm như vậy trong năm 2017 này.

Tuy nhiên, hãng nghiên cứu Gartner cũng cảnh báo rằng, kiến trúc Microservice cho phép triển khai nhanh và khả năng mở rộng chưa từng thấy, nhưng không phải ai cũng có thể sử dụng chúng. Các nhà phát triển cần hiểu rõ mô hình thiết kế tiểu dịch vụ này, đánh giá các điều kiện sử dụng cũng tác động của chúng vào doanh nghiệp để có thể triển khai một cách hiệu quả. Dưới đây là các giải pháp cũng như công nghệ giúp Microservice cất cánh trong thời gian vừa qua.

Đóng gói – Container

Tính linh hoạt là một trong những lý do chính để doanh nghiệp áp dụng kiến trúc Microservice, nhiều tổ chức chọn triển khai ứng dụng Microservice trong các Container. Trong đó, Container chứa đầy đủ application và tất các các thành phần phụ thuộc nhằm đảm bảo các ứng dụng có thể chạy độc lập.

Công nghệ container hóa, chẳng hạn như Docker cho phép đóng gói một ứng dụng cùng với tất cả các thành phần phụ thuộc của nó. Điều đó cho phép các doanh nghiệp tự do triển khai ứng dụng trên bất kỳ hạ tầng nào mà họ chọn, cũng như khả năng di chuyển dễ dàng giữa các trung tâm dữ liệu và các dịch vụ đám mây khác nhau.

Theo nghiên cứu của hãng Yankee Group, ứng dụng container đạt 762 triệu USD vào năm 2016 và có thể sẽ tăng trưởng lên đến 2,7 tỷ USD vào năm 2020. Và một cuộc điều tra vào đầu năm 2017 do nhà cung cấp phần mềm Portworx thực hiện cho thấy 69 % người được hỏi cho biết các doanh nghiệp của họ đang đầu tư vào container.

Chạy ứng dụng ở quy mô toàn cầu
Spotify có rất nhiều tính năng, bao gồm đăng nhập bằng thông tin mạng xã hội, xem các đề xuất dựa trên các bài hát đã nghe trước đây và chia sẻ âm nhạc… Để tạo ra sự thoải mái cho hơn 60 triệu người dùng Spotify, các tệp nhạc phải tiếp tục phát ngay cả khi phát sinh lỗi ứng dụng, hoặc một trong số hơn 5.000 máy chủ gặp trục trặc.
Để thực hiện việc này, Spotify đã gom từng tính năng độc lập như một dịch vụ Microservice. Việc đóng gói này cho phép Spotify gom các Microservice này lại với nhau để một yêu cầu duy nhất có thể lấy tất cả các thông tin có liên quan và hiển thị nó trong giao diện người dùng cuối mà không phải thực hiện quá nhiều yêu cầu lặp đi lặp lại.

Công cụ điều phối – Orchestration

Orchestration là tập hợp những thứ khác nhau vào một thể thống nhất. Theo ý nghĩa của dàn nhạc cổ điển, bạn có bộ dây và bộ gõ… tất cả đều có bản nhạc riêng. Điều này phụ thuộc vào người điều khiển để đảm bảo mọi người đang chơi đúng vai trò và cách tổ chức chúng để tạo ra sự hài hòa. Triển khai ứng dụng doanh nghiệp không khác một dàn nhạc cổ điển là bao nhiêu.

Một doanh nghiệp có các dịch vụ và phần phụ trợ, cơ sở dữ liệu, giám sát, hệ thống mạng và bộ lưu trữ... Mỗi bộ phận có vai trò riêng của mình với cấu hình và các triển khai riêng và chúng ta không thể chỉ bật công tắc lên cùng một lúc và mong đợi chúng hoạt động chính xác. Những gì doanh nghiệp cần ở đây là một công cụ điều phố để đảm bảo rằng tất cả các tác vụ này vận hành theo đúng thứ tự.

Để quản lý những container vận hành kiến trúc Microservice như trên, nhiều tổ chức cũng triển khai một công cụ điều phối. Phổ biến nhất hiện nay chính là Swarm của Docker và Kubernetes do Google phát triển; Apache Mesos và ZooKeeper cũng là các tùy chọn phổ biến để quản lý và duy trì các ứng dụng Microservice trong môi trường container. Trong một nghiên cứu về 45 ngàn container của nhà cung cấp dịch vụ Sysdig cho biết, hiện có tới 43% trong số đó sử dụng Kubernetes, 9% Mesos và 7% là Docker Swarm.

Được thành lập vào năm 2005, Box cho phép hơn 50 triệu người dùng quản lý nội dung trên đám mây của mình. Box được được thiết kế chủ yếu là chạy trực tiếp trên phần cứng của máy chủ bên trong các trung tâm dữ liệu của công ty, với một mã nguồn PHP nguyên khối. Sam Ghods, người đồng sáng lập và kiến trúc sư dịch vụ của Box cho biết “ khi mở rộng toàn cầu, Box cần phải tập trung vào điều hành khối lượng công việc của mình trên nhiều cơ sở hạ tầng điện toán đám mây khác nhau. Đây là một thách  thức bởi giao diện của chúng rất khác biệt”.
Trong vài năm trở lại đây, Box đã và đang phân rã cơ sở hạ tầng của mình thành nhóm các tiểu dịch vụ, và điều phối chúng bằng công cụ Kubernetes. Theo Sam Ghods,  Kubernetes đã cho phép các nhà phát triển của Box đã tạo ra khái niệm mới về khả năng di động trên tất cả đám mây. Trước khi có Kubernetes, hạ tầng của Box đã mất hơn 6 tháng để triển khai một dịch vụ Microservice mới, còn hiện nay một tiểu dịch vụ chỉ mất chưa đầy 5 ngày để triển khai.

 

Điện toán đám mây

Định hướng cho tính linh hoạt và khả năng mở rộng đã dẫn dắt doanh nghiệp trong việc triển khai kiến trúc Microservice trong đám mây. Amazon, Microsoft Azure, Google App Engine và IBM Bluemix đều đưa ra lời khuyên về việc triển khai ứng dụng Microservice trên nền tảng đám mây của họ. Và OpenShift của Red Hat và nguồn mở OpenStack hỗ trợ các dịch vụ Microservice (và cả container). 

Các dịch vụ điện toán không dùng máy chủ (thường được gọi là giải pháp chức năng như một dịch vụ - function-as-a-service solutions) đặc biệt phổ biến với các nhà phát triển tạo ra các ứng dụng Microservice bởi vì các giải pháp không có server mang lại tính linh hoạt, khả năng mở rộng và tốc độ cao hơn.

Tích hợp và công cụ phân phối liên tục

Nhiều ứng dụng Microservice hiện nay sử dụng các mô hình phát triển phần mềm linh hoạt  Agile hoặc DevOps. Các tổ chức, doanh nghiệp này thường sử dụng công cụ tích hợp liên tục (CI) hoặc phân phối liên tục (CD) trong quá trình phát triển tiểu dịch vụ của mình.

CI liên quan đến việc tự động tích hợp mã mới vào kho lưu trữ chia sẻ ít nhất một lần mỗi ngày và các công cụ CD tự động cung cấp gói phần mềm cho môi trường triển khai.  Hai kỹ thuật này thường được sử dụng cùng nhau trong nhiều ứng dụng quản lý vòng đời và các công cụ tự động hóa. Các công cụ CI / CD phổ biến bao gồm Jenkins, Hudson và Chef.

Tích hợp liên tục (Continuous Integration - CI) là phương pháp phát triển phần mềm đòi hỏi các thành viên trong nhóm tích hợp công việc thường xuyên. Mỗi ngày, các thành viên đều phải theo dõi và phát triển công việc của họ ít nhất một lần. Việc này sẽ được một nhóm khác kiểm tra tự động, nhóm này sẽ tiến hành kiểm thử truy hồi để phát hiện lỗi nhanh nhất có thể. Cả nhóm thấy rằng phương pháp tiếp cận này giúp giảm bớt vấn đề về tích hợp hơn và cho phép phát triển phần mềm gắn kết nhanh hơn
Phân phối liên tục (Continuous delivery - CD) là một cách tiếp cận của kỹ thuật phần mềm, trong đó các đội sẽ sản xuất phần mềm trong chu kỳ ngắn, đảm bảo rằng các phần mềm có thể được phát hành một cách tin cậy bất cứ lúc nào. Nó nhằm mục đích xây dựng, kiểm thử, và phát hành phần mềm nhanh hơn và thường xuyên hơn. Cách tiếp cận này giúp giảm chi phí, thời gian và nguy cơ khi thay đổi bằng cách gia tăng cập nhật các ứng dụng trong sản phảẩm. Một quá trình triển khai đơn giản và lặp lại là điều quan trọng cho Phân phối liên tục.

Giám sát ứng dụng

Ngoài các công cụ để phát triển và triển khai ứng dụng Microservice, nhóm DevOps cũng cần các công cụ để theo dõi hiệu suất của các ứng dụng đó.

Hầu hết các công cụ giám sát ứng dụng ban đầu đều được tạo ra bằng các ứng dụng khối đơn, và không phải tất cả chúng đều thực thi tốt công việc theo dõi cấu trúc của Microservice.

Một số lựa chọn được sử dụng để giám sát Microservice đáng chú ý hiện nay bao gồm Prometheus, Dynatrace, AppDynamics Microservice iQ và Instana.

Hồi năm 2015, hãng công nghệ Karma Mobility chuyên về các thiết bị hotspot Wi-Fi  đã sử dụng giải pháp tiểu dịch vụ để phát triển cửa hàng trực tuyến của mình. Karma khởi đầu bằng một ứng dụng nguyên khối  rồi sau đó chia nhỏ từng phần.
Ví dụ, ứng dụng hoàn chỉnh về cơ bản là một thành phần "cửa hàng"  nhưng Karma chia nhỏ ra thành quy trình xử lý đơn hàng, giao hàng, các dịch vụ theo dõi. Thậm chí giao diện ứng dụng cũng được chia nhỏ thành các dịch vụ.
Việc tách biệt chức năng thành các dịch vụ độc lập làm tăng đáng kể năng suất chung, một phần vì các nhà phát triển không cần nhớ mọi thành phần của một ứng dụng nguyên khối trong đầu khi làm việc. Một lý do chính mà Karma triển khai nền tảng thương mại điện tử của họ trên AWS (Amazon Web Services) là khả năng có thể tự động thu nhỏ, mở rộng quy mô nền tảng để đảm bảo không dịch vụ nào bị tình trạng nghẽn cổ chai.

API

Giao diện lập trình ứng dụng hay API chính là mạch máu của kiến trúc Microservice. Trong một ứng dụng Microservice, mỗi dịch vụ đều có một API cho phép tất cả dịch vụ khác tương tác với nó.

Các  tổ chức, doanh nghiệp có thể mở các API ra bên ngoài, cho phép các nhà phát triển bên thứ ba sử dụng các dịch vụ của mình. Và các nhà phát triển doanh nghiệp cũng thường tích hợp API bên ngoài vào ứng dụng của riêng mình.

Trên thực tế, một số tổ chức sử dụng rất nhiều giao diện lập trình ứng dụng và họ đầu tư thêm một  giải pháp quản lý để giúp phát triển, duy trì và theo dõi các API của mình.

Cổng kết nối API của Netflix - trang cung cấp dịch vụ video trực tuyến, là ví dụ điển hình. Dịch vụ streaming của Netflix có mặt trên hàng trăm các loại hình thiết bị khác nhau từ TV, Smart-box, điện thoại thông minh cho đến hệ thống chơi game, máy tính bảng…
Ngay từ lúc đầu, tham vọng của Netflix là cung cấp một API đa nền tảng cho dịch vụ streaming. Tuy nhiên ý tưởng này hoạt động không hiệu quả vì sự đa dạng các thiết bị.  Ngày nay, Netflix sử dụng một cổng kết nối API cung cấp API tùy chỉnh với các thiết bị khác nhau bằng cách chạy các đoạn mã phù hợp với từng bộ chuyển đổi thiết bị. Bộ chuyển đổi xử lý các lệnh yêu cầu bằng cách truy vấn từ 6-7 dịch vụ nền phía sau. Mỗi ngày cổng giao tiếp API của Netflix xử lý đến hàng tỉ yêu cầu.

 

T8/2018, PC WORLD VN

Nguồn: www.pcworld.com.vn