Hướng dẫn về HBase: Giới thiệu HBase và Nghiên cứu điển hình trên Facebook



Blog hướng dẫn HBase này giới thiệu cho bạn HBase là gì và các tính năng của nó. Nó cũng bao gồm nghiên cứu điển hình của Facebook Messenger để hiểu những lợi ích của HBase.

Như chúng tôi đã đề cập trong blog, HBase là một phần thiết yếu trong hệ sinh thái Hadoop của chúng tôi. Vì vậy, bây giờ, tôi muốn giới thiệu cho các bạn về hướng dẫn của HBase, tại đây tôi sẽ giới thiệu cho các bạn về Apache HBase, sau đó, chúng ta sẽ đi qua nghiên cứu điển hình về Facebook Messenger. Chúng tôi sẽ đề cập đến các chủ đề sau trong blog hướng dẫn HBase này:

Hướng dẫn Apache HBase: Lịch sử

Chúng ta hãy bắt đầu với lịch sử của HBase và biết HBase đã phát triển như thế nào trong một khoảng thời gian.





Lịch sử của HBase - HBase Tutorial - Edureka

  • Apache HBase được mô phỏng theo BigTable của Google, được sử dụng để thu thập dữ liệu và phục vụ yêu cầu cho các dịch vụ khác nhau của Google như Maps, Finance, Earth, v.v.
  • Apache HBase bắt đầu như một dự án của công ty Powerset cho Tìm kiếm Ngôn ngữ Tự nhiên, công ty đang xử lý các tập dữ liệu lớn và thưa thớt.
  • Apache HBase được phát hành lần đầu tiên vào tháng 2 năm 2007. Sau đó vào tháng 1 năm 2008, HBase trở thành một dự án con của Apache Hadoop.
  • Năm 2010, HBase trở thành dự án cấp cao nhất của Apache.

Hướng dẫn HBase | Cơ sở dữ liệu NoSQL | Edureka



Sau khi biết về lịch sử của Apache HBase, hẳn bạn sẽ rất tò mò muốn biết Apache HBase là gì? Hãy để chúng tôi tiến xa hơn và xem xét.

Hướng dẫn sử dụng Apache HBase: Giới thiệu về HBase

HBase là một mã nguồn mở, đa chiều, phân tán, có thể mở rộng và Cơ sở dữ liệu NoSQL được viết bằng Java. HBase chạy trên HDFS (Hệ thống tệp phân tán Hadoop) và cung cấp các khả năng giống như BigTable cho Hadoop. Nó được thiết kế để cung cấp một cách chịu lỗi để lưu trữ bộ sưu tập lớn các tập dữ liệu thưa thớt.

Kể từ đó, HBase đạt được thông lượng cao và độ trễ thấp bằng cách cung cấp Quyền truy cập Đọc / Ghi nhanh hơn trên các tập dữ liệu lớn. Do đó, HBase là sự lựa chọn cho các ứng dụng yêu cầu truy cập nhanh và ngẫu nhiên vào lượng lớn dữ liệu.



Nó cung cấp tính năng nén, hoạt động trong bộ nhớ và bộ lọc Bloom (cấu trúc dữ liệu cho biết giá trị có trong một tập hợp hay không) để đáp ứng yêu cầu đọc-ghi nhanh và ngẫu nhiên.

Hãy hiểu điều đó qua một ví dụ: Một động cơ phản lực tạo ra nhiều loại dữ liệu khác nhau từ các cảm biến khác nhau như cảm biến áp suất, cảm biến nhiệt độ, cảm biến tốc độ, v.v. cho biết tình trạng của động cơ. Điều này rất hữu ích để hiểu các vấn đề và tình trạng của chuyến bay. Hoạt động động cơ liên tục tạo ra 500 GB dữ liệu cho mỗi chuyến bay và có khoảng 300 nghìn chuyến bay mỗi ngày. Vì vậy, Engine Analytics áp dụng cho dữ liệu đó trong thời gian thực có thể được sử dụng để chủ động chẩn đoán sự cố và giảm thời gian ngừng hoạt động ngoài kế hoạch. Điều này đòi hỏi một môi trường phân tán để lưu trữ lượng lớn dữ liệu với đọc và ghi ngẫu nhiên nhanh để xử lý thời gian thực. Ở đây, HBase đến để giải cứu. Tôi sẽ nói chi tiết về HBase Read and Write trong blog tiếp theo của tôi trên Kiến trúc HBase .

Như chúng ta đã biết, HBase là một cơ sở dữ liệu NoSQL. Vì vậy, trước khi hiểu thêm về HBase, trước tiên hãy thảo luận về cơ sở dữ liệu NoSQL và các loại của nó.

Hướng dẫn sử dụng Apache HBase: Cơ sở dữ liệu NoSQL

NoSQL có nghĩa là Không chỉ SQL . Cơ sở dữ liệu NoSQL được mô hình hóa theo cách mà nó có thể biểu diễn dữ liệu ngoài các định dạng bảng, cơ sở dữ liệu quan hệ không xác định. Nó sử dụng các định dạng khác nhau để biểu diễn dữ liệu trong cơ sở dữ liệu và do đó, có nhiều loại cơ sở dữ liệu NoSQL khác nhau dựa trên định dạng biểu diễn của chúng. Hầu hết các cơ sở dữ liệu NoSQL tận dụng tính khả dụng và tốc độ dựa trên tính nhất quán. Bây giờ, chúng ta hãy tiếp tục và hiểu về các loại cơ sở dữ liệu NoSQL khác nhau và các định dạng biểu diễn của chúng.

chương trình java cho loạt fibonacci

Cửa hàng Khóa-Giá trị:

Nó là một cơ sở dữ liệu không có lược đồ chứa các khóa và giá trị. Mỗi khóa, trỏ đến một giá trị là một mảng byte, có thể là một chuỗi, BLOB, XML, v.v. Lamborghini là chìa khóa và có thể chỉ ra giá trị của Gallardo, Aventador, Murciélago, Reventón, Diablo, Huracán, Veneno, Centenario, v.v.

Cơ sở dữ liệu lưu trữ Key-Value: Aerospike, Couchbase, Dynamo, FairCom c-treeACE, FoundationDB, HyperDex, MemcacheDB, MUMPS, Cơ sở dữ liệu Oracle NoSQL, OrientDB, Redis, Riak, Berkeley DB.

Ca sử dụng

Kho khóa-giá trị xử lý tốt kích thước và xử lý tốt luồng hoạt động đọc / ghi liên tục với độ trễ thấp. Điều này làm cho chúng hoàn hảo choSở thích người dùng và kho lưu trữ hồ sơ,Đề xuất sản phẩm Các mặt hàng mới nhất được xem trên trang web của nhà bán lẻ để thúc đẩy các đề xuất sản phẩm của khách hàng trong tương lai,Thói quen mua sắm của khách hàng phục vụ quảng cáo dẫn đến quảng cáo tùy chỉnh, phiếu giảm giá, v.v. cho từng khách hàng trong thời gian thực.

Định hướng tài liệu :

Nó tuân theo cùng một cặp giá trị khóa, nhưng nó được bán cấu trúc như XML, JSON, BSON. Các cấu trúc này được coi là tài liệu.

Cơ sở dữ liệu dựa trên tài liệu: Apache CouchDB, Clusterpoint, Couchbase, DocumentDB, HyperDex, IBM Domino, MarkLogic, MongoDB, OrientDB, Qizx, RethinkDB.

Use-Case

Do tài liệu hỗ trợ lược đồ linh hoạt, tính năng đọc ghi và phân vùng nhanh chóng khiến nó phù hợp để tạo cơ sở dữ liệu người dùng trong các dịch vụ khác nhau như twitter, trang web thương mại điện tử, v.v.

Định hướng cột:

Trong cơ sở dữ liệu này, dữ liệu được lưu trữ trong ô được nhóm thành cột chứ không phải hàng. Các cột được nhóm một cách hợp lý thành các họ cột có thể được tạo trong quá trình định nghĩa lược đồ hoặc trong thời gian chạy.

Các loại cơ sở dữ liệu này lưu trữ tất cả các ô tương ứng với một cột dưới dạng mục nhập đĩa liên tục, do đó làm cho việc truy cập và tìm kiếm nhanh hơn nhiều.

Cơ sở dữ liệu dựa trên cột: HBase, Accumulo, Cassandra, Druid, Vertica.

Use-Case

Nó hỗ trợ bộ nhớ lớn và cho phép truy cập đọc ghi nhanh hơn. Điều này làm cho cơ sở dữ liệu định hướng cột phù hợp để lưu trữ hành vi của khách hàng trong trang web thương mại điện tử, hệ thống tài chính như Google Finance và dữ liệu thị trường chứng khoán, bản đồ Google, v.v.

Định hướng đồ thị:

Nó là một biểu diễn đồ họa linh hoạt hoàn hảo, được sử dụng không giống như SQL. Các loại cơ sở dữ liệu này dễ dàng giải quyết các vấn đề về khả năng mở rộng vì nó chứa các cạnh và nút có thể được mở rộng theo yêu cầu.

Cơ sở dữ liệu dựa trên đồ thị: AllegroGraph, ArangoDB, InfiniteGraph, Apache Giraph, MarkLogic, Neo4J, OrientDB, Virtuoso, Stardog.

cách cài đặt php 7 trên windows 10

Ca sử dụng

Điều này về cơ bản được sử dụng trong Phát hiện gian lận, Công cụ khuyến nghị thời gian thực (trong hầu hết các trường hợp là thương mại điện tử), Quản lý dữ liệu chính (MDM), Hoạt động mạng và CNTT, Quản lý nhận dạng và truy cập (IAM), v.v.

HBase và Cassandra là hai cơ sở dữ liệu hướng cột nổi tiếng. Vì vậy, bây giờ nói về nó ở cấp độ cao hơn, chúng ta hãy so sánh và hiểu sự khác biệt về kiến ​​trúc và hoạt động giữa HBase và Cassandra.

Hướng dẫn sử dụng HBase: HBase VS Cassandra

  • HBase dựa trên BigTable (Google) trong khi Cassandra dựa trên DynamoDB (Amazon) do Facebook phát triển ban đầu.
  • HBase tận dụng cơ sở hạ tầng Hadoop (HDFS, ZooKeeper) trong khi Cassandra phát triển riêng biệt nhưng bạn có thể kết hợp Hadoop và Cassandra theo nhu cầu của mình.
  • HBase có một số thành phần giao tiếp với nhau như HBase HMaster, ZooKeeper, NameNode, Region Severs. Trong khi Cassandra là một loại nút đơn, trong đó tất cả các nút đều bình đẳng và thực hiện tất cả các chức năng. Bất kỳ nút nào cũng có thể là bộ điều phối, điều này sẽ loại bỏ Điểm lỗi duy nhất.
  • HBase được tối ưu hóa để đọc và hỗ trợ ghi một lần, dẫn đến tính nhất quán chặt chẽ. HBase hỗ trợ quét dựa trên Phạm vi, giúp quá trình quét nhanh hơn. Trong khi đó Cassandra hỗ trợ đọc hàng đơn để duy trì tính nhất quán cuối cùng.
  • Cassandra không hỗ trợ quét hàng dựa trên phạm vi, điều này làm chậm quá trình quét so với HBase.
  • HBase hỗ trợ phân vùng có thứ tự, trong đó các hàng của Họ cột được lưu trữ theo thứ tự RowKey, trong khi ở Casandra phân vùng theo thứ tự là một thách thức. Do RowKey phân vùng, quá trình quét trong HBase nhanh hơn so với Cassandra.
  • HBase không hỗ trợ cân bằng tải đọc, một Máy chủ Vùng phục vụ yêu cầu đọc và các bản sao chỉ được sử dụng trong trường hợp không thành công. Trong khi Cassandra hỗ trợ đọc cân bằng tải và có thể đọc cùng một dữ liệu từ các nút khác nhau. Điều này có thể ảnh hưởng đến tính nhất quán.
  • Trong định lý CAP (Tính nhất quán, Tính khả dụng & Phân vùng -Tolerance), HBase duy trì Tính nhất quán và Tính khả dụng trong khi Cassandra tập trung vào Tính khả dụng và Phân vùng -Tolerance.


Bây giờ chúng ta hãy đi sâu và hiểu các tính năng của Apache HBase khiến nó trở nên phổ biến.

Hướng dẫn sử dụng Apache HBase: Các tính năng của HBase

  • Nguyên tử đọc và ghi: Ở cấp độ hàng, HBase cung cấp khả năng đọc và ghi nguyên tử. Nó có thể được giải thích là, trong một quá trình đọc hoặc ghi, tất cả các quá trình khác bị ngăn không cho thực hiện bất kỳ thao tác đọc hoặc ghi nào.
  • Nhất quán đọc và viết: HBase cung cấp khả năng đọc và ghi nhất quán do tính năng trên.
  • Khả năng mở rộng tuyến tính và mô-đun: Vì các tập dữ liệu được phân phối qua HDFS, do đó nó có thể mở rộng tuyến tính trên các nút khác nhau, cũng như có thể mở rộng theo mô-đun, vì nó được chia cho các nút khác nhau.
  • Phân chia bảng tự động và có thể định cấu hình: Bảng HBase được phân phối trên các cụm và các cụm này được phân phối trên các vùng. Các vùng và cụm này tách ra và được phân phối lại khi dữ liệu phát triển.
  • API Java dễ sử dụng để truy cập máy khách: Nó cung cấp API Java dễ sử dụng để truy cập theo chương trình.
  • Cổng tiết kiệm và dịch vụ Web REST-ful: Nó cũng hỗ trợ API Thrift và REST cho các giao diện người dùng không phải Java.
  • Block Cache và Bloom Filters: HBase hỗ trợ Bộ nhớ đệm khối và Bộ lọc Bloom để tối ưu hóa truy vấn khối lượng lớn.
  • Hỗ trợ lỗi tự động: HBase với HDFS cung cấp WAL (Ghi nhật ký phía trước) trên các cụm cung cấp hỗ trợ lỗi tự động.
  • Các phím hàng đã được sắp xếp: Khi tìm kiếm được thực hiện trên phạm vi hàng, HBase lưu trữ các phím hàng theo thứ tự từ vựng. Sử dụng các phím hàng và dấu thời gian được sắp xếp này, chúng ta có thể tạo một yêu cầu được tối ưu hóa.

Bây giờ sẽ tiếp tục trong hướng dẫn HBase này, hãy để tôi cho bạn biết các trường hợp sử dụng và tình huống mà HBase có thể được sử dụng và sau đó, tôi sẽ so sánh HDFS và HBase.

Tôi muốn thu hút sự chú ý của bạn đối với các tình huống mà HBase là phù hợp nhất.

Hướng dẫn sử dụng HBase: Chúng ta có thể sử dụng HBase ở đâu?

  • Chúng ta nên sử dụng HBase khi chúng ta có các tập dữ liệu lớn (hàng triệu hoặc hàng tỷ hoặc hàng và cột) và chúng ta yêu cầu quyền truy cập đọc và ghi dữ liệu nhanh chóng, ngẫu nhiên và thời gian thực.
  • Các tập dữ liệu được phân phối trên nhiều cụm khác nhau và chúng tôi cần khả năng mở rộng cao để xử lý dữ liệu.
  • Dữ liệu được thu thập từ nhiều nguồn dữ liệu khác nhau và nó là dữ liệu bán cấu trúc hoặc không có cấu trúc hoặc kết hợp của tất cả. Nó có thể được xử lý dễ dàng với HBase.
  • Bạn muốn lưu trữ dữ liệu hướng cột.
  • Bạn có rất nhiều phiên bản của tập dữ liệu và bạn cần lưu trữ tất cả chúng.

Trước khi tôi chuyển sang nghiên cứu điển hình về Messenger của Facebook,Hãy để tôi cho bạn biết sự khác biệt giữa HBase và HDFS là gì.

Hướng dẫn sử dụng HBase: HBase VS HDFS

HDFS là một hệ thống tệp phân tán dựa trên Java cho phép bạn lưu trữ dữ liệu lớn trên nhiều nút trong một cụm Hadoop. Vì vậy, HDFS là một hệ thống lưu trữ cơ bản để lưu trữ dữ liệu trong môi trường phân tán. HDFS là một hệ thống tệp, trong khi HBase là một cơ sở dữ liệu (tương tự như NTFS và MySQL).

Vì cả HDFS và HBase đều lưu trữ bất kỳ loại dữ liệu nào (tức là có cấu trúc, bán cấu trúc và không có cấu trúc) trong môi trường phân tán, vì vậy chúng ta hãy xem xét sự khác biệt giữa hệ thống tệp HDFS và HBase, một cơ sở dữ liệu NoSQL.

  • HBase cung cấp khả năng truy cập độ trễ thấp vào lượng dữ liệu nhỏ trong tập dữ liệu lớn trong khi HDFS cung cấp các hoạt động có độ trễ cao.
  • HBase hỗ trợ đọc và ghi ngẫu nhiên trong khi HDFS hỗ trợ WORM (Viết một lần Đọc nhiều hoặc Nhiều lần).
  • HDFS về cơ bản hoặc chủ yếu được truy cập thông qua các công việc MapReduce trong khi HBase được truy cập thông qua các lệnh shell, Java API, REST, Avro hoặc Thrift API.

HDFS lưu trữ các tập dữ liệu lớn trong môi trường phân tán và thúc đẩy quá trình xử lý hàng loạt trên dữ liệu đó. Ví dụ. nó sẽ giúp một trang web thương mại điện tử lưu trữ hàng triệu dữ liệu của khách hàng trong một môi trường phân tán phát triển trong một khoảng thời gian dài (có thể từ 4-5 năm trở lên). Sau đó, nó thúc đẩy quá trình xử lý hàng loạt đối với dữ liệu đó và phân tích các hành vi, khuôn mẫu, yêu cầu của khách hàng. Sau đó, công ty có thể tìm ra loại sản phẩm, khách hàng mua vào những tháng nào. Nó giúp lưu trữ dữ liệu đã lưu trữ và thực hiện xử lý hàng loạt trên đó.

Trong khi HBase lưu trữ dữ liệu theo cách định hướng cột trong đó mỗi cột được lưu cùng nhau để việc đọc trở nên nhanh hơn nhờ xử lý thời gian thực. Ví dụ. trong một môi trường thương mại điện tử tương tự, nó lưu trữ hàng triệu dữ liệu sản phẩm. Vì vậy, nếu bạn tìm kiếm một sản phẩm trong số hàng triệu sản phẩm, nó sẽ tối ưu hóa quá trình yêu cầu và tìm kiếm, tạo ra kết quả ngay lập tức (hoặc bạn có thể nói trong thời gian thực). Chi tiết Giải thích kiến ​​trúc HBase , Tôi sẽ đề cập trong blog tiếp theo của tôi.

Như chúng ta đã biết HBase được phân phối qua HDFS, vì vậy sự kết hợp của cả hai sẽ mang lại cho chúng ta cơ hội tuyệt vời để sử dụng lợi ích của cả hai, trong một giải pháp phù hợp, như chúng ta sẽ thấy trong nghiên cứu điển hình về Facebook messenger bên dưới.

Hướng dẫn của HBase: Nghiên cứu điển hình về Facebook Messenger

Nền tảng nhắn tin Facebook chuyển từ Apache Cassandra sang HBase vào tháng 11 năm 2010.

Facebook Messenger kết hợp Tin nhắn, email, trò chuyện và SMS vào một cuộc trò chuyện thời gian thực. Facebook đang cố gắng xây dựng một cơ sở hạ tầng có thể mở rộng và mạnh mẽ để xử lý một số dịch vụ này.

Vào thời điểm đó, cơ sở hạ tầng tin nhắn đã xử lý hơn 350 triệu người dùng gửi hơn 15 tỷ tin nhắn giữa người với người mỗi tháng. Dịch vụ trò chuyện hỗ trợ hơn 300 triệu người dùng gửi hơn 120 tỷ tin nhắn mỗi tháng.

Bằng cách theo dõi việc sử dụng, họ phát hiện ra rằng, hai mẫu dữ liệu chung đã xuất hiện:

  • Một tập hợp dữ liệu ngắn hạn có xu hướng biến động
  • Tập hợp dữ liệu ngày càng phát triển hiếm khi được truy cập

Facebook muốn tìm giải pháp lưu trữ cho hai kiểu sử dụng này và họ bắt đầu điều tra để tìm giải pháp thay thế cho cơ sở hạ tầng Tin nhắn hiện có.

Trước đó vào năm 2008, họ đã sử dụng cơ sở dữ liệu nguồn mở, tức là Cassandra, là một kho lưu trữ khóa-giá trị nhất quán cuối cùng đã được sản xuất phục vụ lưu lượng truy cập cho Tìm kiếm trong Hộp thư đến. Nhóm của họ có kiến ​​thức tuyệt vời trong việc sử dụng và quản lý cơ sở dữ liệu MySQL, vì vậy việc chuyển đổi một trong hai công nghệ là mối quan tâm nghiêm túc đối với họ.

Họ đã dành vài tuần để thử nghiệm các khung công tác khác nhau, để đánh giá các cụm MySQL, Apache Cassandra, Apache HBase và các hệ thống khác. Cuối cùng họ đã chọn HBase.

Vì MySQL không thể xử lý các tập dữ liệu lớn một cách hiệu quả, khi các chỉ mục và tập dữ liệu lớn lên, hiệu suất bị ảnh hưởng. Họ nhận thấy Cassandra không thể xử lý các mẫu khó để điều chỉnh cơ sở hạ tầng Tin nhắn mới của họ.

Các vấn đề chính là:

  • Lưu trữ một lượng lớn dữ liệu đang phát triển liên tục từ các dịch vụ khác nhau của Facebook.
  • Yêu cầu Cơ sở dữ liệu có thể tận dụng quá trình xử lý cao trên đó.
  • Hiệu suất cao cần thiết để phục vụ hàng triệu yêu cầu.
  • Duy trì tính nhất quán trong lưu trữ và hiệu suất.

ví dụ lớp máy quét trong java

Hình: Những thách thức mà Facebook Messenger phải đối mặt

Đối với tất cả những vấn đề này, Facebook đã đưa ra một giải pháp, tức là HBase. Facebook đã thông qua HBase để phục vụ Facebook messenger, chat, email, v.v. do các tính năng khác nhau của nó.

HBase đi kèm với khả năng mở rộng và hiệu suất rất tốt cho khối lượng công việc này với mô hình nhất quán đơn giản hơn Cassandra. Trong khi họ thấy HBase là phù hợp nhất về các yêu cầu của họ như cân bằng tải tự động và chuyển đổi dự phòng, hỗ trợ nén, nhiều phân đoạn trên mỗi máy chủ, v.v.

HDFS, là hệ thống tệp cơ bản được HBase sử dụng cũng cung cấp cho họ một số tính năng cần thiết như tổng kiểm tra đầu cuối, nhân rộng và cân bằng lại tải tự động.

Hình: HBase như một giải pháp cho Facebook Messenger

Khi họ áp dụng HBase, họ cũng tập trung vào việc cam kết kết quả cho chính HBase và bắt đầu hợp tác chặt chẽ với cộng đồng Apache.

Vì tin nhắn chấp nhận dữ liệu từ các nguồn khác nhau như SMS, cuộc trò chuyện và email nên chúng đã viết một máy chủ ứng dụng để xử lý tất cả việc đưa ra quyết định cho tin nhắn của người dùng. Nó giao diện với một số lượng lớn các dịch vụ khác. Các tệp đính kèm được lưu trữ trong Haystack (hoạt động trên HBase). Họ cũng đã viết một dịch vụ khám phá người dùng trên Apache ZooKeeper để nói chuyện với các dịch vụ cơ sở hạ tầng khác cho các mối quan hệ bạn bè, xác minh tài khoản email, quyết định giao hàng và quyết định về quyền riêng tư.

Nhóm Facebook đã dành nhiều thời gian để xác nhận rằng mỗi dịch vụ này đều mạnh mẽ, đáng tin cậy và cung cấp hiệu suất tốt để xử lý hệ thống nhắn tin thời gian thực.

Tôi hy vọng blog hướng dẫn HBase này có nhiều thông tin và bạn thích nó. Trong blog này, bạn đã biết những điều cơ bản về HBase và các tính năng của nó.Trong blog tiếp theo của tôi về , Tôi sẽ giải thích kiến trúc của HBase và hoạt động của HBase khiến nó trở nên phổ biến để đọc / ghi nhanh và ngẫu nhiên.

Bây giờ bạn đã hiểu những điều cơ bản về HBase, hãy xem của Edureka, một công ty học trực tuyến đáng tin cậy với mạng lưới hơn 250.000 người học hài lòng trải dài trên toàn cầu. Khóa đào tạo Chứng chỉ Edureka Big Data Hadoop giúp người học trở thành chuyên gia trong lĩnh vực HDFS, Yarn, MapReduce, Pig, Hive, HBase, Oozie, Flume và Sqoop bằng các trường hợp sử dụng thời gian thực trên miền Bán lẻ, Truyền thông xã hội, Hàng không, Du lịch, Tài chính.

Có một câu hỏi cho chúng tôi? Vui lòng đề cập đến nó trong phần bình luận và chúng tôi sẽ liên hệ lại với bạn.