Description
As title says: hoping "fury" to providing better support for feature service in the field of search and promotion online services
Business Background: Currently, there is a high demand for online services such as search and promotion. Most of these fields use C++, and involve the processing of items' features. However, the large variety and quantity of these features have led to long serialization, deserialization, and network transmission times, becoming a bottleneck for system performance. There is an urgent need for methods like "fury" that can greatly enhance performance in serialization. However, it seems that the support for C++ in "fury" is not as comprehensive as for Java. Could we consider optimizing specifically for the C++ scenarios in search and promotion? And it is suggested that we can start with feature service, as the demand for this area seems to be very significant.
Additional Remarks: One characteristic of feature extraction is that the large quantity of items need to be extracted. In our scenario, up to one thousand items in one request need to be extracted. Even after the items are segmented, the number could also up to one hundred. Another characteristic is the large number of different features, which up to even hundreds of features for each item. The flame graph shows that only serialization operation costs over 10% of the total time consumed by the subservice, and even by using parallelizing operation, deserialization costs over 20%.
Our feature data structure is based on ProtoBuf. In details, the user-level features are saved as an array, and the features of a single item are also saved as an single array, and some other information also involved, which are rarely to change.We always add/delete features by changing the size of the feature arrays. These information may be helpful in designing a new protocol specifically for this significant area.
message ItemFeature {
Feature common_feature = 1; // User-level feature. Feature is a repeated array containing key and value
repeated Feature item_feature = 2; // Item-level features
ExtraInfo extra_info = 3; // Some other information
}