Đăng ký Đăng nhập
Trang chủ Giáo dục - Đào tạo Cao đẳng - Đại học Công nghệ thông tin Báo cáo thực tập công ty cổ phần đầu tư thế giới di động (mwg)...

Tài liệu Báo cáo thực tập công ty cổ phần đầu tư thế giới di động (mwg)

.PDF
29
1
95

Mô tả:

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN ---------- BÁO CÁO THỰC TẬP DOANH NGHIỆP CÔNG TY CỔ PHẦN ĐẦU TƯ THẾ GIỚI DI ĐỘNG (MWG) Sinh viên thực hiện : Phan Đức Cường Mã số sinh viên : 18520547 Lớp : SE501.M21 Thành phố Hồ Chí Minh, tháng 6 năm 2022 LỜI CẢM ƠN Lời đầu tiên em xin gửi lời cảm ơn chân thành nhất đến quý Thầy, Cô trường Đại học Công nghệ Thông tin – ĐHQG TPHCM. Nhờ những bài giảng, kinh nghiệm quý báu mà thầy cô đã truyền đạt, em mới có đủ kiến thức để bước vào kỳ thực tập. Tiếp theo, em xin gửi lời cảm ơn sâu sắc đến ban lãnh đạo Công ty Cổ phần Đầu tư Thế Giới Di Động (MWG) đã tạo cơ hội cho em thực tập tại công ty để em có thể học hỏi, trải nghiệm môi trường làm việc thực tế. Đặc biệt, em xin cảm ơn các anh chị thuộc bộ phận Ứng Dụng Bán TGDĐ đã tận tình hướng dẫn, chỉ bảo để em có thêm kinh nghiệm tham gia phát triển sản phẩm thực tế phục vụ người dùng. Do thời gian thực tập có hạn cùng với kiến thức và kinh nghiệm còn ít ỏi của sinh viên nên bài báo cáo này sẽ không tránh khỏi những thiếu sót. Vậy nên em rất mong nhận được những ý kiến đóng góp quý báu của thầy, cô để em có thể hoàn thiện, bổ sung thêm những kiến thức còn thiếu của mình. Cuối cùng, em xin kính chúc quý Thầy, Cô sức khoẻ dồi dào để có thể thực hiện sứ mạng trồng người, đào tạo ra nguồn nhân lực công nghệ thông tin chất lượng cao, nhằm đáp ứng nhu cầu của thị trường lao động và phục vụ cộng đồng. Em xin chân thành cảm ơn! Thành phố Hồ Chí Minh, ngày 18 tháng 06 năm 2022 Sinh viên thực hiện Phan Đức Cường NHẬN XÉT CỦA KHOA .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... .......................................................................................................................................... MỤC LỤC CHƯƠNG 1 – GIỚI THIỆU CÔNG TY THỰC TẬP ................................................... 1 1.1. Tổng quan về công ty .......................................................................................... 1 1.2. Lĩnh vực kinh doanh ............................................................................................ 1 1.3. Vị thế công ty ...................................................................................................... 2 1.4. Triển vọng công ty ............................................................................................... 2 CHƯƠNG 2 – KIẾN THỨC ĐƯỢC ĐÀO TẠO TRONG KỲ THỰC TẬP ................ 3 2.1. Tổng quan về Coding style .................................................................................. 3 2.1.1. Lợi ích của Coding style ............................................................................... 3 2.1.2. Coding style cho Java/C# ............................................................................. 3 2.1.3. Coding style cho JavaScript ......................................................................... 3 2.2. Tổng quan về React Native ................................................................................. 4 2.2.1. Giới thiệu ...................................................................................................... 4 2.2.2. Cách hoạt động ............................................................................................. 4 2.2.3. Ưu nhược điểm ............................................................................................. 5 2.2.4. Điểm khác biệt giữa React Native và ReactJS ............................................. 6 2.2.5. Công cụ phát triển React Native ................................................................... 6 2.3. Tổng quan về .NET Core ..................................................................................... 6 2.3.1. Giới thiệu ...................................................................................................... 6 2.3.2. Khả năng sử dụng ......................................................................................... 7 2.3.3. Thành phần ................................................................................................... 8 2.3.4. Phân biệt .NET Framework, .NET Core và Mono ....................................... 8 2.3.5. Trường hợp sử dụng ..................................................................................... 9 2.4. Tổng quan về Redis Cache .................................................................................. 9 2.4.1. Đặt vấn đề ..................................................................................................... 9 2.4.2. Giới thiệu Redis .......................................................................................... 10 2.4.3. So sánh Redis và Memcached .................................................................... 11 2.4.4. Lợi ích ......................................................................................................... 12 2.3.5. Một số ứng dụng ......................................................................................... 13 2.3.6. Trường hợp sử dụng ................................................................................... 14 CHƯƠNG 3 – TÓM TẮT QUÁ TRÌNH THỰC TẬP ................................................ 15 3.1. Công việc mỗi tuần ............................................................................................ 15 3.1.1. Lịch thực tập ............................................................................................... 15 3.1.2. Bảng chi tiết công việc mỗi tuần ................................................................ 15 3.2. Các công việc đã thực hiện ................................................................................ 17 3.2.1. Quá trình giao công việc............................................................................. 17 3.2.2. Nhiệm vụ được giao ................................................................................... 18 CHƯƠNG 4 – ĐÁNH GIÁ VÀ NHẬN XÉT .............................................................. 22 4.1. Kết quả đạt được ................................................................................................ 22 4.2. Hạn chế .............................................................................................................. 22 4.3. Định hướng trong tương lai ............................................................................... 22 TÀI LIỆU THAM KHẢO ............................................................................................ 23 DANH MỤC HÌNH ẢNH Hình 1.1 - Logo Công ty Cổ phần Thế Giới Di Động .................................................... 1 Hình 2.1 - React Native .................................................................................................. 4 Hình 2.3 - Thành phần trong .NET ................................................................................. 8 Hình 2.4 - Kiến trúc Redis Cache ................................................................................. 10 Hình 2.5 - So sánh tốc độ Redis và Memcache ............................................................ 11 Hình 3.1 - Giao diện các loại chương trình khuyến mãi trên POS ............................... 19 Hình 3.2 - Biên nhận thanh toán kiêm phiếu giao hàng ............................................... 20 CHƯƠNG 1 – GIỚI THIỆU CÔNG TY THỰC TẬP 1.1. Tổng quan về công ty Công ty Cổ phần Đầu tư Thế Giới Di Động (MWG) được thành lập từ tháng 03/2004, với tiền thân là Công ty TNHH Thế Giới Di Động. Công ty quản lý vận hành các chuỗi cửa hàng bán lẻ Thế Giới Di Động, Điện Máy Xanh, Bách Hoá Xanh, nhà thuốc An Khang với mạng lưới 5.306 cửa hàng trên toàn quốc. Chuỗi của hàng Thế Giới Di Động được thành lập từ 2004 là chuỗi bán lẻ thiết bị di động có thị phần số 1 Việt Nam với hơn 970 cửa hàng. Điện Máy Xanh ra đời cuối 2010, là chuỗi bán lẻ các sản phẩm điện tử tiêu dùng (điện tử, điện lạnh và gia dụng) có thị phần số 1 Việt Nam với hơn 1.992 cửa hàng. Bách Hóa Xanh hoàn tất giai đoạn thử nghiệm vào cuối năm 2016, là chuỗi cửa hàng chuyên bán lẻ thực phẩm tươi sống (thịt cá, rau củ, trái cây…) và nhu yếu phẩm với hơn 2.106 cửa hàng. MWG niêm yết và giao dịch trên Sở Giao dịch Chứng khoán Thành phố Hồ Chí Minh (HOSE) từ tháng 07/2014. Hình 1.1 - Logo Công ty Cổ phần Thế Giới Di Động 1.2. Lĩnh vực kinh doanh  Kinh doanh thiết bị và linh kiện điện tử viễn thông;  Kinh doanh thiết bị điện máy;  Kinh doanh máy vi tính, thiếu bị ngoại vi và phần mềm;  Kinh doanh bán lẻ thực phẩm, hàng tiêu dùng;  Sản xuất linh kiện điện tử;  Sản xuất thiết bị truyền thông. 1 1.3. Vị thế công ty  MWG sở hữu, vận hành hệ thống bán lẻ với quy mô 5.306 cửa hàng (2021). Trong đó, chuỗi Thế giới Di động có 970 siêu thị trên toàn quốc; chuỗi Điện máy xanh có 1.992 siêu thị trên toàn quốc, trong đó có 800 cửa hàng mô hình supermini; chuỗi Bách Hóa Xanh có 2.106 cửa hàng tại Tp Hồ Chí Minh và 24 tỉnh thành Nam Bộ, Duyên hải Nam Trung Bộ; chuỗi nhà thuốc An Khang có 178 nhà thuốc tại 25 tỉnh thành khu vực phía Nam và Đồng bằng sông Cửu Long; chuỗi Bluetronics có 18 của hàng tại Campuchia.  Năm 2021, MWG giữ vững vị thế nhà bán lẻ số 1 Việt Nam, là công ty có doanh số lớn nhất trong tổng giá trị thị trường bán lẻ hàng hóa trực tuyến tại Việt Nam.  Là công ty Việt Nam duy nhất góp mặt trong Top 100 nhà bán lẻ hàng đầu Châu Á – Thái Bình Dương (Top 100 Retailers in Asia – Pacific).  Thế Giới Di Động và Điện Máy Xanh hiện là 2 đơn vị hiện đang giữ vị thế số 1 về bán lẻ thiết bị công nghệ và điện tử tiêu dùng tại Việt Nam;  MWG tiếp tục góp mặt trong Top 10 Doanh nghiệp lớn nhất Việt Nam theo bảng xếp hạng VNR500. 1.4. Triển vọng công ty  Hơn 98,5 triệu dân với cơ cấu dân số trẻ cùng với tỷ lệ dân số thành thị hơn 37,1% và tiếp tục tăng trưởng là động lực gia tăng gia trị thị trường bán lẻ ở Việt Nam.  40% thị phần điện máy tại Việt Nam vẫn đang thuộc về các cửa hàng nhỏ lẻ, do đó đây là cơ hội cho MWG tiếp tục gia tăng thị phần trong các năm tới bằng cách nhận rộng mô hình Điện Máy Xanh Supermini.  Thị trường bán lẻ truyền thống vẫn chiếm khoảng 88,6% tổng giá trị bán lẻ thực phẩm và FMCGs tại Việt Nam và là cơ hội cho các doanh nghiệp mô hình bán lẻ hiện đại sớm gia nhập thị trường như Bách Hóa Xanh tiếp tục gia tăng thị phần trong thời gian tới.  Tỷ lệ sử dụng Internet và các thiết bị di động tại Việt Nam đã ở mức cao, cùng với sự phát triển mạnh mẽ của các công cụ thanh toán online là cơ sở để MWG tiếp tục phát triển thị trường bán lẻ online nhờ tận dụng mô hình đa kênh. 2 CHƯƠNG 2 – KIẾN THỨC ĐƯỢC ĐÀO TẠO TRONG KỲ THỰC TẬP 2.1. Tổng quan về Coding style 2.1.1. Lợi ích của Coding style ‒ Giúp các lập trình viên ít mắc lỗi hơn khi cùng phát triển trong một môi trường. ‒ Code đẹp và theo chuẩn chung cho tất cả mọi người nên dễ dàng hiểu được ý tưởng của nhau. ‒ Người mới tiếp cận sẽ dễ hiểu code hơn, dễ đọc code hơn. ‒ Bảo trì code dễ dàng hơn sau thời gian dài quay lại. 2.1.2. Coding style cho Java/C# ‒ Dùng camelCase để đặt tên cho các biến cục bộ, các field và thuộc tính internal, protected, private kèm kiểu dữ liệu ở đầu tên (ví dụ: private int intSaleOrderID, protected string strErrorMessage). ‒ Dùng PascalCase để đặt tên cho các class, method, enumeration, public field, public properties, namespace (ví dụ: public int SaleOrderID, public string ErrorMessage). ‒ Các hằng số cần được đặt tên viết hoa toàn bộ (Ví dụ: const MAX_DAYS = 100). Các giá trị gắn cứng trong code đều phải được định nghĩa ở dạng hằng số và nếu có nhiều giá trị và các giá trị có ý nghĩa nào đó thì cần định nghĩa thành enum để quản lý ý nghĩa của các giá trị. 2.1.3. Coding style cho JavaScript ‒ Sử dụng camelCase cho tên biến và tên hàm. Đặt tên ngắn gọn dễ hiễu, sử dụng động từ để bắt đầu tên 1 hàm. Thêm các prefix get, set giúp người đọc biết hàm nào là return, hàm nào là change. ‒ Sử dụng PascalCase cho tên class và dùng danh từ để đặt tên class. ‒ Sử dụng khoảng trắng để code thoáng hơn. Luôn có 1 khoảng trắng sau mỗi keyword, tên function, dấu phẩy. ‒ Đặt dấu { ở cuối dòng lệnh đầu tiên. Đặt dấu } trên một dòng mới và không có khoảng trắng ở đầu. ‒ Khai báo mỗi dòng 1 biến để tường minh. 3 ‒ Để dễ đọc, tránh độ dài một dòng dài hơn 80 ký tự. ‒ Dùng dấu nháy đơn cho chuỗi. Chấm phẩy đầy đủ sau các câu lệnh (JavaScript không bắt buộc nhưng ta nên thêm vào để code rõ ràng). 2.2. Tổng quan về React Native 2.2.1. Giới thiệu Được phát triển bởi Facebook, React Native là một framework hướng đến phát triển ứng dụng di động đa nền tảng. Với sự trợ giúp của React Native, lập trình viên (developer) có thể sử dụng JavaScript để tạo ra mobile apps (ứng dụng di động) hỗ trợ cho cả nền tảng Android và iOS. Instagram, Facebook, Skype,… là những ứng dụng nổi bật sử dụng React Native. Hình 2.1 - React Native 2.2.2. Cách hoạt động React Native hoạt động được nhờ tích hợp 2 thread là Main Thread và JS Thread cho ứng dụng di động. Trong đó:  Main Thread: cập nhật giao diện người dùng và xử lý tương tác người dùng.  JS Thread: thực thi và xử lý code JavaScript. Hai luồng Main Thread và JS Thread này hoạt động độc lập với nhau. Hai Thread sẽ tương tác với nhau nhờ một Bridge (cầu nối). Chiếc cầu này sẽ chuyển đổi dữ liệu qua lại giữa các Thread. 4 2.2.3. Ưu nhược điểm 2.2.3.1. Ưu điểm  Có thể tái sử dụng code React Native cho phép các developer có thể tái sử dụng code trong khi phát triển các ứng dụng đa nền tảng. Đặc biệt, developer có thể tái sử dụng hầu như 80-90% các đoạn code thay vì phải viết và tạo các ứng dụng riêng biệt cho các nền tảng khác nhau. Ưu điểm này giúp người dùng:  Tiết kiệm thời gian và giảm chi phí phát triển của một ứng dụng.  Tận dụng nguồn nhân lực tốt hơn  Duy trì ít code hơn, ít bugs hơn  Các tính năng trong cả 2 nền tảng cũng tương tự nhau.  Cộng đồng người dùng lớn React Native được đánh giá là một trong những Framework được yêu thích nhất (khảo sát của stack overflow vào năm 2019). Nhờ cộng đồng người dùng rất lớn trên toàn thế giới, chúng ta có thể tìm sự hỗ trợ nếu gặp phải bugs.  Tính ổn định và tối ưu Được phát triển bởi Facebook, React Native có hiệu năng ổn định khá cao.  Code React Native giúp đơn giản hóa quá trình xử lý dữ liệu.  Đội ngũ phát triển ứng dụng không quá lớn.  Xây dựng ứng dụng ít native code nhất cho nhiều hệ điều hành khác nhau.  Trải nghiệm người dùng tốt hơn khi so sánh với ứng dụng Hybrid. 2.2.3.2. Nhược điểm  Yêu cầu Native code.  Hiệu năng kém hơn so với Native App.  Bảo mật chưa thật sự tốt do dùng JavaScript. Do sử dụng JavaScript, người dùng cũng sẽ bị ảnh hưởng bởi những đặc điểm của JavaScript: dễ làm dễ sai, dẫn đến khó duy trì về sau.  Quản lý bộ nhớ.  Tùy biến chưa thật sự tốt ở một số module.  Không thích hợp cho các ứng dụng cần năng lực tính toán cao (hash, crypto, etc). 5 2.2.4. Điểm khác biệt giữa React Native và ReactJS  Thiết lập và đóng gói (setup and bundling): Thiết lập và vận hành React Native khá nhanh chóng vì có sẵn tất cả những module cần thiết. Trong khi đó, bạn cần phải xác định các module cần thiết cho ứng dụng của mình khi dùng ReactJS.  DOM và Styling: React Native không dùng HTML để render app mà cung cấp các component để thay thế. Component React Native sẽ map các UI iOS hoặc Android được render trên ứng dụng.  Animations và Gestures: Thay vì CSS animation, bạn sẽ phải sử dụng JavaScript để tạo các Component động trong React Native.  Điều hướng (Navigation): Navigator trong React Native cung cấp tất cả những gì mà bạn cần để thực hiện việc chuyển đổi giữa các Scene trong ứng dụng.  Nền tảng code riêng (Platform specific code): React Native có khả năng phát hiện và nạp đúng code cho nền tảng được hỗ trợ. 2.2.5. Công cụ phát triển React Native Các nhà phát triển có thể sử dụng những công cụ hoàn toàn miễn phí như sau:  Hot Reloading  Chrome Dev Tools để kiểm tra yêu cầu mạng, hiển thị bản ghi giao diện và dừng mã trên các trình gỡ lỗi  Redux DevTools để kiểm tra trạng thái của store Redux 2.3. Tổng quan về .NET Core 2.3.1. Giới thiệu .NET Core là một framework được Microsoft phát triển. Đây là một nền tảng phát triển đa mục đích. .Net Core là nền tảng chéo (hỗ trợ Windows, macOS và Linux) và có thể được sử dụng để xây dựng các ứng dụng thiết bị, đám mây và IoT. .NET Core hỗ trợ các ngôn ngữ như: C# và F# (và C++/CLI kể từ 3.1; chỉ được bật trên Windows) và nó còn hỗ trợ một phần của Visual Basic .NET. Cụ thể:  C#: Là loại ngôn ngữ lập trình phát triển theo hướng đối tượng và mục đích. 6  F# : Là loại ngôn ngữ lập trình cho chức năng đa nền tảng, mã nguồn mở. Nó cũng thường bao gồm lập trình cho hướng đối tượng và mệnh lệnh.  Visual Basic: Là ngôn ngữ lập trình có cú pháp đơn giản giúp xây dựng cho các ứng dụng hướng tới đối tượng an toàn. Những công cụ (gọi tắt là IDE) để lập trình với .NET core:  Visual Studio  Visual Studio Code  Sublime Text  Vim Các phiên bản .NET Core được ra đời từ năm 2016 đã phát triển rất đều đặn và nhận được những sự tiếp đón từ phía cộng đồng lập trình viên. Trong đó bản được đánh giá là ổn định và được ưa chuộng nhất chính là 3.1.2. 2.3.2. Khả năng sử dụng ASP.NET đã xuất hiện cách đây 15 năm trước. Nó là một phần của .NET Framework. Nó đã có hàng triệu lập trình viên đã sử dụng để xây dựng những ứng dụng web. Và Microsoft đã phát triển thêm nhiều tính năng mới qua từng năm. ASP.NET Core có một số thay đổi lớn. Từ việc học hỏi các framework module hóa khác. ASP.NET Core không còn dựa trên System.Web.dll nữa. Mà được dựa trên một tập hợp các gói, các module hay cũng được gọi là các Nuget packages. Với ASP.NET Core bạn có thể:  HTTP request được tối ưu nhẹ hơn.  Hợp nhất xây dựng web UI và web APIs.  Tích hợp những client-side frameworks hiện đại và có những luồng phát triển.  Hệ thống cấu hình dựa trên môi trường đám mây thật sự.  Dependency injection được xây dựng sẵn.  Có thể host trên IIS hoặc self-host trong process của riêng bạn.  Được xây dựng trên .NET Core, hỗ trợ thực sự app versioning.  Những công cụ mới để đơn giản hóa quá trình phát triển web tối ưu.  Xây dựng và chạy đa nền tảng(Windows, Mac và Linux).  Mã nguồn mở và tập trung vào cộng đồng. 7 2.3.3. Thành phần .NET Core bao gồm các nền tảng: .NET Compiler Roslyn, .NET Core framework CoreFX, .NET Core runtime CoreCLR, và ASP.NET Core. Cấu trúc của.Net Core chi tiết  CoreFX: Nó được xem là nền tảng thư viện dành cho .NET Core.  CoreCLR: Đây là công cụ thực thi .Net trong .Net Core. Nó hỗ trợ thực hiện một số chức năng như thu gom và biên dịch rác thành mã máy.  .Net Core runtime: Sẽ cung cấp một kiểu hệ thống, tải lắp ráp, trình thu gom rác và các dịch vụ cơ bản khác.  Net Core runtime: Cung cấp framework để việc xây dựng các ứng dụng hiện đại tối ưu, dựa trên đám mây, ứng dụng web, kết nối internet,…  .Net Core SDK và trình biên dịch ngôn ngữ (Roslyn và F#): giúp cho phép phát triển .Net Core  Lệnh dotnet: Lệnh dùng cho việc khởi chạy ứng dụng .NET Core và các lệnh CLI. Hình 2.3 - Thành phần trong .NET 2.3.4. Phân biệt .NET Framework, .NET Core và Mono Với người mới làm quen với .NET hay kể cả một số người đã làm việc với .NET lâu năm. Những thuật ngữ, khái niệm như .NET Framework, Mono hay .NET core vẫn hay gây ra nhầm lẫn. Về cơ bản thì .NET Framework, .NET core và Mono là ba phiên 8 bản .NET khác nhau (có nghĩa là mỗi phiên bản có Runtime, Libraries và Toolings riêng). Dưới đây là sự khác biệt giữa ba phiên bản đó:  .NET Framework: Được Microsoft đưa ra chính thức từ năm 2002. .NET Framework chỉ hoạt động trên hệ điều hành Windows. Những nền tảng như: WPF, Winforms, ASP.NET(1-4) hoạt động dựa trên .NET Framework.  Mono là phiên bản cộng đồng giúp mang .NET đến những nền tảng ngoài Windows. Mono được phát triển để xây dựng những ứng dụng với giao diện người dùng và được sử dụng rất rộng rãi như: Unity Game, Xamarin…  .NET core: Đến năm 2013, Microsoft định hướng đa nền tảng và phát triển .NET core. .NET core hiện được sử dụng trong các ứng dụng Universal Windows platform và ASP.NET Core. 2.3.5. Trường hợp sử dụng Chúng ta nên lựa chọn .NET Core nếu như:  Đang muốn xây dựng ứng dụng của mình chạy đa nền tảng: Windows, Linux và MacOS.  Có sẵn các tinh thần học hỏi, không sợ sai bởi vì .NET Core vẫn chưa có thể hoàn thiện.  Phát triển ứng dụng theo kiểu Microservices:Xây dựng các ứng dụng phức tạp dựa theo module với khả năng tách rời và với mỗi module có thể sử dụng các công nghệ khác nhau. Hiện nay .Net Core chính là một trong những lựa chọn chính xác nhất.  Nếu hệ thống của bạn cần hiệu năng và khả năng mở rộng tốt nhất cho dù có nhiều người dùng thì .NET Core và ASP.NET Core sẽ vẫn là trợ thủ sáng giá nhất chúng ta nên lựa chọn. 2.4. Tổng quan về Redis Cache 2.4.1. Đặt vấn đề Thông thường, cứ mỗi request từ phía client thì database sẽ trả kết quả về cho client. Cho tới khi số lượng request giống nhau tăng lên đáng kể sẽ khiến cho CPU và Hard Disk phải thực hiện lặp đi lặp lại công việc lấy dữ liệu ấy. Để giải quyết vấn đề trên thì Caching đã làm tốt nhiệm vụ của nó bằng việc giúp server ghi nhớ kết quả của 9 cả quá trình tính toán, để trả về cho những lần request tương tự từ client trong tương lai. Và Redis được biết đến là một công cụ hỗ trợ server giải quyết bài toán Caching này. 2.4.2. Giới thiệu Redis Hình 2.4 - Kiến trúc Redis Cache Redis là tên viết tắt của Remote Dictionary Server (Máy chủ từ điển từ xa), là kho dữ liệu key-value, trong bộ nhớ, mã nguồn mở và có tốc độ truy cập nhanh để dùng làm cơ sở dữ liệu, cache, message broker và queue. Redis có thể được sử dụng như một database được lưu trữ trong ram để tăng tốc độ xử lí. Redis hiện cung cấp thời gian phản hồi ở tốc độ chưa đến một mili giây, vì Redis cho phép bạn lưu trữ trên RAM của mình nhanh hơn so với khi lưu trữ trên các ổ cứng, khoảng 150.000 lần so với truy cập ổ HDD và nhanh hơn 500 lần so với truy cập SSD. Thông thường khi ta sử dụng cơ sở dữ liệu thì vẫn lưu trữ trên ổ đĩa cứng. Ví dụ khi query một cơ sở dữ liệu để đọc 10.000 bản ghi. Nếu dữ liệu được lưu trữ trên đĩa, thì nó sẽ mất trung bình 30 giây, trong khi chỉ mất khoảng 0,0002 giây để đọc từ RAM, đó chính là lí do mà Redis dùng RAM để lưu trữ. Redis thường được tạo trên một máy chủ riêng hoặc set giới hạn bộ nhớ nhất định được sử dụng trên máy chủ dùng chung cho nên sẽ không bị tình trạng thiếu RAM khi chạy đồn thời các ứng dụng khác. Tuy nhiên, khi lưu trữ trên RAM thì nhanh thật nhưng lại gặp 1 vấn đề là bị mất điện thì dữ liệu cũng mất tiêu. Để ngăn chặn việc mất dữ liệu xảy ra, có một mô-đun được tích hợp sẵn để ghi trạng thái trong bộ nhớ vào file trên đĩa trong những trường 10 hợp nhất định. Các file này được tải lại khi khởi động lại redis. Vì vậy, dữ liệu sẽ không bị mất. Ngoài ra, để tăng tính sẵn sàng và khả năng chịu lỗi của hệ thống. Redis có thể cấu hình theo dạng Cluster với kỹ thuật Master-Slave giúp hệ thống Redis luôn sẵn sàng đáp ứng sao lưu dữ liệu trên đĩa cứng và phục hồi dữ liệu khi gặp sự cố. 2.4.3. So sánh Redis và Memcached Redis và Memcached đều nhanh và mạnh, đều lưu trữ dữ liệu trong bộ nhớ RAM và rất hữu ích. Cả redis và memcached đều lưu trữ các kết quả dữ liệu giúp tăng tốc ứng dụng cho người dùng. Memcached lưu tất cả dữ liệu trên RAM, chỉ có dữ liệu dạng key/value. Memcached là tầng cache nên không có tính persistent, rất khó backup dữ liệu, vì thế dữ liệu rất dễ mất. Khi xảy ra tình trạng mất dữ liệu, memcached sẽ đẩy những key cũ hoặc ít dùng ra trước. Memcached đa luồng nên memcached có khả năng sử dụng nhiều lõi xử lý, có nghĩa là người dùng có thể xử lý nhiều hoạt động hơn bằng việc gia tăng công suất tính toán. Có thể thấy, Redis phần nào có những ưu điểm như memcached nhưng có sự cải tiến rõ rệt và tăng khả năng lưu trữ, xử lý khi xảy ra sự cố. Khi số lượng clients tăng thì tốc độ của Redis tỏ ra nhanh hơn: Hình 2.5 - So sánh tốc độ Redis và Memcache 11 2.4.4. Lợi ích  In-Memory Data Store Toàn bộ dữ liệu Redis nằm trong bộ nhớ chính của máy chủ, khác với các cơ sở dữ liệu thường lưu phần lớn dữ liệu trên ổ đĩa hoặc ổ SSD. So với cơ sở dữ liệu trên ổ đĩa truyền thống trong đó phần lớn các tác vụ đều yêu cầu truy cập lặp lại tới ổ đĩa, còn Redis thì chỉ việc lấy ra kết quả đã tính toán. Do đó hiệu suất nhanh thấy rõ rệt với các tác vụ đọc hoặc ghi thông thường mất chưa đầy một mili giây và hỗ trợ hàng triệu tác vụ mỗi giây.  Cấu trúc dữ liệu linh hoạt Khác với những kho dữ liệu key-value đơn giản có cấu trúc dữ liệu giới hạn, Redis có nhiều cấu trúc dữ liệu khác nhau nên đáp ứng được nhu cầu ứng dụng của bạn. Kiểu dữ liệu Redis gồm có:  String – văn bản hoặc dữ liệu nhị phân có kích thước lên tới 512MB  List – một tập hợp các chuỗi được sắp xếp theo thứ tự như khi được thêm vào  Set – một tập hợp chưa được sắp xếp các chuỗi, có khả năng giao cắt, liên kết và khác với các kiểu tập khác  Sorted Set – Tập được sắp xếp theo giá trị  Hash – một cấu trúc dữ liệu dùng để lưu trữ danh sách các trường và giá trị  Bitmap – một kiểu dữ liệu cho phép thực hiện các tác vụ quy mô bit  HyperLogLogs – một cấu trúc dữ liệu xác suất để ước tính các thành phần duy nhất trong một tập dữ liệu  Đơn giản và dễ sử dụng Redis đơn giản hóa code của bạn bằng cách cho phép bạn viết ít dòng code hơn để lưu trữ, truy cập và sử dụng dữ liệu trong các ứng dụng của mình. Ví dụ: nếu ứng dụng của bạn có dữ liệu được lưu dạng hashmap và bạn muốn lưu trữ dữ liệu đó trong DB thì bạn chỉ cần sử dụng cấu trúc dữ liệu hashes để lưu chúng. Thao tác tương tự trên DB không có cấu trúc dữ liệu hashes sẽ yêu cầu nhiều dòng code để chuyển đổi từ định 12 dạng này sang định dạng khác. Với mỗi kiểu dữ liệu thì Redis thêm nhiều tùy chọn để thao tác và tương tác với dữ liệu của bạn.  Replication - Persistence Redis sử dụng kiến trúc primary-replica và hỗ trợ sao chép không đồng bộ, dữ liệu có thể được sao chép sang nhiều máy chủ khác nhau. Điều này giúp hiệu suất đọc được cải thiện (vì các yêu cầu có thể được phân chia giữa các máy chủ) và phục hồi nhanh hơn khi máy chủ chính gặp sự cố ngừng hoạt động. Để duy trì, Redis hỗ trợ sao lưu point-in-time backups (sao chép dữ liệu Redis vào đĩa).  Độ khả dụng cao và quy mô linh hoạt Redis có kiến trúc primary-replica theo cấu trúc liên kết dạng một nút chính hoặc cụm. Kiến trúc này cho phép bạn xây dựng những giải pháp có độ khả dụng cao, đảm bảo hiệu suất ổn định và tin cậy. Khi cần điều chỉnh kích thước cụm, bạn có nhiều tùy chọn khác nhau để thay đổi quy mô theo chiều dọc và thay đổi quy mô theo chiều ngang. Việc này cho phép tăng cụm theo nhu cầu của bạn.  Khả năng mở rộng Redis là dự án mã nguồn mở đã có cộng đồng lớn tin dùng. Không có giới hạn về nhà cung cấp hoặc công nghệ vì Redis được có tính tiêu chuẩn mở, hỗ trợ các định dạng dữ liệu mở và có tập hợp máy khách phong phú. 2.3.5. Một số ứng dụng  Caching Redis là một lựa chọn tuyệt vời để triển khai in-memory cache để giảm độ trễ truy cập dữ liệu, tăng thông lượng và giảm tải khỏi cơ sở dữ liệu quan hệ hoặc NoSQL trong ứng dụng của bạn. Redis có thể phục vụ các dữ liệu được yêu cầu thường xuyên ở thời gian phản hồi dưới một mili giây. Và cho phép bạn dễ dàng mở rộng quy mô cho các tải cao hơn mà không cần tăng phụ trợ tốn kém. Persistent session caching, web page caching và caching của các đối tượng được sử dụng thường xuyên như hình ảnh, tệp và siêu dữ liệu là các ví dụ phổ biến về caching với Redis.  Session Store Redis như một kho lưu trữ dữ liệu trong bộ nhớ với tính sẵn sàng cao và bền bỉ là lựa chọn phổ biến của các nhà phát triển ứng dụng để lưu trữ và quản lý dữ liệu session 13 cho các ứng dụng của mình. Redis cung cấp độ trễ dưới một phần nghìn giây và khả năng phục hồi cần thiết để quản lý dữ liệu session như hồ sơ người dùng, thông tin đăng nhập, trạng thái phiên và cá nhân hóa cụ thể của người dùng.  Real-time Analytics Redis có thể được sử dụng với các giải pháp streaming như Apache Kafka và Amazon Kinesis như một in-memory data store để nhập, xử lý và phân tích dữ liệu realtime với độ trễ nhỏ hơn một mili giây. Redis là một lựa chọn lý tưởng cho các hệ thống real-time analytics như truyền thông xã hội, quảng cáo và IoT,... 2.3.6. Trường hợp sử dụng Vì Redis nên nó chủ yếu được sử dụng cho mục đích lưu vào bộ nhớ đệm. Đây là thế mạnh lớn nhất của Redis vì nó cung cấp nhiều loại dữ liệu khác nhau với cấu trúc từ điên (key-value) của nó.  Full Page Cache (FPC) Điều đó có nghĩa là, chúng ta có thể sử dụng Redis để lưu vào bộ đệm đầy đủ các trang có lưu lượng truy cập cao và nội dung tĩnh. Nếu bản thân trang có xu hướng thay đổi hoặc nội dung được tạo động, thì nó không nên được lưu vào bộ nhớ cache trong mọi trường hợp bất kể đó là Redis hay Memcached. Nếu trang chủ yếu chứa nội dung tĩnh hoặc nội dung được làm mới sau mỗi x khoảng thời gian, thì chúng ta có thể lưu vào bộ nhớ cache của trang đó và nó sẽ được phục vụ ngay lập tức!  Session Cache Ngoài cache file tĩnh, Redis còn có thể dùng để lưu session (phiên đăng nhập). Không giống như Memcached không có tính bền bỉ (Persistence), Redis có cho phép lưu trữ session. Xử lý các phiên bằng Redis giúp tăng trải nghiệm người dùng khi tương tác với trang web. Tính năng Persistence rất quan trọng để lưu trữ các phiên, để tránh mất dữ liệu trong các phần quan trọng của tương tác với người dùng. Ví dụ: xử lý thanh toán, thêm một mặt hàng vào giỏ hàng hoặc yêu cầu bất kỳ hành động nào với tư cách là người dùng đã xác thực. 14
- Xem thêm -

Tài liệu liên quan