inflearn logo

Spring Batch thực chiến từ người phỏng vấn Kakao: Tất cả về xử lý dữ liệu lớn

Vấn đề lớn nhất khi vận hành một hệ thống batch xử lý hơn hàng triệu dữ liệu chính là sự suy giảm hiệu năng và khó khăn trong việc phục hồi khi xảy ra lỗi. Những vấn đề này không thể được giải quyết bằng các vòng lặp đơn giản hay thiết kế sai lầm. Dựa trên kinh nghiệm xử lý dữ liệu lớn một cách ổn định trong môi trường dịch vụ thực tế, khóa học này sẽ giúp bạn hiểu rõ cấu trúc và nguyên lý hoạt động của Spring Batch, từ đó truyền tải phương pháp thiết kế đảm bảo cả hiệu năng lẫn tính ổn định. Vượt xa việc giải thích các tính năng đơn thuần, khóa học giúp bạn nâng cao khả năng giải quyết vấn đề cốt lõi trong xử lý dữ liệu thông qua kiến trúc batch có thể áp dụng ngay vào thực tế công việc.

(5.0) 2 đánh giá

71 học viên

Độ khó Nhập môn

Thời gian Không giới hạn

Java
Java
Spring
Spring
Spring Boot
Spring Boot
Spring Batch
Spring Batch
spring-framework
spring-framework
Java
Java
Spring
Spring
Spring Boot
Spring Boot
Spring Batch
Spring Batch
spring-framework
spring-framework

Bạn sẽ nhận được điều này sau khi học.

  • Khả năng thiết kế Spring Batch có thể xử lý ổn định dữ liệu lớn (hàng triệu đến hàng chục triệu bản ghi)

  • Kỹ năng thực tế trong việc triển khai xử lý dựa trên Chunk, quản lý Transaction, và chiến lược Retry/Skip bằng mã code thực tế

  • Khả năng thiết kế kiến trúc Batch có thể mở rộng và bảo trì bằng cách sử dụng cấu trúc Job / Step

  • Khả năng giải quyết vấn đề để tự thiết kế và áp dụng các chiến lược xử lý lại và phục hồi khi xảy ra sự cố.

  • Kinh nghiệm tối ưu hóa hiệu suất batch và triển khai xử lý song song bằng cách tận dụng đa luồng (multi-thread), phân vùng (partitioning), v.v.

⚡ Ứng dụng xử lý Batch của các bạn.. vẫn ổn chứ??

😁 Nhà phát triển Toss : Dạo này mỗi lần chạy batch tôi đều sợ nó sẽ bị sập... Dữ liệu đã trở nên quá nhiều rồi.

😄Người phỏng vấn Kakao : Bạn xử lý khoảng bao nhiêu bản ghi?? Vì là mảng tài chính nên tôi đoán là sẽ rất nhiều.

😁 Nhà phát triển Toss : Mỗi lần chạy thì vài chục triệu bản ghi là chuyện bình thường… Nhưng tốc độ xử lý cũng là vấn đề, mà nếu xảy ra lỗi thì phục hồi cũng rất vất vả. Có vẻ như vì Spring hơi nặng nên mới như vậy..

😄 Người phỏng vấn Naver : Ừm... Vậy sao?? Bản thân Spring tuy nặng thật nhưng nếu áp dụng những thứ như Multi Threaded thì nó cũng không chạy quá nặng nề đâu, trừ khi là vấn đề về DB.

😄Người phỏng vấn Kakao : Tôi cũng công nhận, mấy cái khó phục hồi nếu áp dụng những thứ như Listener vào thì thực ra tôi thấy nó cũng không đến mức quá khó. Vì nếu thêm Skip hay Retry vào thì nó còn hỗ trợ lại Transaction cho từng cái riêng biệt nữa mà.

😁 Nhà phát triển Toss : Đúng là vậy nhưng mà.. sao cái này nó chậm thế nhỉ?? Chắc là tôi học Spring Batch qua loa rồi ㅋㅋㅋㅋ

😄Người phỏng vấn Kakao : Cậu là thế mà ㅋㅋㅋㅋㅋㅋㅋㅋ Để tôi thử lồng ghép cái này vào bài giảng xem sao, hóa ra có nhiều người không biết rõ về Spring Batch hơn tôi tưởng đấy.

😄Hong : Giờ thì... chẳng thèm hỏi lịch trình của mình luôn mà cứ thế giao việc tới tấp thôi;;

Java, Spring, Spring Boot, Spring Batch, spring-framework

⎈ Xử lý batch dữ liệu lớn, bạn vẫn đang giải quyết chỉ bằng vòng lặp đơn thuần sao?

Trong thực tế làm việc, chắc chắn sẽ có lúc bạn phải xử lý dữ liệu vượt xa những thao tác CRUD đơn giản.

  • Xử lý hàng triệu đến hàng chục triệu dữ liệu

  • Vấn đề xử lý lại khi xảy ra lỗi

  • Quản lý giao dịch và vấn đề hiệu suất

  • Lập lịch và vận hành Batch

Liệu có thể giải quyết tất cả những vấn đề này chỉ bằng vài dòng mã không? Hay là phải viết hàng vạn dòng mã?? Không đâu, nếu làm theo cách đó thì ứng dụng Spring của các bạn sẽ không được an toàn.

Vì vậy, khóa học này đề cập đến nhiều khía cạnh và tính năng khác nhau để thiết kế xử lý dữ liệu lớn bằng Spring Batch. Hãy nhớ rằng đây không chỉ đơn thuần là "cách chạy batch".

👉 Cách thiết kế cấu trúc có thể sử dụng trong dịch vụ thực tế như thế nào

👉 Làm thế nào để xử lý dữ liệu một cách ổn định

👉 Làm thế nào để tối đa hóa hiệu suất của Spring Batch

👉 Không chỉ dừng lại ở việc xử lý dữ liệu đơn thuần mà còn cách để giám sát chúng như thế nào

🚀 Đây không chỉ đơn thuần là một bài giảng lý thuyết. Tôi hy vọng bạn sẽ có thời gian học cách trực tiếp sử dụng và triển khai tính năng Spring Batch thông qua nhiều mã nguồn thực tế khác nhau.

🌳 Tại sao lại là Spring Batch!!

Spring Batch là một framework để xử lý dữ liệu dung lượng lớn, không chỉ dừng lại ở các tác vụ lặp đi lặp lại đơn thuần mà còn cho phép xử lý có tính đến tính ổn định và khả năng mở rộng.

Spring Batch có các đặc điểm sau đây.

  • Mô hình xử lý dựa trên Chunk
    → Chia dữ liệu lớn thành các đơn vị nhất định để xử lý nhằm tối ưu hóa việc sử dụng bộ nhớ và hiệu suất

  • Quản lý giao dịch (Transaction)
    → Quản lý giao dịch theo đơn vị Chunk, cho phép rollback và xử lý lại ổn định khi xảy ra lỗi

  • Retry / Skip / Fault Tolerance
    → Cung cấp chiến lược phục hồi linh hoạt thay vì dừng toàn bộ khi xử lý dữ liệu cụ thể thất bại

  • Cấu trúc dựa trên Job / Step
    → Có thể thiết kế rõ ràng các logic batch phức tạp bằng cách chia nhỏ theo từng giai đoạn

  • Quản lý trạng thái dựa trên ExecutionContext
    → Cung cấp tính năng restart để có thể tiếp tục thực hiện các công việc bị gián đoạn

  • Tối ưu hóa xử lý dữ liệu lớn
    → Có thể tối đa hóa hiệu suất thông qua đa luồng (multi-thread), phân vùng (partitioning), xử lý song song, v.v.

Trong tài liệu chính thức, Spring Batch được mô tả như sau.

Một khung làm việc (framework) xử lý theo lô (batch) toàn diện, nhẹ nhàng, được thiết kế để hỗ trợ phát triển các ứng dụng batch mạnh mẽ, đóng vai trò thiết yếu trong các hoạt động hàng ngày của các hệ thống doanh nghiệp.

Spring Batch cung cấp các chức năng có thể tái sử dụng, vốn rất thiết yếu trong việc xử lý khối lượng lớn bản ghi, bao gồm ghi nhật ký/truy vết (logging/tracing), quản lý giao dịch (transaction management), thống kê xử lý công việc, khởi động lại công việc, bỏ qua (skip) và quản lý tài nguyên. Nó cũng cung cấp các dịch vụ và tính năng kỹ thuật nâng cao hơn, cho phép thực hiện các công việc xử lý theo lô với khối lượng cực lớn và hiệu suất cao thông qua các kỹ thuật tối ưu hóa và phân vùng (partitioning). Các công việc xử lý theo lô từ đơn giản đến phức tạp với khối lượng lớn đều có thể tận dụng khung làm việc này một cách linh hoạt để xử lý lượng thông tin đáng kể.

( Spring Batch là một khung làm việc (framework) xử lý hàng loạt (batch) nhẹ nhàng nhưng toàn diện, cho phép phát triển các ứng dụng batch ổn định, vốn là yếu tố thiết yếu trong hoạt động hàng ngày của các hệ thống doanh nghiệp. Nó cung cấp các tính năng cốt lõi dưới dạng có thể tái sử dụng như ghi nhật ký và theo dõi, quản lý giao dịch, thống kê xử lý công việc, khởi động lại công việc, xử lý bỏ qua (skip) và quản lý tài nguyên cần thiết để xử lý dữ liệu lớn, qua đó giúp triển khai các logic batch phức tạp một cách ổn định hơn. Ngoài ra, bằng cách tận dụng các kỹ thuật như tối ưu hóa và phân vùng, nó hỗ trợ xử lý dữ liệu cực lớn và các tác vụ batch hiệu suất cao, đồng thời được thiết kế với cấu trúc có thể mở rộng từ các tác vụ batch đơn giản đến phức tạp và quy mô lớn, giúp xử lý lượng dữ liệu khổng lồ một cách ổn định. )

Trong các hệ thống backend hiện đại, mọi việc không chỉ dừng lại ở việc xây dựng tốt một API server đơn thuần.

👉 Dữ liệu liên tục tích tụ
👉 Khả năng gia công
👉 và xử lý dữ liệu đó một cách ổn định

Chính những điều này sẽ trở thành năng lực cạnh tranh của nhà phát triển trong thực tế. Thông qua khóa học này, tôi hy vọng bạn sẽ hiểu Spring Batch không chỉ là một "công nghệ" đơn thuần mà là công cụ cốt lõi để xử lý dữ liệu lớn, từ đó có được khả năng thiết kế Batch có thể áp dụng ngay vào công việc thực tế. 🚀

🍡 Xem trước nội dung bài giảng thực tế

JobRepository, JobLauncher và ExecutionContext - Những đối tượng hạ tầng âm thầm hoạt động ở phía sau

DDL cho WorkFlow do Spring Batch quản lý

Multi Threaded Step cung cấp khả năng xử lý song song trong khi chia sẻ cùng một Reader

Đặc điểm của khóa học này

📌 Những khái niệm bắt buộc phải biết để sử dụng Spring Batch dưới góc nhìn của người phỏng vấn tại Kakao

  • Không chỉ đơn thuần là giải thích các tính năng, tôi sẽ hướng dẫn bạn cách thiết kế Spring Batch tập trung vào những điểm quan trọng trong thực tế công việc và các buổi phỏng vấn.


📌 Chương trình học với hơn 90% là thực hành

  • Batch rất khó để hiểu chỉ qua lý thuyết. Chương trình được thiết kế để bạn có thể trực tiếp triển khai và thực thi, từ đó cảm nhận được dữ liệu được xử lý như thế nào và điểm nghẽn (bottleneck) xảy ra ở đâu.


📌 Năng lực cốt lõi phân biệt Junior → Senior, “Xử lý dữ liệu”

  • Khóa học này cung cấp cho bạn cơ hội để phát triển từ một nhà phát triển chỉ giỏi tạo API hoặc chỉ từng tạo API thành một nhà phát triển có thể thiết kế cả luồng dữ liệu.


🤭 Hồ sơ của người phỏng vấn tại Kakao, người đã cùng chuẩn bị cho bài giảng này

Choi (Kakao)

Hãy nhấp vào tên của các giảng viên để xem chi tiết hồ sơ kinh nghiệm nhé!

Tôi là Choi (tên viết tắt), một nhà phát triển máy chủ backend với 12 năm kinh nghiệm, hiện đang phát triển máy chủ và hoạt động với tư cách là người phỏng vấn tại Kakao.

Tôi đã có cơ duyên gặp gỡ Hong tại một buổi Conference trước đây, và từ giữa quá trình hoạt động giảng dạy, tôi đã liên tục tham gia tích cực cùng cậu ấy để tạo ra các bài giảng với nhiều chủ đề đa dạng. Tôi tin rằng việc vừa xây dựng bài giảng vừa trò chuyện và giao lưu với nhiều người như thế này đã giúp ích rất nhiều cho cuộc đời làm nhà phát triển của mình, đồng thời là khoảng thời gian để tôi học hỏi được nhiều góc nhìn khác nhau, vì vậy tôi đang nỗ lực để khai thác thêm nhiều chủ đề đa dạng hơn nữa.

Tôi không nghĩ rằng một lý lịch làm việc tại cái gọi là "tập đoàn lớn" là bằng chứng cho thấy đó là một nhà phát triển giỏi, nhưng ít nhất tôi tin rằng ở đó có thể trải nghiệm lượng truy cập và kinh nghiệm nhiều hơn so với các nền tảng thông thường. Tôi sẽ luôn cố gắng lồng ghép và truyền đạt những khía cạnh này vào trong các bài giảng của mình.

[Hiện tại] Nhà phát triển máy chủ tại trụ sở Kakao

[Trước đây] Tốt nghiệp chuyên ngành Khoa học máy tính hệ 4 năm tại Seoul

Lưu ý

Môi trường thực hành

  • Hệ điều hành :

    Apple M3 Air

  • Java : java 17.0.12 2024-07-16 LTS

  • IDE : VsCode

Tôi đang vận hành một phòng chat mở để giúp các bạn chuẩn bị cho sự nghiệp của mình. Rất mong nhận được sự quan tâm của các bạn!

Khuyến nghị cho
những người này

Khóa học này dành cho ai?

  • Nhà phát triển backend đang gặp tình trạng công việc batch (xử lý hàng loạt) chạy chậm hoặc thường xuyên thất bại nhưng không biết chính xác nguyên nhân.

  • Nhà phát triển từng gặp sự cố dịch vụ do vấn đề bộ nhớ và hiệu suất khi xử lý dữ liệu lớn.

  • Nhà phát triển đang sử dụng Spring Batch nhưng chưa hiểu rõ cấu trúc nên đang triển khai một cách thiếu hiệu quả

  • Những nhà phát triển đang cảm thấy bế tắc trong việc thiết kế logic xử lý lại hoặc phục hồi khi xảy ra sự cố.

  • Nhà phát triển muốn phát triển năng lực backend tập trung vào xử lý dữ liệu, thay vì chỉ dừng lại ở CRUD đơn thuần.

Xin chào
Đây là Hong

8,088

Học viên

521

Đánh giá

147

Trả lời

4.7

Xếp hạng

27

Các khóa học

Giới thiệu bản thân

Tôi bắt đầu học lập trình sau một thời gian dài lười biếng ở nhà vì cảm thấy hứng thú với nó, và hiện tại tôi đang đảm nhận vai trò phát triển server nền tảng tại Pangyo. Tôi tiếp tục hoạt động với tư cách là người chia sẻ kiến thức vì muốn cung cấp cho các bạn phương pháp học tập của bản thân, cùng với những vấn đề và giải pháp thực tế mà các bạn có thể gặp phải trong công việc.

 

Bài giảng không chỉ được tạo ra từ kiến thức của riêng tôi. Mỗi bài giảng đều có sự đồng hành của những người cộng sự.

 

Kinh nghiệm của người chia sẻ kiến thức

[Cựu] Nhà phát triển Blockchain liên quan đến IP Sandbox

[Cựu] Nhà phát triển Backend Metaverse

[Hiện tại] Nhà phát triển máy chủ dày dặn kinh nghiệm tại Pangyo

 

Lịch sử phỏng vấn

Các thắc mắc khác

  • unduck2022@gmail.com

Thêm

Chương trình giảng dạy

Tất cả

24 bài giảng ∙ (5giờ 24phút)

Tài liệu khóa học:

Tài liệu bài giảng
Ngày đăng: 
Cập nhật lần cuối: 

Đánh giá

Tất cả

2 đánh giá

5.0

2 đánh giá

  • youngba8935643님의 프로필 이미지
    youngba8935643

    Đánh giá 10

    Đánh giá trung bình 5.0

    5

    88% đã tham gia

    Cảm ơn bạn, bài giảng rất hay. Đây là lần đầu tiên mình học về Spring Batch, nhưng nhờ cách giải thích dễ hiểu của bạn mà mình có thể nắm bắt được mọi thứ, giúp ích cho mình rất nhiều!

    • jhong
      Giảng viên

      Chào bạn Tenburger, cảm ơn bạn đã để lại đánh giá tốt nhé!!

  • kyletes6021420님의 프로필 이미지
    kyletes6021420

    Đánh giá 2

    Đánh giá trung bình 5.0

    5

    92% đã tham gia

    Đây là một bài giảng tuyệt vời giúp tôi có thể học hỏi được những quan điểm sâu sắc của người phỏng vấn. Dù tôi đã làm việc trong lĩnh vực phát triển thực tế được một thời gian khá dài, nhưng qua bài giảng này, tôi nhận ra rằng vẫn còn rất nhiều điều mình cần phải học hỏi. Cảm ơn bạn vì nội dung hữu ích này.

    • jhong
      Giảng viên

      Xin chào bạn letes ky, cảm ơn bạn đã để lại đánh giá tốt nhé!!

Khóa học khác của Hong

Hãy khám phá các khóa học khác của giảng viên!

Khóa học tương tự

Khám phá các khóa học khác trong cùng lĩnh vực!

Ưu đãi có thời hạn

49.500 ₫

50%

2.089.263 ₫