Are you a game developer or designer interested in exploring the potential of Roblox game development in Vietnam?
Look no further! We are excited to invite you to our upcoming event titled “Potential of Roblox Game Development in Vietnam”.
Roblox is a popular online gaming platform that allows developers to create games and monetize them.
During this event, we will explore the process of game development on the Roblox platform, including tips and tricks on how to make money from your game.
Our esteemed speakers, Mr. Toan Tran and Mr. Dao Le, will share their insights on the picture of Roblox game development in Vietnam.
Mr. Toan Tran is a content creator and the owner of GÀ CÔNG NGHIỆP TV Youtube Channel with over 325k subscribers. He will share his experience as a Roblox game developer in Vietnam.
Mr. Dao Le is a Principle Software Engineer at Roblox and will discuss the technical aspects of game development on the platform.
This event is tailored to game developers who use Lua/Unity/Java and love making games, as well as designers who use Blender/3D Max.
Whether you are an experienced Roblox developer or just starting out, you will benefit from the valuable insights shared during this event.
Don’t miss out on this opportunity to explore the potential of Roblox game development in Vietnam.
Register now and join us for an evening of informative discussions and networking opportunities. We look forward to seeing you there!
Đến nay, chuỗi Technical Event do Gambaru tổ chức đã sắp đi đến số thứ 08 (vào thứ 7 tuần này), đây cũng là dịp để Gambaru team nhìn lại chặn đường vừa qua, tổng kết những kết quả đạt được cũng như bài học rút ra cho chặn đường tiếp theo.
Các số Technical Event đã thực hiện
TE#01: Flutter
Đây là event mở màn cho chuỗi, do chưa có nhiều kinh nghiệm vận hành nên event này chỉ thực hiện cho anh em developer nội bộ.
Chủ đề của event là Flutter Project Architecture do anh Phúc Trần chia sẻ. Đây là cũng là thời điểm cộng đồng Telegram của Gambaru được dựng lên, thu hút một lượng ‘le que’ các thành viên ban đầu, nhưng cũng đầy hứa hẹn sẽ tăng trưởng tốt.
Xem video TE#01:
TE#01: Flutter – anh Phúc Trần
TE#02: Distributed Crawling
Số thứ 2 có số lượng đăng ký lên đến 70 người, một con số không tưởng với nỗ lực của team lúc bấy giờ. Chủ đề này may mắn có đến 2 speaker chia sẻ, đó là anh Đạt Hồ và anh Tín Đặng đến từ VietMoney.
Xem video TE#02:
TE#03: Distributed Crawling – anh Đạt Hồ và anh Tín Đặng
TE#03: CI/CD và Monorepo
Lần đầu tiên kết hợp với speaker ngoài biên giới Việt Nam, rất may đây lại một speaker nữ xinh xắn, nụ cười tỏa nắng nên cũng thu hút khá nhiều anh em developer, engineer tham gia. Chị Châu công tác tại một startup về xe hơi tự lái có trụ sở tại Mỹ. Châu cũng đang là CI/CD team lead với những chia sẻ thú vị và chứa đựng nhiều kiến thức.
Một điểm nổi bật tại TE#03 là các bài quizz thú vị được speaker của chúng ta được rất người anh em hưởng ứng.
Đây cũng là event đánh dấu cột mốc hơn 200 người đăng ký, làm team phải xuống hầu bao mua thêm “chỗ” khi event diễn ra.
Xem video TE#03:
TE#03: CI & Monorepo – chị Châu Vũ
TE#04: Graph
Phải nói rằng chủ đề này khá kén người tham gia, vì mang tính học thuật khá cao. Tuy nhiên may mắn làm sao, vẫn nhận được lượng đăng ký đông đảo.
Speaker TE#04 là Thầy Hiển, tiến sĩ và giảng viên trường UIT. Trên thực tế, Thầy Hiển đã dành thời gian đào tạo thực tế các kiến thức về Graph cho anh em dev của Gambaru rồi. Đây cũng là chủ đề cuối cùng của năm Tân Sửu
Video TE#04:
TE#04: Graph – Thầy Hiển
TE#05: Cyber Security
Đây là event rất được kỳ vọng với sự xuất hiện của idol Hiếu PC. Anh là nhân vật rất nổi tiếng trong giới công nghệ, có lẽ không ai không biết. Buổi này cung cấp kiến thức về bảo mật sản phẩm đến các anh em dev nên ai cũng hoan nghênh.
Video TE#05:
TE#05: Cyber Security – anh Hiếu PC
TE#06: Kubernetes
Nếu phải gọi là bùng nổ, thì có lẽ đây là event bùng nổ nhất từ khi bắt đầu tổ chức chuỗi event. TE#08 kêu gọi được hơn 500 thành viên đăng ký. Tất cả cùng chào đón anh Thắng Chung, một senior dev tương đối kín tiếng.
Tại buổi này, anh Thắng đã “truyền thụ” nội công thâm hậu của mình suốt 4 tiếng đồng hồ tới các thành viên tham gia. Bình thường có 2 tiếng thôi nhưng speaker của chúng ta sung quá, cũng may là anh em cũng không ngại chèo tới bến cùng speaker.
Video TE#06:
TE#06: Kubernetes – anh Thắng Chung
TE#07: Site Reliability
Đây là event thứ 2 có sự tham gia của speaker đang làm việc ở nước ngoài với gần 168 thành viên đã đăng ký. Đây là chủ đề nhận được sự hưởng ứng không nhỏ, một phần vì speaker là cựu nhân viên của AWS và chia sẻ triết lý của AWS.
Video TE#07:
TE#07: Reliability – anh Ryan Dao
Chờ đón các event đặc sắc khác
Với phương châm liên tục tổ chức Technical Event để nâng cao kiến thức, phục vụ các thành viên trong cộng đồng. Gambaru sẽ tổ chức các event trong Tháng 04, 05.
Technical Event được tổ chức vào tháng 04, 05.2022
Nếu bạn có sự quan tâm đến chủ đề hoặc speaker nào, đừng ngại liên hệ Gambaru.
Những kết quả ấn tượng
Vậy là sau nhiều tháng tổ chức, kết quả mà Gambaru team đạt được là gì?
7 số TE đã tổ chức
Việc này hẳn đã quá rõ ràng, hy vọng trong năm 2022, chúng tôi có thể tổ chức nhiều chủ đề hữu ích hơn để hỗ trợ phát triển cho cộng đồng.
Cộng đồng Telegram gần 800 thành viên
Gambaru rất tự hào khi tổ chức và thu hút nhiều anh em developer, engineer tham gia vào cộng đồng của mình. Ban đầu chỉ có vài thành viên, giờ đây con số đã tăng nhanh chóng và có tiềm năng bức phá không nhỏ.
Kênh Youtube với gần 300 subscriber, hơn 2.500 lượt xem
Mỗi video đăng trên kênh Youtube của Gambaru có thời lượng không nhỏ, từ 120 phút trở lên, vì vậy sẽ khá kén người xem, chỉ thu hút đa phần với các anh em ngành IT, Engineering.
Từ tháng 12/2021 đến nay, Gambaru đã liên tục tổ chức chuỗi sự kiện mang tên Technical Event dành cho cộng đồng Developer & IT engineer, thông qua đó người tham gia có thể học hỏi kiến thức, kinh nghiệm từ các chuyên gia nhiều năm kinh nghiệm ở cả trong và ngoài nước.
Đến nay chuỗi đã tổ chức được 6 số, với tổng số đăng ký tham gia gần 1.000 người, một cộng đồng trên Telegram với gần 600 thành viên, và kênh Youtube với số lượt đăng ký ngày càng tăng. Rõ ràng Technical Event đang chứng tỏ sự thu hút lớn đối với cộng đồng và trở thành một hoạt động chiến lược quan trọng của Gambaru.
Nhằm làm tốt hơn nữa việc thông tin về các sự kiện được tổ chức và xây dựng một cộng đồng Developer & IT Engineer mạnh về chất, Gambaru đã phát triển và cho ra mắt trang Event Page.
Đây sẽ là nơi bạn có thể theo dõi tất cả các Technical Event hoặc bất kỳ sự kiện nào đã, đang và sẽ được tổ chức bởi Gambaru.
Ngoài ra, Gambaru cũng đang hoàn thiện các bước còn lại để trải nghiệm đăng ký và tham gia sự kiện của bạn được tốt hơn.
Ngay bây giờ, bạn đã có thể truy cập https://gambaru.io/events để bắt đầu theo dõi thông tin các sự kiện mình quan tâm.
Chúng ta hãy dạo quanh 1 vòng xem Event Page như thế nào nhé.
Featured event
Phía trên cùng là banner của sự kiện nổi bật trong tuần, bạn có thể click vào để đi tới phần thông tin của event.
Sự kiện nổi bật trong tuần
Upcoming event
Đây là nơi thông tin các sự kiện sẽ được tổ chức trong tương lai, mỗi sự kiện sẽ có thông tin cụ thể về Chủ đề, diễn giả, thời gian và hình thức tham gia
Khu vực Upcoming
Bạn có thể click vào để xem chi tiết về sự kiện, về diễn giả, chia sẻ, cũng như cách đăng ký tham gia, đặt câu hỏi cho diễn giả trước khi sự kiện diễn ra.
Trang chi tiết sự kiện
Next event
Ngay bên dưới khu vực Upcoming, bạn có thể gửi yêu cầu về chủ đề mình muốn nghe trong các số tiếp theo được tổ chức. Các yêu cầu sẽ được Gambaru tổng hợp và lựa chọn dựa trên chủ đề được yêu cầu nhiều nhất.
Chủ đề bạn muốn nghe?
Missed event
Nếu bạn chưa kịp tham gia các số Technical Event trước đây, đừng quá lo, bạn vẫn có thể xem lại bất kỳ lúc nào ở mục này.
Sự kiện bỏ lỡ
Notify event
Cuối cùng, để luôn cập nhật thông tin sự kiện mới nhất sẽ được tổ chức, đừng quên đăng ký với Gambaru tại khu vực này nhé.
Thông báo sự kiện mới
Gambaru.io – Towards an intelligent & gameful way to work remotely.
Bài viết chủ đề Knowledge Graph (Đồ thị tri thức) dựa theo các chia sẻ của Tiến Sĩ Hiển Nguyễn tại chương trình Technical Event số thứ #04 do Gambaru tổ chức. Một số nội dung trong bài được rút gọn và không đề cập chi tiết như tại buổi chia sẻ, bạn có thể tham khảo thêm bằng việc xem video ở cuối bài viết.
Một số khái niệm trên đồ thị
Đồ thị là 1 bộ gồm 2 tập V và E. V là tập các đỉnh của đồ thị và E là tập các cạnh của đồ thị.
1 Đồ thị sẽ gồm tập đỉnh và tập cạnh.
Thông thường trong ứng dụng thực tế, các đồ thị sẽ tập trung vào các đồ thị hữu hạn (hữu hạn đỉnh)
Ví dụ 1 đồ thị cơ bản
Đồ thị cơ bản
Ứng dụng của đồ thị
Đồ thị có thể được dùng để:
Biểu diễn ngữ nghĩa của văn bản
Biểu diễn các biểu thức toán học
Biểu diễn thông tin Social network
Người dùng, các mối quan hệ của người dùng
Ứng dụng của đồ thị
Đồ thị có hướng và vô hướng
Đồ thị có hướng: Phân biệt thứ tự các đỉnh trong cạnh
Đồ thị có hướng
Đồ thị vô hướng: Không phân biệt thứ tự các đỉnh
Đồ thị vô hướng
Đồ thị có trọng số: Trên đồ thị, ngoài tập đỉnh và tập cạnh thì bổ sung 1 ánh xạ đi từ tập cạnh đến mặt số thực và khi đó ánh xạ được gọi là trọng số của 1 cạnh.
Kề nhau
2 cạnh kề nhau nếu có chung 1 đỉnh
Kề nhau
Bậc của đỉnh
Số cạnh được nối đến 1 đỉnh nào đó.
Với đồ thị có hướng thì có cạnh vào và cạnh ra
Các loại đồ thị
Đồ thị đơn
Đồ thị đơn là đồ thị mà 2 đỉnh bất kỳ được nối với nhau bởi không quá 1 cạnh và không có khuyên (đi 1 vòng lại chính nó)
Đa đồ thị là nếu có ít nhất 1 cặp đỉnh được nối với nhau bởi 2 cạnh trở lên và không có khuyên
Trong nghiên cứu, người ta thường hay quy về dạng đồ thị đơn để dễ nghiên cứu, biểu diễn
Đồ thị đủ
Là đồ thị có bậc n và giữa 2 đỉnh bất kỳ, đều có đỉnh
Đồ thị đủ
Đồ thị lưỡng phân
Là đồ thị có tập đỉnh thành V1, và V2. 2 tập này sẽ nối 1 đỉnh trong V1 với 1 đỉnh trong V2. Giữa các đỉnh trong 1 tập không nối với nhau.
Đồ thị lưỡng phân
Đồ thị lưỡng phân
Đồ thị con
Được xây dựng từ việc bỏ đi 1 số đỉnh trong đồ thị ban đầu và bỏ đi 1 số cạnh.
Đồ thị con
Đồ thị bù
Là đồ thị ‘adapt’ vào đồ thị đang có để trở thành 1 đồ thị đầy đủ.
Đồ thị bù
Các phương pháp biểu diễn đồ thị
Biểu diễn hình học
Biểu diễn bằng hình vẽ, biểu diễn trên mặt phẳng
Biểu diễn hình học
Biểu diễn bằng ma trận liên kết đỉnh cạnh
Biểu diễn bằng 1 ma trận với m dòng và n cột
Ma trận liên kết đỉnh cạnh
Ma trận liên kết đỉnh cạnh
Biểu diễn bằng ma trận kề
Biểu diễn bằng ma trận vuông
Biểu diễn bằng ma trận vuông
Biểu diễn bằng danh sách kề
Đẳng cấu đồ thị
2 đồ thị được gọi là đẳng cấu nếu có 1 phép tương ứng 1-1 giữa tập đỉnh và phép tương ứng 1-1 giữa tập cạnh.
Đẳng cấu đồ thị
Một số bài toán trên đồ thị
Duyệt đồ thị
Duyệt đồ thị theo chiều sâu
Duyệt đồ thị theo chiều rộng
Tìm đường ngắn nhất
Thuật toán Dijkstra
Thuật toán Ford-Bellman
Thuật toán Floyd
Thuật giải sử dụng các heuristic
Hãy xem video dưới bài viết để nghe Thầy Hiển diễn giải chính xác các bài toán bên trên nhé.
Ứng dụng biểu diễn tri thức dạng quan hệ
Biểu diễn tri thức dạng quan hệ
Tri thức con người có rất nhiều dạng khác nhau. Vậy làm thế nào để đưa được tri thức con người lên trên máy tính để thực hiện các hoạt động suy luận, tìm kiếm.
Để làm việc đó, ta phải tích cấu trúc tri thức của con người có những thành phần nào.
Khái niệm (tập C)
Mối quan hệ giữa các khái niệm (tập R)
Các luật suy diễn trong tri thức (Rules)
Cấu trúc mô hình tri thức quan hệ
Rela model và đồ thị tri thức
Biểu diễn các khái niệm, đối tượng trên mô hình thông qua các quan hệ đã được định nghĩa. Đồ thị bên trên còn thiếu trong việc biểu diễn quy tắc suy diễn (rules)
Ứng dụng hệ thống tra cứu kiến thức môn học
Ứng dụng biểu diễn thông tin trên mxh
Làm thế nào đánh giá sự ảnh hưởng của một người trên MXH để phục vụ cho các chiến dịch influencer marketing?
Mô hình người ảnh hưởng
Mô hình biểu diễn thông tin MXH
Biểu diễn quan hệ giữa người dùng
Hệ thống ADVO
Bạn có thể xem chi tiết các kiến thức trong bài viết thông qua video từ buổi chia sẻ:
Bài viết dưới đây được viết lại theo những chia sẻ của Hiếu PC trong buổi Technical Event số thứ #05 về Cyber Security và Product Security được tổ chức vào ngày 19/02. Bạn có thể xem chi tiết các nội dung được chia sẻ thông qua video cuối bài viết.
Bảo mật (Cyber Security) trong quá trình phát triển dự án phần mềm là một trong những chủ đề nhận được khá là nhiều sự quan tâm, đặc biệt là các doanh nghiệp, đặc biệt là các bạn lập trình viên.
Sai lầm khi làm sản phẩm trước, làm bảo mật sau
Thường nhiều người có tâm niệm là cứ phát triển sản phẩm trước, sau đó mới bàn tới chuyện bảo mật. Nhưng khi bị hack rồi thì mới biết hậu quả như thế nào, ảnh hưởng cực kỳ lớn từ việc bị lộ lọt thông tin của khách hàng, uy tín công ty và nguy cơ phá sản, thậm chí dính đến cả pháp luật.
Tất cả do sự thiếu quan tâm tới dữ liệu của khách hàng.
Việc này xảy ra ở rất nhiều nơi, đặc biệt là một số công ty ở VN, chỉ tập trung phát triển sản phẩm mà quên đi vấn đề bảo mật.
Cyber Security là gì?
Cyber Security là gì?
Các tổ chức, doanh nghiệp khi phát triển sản phẩm luôn đứng ở vị thế phòng thủ, tức là vừa phát triển sản phẩm, vừa phải bảo vệ hình ảnh, thương hiệu, cho tới bảo mật dữ liệu cá nhân khách hàng.
Nhưng hacker họ chỉ cần 1 lỗ hổng duy nhất, có thể từ bên trong (những yếu tố về con người) hoặc bên ngoài (tấn công hệ thống máy chủ, hệ thống tên miền, những gì liên quan tới sản phẩm, công nghệ)
Vì vậy việc phòng thủ phải bao quát rất nhiều thứ.
Cho nên an toàn thông tin (cyber security) trở thành dịch vụ thiết yếu của bối cảnh hiện đại.
Cyber Security được hiểu là một hành động nhằm phòng ngựa, ngăn chặn hoặc ngăn cản sự truy cập, sử dụng, chia sẻ, tiết lộ, phát tán, phá hủy hoặc ghi lại những thông tin chưa được sự cho phép của người chủ sở hữu.
Product Security là gì?
Product Security là gì?
Năm 2021, có hơn 5 tỷ dữ liệu cá nhân bị lộ, lọt, bị hack.
Bảo mật sản phẩm (Product security) trong thời đại thông tin là rất quan trọng. Các cuộc tấn công của hacker ngày càng trở nên nguy hiểm. Đồng thời người dùng cũng đang tìm kiếm các sản phẩm có xếp hạng an toàn cao.
Vậy bảo mật sản phẩm là gì?
Bảo mật sản phẩm (product security) là một quá trình tiếp cận rộng rãi và nó có thể thay đổi tùy vào các yếu tố như công nghệ được sử dụng, loại thị trường hoặc khách hàng.
Product Security nên tập trung vào mọi khía cạnh trong vòng đời của sản phẩm để làm cho sản phẩm trở nên an toàn nhất có thể.
Từ khi sản phẩm ra đời cho đến khi sản phẩm rút khỏi thị trường, bạn nên hành động theo cách tiếp cận bảo mật theo từng thiết kế trong từng bước. Điều này liên quan tới việc tập trung vào các mối đe dọa, cách giảm thiểu chúng và phân tích rủi ro tổng thể.
Quy trình này bao gồm các khía cạnh kỹ thuật như:
Đánh giá mã nguồn
Kiểm tra cơ sở hạ tầng
Kiểm tra thâm nhập từ bên ngoài (Pen test)
Kiểm tra tính bảo mật thông tin từ bên trong
Việc giảm thiểu các mối đe dọa trên không gian mạng là rất quan trọng để ra mắt 1 sản phẩm thành công.
Tại sao digital product security lại quan trọng?
Tại sao Digital Product Security lại quan trọng?
Khi hacker tấn công một ứng dụng phần mềm, thường họ sẽ nhắm vào layer 7, là những thông tin dữ liệu. Điều cuối cùng hacker muốn là lấy những trí tuệ, sản phẩm phần mềm, mã nguồn, dữ liệu khách hàng và thông tin mật của công ty có giá trị lớn trên thị trường.
Bảo mật sản phẩm không chỉ đảm bảo sản phẩm của bạn được bảo vệ khỏi bị khai thác bởi hacker. Hiện rất nhiều người dùng quan tâm đến an toàn thông tin và bảo mật dữ liệu cá nhân. Điều này nghĩa là nhu cầu của thị trường đối với các sản phẩm an toàn ngày càng lớn.
Các công ty cần cho khách hàng thấy rằng họ quan tâm sâu sắc vào việc bảo mật dữ liệu của khách hàng. Các sản phẩm an toàn không chỉ ngăn ngừa việc mất tiền do bị vi phạm hay đánh cắp dữ liệu mà còn tăng thị phần hay sự tin tưởng của công ty.
Một khảo sát cho Cisco thực hiện, 32% người trả lời có tâm lý lo ngại vấn đề bảo mật liên quan tới sản phẩm.
Vì vậy, việc phát triển 1 sản phẩm về mặt bảo mật vừa bảo vệ sản phẩm, vừa bảo vệ, giữ chân khách hàng là rất quan trọng.
Security Guideline – Hướng dẫn bảo mật
Hướng dẫn bảo mật – Security Guideline
Information
Phải luôn bảo vệ thông tin và cải thiện sự minh bạch về việc thu thập thông tin, lộ lọt thông tin thế nào và tại sao cần thông tin đó đều phải được chỉ rõ cho khách hàng.
Đó là lý do một công ty hay tập đoàn đưa ra sản phẩm thì đều có những guideline như security guideline, privacy guideline cho khách hàng.
Communication
Thường các công ty nếu chia sẻ việc phát triển sản phẩm với nhau thì phải hoàn toàn được bảo mật và mang tính minh bạch giữa các thành viên trong team phát triển sản phẩm. Để đảm bảo những thông tin này không ảnh hưởng tới quy trình phát triển của sản phẩm.
Có nhiều sản phẩm được phát triển nhưng vô tình để lộ mật khẩu nhạy cảm hoặc API key mà quên xóa đi hoặc vô tình chia sẻ.
Hardware
Phần cứng cần phải được nâng cấp thường xuyên.
Software
Không nên sử dụng phần mềm crack, lậu để phát triển sản phẩm, nhằm tránh các nguy cơ ảnh hưởng tính bảo mật sản phẩm
Phải đảm bảo phần mềm luôn được cập nhật phiên bản mới nhất
Physical security
Nói về độ an toàn trong bản thân tổ chức, như có bảo vệ hay không, có mã vạch, xác nhân Face ID, giới tính nhân viên trước khi vào công ty
Thường xuyên trò chuyện, tìm hiểu, quan sát hành vi nhân viên để tránh tình trạng nhân viên mua bán dữ liệu, sử dụng vào mục đích xấu.
Personal security
Liên quan tới khách hàng như phải luôn educate quyền của user, chỉ rõ những gì họ nên làm, hoặc không nên làm.
Organization security
Theo chuẩn ISO.
Giải pháp thực hiện bảo mật
Để đảm bảo sản phẩm an toàn và thu hút khách hàng quan tâm đến quyền riêng tư. Có một số giải pháp bạn có thể thực hiện theo
Bảo mật ngay từ đầu
Trước khi bắt tay phát triển sản phẩm, hãy tự hỏi và trả lời rằng ‘tôi có thể tạo ra một sản phẩm an toàn hay không?’ ‘làm cách phát triển các cấp độ của các giao thức bảo mật trong suốt vòng đời sản phẩm?’
Phải có một chiến lược bảo mật
Tích hợp các hệ thống bảo mật nhiều lớp với các quy trình xem xét nghiêm ngặt gồm xem xét mã nguồn, quét nội bộ, kiểm tra thâm nhập để tiếp cận toàn diện hệ thống sản phẩm.
Phải có kế hoạch B, C cho bất cứ rủi ro tiềm ẩn nào
Phải luôn phòng bệnh hơn chữa bệnh
Luôn kiểm tra lại bảo mật
Trong quá trình bảo mật và khi đưa sản phẩm ra thị trường.
Thực hiện bảo mật trong mọi bộ phận của sản phẩm như hạ tầng, thiết kế sản phẩm và giao diện người dùng…
Nhân viên chịu trách nhiệm cho 60% các cuộc tấn công an ninh mạng. Yếu tố con người đóng góp rất quan trọng trong vấn đề này.
Nhận thức an toàn thông tin
Mọi người hay nghĩ một hệ thống an toàn thì mình đã an toàn rồi nhưng không phải vậy. Hệ thống an toàn khi mình có đủ nhận thức thì mới làm cho hệ thống an toàn thực sự, mới tận dụng hết các tính năng an toàn của nó.
Cho nên vấn đề ở đây là nhận thức, vừa phải nhận thức an toàn cho người sử dụng, vừa phải nhận thức an toàn thông tin cho khách hàng.
Đưa bảo mật vào nề nếp
Từ khi sản phẩm ra đời, hoàn thành, bảo mật phải được xem xét qua mọi giai đoạn vòng đời của sản phẩm. Điều đó phải ăn sâu vào văn hóa công ty để có kết quả tốt nhất như áp dụng các tiêu chuẩn sản phẩm.
ISO 27001, 27002: Các tiêu chuẩn này cung cấp cấu trúc để triển khai hệ thống, phải thực hiện theo để đảm bảo bảo mật ở cấp độ tổ chức).
ISO 15408: Tiêu chí chung – bộ hướng dẫn và thông số kỹ thuật quốc tế được phát triển để đánh giá sản phẩm, bảo mật thông tin cho mục đích sử dụng của CP. Có thể áp dụng cho các phần cứng, mềm, sủng hoặc liên quan tới thư viện sản phẩm.
Tiêu chuẩn an ninh mang NIST của Mỹ, cung cấp các hướng dẫn giúp tổ chức quản lý và hạn chế các rủi ro an ninh mạng.
Coding Security – Lập trình theo tâm thế bảo mật
Code review – Lập trình theo tâm thế bảo mật
Developer hiện nay không chỉ cần biết về vấn đề lập trình, mà còn phải biết về vấn đề bảo mật như OWASP. Chỉ cần 1 lỗ hổng nguy hiểm thì toàn bộ những gì được phát triển sẽ thất bại. Nên họ cần phải để tâm tới vấn đề lập trình mà còn là vấn đề bảo mật.
Security Officer thường quan tâm nhiều về bảo mật, biết những vấn đề như lỗ hổng bảo mật, khả năng bị tấn công.
2 người này phải phối hợp với nhau chặt chẽ để đưa ra một định hướng cụ thể để đảm bảo vận hành sản phẩm trơn tru.
Coding review sẽ giúp đạt mục tiêu này nhanh hơn như OWASP Top 10.
Infrastructure Hardening
Bảo mật hạ tầng của hệ thống.
Quá trình planning hệ theo chuẩn dưới hình từ Design tới Build, Test và Production.
Cách tiếp cận tổng quan đối với bảo mật
Bảo mật cần phải làm gì, tiên đoán trước
Coding guideline, coding security
Pen test hệ thống, thuê 1 đội hoặc nhân viên an toàn thông tin
Sử dụng phần mềm để rà, quét những lỗ hổng bảo mật trên hệ thống hoặc sử dụng WAF để phòng thủ, bảo vệ khỏi các cuộc tấn công.
Quy trình bảo mật trên thực tế
Penetration testing (Pen Test)
Penetration Test
Sau khi sản phẩm hoàn thiện, đây là phần cuối cùng trước khi đưa sản phẩm ra ngoài. Nó bao gồm bảo mật kỹ lưỡng từ team dev tới team hệ thống quản trị, có thể nhờ tới Pen tester, có thể apply project trên các chương trình bug party (để hacker trên thế giới hack vào hệ thống).
Yếu tố con người chiếm tới 60% trong vấn đề bảo mật: không biết đặt mật khẩu sao cho an toàn, không sử dụng bảo mật 2 bước, quản trị hệ thống không cài firewall cho quản trị để ngăn chặn truy cập từ bên ngoài, dẫn tới lộ lọt thông tin.
Lưu ý đối với Pen test:
Pen test không phải cách hiệu quả nhất để tăng cường bảo mật sản phẩm. Bởi vì bản chất nó không phải là cải tiến về bảo mật mà chỉ là quy trình để xác định vấn đề bảo mật. Còn việc xác định những vấn đề bảo mật, lỗ hổng chưa được biết tới hoặc chưa từng tồn tại sẽ mất rất nhiều thời gian.
Thường chi phí thực hiện Pen test sẽ rất cao, nên một giải pháp rẻ hơn là ngăn chặn lỗ hổng bảo mật ngay từ ban đầu.
Các phần mềm phụ thuộc
Nhiều lập trình viên chỉ cần biết mỗi Java, chỉ cần code, không quan tâm tới các yếu tố xung quanh như hệ điều hành, các dịch vụ đang chạy và thư viện bên thứ 3. Tư duy như vậy sai.
Họ cần phải nắm những vấn đề phụ thuộc để đưa ra các tính năng phù hợp và đưa ra các tiêu chuẩn bảo mật phù hợp.
Hacker chỉ cần 1 trong các layer bị lỗi là có thể vào được hệ thống
Một số Security Tips đơn giản bạn nên áp dụng
1. Luôn cập nhật phần mềm
2. Tránh mở các email đáng ngờ
3. Luôn cập nhật phần cứng
4. Sử dụng các giải pháp chia sẻ tập tin, luôn đặt mật khẩu tập tin để tránh mất
5. Sử dụng phần mềm diệt virus
6. Sử dụng VPN cá nhân hóa việc riêng tư, đảm bảo kết nối được an toàn
7. Đừng lười đặt mật khẩu, các mật khẩu theo nickname, tên người yêu, cá nhân, từ khóa từ điển
8. Tắt bluetooth khi không cần thiết
9. Bật xác thực 2 bước
10. Loại bỏ phần mềm quảng cáo, dẫn dụ vào các trang độc hại
11. Kiểm tra trang web đang truy cập có https
12. Không lưu thông tin quan trọng ở những nơi không an toàn (Zalo, Facebook)
13. Quét virus các thiết bị bên ngoài, tránh sử dụng wifi nơi công cộng
14. Tránh tâm lý cho rằng đủ an toàn trên không gian mạng
15. Đầu tư nâng cấp bảo mật, sao lưu dữ liệu quan trọng vào hệ thống điện toán đám mây, luôn đặt mật khẩu, mã hóa ổ cứng
16. Đào tạo nhân viên, nâng cao tầm nhận thức về an toàn bảo mật
Tổng quan các chủ đề của Gambaru Technical Event Series
Nếu đã tham gia các Technical Event các số 01, 02, 03 do Gambaru tổ chức suốt thời gian qua, hẳn bạn cũng cảm nhận được sự nghiêm túc trong việc đầu tư thực hiện các chương trình nhằm nâng cao kiến thức và xây dựng cộng đồng developer chỉ tập trung vào KNOWLEDGE – GROWTH – NETWORKING của Gambaru.
Với số lượng đăng ký tham gia ngày càng nhiều sau mỗi số, Gambaru tin rằng đây là hướng đi đúng đắn cho năm 2022.
Vậy Technical Event Series sẽ bao gồm những chủ đề nào tiếp theo, bạn có thể tham gia hoặc có cơ hội hợp tác trở thành speaker của chương trình hay không? Bài viết này sẽ cung cấp thông tin cần thiết đến bạn.
Tổng quan cấu trúc các chủ đề Technical Event Series
Đây là sơ đồ tổng quan các chủ đề được chia theo từng mục chính:
Tổng quan các chủ đề của Gambaru Technical Event Series
Có 4 hạng mục chính của chuỗi Technical Event, gồm:
AI & Analytics
Software Engineering
Metaverse Programming
Blockchain
Bên dưới mỗi hạng mục là các chủ đề nhỏ hơn, đang được Gambaru bổ sung và hoàn thiện trong quá trình lên kế hoạch cũng như tổ chức thực hiện ở mỗi số.
Các nhóm chủ đề có màu nền Xanh lam, Xanh lá là những chủ đề Gambaru đã tìm được speaker, hoặc đã thực hiện. Còn các nhóm chủ đề màu vàng là chưa có speaker hoặc đang xác nhận với speaker.
Cơ hội hợp tác
Nếu bạn sở hữu chuyên môn, kiến thức và kinh nghiệm dày dặn ở một trong các chủ đề được đề cập trong sơ đồ bên trên hoặc chưa được liệt kê nhưng có liên quan chặt chẽ đến 4 hạng mục Gambaru đưa ra, hãy liên hệ Gambaru để trở thành speaker của một trong các chủ đề tiếp theo.
Bạn có thể đăng ký theo biểu mẫu này, chúng tôi sẽ liên hệ đến bạn sớm nhất.
Dưới đây là lịch trình các sự kiện tiếp theo sẽ được tổ chức trong Quý 1, 2 năm 2022. Lịch trình sự kiện có thể thay đổi và sẽ được cập nhật tương ứng trên website cũng như cộng đồng của Gambaru trên Telegram. Hãy theo dõi để tham gia những chủ đề mình mong đợi.
Nếu có bất kỳ thắc mắc nào, vui lòng liên hệ Gambaru qua contact@gambaru.io hoặc qua group Telegram nhé.
Gambaru – Towards an intelligent and gameful way to work remotely.
Buổi chia sẻ về CI Practice và Monorepo sáng thứ 7, 08/01
CI/CD là gì?
CI/CD là một phương pháp giúp việc cung cấp ứng dụng cho khách hàng được liên tục, bằng cách áp dụng tự động hóa vào các giai đoạn phát triển ứng dụng.
Các khái niệm chính được gán cho CI / CD là tích hợp liên tục (Continous Integration), phân phối liên tục (Continuous Delivery) và triển khai liên tục (Continous Deployment).
CI / CD là giải pháp cho các vấn đề tích hợp mã mới có thể gây khó khăn cho đội ngũ phát triển và vận hành (hay còn gọi là “địa ngục tích hợp”).
Cụ thể, CI / CD áp dụng tính năng tự động hóa liên tục và giám sát liên tục trong suốt vòng đời của ứng dụng, từ giai đoạn tích hợp và kiểm thử đến phân phối và triển khai.
Các phương pháp kết nối này thường được gọi là quy trình CI/CD (pipeline) và được hỗ trợ bởi các đội ngũ phát triển và vận hành làm việc cùng nhau một cách linh hoạt với một DevOps hoặc một SRE (Kỹ sư quản lý độ tin cậy – Site Reliability Engineering).
CI/CD Pipeline
Khác biệt giữa CI và CD là gì?
Từ viết tắt CI/CD có một số ý nghĩa khác nhau.
Quy trình CI/CD
1.) CI trong CI/CD nghĩa là tích hợp liên tục (continuous integration), là một quá trình tự động hóa cho các nhà phát triển.
CI thành công có nghĩa là các thay đổi mã của một ứng dụng thường xuyên được xây dựng, kiểm tra và tích hợp vào một kho lưu trữ được chia sẻ (shared repository).
Đó là giải pháp cho vấn đề có quá nhiều nhánh của một ứng dụng được phát triển cùng lúc và có thể xung đột với nhau.
2.) CD trong CI/CD nghĩa là phân phối liên tục (continuous delivery) và / hoặc triển khai liên tục (continuous deployment), là những khái niệm liên quan đôi khi được sử dụng thay thế cho nhau.
Cả hai đều nhằm mục đích tự động hóa các giai đoạn tiếp theo của quy trình, nhưng đôi khi chúng được sử dụng riêng biệt để minh họa mức độ tự động hóa đang diễn ra.
Phân phối liên tục thường nghĩa là các thay đổi của nhà phát triển đối với ứng dụng sẽ tự động được kiểm lỗi và tải lên kho lưu trữ (như GitHub hoặc container registry), nơi đội ngũ vận hành đưa chúng vào môi trường sản xuất trực tiếp (live production).
Đó là câu trả lời cho vấn đề về khả năng hiển thị (visibility) và giao tiếp kém giữa đội ngũ phát triển và đội ngũ kinh doanh.
Vì vậy, mục đích của phân phối liên tục là đảm bảo rằng việc triển khai mã mới sẽ tốn ít công sức nhất.
Còn Triển khai liên tục đề cập đến việc tự động phát hành các thay đổi của nhà phát triển từ kho lưu trữ sang production, nơi khách hàng có thể sử dụng được.
Nó giải quyết vấn đề quá tải của đội ngũ vận hành với các quy trình thủ công làm chậm quá trình phân phối ứng dụng. Nó được xây dựng dựa trên những lợi ích của việc phân phối liên tục bằng cách tự động hóa giai đoạn tiếp theo trong quy trình.
CI/CD có thể chỉ xác định các phương thức được kết nối là tích hợp liên tục và phân phối liên tục hoặc cũng có thể là cả 3 phương thức được kết nối là tích hợp liên tục, phân phối liên tục và triển khai liên tục. Phức tạp hơn, đôi khi “phân phối liên tục” được sử dụng theo cách bao gồm cả các quá trình triển khai liên tục.
Tuy nhiên, để không sa lầy vào những ngữ nghĩa này — bạn chỉ cần nhớ CI/CD là một quá trình, thường được hình dung như một đường ống (pipeline), liên quan đến việc thêm vào mức độ tự động hóa cao và giám sát liên tục khi phát triển ứng dụng .
Trong từng trường hợp, điều mà thuật ngữ này đề cập còn phụ thuộc vào mức độ tự động hóa đã được tích hợp vào CI / CD pipeline.
Nhiều doanh nghiệp bắt đầu bằng cách thêm CI, và sau đó làm dần theo hướng tự động hóa phân phối và triển khai, chẳng hạn như một phần của các ứng dụng cloud-native.
Tích hợp liên tục (Continuous Integration)
Trong phát triển ứng dụng hiện đại, mục tiêu là có nhiều nhà phát triển làm việc đồng thời trên các tính năng khác nhau của cùng một ứng dụng.
Continuous Integration (Tích hợp liên tục)
Tuy nhiên, nếu một tổ chức được thiết lập để hợp nhất tất cả mã nguồn phân nhánh lại với nhau vào một ngày (được gọi là “ngày hợp nhất”), thì công việc thu được có thể tẻ nhạt, thủ công và tốn nhiều thời gian.
Đó là bởi vì khi một nhà phát triển làm việc độc lập thực hiện thay đổi đối với một ứng dụng, thì có khả năng nó sẽ xung đột với các thay đổi khác được thực hiện đồng thời bởi các nhà phát triển khác.
Vấn đề này có thể phức tạp hơn nữa nếu mỗi nhà phát triển đã điều chỉnh môi trường phát triển tích hợp cục bộ (IDE – integrated development environment) của riêng họ, thay vì nhất trí sử dụng một IDE chạy trên đám mây.
Tích hợp liên tục (CI) giúp các nhà phát triển hợp nhất các thay đổi mã của mình về một nhánh được chia sẻ, hoặc “thân cây”, thường xuyên hơn — đôi khi là mỗi ngày.
Sau khi hợp nhất các thay đổi của nhà phát triển vào ứng dụng, những thay đổi đó sẽ được xác thực bằng cách tự động xây dựng ứng dụng và chạy các kiểm thử tự động (automated testing) với các mức độ khác nhau, thường là kiểm thử đơn vị và kiểm thử tích hợp, để đảm bảo các thay đổi không làm hỏng ứng dụng.
Nghĩa là kiểm tra mọi thứ, từ các lớp và chức năng đến các mô-đun khác nhau trên toàn bộ ứng dụng.
Nếu kiểm thử tự động phát hiện ra xung đột giữa mã mới và mã hiện thời, CI sẽ giúp bạn dễ dàng sửa những lỗi đó nhanh chóng và thường xuyên.
Phân phối liên tục (Continuous Delivery)
Sau quá trình tự động hóa các bản dựng, kiểm thử đơn vị và kiểm thử tích hợp trong CI, phân phối liên tục sẽ tự động hóa việc phát hành mã đã được kiểm tra đó vào kho lưu trữ.
Continuous Delivery – Phân phối liên tục
Nên để có một quy trình phân phối liên tục hiệu quả, điều quan trọng là CI phải được tích hợp sẵn trong quy trình phát triển của bạn.
Mục tiêu của phân phối liên tục là có một cơ sở mã (codebase) luôn sẵn sàng để triển khai tới môi trường sản xuất.
Trong phân phối liên tục, mọi giai đoạn — từ việc hợp nhất các thay đổi mã đến phân phối các bản dựng cho sản xuất — đều liên quan đến tự động hóa kiểm thử (automation testing) và tự động phát hành mã.
Vào cuối quá trình đó, đội ngũ vận hành có thể triển khai ứng dụng vào sản xuất một cách nhanh chóng và dễ dàng.
Triển khai liên tục (Continuous Deployment)
Giai đoạn cuối cùng của một CI/CD pipeline hoàn thiện là triển khai liên tục.
Continuous Deployment (Triển khai liên tục)
Đây là phần mở rộng của phân phối liên tục, nghĩa là tự động hóa việc phát hành bản dựng sẵn cho sản xuất vào kho lưu trữ mã (code repository), triển khai liên tục sẽ tự động hóa việc phát hành ứng dụng vào sản xuất.
Do không có thực hiện thủ công ở giai đoạn của pipeline trước khi sản xuất, nên việc triển khai liên tục chủ yếu dựa vào các bài kiểm thử tự động được thiết kế tốt.
Trên thực tế, triển khai liên tục có nghĩa là thay đổi của nhà phát triển đối với ứng dụng có thể xuất hiện trong vòng vài phút sau khi viết mã (giả sử nó vượt qua kiểm thử tự động).
Điều này giúp việc liên tục nhận và điều chỉnh từ phản hồi của người dùng trở nên dễ dàng hơn.
Cùng nhau, tất cả các phương pháp CI/CD này giúp việc triển khai ứng dụng ít rủi ro hơn, nhờ đó việc phát hành các thay đổi đối với ứng dụng theo từng phần nhỏ dễ dàng hơn thay vì cùng một lúc.
Tuy nhiên, cũng cần đầu đáng kể trước đó vì các bài kiểm thử tự động cần được viết cho phù hợp với nhiều giai đoạn kiểm thử và phát hành trong quy trình CI/CD.
Một số công cụ CI/CD phổ biến
Các công cụ CI/CD có thể giúp đội ngũ tự động hóa việc phát triển, triển khai và kiểm thử của mình.
Công cụ CI/CD
Một số công cụ dành cho phía tích hợp (CI), một số ở phía phát triển và triển khai (CD), và những công cụ khác chuyên về kiểm thử liên tục hoặc các chức năng liên quan.
Một trong những công cụ mã nguồn mở được biết đến nhiều nhất cho CI/CD là máy chủ tự động hóa Jenkins. Jenkins được thiết kế để xử lý mọi thứ từ một máy chủ CI đơn giản đến một trung tâm CD hoàn chỉnh.
Tekton Pipelines là CI/CD framework cho nền tảng Kubernetes, cung cấp trải nghiệm CI/CD cloud-native tiêu chuẩn với các container.
Ngoài Jenkins và Tekton Pipelines, các công cụ CI/CD mã nguồn mở khác mà bạn có thể tìm hiểu, bao gồm:
Spinnaker, nền tảng CD được xây dựng cho môi trường multicloud.
GoCD, máy chủ CI/CD tập trung vào mô hình hóa và hình ảnh hóa.
Concourse
Screwdriver, nền tảng xây dựng được thiết kế cho CD.
Bạn cũng có thể xem xét các giải pháp CI/CD từ nhiều nhà cung cấp khác nhau. Các nhà cung cấp đám mây cộng đồng lớn đều cung cấp các giải pháp CI/CD, cùng với GitLab, CircleCI, Travis CI, Atlassian Bamboo và nhiều giải pháp khác.
Ngoài ra, bất kỳ công cụ nào nền tảng cho DevOps đều có thể là một phần của quy trình CI/CD.
Các công cụ tự động hóa cấu hình (chẳng hạn như Ansible, Chef và Puppet), container runtimes (chẳng hạn như Docker, rkt và cri-o) và điều phối vùng chứa (Kubernetes) hoàn toàn không phải là công cụ CI/CD, nhưng chúng sẽ có mặt trong quy trình CI/CD.
Distributed Crawling System - Hệ thống thu thập dữ liệu phân tán
Nằm trong chuỗi Technical Event Series được tổ chức bởi Gambaru, buổi chia sẻ thứ 2 về Distributed Crawling System (hệ thống thu thập dữ liệu phân tán) đã diễn ra với sự tham gia của hơn 50 người đăng ký đến từ nhiều lĩnh vực chuyên môn khác nhau nhưng có mối quan tâm chung về Dữ liệu phân tán.
Buổi chia sẻ với sự tham gia của 2 speaker là anh Đạt Hồ (CTO) và anh Tín Đặng (Data Engineer đến từ startup VietMoney.
Hai anh đã chia sẻ hết sức nhiệt tình những hiểu biết cũng như kinh nghiệm triển khai crawling system cho VietMoney, cũng như trả lời rất hào hứng các câu hỏi đến từ các anh, chị tham gia.
Nói qua một chút về VietMoney (VM), đây là công ty thuộc lĩnh vực tài chính, chuyên cung cấp các khoản vay ngắn hạn trên 63 tỉnh thành, hiện nay hệ thống của VietMoney đã lên đến 40 chi nhánh. Anh Đạt chia sẻ, ngay từ những ngày đầu hoạt động, VietMoney đã chú trọng sử dụng công nghệ và data để hỗ trợ doanh nghiệp vận hành theo mô hình chuỗi thuận lợi nhất.
Nội dung bài viết tóm lược các ý chính từ buổi chia sẻ, để nắm bắt đầy đủ hơn, bạn có thể xem video bên dưới bài viết.
Thách thức trước khi làm Distributed Crawling System
Thách thức kinh doanh trong lĩnh vực tài chính tín dụng được anh Đạt tóm lại trong một câu: Càng bán nhiều hàng đồng nghĩa với rủi ro càng tăng.
Điều đó bắt buộc VM phải sử dụng công nghệ để tối thiểu hóa rủi ro này.
Vậy họ làm việc đó như thế nào?
Điều đầu tiên cần nói VM là mô hình cho vay cầm đồ, nghĩa là sẽ thanh toán dựa trên tài sản của khách hàng (không giống như FE Credit).
Đối với một doanh nghiệp thời đại chuyển đổi số, VM đã trang sẽ có các nền tảng về công nghệ sau đây:
ERP
Core product
CRM/CDP: Để quản lý và hỗ trợ khách hàng tốt nhất
HRM & Culture
Cloud computing
Data driven: giúp cho độ giàu về dữ liệu và tài nguyên ngày càng lớn, dựa vào dữ liệu đưa ra quyết định kinh doanh
Big data/ML/DL/AI: ML để định giá tài sản, cung cấp real time report để ra quyết định nhanh nhất
Các thành phần công nghệ VietMoney xây dựng
Trong đó, Data Driven là phần anh Đạt cho rằng bản thân và team đang làm tốt và đó cũng chính là trọng tâm của buổi chia sẻ.
Các bước triển khai Data Driven
Câu hỏi đặt ra đối với vấn đề dữ liệu từ những ngày đầu khi doanh nghiệp chưa có gì đó là:
Thu thập dữ liệu từ bao nhiêu nguồn?
Những nguồn nào?
Làm thế nào doanh nghiệp có thể tin tưởng những dữ liệu này.
Để trả lời những câu hỏi này, VM đã thực hiện các bước sau:
Thu thập dữ liệu
Xử lý dữ liệu
Phân tích dữ liệu
Làm data modeling
Ứng dụng model
Ứng dụng machine learning để định giá tài sản
Các bước trong quy trình Data Driven
Đây là những bước ai cũng muốn làm và hướng tới, nhưng ở thời điểm 2017, VM không thể thực hiện 2 bước là Data Modeling và Apply Model, chỉ có thể làm 4 bước còn lại, tức là chưa thể dùng Machine Learning.
Đến hiện tại, VM đã triển khai tương đối thành công 6 bước trong toàn bộ quy trình (ứng dụng Machine Learning). Trong đó, web scraping (hay web crawling) một lần nữa, lại là trọng tâm của những chia sẻ tiếp theo.
Web scraping (web crawling) hoạt động như thế nào?
Năm 2017, VM sử dụng những công nghệ (tech-stack)dưới đây để làm web crawling:
Spiders: Scrapy, ngôn ngữ Python
Data lake: Elasticsearch
Database (mysql)
Tech stack được sử dụng làm Web crawling của VietMoney vào năm 2017
Lúc này, anh Đạt xem Elasticsearch như một data lake có thể lưu mọi dữ liệu, và giúp ‘nhảy cóc’ từ bước Data Analyze sang Valuation (mà không làm 2 bước Data Modeling và Apply Model) nhờ khả năng visualize, thống kê dữ liệu của công cụ này.
Tuy nhiên sau khi vận hành 1 thời gian, VM gặp phải một số thách thức khi làm Data Analyze với Elasticsearch
Scrapy chạy single-threaded (đơn luồng), dẫn đến performance, cách hoạt động bị hạn chế
Luôn phải thay đổi Spider khi muốn thêm data source, hoặc website muốn thu thập thay đổi cấu trúc thường xuyên.
Gặp trở ngại khi viết dữ liệu xuống Elasticsearch
Thu thập, xuất và làm đẹp dữ liệu tại cùng 1 chỗ (mô hình Monolith), mô hình này hỗ trợ làm nhanh nhưng gặp rủi ro khi vận hành như chạy thất bại hoặc không chạy được trên một số môi trường phần cứng.
Không biết phải làm sao khi website bị chặn, không vào được nữa và cũng không có cơ chế retry.
Giải pháp cho những thách thức
Với những thách thức, trở ngại như trên.
Đầu tiên, VM cần phải thay đổi khái niệm spider đã xây dựng từ ban đầu.
Thứ 2 là mỗi bước trong quy trình web scraping đều phải có service, module riêng để vận hành độc lập, không liên quan gì đến nhau.
Lúc này có 3 sự lựa chọn:
Sử dụng Saas (software as a service) như Scrapping hub; Import.io. Vấn đề với lựa chọn này là làm sao đồng bộ giữa dữ liệu đang lưu sẵn trên Elasticsearch và dịch vụ SaaS để tiếp tục sử dụng, ngoài ra chi phí vận hành của các dịch vụ này khá cao.
Tự xây dựng: sửa lại từ open source, hoặc làm từ đầu. Team VM tìm được Frontera, 1 open source xây dựng trên mô hình Distributed Crawling System. Hiện tại Frontera không còn được phát triển nữa và đây là điều đáng tiếc vì nó 1 open source nổi tiếng và có chất lượng rất tốt.
Mua phần mềm bên ngoài
Sau khi cân nhắc các lựa chọn, VM quyết định xây Distributed Crawling System (hệ thống thu thập dữ liệu phân tán) từ con số 0. Việc xây dựng này là dựa trên kiến trúc và cảm hứng từ Frontera.
Vậy VM đã làm gì?
Distributed Crawling System do VietMoney xây dựng
Đây là mô hình Distributed Crawling System được VietMoney xây dựng:
Mô hình Distributed Crawling System do VietMoney xây dựng
Việc xây dựng hệ thống phải giải quyết được những thách thức đưa ra bên trên.
Giải quyết hạn chế của Spider
Đầu tiên là có thể linh hoạt trong việc sửa spider mà không cần xây lại source hoặc thay đổi crawler, từ đó phân tán spider chạy được nhiều chỗ.
Điều này bắt buộc phải nghĩ đến là spider chỉ làm nhiệm vụ duy nhất là đưa URL để thực hiện lấy dữ liệu website và trả về.
Nhưng để quản lý các URL này, phải cần đến URL service, nơi quản lý tất cả tài nguyên thu thập được và đưa các URL vào URL Pool dựa trên nền tảng Google Cloud Pub Sub.
Những spider sẽ lắng nghe tất cả các url cần được thu thập => phân tán chạy ở những nơi nào có hỗ trợ chạy container
Sau khi thu thập xong một tài nguyên, đẩy kết quả vào lại google cloud pub/sub. URL Service lắng nghe và đánh dấu vào db là url đó đã được thu thập và vào giờ nào. Các metadata, dung lượng website, title hoặc các thứ liên quan được lưu vào Google Cloud Storage (Data Lake).
Tách biệt Data crawling và Data processing
Trước đây VM gom chung thực hiện Data crawling và process ở 1 chỗ và việc này rất rủi ro. Vì vậy sự điều chỉnh bắt buộc là phải tách biệt 2 bước này.
VM bắt đầu xây dựng Extract Service (chạy và quản lý bởi AirFlow). Nhiệm vụ của ES là ETL (extract, transform, load) và lưu vào data warehouse sau khi có được dữ liệu.
Các thành phần chính trong Distributed Crawling System
URL Service
URL Service
Phần này giải thích vì sao URL service có thể linh hoạt như vậy.
Với các website public (sitemap), thường thông qua sitemap.xml để tăng độ search của bot google. Vietmoney dựa vào sitemap của website đó để biết những url cần thu thập và độ sâu của mỗi sitemap.
Với những website không hỗ trợ sitemap thì sẽ đi theo cơ chế html dom. Nghĩa là bóc tách dữ liệu dựa trên cấu trúc Dom của website và dựa trên xpath (đường dẫn vào dữ liệu muốn lấy).
Sau khi nhận được cấu trúc dữ liệu về data source, sẽ lưu vào Source URL Manager (lưu lại bộ cấu hình của 1 website) và dựa vào đó Source URL Manager thực hiện lấy dữ liệu từ sitemap để tìm URL cần thiết)
Sau khi thực hiện thu thập dữ liệu thì sẽ lưu đường dẫn vào 1 Database (MongoDB).
Sau đó đẩy các URL này vào URL Pool. Trước khi đưa vào sẽ thực hiện thuật toán random choice để không xảy ra tình trạng có quá nhiều URL liên quan tới 1 website trong 1 thời điểm.
Splash spider
Splash spider
Sau khi URL Service thực hiện công việc nhận vào đường dẫn, cấu hình, tìm và lưu URL, URL sẽ publish lên Google Cloud Pub Sub để Splash Spider làm việc.
Scrapy lắng nghe message từ URL full, sau đó thực hiện request, qua 1 lớp middleware, middleware hỗ trợ crawler đóng vai trò như 1 người truy cập website bình thường. Sau đó sẽ thực hiện request url, web render. Crawler thu thập dữ liệu xong sẽ trả response (chỉ lưu dữ liệu trả về, không làm gì)
Sau khi có dữ liệu, các response worker (luôn lắng nghe các response message). Response work có 2 nhiệm vụ chính:
Lưu vào record manager: website này đã được crawl vào thời điểm nào
Lưu meta data và nén nội dung kết quả dưới dạng .zip để đẩy lên Google Cloud Storage.
Tới đây đã hoàn thành xong phần về Distributed Web Crawler.
Extract service
Extract service
Sau khi đã có dữ liệu trong Google Cloud Service, làm thế nào để trích xuất dữ liệu này, lúc này cần tới Extract service.
Extract config: Định nghĩa các field và cách trích xuất dữ liệu qua sự hỗ trợ của các Extractor (XPATH, CSS, JMES…)
Transformer: chuyển đổi, thay đổi dữ liệu thành dữ liệu sử dụng được.
Nhờ thiết kế như thế này nên chỉ cần thay đổi Extract config là ra được dữ liệu mong muốn, không cần thay đổi service.
Minh họa việc mapping giữa dữ liệu mình cần và web page được thu thập dữ liệu
Minh họa việc mapping giữa dữ liệu cần thu thập và dữ liệu có trên web page
Sau khi trích xuất, dữ liệu sẽ được lưu vào Data warehouse để phục vụ
Kết quả sau khi triển khai Distributed Crawling System
Việc đi từ hệ thống Monolith lên Distributed Crawling System thì độ khó và độ phức tạp cũng tăng lên. Vì vậy vẫn cần 1 đội ngũ (số lượng, chất lượng) để quản trị được hệ thống sau khi triển khai thành công.
Dưới đây là những kết quả VietMoney nhận được từ khi có Distributed Crawling System.
Quản trị được crawling làm gì, chạy giờ nào, ở đâu, bao nhiêu thất bại, bao nhiêu thành công (sử dụng hệ thống monitoring)
Linh hoạt khi website muốn thu thập data thay đổi cấu trúc
Các thành phần chạy hoàn toàn độc lập, làm tốt nhất nhiệm vụ của mình, sự phụ thuộc giữa các service ở mức tối thiểu.
Spider tinh gọn, ít thay đổi cấu trúc
Hỗ trợ được nhiều web render engine như Selenium webdriver, Puppeteer, Chrome Remote Interface…_
Tất cả các service đều được container hóa để mở rộng lên các môi trường K8S hoặc Cloud native
Tất cả dịch vụ giao tiếp với nhau qua message queue system (Google Cloud Pub/Sub)