Microsevices #1 – Sự lựa chọn

13 mins read

Mình dự định viết bài này để chia sẻ các câu chuyện mình (và team) làm Microservice và các chuyện liên quan. Nhưng để kể về câu chuyện thử sai của mình khi làm Microservices tại EGANY thì đúng là có.. quá nhiều thứ để kể, vì vậy mình quyết định chẻ thành nhiều bài viết để các bạn dễ đọc hơn.

Những bài viết mình chia sẻ tới từ trải nghiệm và góc nhìn mà mình tích lũy trong những năm qua, dù còn ít kinh nghiệm nhưng mong là các bạn hứng thú với câu chuyện của mình 😉

Ok, bắt đầu thôi. Mà bắt đầu dĩ nhiên luôn là.. sự lựa chọn, thứ thường làm chúng ta băn khoăn và tốn nhiều thời gian suy nghĩ nhất dù.. chưa làm được gì. Đó cũng là lý do của tiêu đề bài viết này.

Vài lời giới thiệu

Mình tóm ý mình hiểu như vầy, Microservices là một hướng tiếp cận phát triển ứng dụng từ các dịch vụ "nhỏ" – services, với một số đặc điểm sau:

  • Có khả năng kiểm thử và bảo trì cao.
  • Có tính độc lập cao như phát triển độc lập, kiểm thử động lập, triển khai độc lập, mã nguồn độc lập…
  • Được phát triển, bảo trì… bởi một nhóm nhỏ
  • Tập trung vào nghiệp vụ

Để hiểu hơn về microservices bạn có thể đọc thêm:

Trong thời điểm hiện tại, microservice đang được cộng đồng phát triển quan tâm và đang dần trở nên phổ biến. Tuy nhiên trước khi lựa chọn hướng tiếp cận microservices thì các nhà phát triển thường hay ngần ngại với những lý do khác nhau mà họ phải đối mặt. Bên dưới mình có một ví dụ nhỏ nhỏ.

Chuyện họp nhóm thảo luận – Chọn gì đây bây giờ?

Thành viên A: Yo! Hôm nay chúng ta sẽ thảo luận việc nên chọn microservices hay monolithic để phát triển sản phẩm sắp tới của công ty.

Thành viên B: Em có đăng câu hỏi trong các nhóm về lập trình và microservices trên Facebook và được mọi người tư vấn bằng việc đặt lại cho em hàng tá câu hỏi như:

  • Tại sao bạn lại muốn áp dụng microservices?
  • Trình độ đội ngũ có đủ đáp ứng không?
  • Chi phí bạn có thể bỏ ra?
  • Đã thành thục monolithic chưa mà qua microsevices?
  • Có cần thiết phải chuyển sang microservices hay không?
  • Bạn đang dùng dao mổ trâu để giết ruồi.?

Thành viên C: Ừ, có nhiều vấn đề cần quan tâm, nhưng tui là tui vẫn muốn áp dụng microservices cho nó máu.

OK, nghe tí là có vẻ rối rồi đúng không?
Lại đọc tiếp phía dưới xem ông EGANY chọn gì và vì sao chọn nhé.

Lựa chọn tại EGANY

EGANY đã lựa chọn phát triển các sản phẩm của mình theo hướng tiếp cận là microserves. Đã có đề cập đến trong bài viết EGANY Back-End Tech Stack.
Như bạn đọc mô tả ngắn cuộc thảo luận nhóm ở trên, nó cũng giống nhiều nhóm khác mà bạn đã từng chứ? Đúng vậy, khi lựa chọn một giải pháp cho doanh nghiệp (nhất là startup), họ cần phải quan tâm đến nhiều vấn đề khác nhau, làm sao tăng khả năng thành công, tính hiệu quả và đáp ứng được các yêu cầu doanh nghiệp đặt ra.
Vì vậy, khi hỏi có nên hay không nên triển khai theo hướng microservices, thông thường những người có kinh nghiệm thường khuyên các nhóm phát triển ít kinh nghiệm, còn non trẻ, hay công ty nhỏ, startup (nói chung là mấy dạng còn nhỏ bé) là phải cân nhắc cẩn thận khi theo hướng này.
Để triển khai thành công Microservices cần một nền tảng kỹ thuật và kiến thức khá lớn, nếu không thì khả năng thất bại là khá cao.

Sau khi nghe nhiều lời khuyên thì mình thấy các anh nói có lý thiệt, mình nghĩ mọi người có thể cân nhắc nghe theo cho an toàn.

Còn tụi mình.. vẫn chọn làm Microservices ^^.

Vì sao nó phù hợp với team mình thì các bạn đọc tiếp các mục bên dưới.

Tính chất sản phẩm của EGANY

Với sản phẩm SaaS mà EGANY dự định phát triển, được nhận định có các đặc điểm sau:

  • Tốc độ phát triển, thay đổi nhanh
  • Vòng đời có thể ngắn – dài linh hoạt, luôn biến động theo nhu cầu và phản hồi từ người dùng
  • Đa dạng về tính năng, độ phức tạp khác nhau
  • Và mục tiêu sẽ hướng đến thị trường toàn cầu.

Với những đặc điểm trên, để đáp ứng được sự linh hoạt trong việc phát triển, triển khai và vận hành, đồng thời tránh việc phải tiến hành "migrate" sau này từ monolithic sang microservices thì sự lựa chọn microservices có các tiêu chí hợp lý.

Cảm giác mình lúc ngộ ra lúc ấy như "Vàooo… Một cú đánh đầu vào góc cao khung thành" ⚽

Tiềm năng khai phá và sự tin tưởng

Tại thời điểm lúc bắt đầu triển khai dự án, nhóm Back-end của EGANY là những người mới bước chân vào làm việc ở môi trường thực tế, kinh nghiệm và kỹ năng ngoài những kiến thức trong nhà trường không đủ lấp đầy lỗ hổng này. Mình tự nhủ không biết mình có thể đáp ứng được yêu cầu không, điều này đối với mô hình truyền thống (có thể là monolithic) chưa chắc đảm bảo, lấy gì đảm bảo cho việc triển khai microservices to bự thế kia.

Nói rẽ ngang xíu, có một thực tế rằng đối với các startup việc tuyển các chuyên gia, lập trình viên có nhiều năm kinh nghiệm là không nhiều.
Trong khi đấy, nếu tuyển vào những sinh viên mới ra trường với tâm hồn đẹp, tràn đầy nhiệt huyết thì lại.. rất khó triển khai thành công.

Tuy nhiên, anh founder ở công ty mình là một người.. hơi dị, anh có nhiều "tài lẻ" khác nhau như: nấu ăn, viết lách, thuyết trình, phân tích giải pháp và có nhiều năm làm việc với các hệ thống ERP, eCommerce..v.v.. Đặc biệt là cái "tài chẵn" chuyền banh, anh nhìn nhận được tiềm năng của từng thành viên và hỗ trợ mọi người phát huy được khả năng của mình.
Khi đã xác định được con người phù hợp, anh founder sẽ đặt niềm tin vào đồng đội của mình. Anh chấp nhận những rủi ro (sẽ được trình bày ở bên dưới) để cho bạn cơ hội được học hỏi và chiến đấu. Anh bảo tin tưởng mình và các anh em khác sẽ triển khai được microservices.

Vâng, cảm giác lúc này là "Wow.. một đường chuyền bóng mẫu mực như Kevin De Bruyne"

À, nếu có thấy thắc mắc về những thứ diễn ra tại EGANY, bạn có thể có thể xem bài Những điều cần biết trước khi vào EGANY nhé ^^.

Chấp nhận thử sai

Tại EGANY, văn hóa thử sai và chấp nhận thất bại để.. "lớn lên" theo mình là một nét đẹp. Bình thường mỗi người sẽ có quan điểm và cách tiếp nhận, thái độ khác nhau với sự thất bại, tuy nhiên khi vào EGANY bạn sẽ được chia sẻ góc nhìn của team về vấn đề này, đại khái như là nó là cơ hội để ta nhận ra mình còn thiếu sót gì, là điều cần thiết để có thể tốt hơn, để cải thiện sản phẩm tốt hơn, để tránh lặp lại sai lầm.. .

undefined

Như vậy thất bại không là cái gì đó quá bi đát hay chỉ toàn màu đen đúng không. Tuy nhiên mọi thứ đều có giới hạn, tự nhắc mình "Fail fast and learn fast" để tiết kiệm chi phí nghiên cứu hơn là chìa khóa giúp team.. sống dai hơn đây.

Tầm nhìn

Với mục tiêu là thị trường toàn cầu, vì vậy việc lựa chọn một cách thức tiếp cận phù hợp cho hiện tại vào tương lại là quan trọng. Chiến lược của EGANY là làm tốt ở thị trường Việt Nam, làm động lực và bước đà để tiếp cận thị trường toàn cầu tốt hơn với đội ngũ non trẻ.

Trong quá trình này cần nuôi dưỡng, rèn luyện và tích lũy kỹ năng cho đội ngũ, để sẵn sàng cho mọi thử thách. Nên việc sớm tiếp cận với microservices cũng là một sự lựa chọn đáng để đánh đổi, việc này giúp đội ngũ phát triển "ngon" hơn, ăn "hành" sớm hơn ^^.

Ở đây phải nói thêm là thay vì bỏ thời gian và công sức để "migrate" sang microservices nếu chọn hướng monolithic từ đầu thì EGANY chọn đầu tư vào con người.

Là dân công nghệ

Và cuối cùng, tại EGANY bọn mình không ngại học hỏi cái mới, không ngừng cập nhật kiến thức, luôn muốn thử thách với những công nghệ mới để giúp cải thiện sản phẩm EGANY ngày càng tốt hơn. Chứ không xem đó là áp lực, task ông ở trên giao mới làm

Anh em ở đây kiểu "Microservices ư, nghe vui và ngầu đấy, triển thôi anh em"

undefined

Nói vậy chứ vui thôi, đừng vui quá mất hết tiền công ty hehe..

Với những lý do trên thì việc lựa chọn phát triển theo hướng microservices cho tới thời điểm hiện tại có thể coi là thành công vì phù hợp với những con người và văn hóa tại EGANY. Ở nơi khác mình tin câu chuyện cũng sẽ khác, mình chưa biết được ^^

Hiện tại thì đội kĩ sư bên mình cũng đã tích lũy được những kỹ năng, đúc kết được nhiều điều khi làm việc với microservices. Mặc dù còn nhiều thứ làm chưa tốt do trình độ khá non lúc mới triển khai, sửa sai vài lần cũng hơi nhọc tí. Nhưng mà.. chấp nhận được phải không .

Sắp tới EGANY sẽ dự định nâng cấp hệ thống của mình lần nữa, dựa trên những gì đã tích lũy được trong hơn một năm qua. Còn việc hạn chế thấp nhất rủi ro cũng như là chi phí khi triển khai microservice thì chờ bài viết kế tiếp của mình, có thể là: Triển khai microservices "tinh gọn" để bắt đầu dễ dàng hơn.

Không bắt tay vào làm thì sao biết là không được

Bọn mình đã chọn microservices để triển khai, còn bạn thì sao? Mỗi cá nhân, tổ chức sẽ có những vấn đề và lợi thế của riêng mình, hãy bình tĩnh và tự tin để có lựa chọn của mình nhé.

Bài viết tới đây là kết thúc, hẹn gặp lại trong các bài chia sẻ tiếp theo. Bạn cũng có thể xem thêm tại mục tham khảo bên dưới nhé. Tạm biệt và hẹn gặp lại!


Tham khảo

https://en.wikipedia.org/wiki/Distributed_computing
https://en.wikipedia.org/wiki/Microservices
https://en.wikipedia.org/wiki/Service-oriented_architecture
https://microservices.io/
https://en.wikipedia.org/wiki/Monolithic_application

Thuan Nguyen

DevOps Ninja @ EGANY