Hi Thanks for Sheng Wu’s reply. Do you mean avoiding unlimited memory increasing by saying 'because we need to keep memory safe'? Since we can not use google’s products in China, I try to describe my design in detail in this email. Sorry about this. The file storage I said was inspired by RoketMQ and MetaQ(Alibaba-inc internal project). First, the read/write mode: I will use a direct buffer pool, default 100M per buffer and pool size is 2. When a file is created(called StoreFile), take a direct buffer from pool and set as an instance field, write message in the buffer, async write buffer to file-channel and async flush buffer to disk. Read message has two modes: in channel or in direct buffer. When creating a new file, if take a buffer from buffer pool failed(buffer pool return null), it will return previous file’s buffer to buffer pool. So, current files(depend on buffer pool size) read message in buffer, previous files read message in channel. This design could save direct memory for one physical machine running many application instances. Second, when and how to activate this feature: This feature I think it’s very suitable for tracing data provided fast but OAP server or STORAGE consumes slowly, so file storage should be very important, because we don’t need to worry about data loss. I want to add a config key in agent profile, if the config value configured as FILE_CACHE or default as FILE_CACHE, the feature can be activated. Third, what is performance: I tested it on my PC(Macbook pro 2016, 2 core 8g RAM, -Xms1g -Xmx1g) with only one thread, put 1000_000 messages(2000 bytes per message) to file costs about 20 seconds(generate random string and save to disk total cost 20 seconds), 50_000 message per second. Any questions, reply mail for detail. Thanks. Dao Jun 道君 Alibaba-inc, tjm
> 在 2020年7月14日,上午10:34,Sheng Wu <[email protected]> 写道: > > Hi > >> I have noticed that skywalking use heap buffer to cache tracing data. > > It could cause data loss, but that is intentional. Because we need to keep > memory safe. > > Back to what your asking, if you want to build a local file system based > cache, I think you should submit a design, including > 1. What is the file write/read model > 2. When should activate this feature, and how > 3. What is performance? And do you have available benchmark result between > memory write and file write in high concurrency situation. > more if you thing need to say. > > You could use this[1] as design doc template. Look forward to your detail. > > [1] > https://docs.google.com/document/d/1biRE3Bc0cTbs7qnBozUuAxCmeP5n8y0JKJAyzqitLnM/edit > > Sheng Wu 吴晟 > Twitter, wusheng1108 > > > Aries <[email protected]> 于2020年7月14日周二 上午10:13写道: > >> Hi all: I have noticed that skywalking use heap buffer to cache >> tracing data. It usually cause data loss. Because of this problem, I want >> to add a high-performance file storage to skywalking,so that tracing data >> can be saved to disk. If tracing data saved to file,skywalking will >> have strong ability to accumulate data and we do not have to care about how >> many tracing data provided or whether OAP server working, data had saved. >> Do we need this feature? Any suggestions? Thanks
