Hi
Thanks for reply.

First, what mean about `inspired`:
It means I had read their source code then I know how a MQ file storage works, 
but, I think them not suitable for application agent but suitable for broker, 
because of it use very large direct buffer and too complex. So I redesign and 
simplify and code with my own. No source code copy, totally different from 
them, just learn from them.

Second,  k8s limited perf of disk:
I async flush channel buffer to disk, so, it will not effect to write, only 
effect to read(in channel mode).


Third, read data from DataCarrier:
I don’t test the case, file storage don’t care about the class instance, only 
bytes. I think we can choose a high perf object serialize util to serialize 
object to bytes. I think protostuff is good.

Any questions, reply mail for detail.
Thanks.

Dao Jun 道君
Alibaba-inc, tjm


> 在 2020年7月14日,下午4:44,Sheng Wu <[email protected]> 写道:
> 
> Hi
> 
> Inline
> 
> 
> xkz <[email protected]> 于2020年7月14日周二 下午3:32写道:
> 
>> 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).
>> 
> 
> Please define `Inspired`. Because
> 1. If you have copied some codes from RocketMQ, we need to indicate them
> and update LICENSE to describe we did.
> 2. At the same time, if codes are from MetaQ, we need Alibaba SGA about
> those codes, because those are codes owned by a company and not
> open-sourced.
> This is very important to us. Please make sure there is no IP issue.
> 
> 
>> 
>> 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.
>> 
> 
> This looks good for me, and this should be OFF in default, as today, in
> many k8s deployments, there is very limited perf of local disk.
> 
> 
>> 
>> 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.
>> 
> 
> 50k/s seems fine, but do you read the data from the DataCarrier, then write
> to the file? Or the TracingContext access the file buffer directly? Those
> are different scenarios and have different performance requirements.
> 
> 
>> 
>> 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
>> 
>> 

Reply via email to